nodeslicer/__init__.py
2026-06-02 12:23:31 +03:00

81 lines
2.7 KiB
Python

from __future__ import annotations
import bpy
from . import registry
from .core.nodeslicer import sockets, nodes, tree # sockets and nodes need also to be imported in order for them to be autoregistered
from .ui import panels
from .property_groups.bpy_property_groups import SlicerObjectPropertyGroup
bl_info = {
"name": "NodeSlicer",
"author": "Nicolas Predella",
"version": (0, 1, 0),
"blender": (3, 6, 0),
"location": "Node Editor > Add",
"description": "Prepare GCodes with Nodes",
"category": "Node",
}
_registered_nodeslicer = False
_keymaps = []
def register():
global _registered_nodeslicer
registry.blender_register_classes()
bpy.types.NODE_MT_add.append(tree.draw_add_menu)
bpy.app.handlers.depsgraph_update_post.append(tree.depsgraph_update_handler)
if not hasattr(bpy.types.Object, "nodeslicer"):
bpy.types.Object.nodeslicer = bpy.props.PointerProperty(type=SlicerObjectPropertyGroup, name="nodeslicer") #type: ignore
_registered_nodeslicer = True
# Register Keymaps
wm = bpy.context.window_manager
if wm.keyconfigs.addon:
km = wm.keyconfigs.addon.keymaps.new(name='Node Editor', space_type='NODE_EDITOR')
kmi = km.keymap_items.new("slicenode.group_make", 'G', 'PRESS', ctrl=True)
_keymaps.append((km, kmi))
kmi = km.keymap_items.new("node.group_ungroup", 'G', 'PRESS', ctrl=True, alt=True)
_keymaps.append((km, kmi))
# Custom Tab toggle for groups
kmi = km.keymap_items.new("slicenode.group_toggle", 'TAB', 'PRESS')
_keymaps.append((km, kmi))
print('Nodeslicer Loaded')
def unregister():
global _registered_nodeslicer
try:
if tree.depsgraph_update_handler in bpy.app.handlers.depsgraph_update_post:
bpy.app.handlers.depsgraph_update_post.remove(tree.depsgraph_update_handler)
except Exception as e:
print(f"Error removing handler: {e}")
try:
bpy.types.NODE_MT_add.remove(tree.draw_add_menu)
except Exception as e:
print(f"Error removing menu: {e}")
# Unregister Keymaps safely
try:
for km, kmi in _keymaps:
km.keymap_items.remove(kmi)
except Exception as e:
print(f"Error removing keymaps: {e}")
finally:
_keymaps.clear()
registry.blender_unregister_classes()
if _registered_nodeslicer:
try:
if hasattr(bpy.types.Object, "nodeslicer"):
del bpy.types.Object.nodeslicer #type: ignore
except Exception as e:
print(f"Error removing property: {e}")
finally:
_registered_nodeslicer = False
print('Nodeslicer Unloaded')
if __name__ == "__main__":
register()