| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 | bl_info = {    "name": "Mantis Rigging Nodes",    "author": "Joseph Brandenburg",    "version": (000, 000, 000),    "blender": (3, 00, 0),    "location": "todo",    "description": "todo",    "warning": "experimental, likely to freeze or crash. Use at your own risk!",    "wiki_url": "",    "tracker_url": "",    "category": "Rigging"}from . import ( ops_nodegroup,                base_definitions,                socket_definitions,                link_definitions,                xForm_definitions,                nodes_generic,                primitives_definitions,                deformer_definitions,              )from mantis.ops_generate_tree import CreateMantisTreefrom bpy.types import NodeSocketclassLists = [module.TellClasses() for module in [ link_definitions, xForm_definitions, base_definitions, nodes_generic, socket_definitions, ops_nodegroup, primitives_definitions,                deformer_definitions,]]# lolclassLists.append( [CreateMantisTree] )#classes = []while (classLists):    classes.extend(classLists.pop())interface_classes = []for cls in [cls for cls in socket_definitions.TellClasses() if issubclass(cls, NodeSocket)]:    name = cls.__name__+"Interface"    from bpy.types import NodeSocketInterface    def default_draw_color(self, context,):        return self.color    def default_draw(self, context, layout):        return    interface = type(                  name,                  (NodeSocketInterface,),                  {                      "color"            : cls.color,                      "draw_color"       : default_draw_color,                      "draw"             : default_draw,                      "bl_idname"        : name,                      "bl_socket_idname" : cls.__name__,                  },              )    interface_classes.append(interface)classes.extend(interface_classes)import nodeitems_utilsfrom nodeitems_utils import NodeCategory, NodeItemclass AllNodeCategory(NodeCategory):    @classmethod    def poll(cls, context):        return (context.space_data.tree_type == 'MantisTree')# THIS is stupid, should be filled out automaticallynode_categories = [    # identifier, label, items list    AllNodeCategory('INPUT', "Input", items=[            NodeItem("UtilityMetaRig"),            NodeItem("InputFloatNode"),            NodeItem("InputVectorNode"),            NodeItem("InputBooleanNode"),            # NodeItem("InputBooleanThreeTupleNode"),            # NodeItem("InputRotationOrderNode"),            # NodeItem("InputTransformSpaceNode"),            NodeItem("InputStringNode"),            # NodeItem("InputQuaternionNode"),            # NodeItem("InputQuaternionNodeAA"),            NodeItem("InputMatrixNode"),            NodeItem("InputLayerMaskNode"),            NodeItem("InputExistingGeometryObject"),            NodeItem("InputExistingGeometryData"),    ]),    # AllNodeCategory('LINK', "Link", items=[]),    # AllNodeCategory('LINK_TRACKING', "Link", items=[]),    AllNodeCategory('LINK_TRANSFORM', "Link (Transform)", items=[        NodeItem("LinkCopyLocation"),        NodeItem("LinkCopyRotation"),        NodeItem("LinkCopyScale"),        NodeItem("LinkCopyTransforms"),        NodeItem("LinkLimitLocation"),        NodeItem("LinkLimitScale"),        NodeItem("LinkLimitRotation"),        NodeItem("LinkLimitDistance"),        NodeItem("LinkTransformation"),    ]),    AllNodeCategory('LINK_TRACKING', "Link (Tracking)", items=[        NodeItem("LinkInverseKinematics"),        NodeItem("LinkSplineIK"),        NodeItem("LinkStretchTo"),        NodeItem("LinkDampedTrack"),        NodeItem("LinkLockedTrack"),        NodeItem("LinkTrackTo"),    ]),    AllNodeCategory('LINK_RELATIONSHIP', "Link (Inheritance)", items=[        NodeItem("linkInherit"),        NodeItem("LinkInheritConstraint"),        NodeItem("LinkArmature"),    ]),    AllNodeCategory('DEFORMER', "Deformer", items=[            NodeItem("DeformerArmature"),    ]),    AllNodeCategory('XFORM', "Transform", items=[         NodeItem("xFormGeometryObject"),        # NodeItem("xFormNullNode"),        NodeItem("xFormBoneNode"),        NodeItem("xFormRootNode"),        NodeItem("xFormArmatureNode"),    ]),    AllNodeCategory('DRIVER', "Driver", items=[        NodeItem("UtilityFCurve"),        NodeItem("UtilityBoneProperties"),        NodeItem("LinkDrivenParameter"),        NodeItem("UtilityDriverVariable"),        NodeItem("UtilitySwitch"),        NodeItem("UtilityDriver"),    ]),    AllNodeCategory('GEOMETRY', "Geometry", items = [        NodeItem("GeometryCirclePrimitive"),    ]),    AllNodeCategory('UTILITIES', "Utility", items=[        NodeItem("UtilityCatStrings"),        NodeItem("UtilityCombineThreeBool"),        NodeItem("UtilityCombineVector"),    ]),    AllNodeCategory('GROUPS', "Groups", items=[        NodeItem("MantisNodeGroup"),    ]),]import bpydef init_keymaps():    kc = bpy.context.window_manager.keyconfigs.addon    km = kc.keymaps.new(name="Node Generic", space_type='NODE_EDITOR')    kmi = [        # km.keymap_items.new("sorcar.execute_node", 'E', 'PRESS'),        km.keymap_items.new("mantis.group_nodes", 'G', 'PRESS', ctrl=True),        km.keymap_items.new("mantis.edit_group", 'TAB', 'PRESS'),        km.keymap_items.new("mantis.query_sockets", 'Q', 'PRESS'),        km.keymap_items.new("mantis.execute_node_tree", 'E', 'PRESS'),        km.keymap_items.new("mantis.mute_node", 'M', 'PRESS'),        km.keymap_items.new("mantis.test_operator", 'T', 'PRESS'),        km.keymap_items.new("mantis.nodes_cleanup", "C", 'PRESS', shift=True,)    ]    return km, kmiaddon_keymaps = []def register():    from bpy.utils import register_class        for cls in classes:        register_class(cls)    nodeitems_utils.register_node_categories('AllNodeCategories', node_categories)    if (not bpy.app.background):        km, kmi = init_keymaps()        for k in kmi:            k.active = True            addon_keymaps.append((km, k))def unregister():    nodeitems_utils.unregister_node_categories('AllNodeCategories')    from bpy.utils import unregister_class    for cls in reversed(classes):        unregister_class(cls)        for km, kmi in addon_keymaps:        km.keymap_items.remove(kmi)    addon_keymaps.clear()
 |