__init__.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. bl_info = {
  2. "name": "Mantis Rigging Nodes",
  3. "author": "Joseph Brandenburg",
  4. "version": (000, 000, 000),
  5. "blender": (3, 00, 0),
  6. "location": "todo",
  7. "description": "todo",
  8. "warning": "experimental, likely to freeze or crash. Use at your own risk!",
  9. "wiki_url": "",
  10. "tracker_url": "",
  11. "category": "Rigging"}
  12. from . import ( ops_nodegroup,
  13. base_definitions,
  14. socket_definitions,
  15. link_definitions,
  16. xForm_definitions,
  17. nodes_generic,
  18. primitives_definitions,
  19. deformer_definitions,
  20. )
  21. from mantis.ops_generate_tree import CreateMantisTree
  22. from bpy.types import NodeSocket
  23. classLists = [module.TellClasses() for module in [
  24. link_definitions,
  25. xForm_definitions,
  26. base_definitions,
  27. nodes_generic,
  28. socket_definitions,
  29. ops_nodegroup,
  30. primitives_definitions,
  31. deformer_definitions,
  32. ]]
  33. # lol
  34. classLists.append( [CreateMantisTree] )
  35. #
  36. classes = []
  37. while (classLists):
  38. classes.extend(classLists.pop())
  39. interface_classes = []
  40. for cls in [cls for cls in socket_definitions.TellClasses() if issubclass(cls, NodeSocket)]:
  41. name = cls.__name__+"Interface"
  42. from bpy.types import NodeSocketInterface
  43. def default_draw_color(self, context,):
  44. return self.color
  45. def default_draw(self, context, layout):
  46. return
  47. interface = type(
  48. name,
  49. (NodeSocketInterface,),
  50. {
  51. "color" : cls.color,
  52. "draw_color" : default_draw_color,
  53. "draw" : default_draw,
  54. "bl_idname" : name,
  55. "bl_socket_idname" : cls.__name__,
  56. },
  57. )
  58. interface_classes.append(interface)
  59. classes.extend(interface_classes)
  60. import nodeitems_utils
  61. from nodeitems_utils import NodeCategory, NodeItem
  62. class AllNodeCategory(NodeCategory):
  63. @classmethod
  64. def poll(cls, context):
  65. return (context.space_data.tree_type == 'MantisTree')
  66. # THIS is stupid, should be filled out automatically
  67. node_categories = [
  68. # identifier, label, items list
  69. AllNodeCategory('INPUT', "Input", items=[
  70. NodeItem("UtilityMetaRig"),
  71. NodeItem("InputFloatNode"),
  72. NodeItem("InputVectorNode"),
  73. NodeItem("InputBooleanNode"),
  74. # NodeItem("InputBooleanThreeTupleNode"),
  75. # NodeItem("InputRotationOrderNode"),
  76. # NodeItem("InputTransformSpaceNode"),
  77. NodeItem("InputStringNode"),
  78. # NodeItem("InputQuaternionNode"),
  79. # NodeItem("InputQuaternionNodeAA"),
  80. NodeItem("InputMatrixNode"),
  81. NodeItem("InputLayerMaskNode"),
  82. NodeItem("InputExistingGeometryObject"),
  83. NodeItem("InputExistingGeometryData"),
  84. ]),
  85. # AllNodeCategory('LINK', "Link", items=[]),
  86. # AllNodeCategory('LINK_TRACKING', "Link", items=[]),
  87. AllNodeCategory('LINK_TRANSFORM', "Link (Transform)", items=[
  88. NodeItem("LinkCopyLocation"),
  89. NodeItem("LinkCopyRotation"),
  90. NodeItem("LinkCopyScale"),
  91. NodeItem("LinkCopyTransforms"),
  92. NodeItem("LinkLimitLocation"),
  93. NodeItem("LinkLimitScale"),
  94. NodeItem("LinkLimitRotation"),
  95. NodeItem("LinkLimitDistance"),
  96. NodeItem("LinkTransformation"),
  97. ]),
  98. AllNodeCategory('LINK_TRACKING', "Link (Tracking)", items=[
  99. NodeItem("LinkInverseKinematics"),
  100. NodeItem("LinkSplineIK"),
  101. NodeItem("LinkStretchTo"),
  102. NodeItem("LinkDampedTrack"),
  103. NodeItem("LinkLockedTrack"),
  104. NodeItem("LinkTrackTo"),
  105. ]),
  106. AllNodeCategory('LINK_RELATIONSHIP', "Link (Inheritance)", items=[
  107. NodeItem("linkInherit"),
  108. NodeItem("LinkInheritConstraint"),
  109. NodeItem("LinkArmature"),
  110. ]),
  111. AllNodeCategory('DEFORMER', "Deformer", items=[
  112. NodeItem("DeformerArmature"),
  113. ]),
  114. AllNodeCategory('XFORM', "Transform", items=[
  115. NodeItem("xFormGeometryObject"),
  116. # NodeItem("xFormNullNode"),
  117. NodeItem("xFormBoneNode"),
  118. NodeItem("xFormRootNode"),
  119. NodeItem("xFormArmatureNode"),
  120. ]),
  121. AllNodeCategory('DRIVER', "Driver", items=[
  122. NodeItem("UtilityFCurve"),
  123. NodeItem("UtilityBoneProperties"),
  124. NodeItem("LinkDrivenParameter"),
  125. NodeItem("UtilityDriverVariable"),
  126. NodeItem("UtilitySwitch"),
  127. NodeItem("UtilityDriver"),
  128. ]),
  129. AllNodeCategory('GEOMETRY', "Geometry", items = [
  130. NodeItem("GeometryCirclePrimitive"),
  131. ]),
  132. AllNodeCategory('UTILITIES', "Utility", items=[
  133. NodeItem("UtilityCatStrings"),
  134. NodeItem("UtilityCombineThreeBool"),
  135. NodeItem("UtilityCombineVector"),
  136. ]),
  137. AllNodeCategory('GROUPS', "Groups", items=[
  138. NodeItem("MantisNodeGroup"),
  139. ]),
  140. ]
  141. import bpy
  142. def init_keymaps():
  143. kc = bpy.context.window_manager.keyconfigs.addon
  144. km = kc.keymaps.new(name="Node Generic", space_type='NODE_EDITOR')
  145. kmi = [
  146. # km.keymap_items.new("sorcar.execute_node", 'E', 'PRESS'),
  147. km.keymap_items.new("mantis.group_nodes", 'G', 'PRESS', ctrl=True),
  148. km.keymap_items.new("mantis.edit_group", 'TAB', 'PRESS'),
  149. km.keymap_items.new("mantis.query_sockets", 'Q', 'PRESS'),
  150. km.keymap_items.new("mantis.execute_node_tree", 'E', 'PRESS'),
  151. km.keymap_items.new("mantis.mute_node", 'M', 'PRESS'),
  152. km.keymap_items.new("mantis.test_operator", 'T', 'PRESS'),
  153. km.keymap_items.new("mantis.nodes_cleanup", "C", 'PRESS', shift=True,)
  154. ]
  155. return km, kmi
  156. addon_keymaps = []
  157. def register():
  158. from bpy.utils import register_class
  159. for cls in classes:
  160. register_class(cls)
  161. nodeitems_utils.register_node_categories('AllNodeCategories', node_categories)
  162. if (not bpy.app.background):
  163. km, kmi = init_keymaps()
  164. for k in kmi:
  165. k.active = True
  166. addon_keymaps.append((km, k))
  167. def unregister():
  168. nodeitems_utils.unregister_node_categories('AllNodeCategories')
  169. from bpy.utils import unregister_class
  170. for cls in reversed(classes):
  171. unregister_class(cls)
  172. for km, kmi in addon_keymaps:
  173. km.keymap_items.remove(kmi)
  174. addon_keymaps.clear()