| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 | from . import ( ops_nodegroup,                base_definitions,                socket_definitions,                link_definitions,                xForm_definitions,                nodes_generic,                primitives_definitions,                deformer_definitions,                math_definitions,                i_o,                schema_definitions,              )from .ops_generate_tree import GenerateMantisTreefrom bpy.types import NodeSocketfrom .utilities import prRedclassLists = [module.TellClasses() for module in [ link_definitions, xForm_definitions, base_definitions, nodes_generic, socket_definitions, ops_nodegroup, primitives_definitions, deformer_definitions, math_definitions, i_o, schema_definitions,]]# lolclassLists.append( [GenerateMantisTree] )#classes = []while (classLists):    classes.extend(classLists.pop())interface_classes = []from bpy import app# if app.version[0]  == 3:#     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 MantisNodeCategory(NodeCategory):    @classmethod    def poll(cls, context):        return (context.space_data.tree_type in ['MantisTree', 'SchemaTree'])class SchemaNodeCategory(NodeCategory):    @classmethod    def poll(cls, context):        # doesn't seem to work tho        try:            return (context.space_data.path[len(path)-1].node_tree.bl_idname == 'SchemaTree')        except:            return Trueinput_category=[            NodeItem("InputFloatNode"),            NodeItem("InputVectorNode"),            NodeItem("InputBooleanNode"),            # NodeItem("InputBooleanThreeTupleNode"),            # NodeItem("InputRotationOrderNode"),            # NodeItem("InputTransformSpaceNode"),            NodeItem("InputStringNode"),            NodeItem("InputIntNode"),            # NodeItem("InputQuaternionNode"),            # NodeItem("InputQuaternionNodeAA"),            NodeItem("InputMatrixNode"),            # NodeItem("InputLayerMaskNode"), # DEPRECATED since we have Bone Collections now            NodeItem("InputExistingGeometryObject"),            NodeItem("InputExistingGeometryData"),    ]link_transform_category = [        NodeItem("LinkCopyLocation"),        NodeItem("LinkCopyRotation"),        NodeItem("LinkCopyScale"),        NodeItem("LinkCopyTransforms"),        NodeItem("LinkLimitLocation"),        NodeItem("LinkLimitScale"),        NodeItem("LinkLimitRotation"),        NodeItem("LinkLimitDistance"),        NodeItem("LinkTransformation"),    ]link_tracking_category = [        NodeItem("LinkInverseKinematics"),        NodeItem("LinkSplineIK"),        NodeItem("LinkStretchTo"),        NodeItem("LinkDampedTrack"),        NodeItem("LinkLockedTrack"),        NodeItem("LinkTrackTo"),    ]link_relationship_category = [        NodeItem("linkInherit"),        NodeItem("LinkInheritConstraint"),        NodeItem("LinkArmature"),    ]deformer_category=[NodeItem(cls.bl_idname) for cls in deformer_definitions.TellClasses()]xForm_category = [         NodeItem("xFormGeometryObject"),        # NodeItem("xFormNullNode"), # REMOVED since GeometryObject makes an empty if it has no Geometry        NodeItem("xFormBoneNode"),        # NodeItem("xFormRootNode"), # REMOVED since it is a no-op        NodeItem("xFormArmatureNode"),    ]driver_category = [        NodeItem("LinkDrivenParameter"),        NodeItem("UtilityFCurve"),        NodeItem("UtilityBoneProperties"),        NodeItem("UtilityDriverVariable"),        NodeItem("UtilitySwitch"),        NodeItem("UtilityDriver"),        NodeItem("UtilityKeyframe"),    ]geometry_category = [        NodeItem("GeometryCirclePrimitive"),    ]utility_category = [        NodeItem("MathStaticInt"),        NodeItem("MathStaticFloat"),        NodeItem("MathStaticVector"),        NodeItem("UtilityCatStrings"),        NodeItem("UtilityCombineThreeBool"),        NodeItem("UtilityCombineVector"),        NodeItem("UtilityIntToString"),        NodeItem("UtilityArrayGet"),        NodeItem("UtilityChoose"),        NodeItem("UtilityCompare"),        NodeItem("UtilityPrint"),    ]matrix_category = [        NodeItem("UtilityMetaRig"),        NodeItem("UtilityMatrixFromCurve"),        NodeItem("UtilityMatricesFromCurve"),        NodeItem("UtilityPointFromCurve"),        NodeItem("UtilityPointFromBoneMatrix"),        NodeItem("UtilitySetBoneLength"),        NodeItem("UtilityGetBoneLength"),        NodeItem("UtilityBoneMatrixHeadTailFlip"),        NodeItem("UtilityMatrixSetLocation"),        NodeItem("UtilityMatrixFromXForm"),        NodeItem("UtilityAxesFromMatrix"),        NodeItem("UtilityMatrixTransform"),        NodeItem("UtilityTransformationMatrix"),        NodeItem("UtilitySetBoneMatrixTail"),    ]groups_category = [        NodeItem("MantisNodeGroup"),        NodeItem("MantisSchemaGroup"),    ]# THIS is stupid, should be filled out automaticallynode_categories = [    # identifier, label, items list    MantisNodeCategory('INPUT', "Input", items=input_category),    # MantisNodeCategory('LINK', "Link", items=[]),    # MantisNodeCategory('LINK_TRACKING', "Link", items=[]),    MantisNodeCategory('LINK_TRANSFORM', "Link (Transform)", items=link_transform_category),    MantisNodeCategory('LINK_TRACKING', "Link (Tracking)", items=link_tracking_category),    MantisNodeCategory('LINK_RELATIONSHIP', "Link (Inheritance)", items=link_relationship_category),    MantisNodeCategory('DEFORMER', "Deformer", items=deformer_category),    MantisNodeCategory('XFORM', "Transform", items=xForm_category),    MantisNodeCategory('DRIVER', "Driver", items=driver_category),    MantisNodeCategory('GEOMETRY', "Geometry", items =geometry_category),    MantisNodeCategory('UTILITIES', "Utility", items=utility_category),    MantisNodeCategory('MATRIX', "Matrix", items=matrix_category),    MantisNodeCategory('GROUPS', "Groups", items=groups_category),]schema_category=[NodeItem(cls.bl_idname) for cls in schema_definitions.TellClasses()]schema_categories = [    SchemaNodeCategory('SCHEMA_SCHEMA', "Schema", items=schema_category),]import bpydef init_keymaps():    kc = bpy.context.window_manager.keyconfigs.addon    km = kc.keymaps.new(name="Node Generic", space_type='NODE_EDITOR')    kmi = [        # Normal operation        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.execute_node_tree", 'E', 'PRESS'),        km.keymap_items.new("mantis.mute_node", 'M', 'PRESS'),        km.keymap_items.new("mantis.nodes_cleanup", "C", 'PRESS', shift=True,),        # Testing        km.keymap_items.new("mantis.query_sockets", 'Q', 'PRESS'),        km.keymap_items.new("mantis.test_operator", 'T', 'PRESS'),        km.keymap_items.new("mantis.visualize_output", 'V', 'PRESS'),        # Saving, Loading, Reloading, etc.        km.keymap_items.new("mantis.export_save_choose", "S", 'PRESS', alt=True,),        km.keymap_items.new("mantis.export_save_as", "S", 'PRESS', alt=True, shift=True),        km.keymap_items.new("mantis.reload_tree", "R", 'PRESS', alt=True,),        km.keymap_items.new("mantis.import_tree", "O", 'PRESS', ctrl=True,),    ]    return km, kmiaddon_keymaps = []def register():    from bpy.utils import register_class        for cls in classes:        try:            register_class(cls)        except RuntimeError as e:            prRed(cls.__name__)            raise e    nodeitems_utils.register_node_categories('MantisNodeCategories', node_categories)    nodeitems_utils.register_node_categories('SchemaNodeCategories', schema_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('MantisNodeCategories')    nodeitems_utils.unregister_node_categories('SchemaNodeCategories')    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()
 |