Last active
May 14, 2025 05:52
-
-
Save Andrej730/dd422a4fc7c1aa39cfa17e83cc512bb7 to your computer and use it in GitHub Desktop.
Revisions
-
Andrej730 revised this gist
May 14, 2025 . 1 changed file with 7 additions and 7 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -37,13 +37,13 @@ def get_vtx(so): ##index def get_slvtx(so): ##selection count = len(so.data.vertices) slvtx = np.zeros(count, dtype=bool) so.data.vertices.foreach_get("select", slvtx) return slvtx def get_vsvtx(so): ##visibility count = len(so.data.vertices) vsvtx = np.zeros(count, dtype=bool) so.data.vertices.foreach_get("hide", vsvtx) # visibility return vsvtx @@ -56,13 +56,13 @@ def get_ed(so): ##index def get_sled(so): ##selection count = len(so.data.edges) sled = np.zeros(count, dtype=bool) so.data.edges.foreach_get("select", sled) return sled def get_vsed(so): ##visibility count = len(so.data.edges) vsed = np.zeros(count, dtype=bool) so.data.edges.foreach_get("hide", vsed) # visibility return vsed @@ -82,13 +82,13 @@ def get_fc(so): ##index def get_slfc(so): ##selection count = len(so.data.vertices) slfc = np.zeros(count, dtype=bool) so.data.vertices.foreach_get("select", slfc) return slfc def get_vsfc(so): ##visibility count = len(so.data.polygons) vsfc = np.zeros(count, dtype=bool) so.data.polygons.foreach_get("hide", vsfc) # visibility return vsfc @@ -357,4 +357,4 @@ def unregister(): bpy.utils.unregister_class(TOGGLE_OT_allvis) if __name__ == "__main__": register() -
Andrej730 created this gist
May 14, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,360 @@ bl_info = { "name": "rawHide", "description": "toggle hide solution", "author": "luiSSeyfer", "version": (0, 0, 1), "category": "View 3D", "location": "View 3D", "blender": (2, 80, 0) } import bpy import numpy as np ############### get active object ################### def get_osel(): bpy.context.view_layer.update() layer = bpy.context.view_layer layer.update() osel = bpy.context.view_layer.objects.selected return osel def get_so(): bpy.context.view_layer.update() layer = bpy.context.view_layer layer.update() so = bpy.context.active_object return so ####################################################### def get_vtx(so): ##index count = len(so.data.vertices) vtx = np.empty(count, dtype=np.int32) # check dtype!!! so.data.vertices.foreach_get("index", vtx) return vtx def get_slvtx(so): ##selection count = len(so.data.vertices) slvtx = np.zeros(count, dtype=np.bool) so.data.vertices.foreach_get("select", slvtx) return slvtx def get_vsvtx(so): ##visibility count = len(so.data.vertices) vsvtx = np.zeros(count, dtype=np.bool) so.data.vertices.foreach_get("hide", vsvtx) # visibility return vsvtx def get_ed(so): ##index count = len(so.data.edges) ed = np.empty(count, dtype=np.int32) so.data.edges.foreach_get("index", ed) return ed def get_sled(so): ##selection count = len(so.data.edges) sled = np.zeros(count, dtype=np.bool) so.data.edges.foreach_get("select", sled) return sled def get_vsed(so): ##visibility count = len(so.data.edges) vsed = np.zeros(count, dtype=np.bool) so.data.edges.foreach_get("hide", vsed) # visibility return vsed def get_edvtx(so): ##edge vertices count = len(so.data.edges) edvtx = np.empty(count * 2, dtype=np.int32) so.data.edges.foreach_get("vertices", edvtx) edvtx.shape = (count, 2) return edvtx#,edvtxsl def get_fc(so): ##index count = len(so.data.polygons) fc = np.empty(count, dtype=np.int32) so.data.polygons.foreach_get("index", fc) return fc def get_slfc(so): ##selection count = len(so.data.vertices) slfc = np.zeros(count, dtype=np.bool) so.data.vertices.foreach_get("select", slfc) return slfc def get_vsfc(so): ##visibility count = len(so.data.polygons) vsfc = np.zeros(count, dtype=np.bool) so.data.polygons.foreach_get("hide", vsfc) # visibility return vsfc def get_fclps(so): ##face loops count = len(so.data.polygons) fclps = np.empty(count, dtype=np.int32) so.data.polygons.foreach_get("loop_total", fclps) return fclps def get_fcvtx(so,fclps): ##face vertices count = np.sum(fclps) fcvtx = np.empty(count, dtype=np.int32) so.data.polygons.foreach_get("vertices", fcvtx) return fcvtx def get_fclstrt(so): ##face loop_start count = len(so.data.polygons) fclstrt = np.empty(count, dtype=np.int32) so.data.polygons.foreach_get("loop_start", fclstrt) return fclstrt ################## OP HIDE SELECTED ###################### class HIDE_OT_selvis(bpy.types.Operator): '''Hide Selected''' bl_idname = "hide.selvis" bl_label = "hide Selvis" bl_options = {'REGISTER', 'UNDO'} @classmethod def poll(cls, context): if (bpy.context.area.type == "VIEW_3D" or bpy.context.area.type == "OUTLINER"): return True def execute(self, context): if bpy.context.mode == 'OBJECT': osel = get_osel() for so in osel: so.hide_set(True) elif bpy.context.mode == 'EDIT_MESH': so = get_so() if so.type == "MESH": bpy.ops.object.mode_set(mode='OBJECT') ## update selection vtx = get_vtx(so) ##index slvtx = get_slvtx(so) ##selection if slvtx is None: bpy.ops.object.mode_set(mode='EDIT') ## update selection return {'FINISHED'} vtxsel = vtx[slvtx] edvtx = get_edvtx(so) ##edge vertices edsel = np.isin(edvtx, vtxsel) edsel = np.any(edsel, axis = 1) fclps = get_fclps(so) ##face loops fcvtx = get_fcvtx(so,fclps) ##face vertices fclstrt = get_fclstrt(so) ##face loop_start xxxx = np.asarray(np.max(fclps)+1-fclps) xxxx[xxxx==0] = 1 oooo = np.ones(np.sum(fclps), dtype=np.int32) np.put(oooo, [fclstrt], [xxxx]) fcvs = np.repeat(fcvtx, oooo) fcvs = fcvs.reshape(-1, np.max(fclps)) fcsel = np.isin(fcvs, vtxsel) fcsel = np.any(fcsel, axis = 1) so.data.vertices.foreach_set("hide", slvtx) so.data.edges.foreach_set("hide", edsel) so.data.polygons.foreach_set("hide", fcsel) bpy.ops.object.mode_set(mode='EDIT') ## update selection return {'FINISHED'} ################## OP HIDE UNSELECTED ###################### class HIDE_OT_unselvis(bpy.types.Operator): '''Hide Unselected''' bl_idname = "hide.unselvis" bl_label = "hide Unselvis" bl_options = {'REGISTER', 'UNDO'} @classmethod def poll(cls, context): if (bpy.context.area.type == "VIEW_3D" or bpy.context.area.type == "OUTLINER"): return True def execute(self, context): if bpy.context.mode == 'OBJECT': osel = get_osel() for obj in bpy.data.objects: if obj in bpy.context.selected_objects: obj.hide_set(False) else: obj.hide_set(True) elif bpy.context.mode == 'EDIT_MESH': so = get_so() if so.type == "MESH": bpy.ops.object.mode_set(mode='OBJECT') ## update selection vtx = get_vtx(so) ##index slvtx = np.invert(get_slvtx(so)) ##selection if slvtx is None: bpy.ops.object.mode_set(mode='EDIT') ## update selection return {'FINISHED'} vtxsel = vtx[slvtx] edvtx = get_edvtx(so) ##edge vertices edsel = np.isin(edvtx, vtxsel) edsel = np.any(edsel, axis = 1) ##################################################### fclps = get_fclps(so) ##face loops fcvtx = get_fcvtx(so,fclps) ##face vertices fclstrt = get_fclstrt(so) ##face loop_start xxxx = np.asarray(np.max(fclps)+1-fclps) xxxx[xxxx==0] = 1 oooo = np.ones(np.sum(fclps), dtype=np.int32) np.put(oooo, [fclstrt], [xxxx]) fcvs = np.repeat(fcvtx, oooo) fcvs = fcvs.reshape(-1, np.max(fclps)) ##################################################### fcsel = np.isin(fcvs, vtxsel) fcsel = np.any(fcsel, axis = 1) so.data.vertices.foreach_set("hide", slvtx) so.data.edges.foreach_set("hide", edsel) so.data.polygons.foreach_set("hide", fcsel) bpy.ops.object.mode_set(mode='EDIT') ## update selection return {'FINISHED'} ################## OP REVEAL ###################### class REVEAL_OT_allvis(bpy.types.Operator): '''Reveal All''' bl_idname = "reveal.allvis" bl_label = "reveal Allvis" bl_options = {'REGISTER', 'UNDO'} @classmethod def poll(cls, context): if (bpy.context.area.type == "VIEW_3D" or bpy.context.area.type == "OUTLINER"): return True def execute(self, context): if bpy.context.mode == 'OBJECT': for obj in bpy.data.objects: obj.hide_set(False) elif bpy.context.mode == 'EDIT_MESH': for so in bpy.data.objects: if so.type == "MESH": bpy.ops.object.mode_set(mode='OBJECT') ## update selection vsvtx = get_vsvtx(so) ##visibility vsed = get_vsed(so) ##visibility vsfc = get_vsfc(so) ##visibility allvis_vtx = np.zeros((np.size(vsvtx)), dtype=bool) allvis_ed = np.zeros((np.size(vsed)), dtype=bool) allvis_fc = np.zeros((np.size(vsfc)), dtype=bool) so.data.vertices.foreach_set("hide", allvis_vtx) so.data.edges.foreach_set("hide", allvis_ed) so.data.polygons.foreach_set("hide", allvis_fc) bpy.ops.object.mode_set(mode='EDIT') ## update selection return {'FINISHED'} ################## OP TOGGLE ###################### class TOGGLE_OT_allvis(bpy.types.Operator): '''Toggle Visible''' bl_idname = "toggle.allvis" bl_label = "toggle Allvis" bl_options = {'REGISTER', 'UNDO'} @classmethod def poll(cls, context): if (bpy.context.area.type == "VIEW_3D" or bpy.context.area.type == "OUTLINER"): return True def execute(self, context): if bpy.context.mode == 'OBJECT': for obj in bpy.data.objects: if obj: obj.hide_set(not obj.hide_get()) elif bpy.context.mode == 'EDIT_MESH': so = get_so() if so.type == "MESH": bpy.ops.object.mode_set(mode='OBJECT') ## update selection vsvtx = np.invert(get_vsvtx(so)) ##visibility print("\n vsvtx: \n", vsvtx,) vsed = np.invert(get_vsed(so)) ##visibility vsfc = np.invert(get_vsfc(so)) ##visibility so.data.vertices.foreach_set("hide", vsvtx) so.data.edges.foreach_set("hide", vsed) so.data.polygons.foreach_set("hide", vsfc) bpy.ops.object.mode_set(mode='EDIT') ## update selection return {'FINISHED'} ########################################################### # store keymaps here to access after registration addon_keymaps = [] def register(): bpy.utils.register_class(HIDE_OT_selvis) bpy.utils.register_class(HIDE_OT_unselvis) bpy.utils.register_class(REVEAL_OT_allvis) bpy.utils.register_class(TOGGLE_OT_allvis) wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: km = kc.keymaps.new(name='3D View', space_type='VIEW_3D', region_type='WINDOW') ## Object & Edit Mode both kmi = km.keymap_items.new('hide.selvis', 'H', 'PRESS') addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new('hide.unselvis', 'H', 'PRESS', shift=True) addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new('reveal.allvis', 'H', 'PRESS', alt=True) addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new('toggle.allvis', 'H', 'PRESS', alt=True, shift=True) addon_keymaps.append((km, kmi)) def unregister(): for km, kmi in addon_keymaps: km.keymap_items.remove(kmi) addon_keymaps.clear() bpy.utils.unregister_class(HIDE_OT_selvis) bpy.utils.unregister_class(HIDE_OT_unselvis) bpy.utils.unregister_class(REVEAL_OT_allvis) bpy.utils.unregister_class(TOGGLE_OT_allvis) if __name__ == "__main__": register()