__init__.py 6.0 KB

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