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 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", } _keymaps = [] def register(): 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) # Register Keymaps wm = bpy.context.window_manager assert wm 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(): try: tree.cancel_timer() except Exception as e: print(f"Error canceling timer: {e}") 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() print('Nodeslicer Unloaded') if __name__ == "__main__": register()