xForm_socket_templates.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. from .mantis_dataclasses import MantisSocketTemplate as SockTemplate
  2. from .misc_nodes_socket_templates import SplineIndexTemplate
  3. from dataclasses import replace
  4. from bpy.app import version as bpy_version
  5. xFormArmatureSockets=[
  6. NameTemplate := SockTemplate(
  7. name="Name", is_input=True, bl_idname='StringSocket',
  8. default_value='Armature', blender_property='name' ),
  9. RotationOrderTemplate := SockTemplate(
  10. name="Rotation Order", is_input=True, bl_idname='RotationOrderSocket',
  11. default_value='XYZ', blender_property='rotation_mode' ),
  12. ObjectMatrixTemplate := SockTemplate(
  13. name="Matrix", is_input=True, bl_idname='MatrixSocket',
  14. blender_property='matrix_world' ),
  15. RelationshipInTemplate := SockTemplate(
  16. name="Relationship", is_input=True, bl_idname='RelationshipSocket', ),
  17. CustomPropsTemplate := SockTemplate(
  18. name="Custom Properties", is_input=True, bl_idname='CustomPropSocket',
  19. use_multi_input=True, is_animatable=False, ),
  20. xFormOutTemplate := SockTemplate(
  21. name="xForm Out", is_input=False, bl_idname='xFormSocket', ),
  22. ]
  23. xFormGeometryObjectSockets=[
  24. replace(NameTemplate, default_value='Object'),
  25. GeometryTemplate := SockTemplate(
  26. name="Geometry", is_input=True, bl_idname='GeometrySocket', ),
  27. ObjectMatrixTemplate,
  28. RelationshipInTemplate,
  29. DeformerInTemplate := SockTemplate(name="Deformer", is_input=True,
  30. bl_idname='DeformerSocket', ),
  31. HideTemplate := SockTemplate(name="Hide in Viewport",
  32. is_input=True, bl_idname='HideSocket', default_value=False,
  33. blender_property='hide_viewport' ),
  34. HideRenderTemplate := SockTemplate(name="Hide in Render",
  35. is_input=True, bl_idname='BooleanSocket', default_value=False,
  36. blender_property='hide_render' ),
  37. CustomPropsTemplate,
  38. xFormOutTemplate,
  39. ]
  40. xFormGeometryObjectInstanceSockets=[
  41. replace(NameTemplate, default_value='Object Instance'),
  42. SourcexFormTemplate := SockTemplate(
  43. name="Source Object", is_input=True, bl_idname='xFormSocket', ),
  44. AsInstanceTemplate := SockTemplate( name="As Instance", is_input=True,
  45. bl_idname='BooleanSocket', default_value=True,),
  46. ObjectMatrixTemplate,
  47. RelationshipInTemplate,
  48. DeformerInTemplate,
  49. HideTemplate,
  50. HideRenderTemplate,
  51. CustomPropsTemplate,
  52. xFormOutTemplate,
  53. ]
  54. xFormCurvePinSockets = [
  55. replace(NameTemplate, default_value='Curve Pin'),
  56. ParentCurveTemplate := SockTemplate(
  57. name="Parent Curve", is_input=True, bl_idname='xFormSocket', ),
  58. SplineIndexTemplate,
  59. FactorTemplate := SockTemplate(
  60. name="Curve Pin Factor", is_input=True, bl_idname='FloatFactorSocket',
  61. default_value=0.0, blender_property='offset_factor' ),
  62. ForwardAxisTemplate := SockTemplate(
  63. name="Forward Axis", is_input=True, bl_idname='EnumFollowPathForwardAxis',
  64. default_value="FORWARD_Y", blender_property='forward_axis' ),
  65. UpAxisTemplate := SockTemplate(
  66. name="Up Axis", is_input=True, bl_idname='EnumUpAxis',
  67. default_value="UP_Z", blender_property='up_axis' ),
  68. CurvePinDisplaySize := SockTemplate(
  69. name="Display Size", is_input=True, bl_idname='FloatPositiveSocket',
  70. default_value=0.05, blender_property='empty_display_size'),
  71. CustomPropsTemplate,
  72. xFormOutTemplate,
  73. ]
  74. xFormGetBoneSockets = [
  75. ParentArmatureTemplate := SockTemplate(
  76. name="Parent Armature", is_input=True, bl_idname='EnumArmature', ),
  77. ExistingBoneNameTemplate := replace(NameTemplate, name='Bone',
  78. default_value='', bl_idname="EnumExistingBoneSocket"),
  79. xFormOutTemplate,
  80. ]
  81. # Some (especially BBone) properties are good to treat differently
  82. # based on bone/posebone or value/driver
  83. # I'll use these lists to make decisions about that sort of thing
  84. attributes_shared_by_bone_and_pose_bone = [
  85. "bbone_curveinx",
  86. "bbone_curveinz",
  87. "bbone_curveoutx",
  88. "bbone_curveoutz",
  89. "bbone_custom_handle_end",
  90. "bbone_custom_handle_start",
  91. "bbone_easein",
  92. "bbone_easeout",
  93. "bbone_rollin",
  94. "bbone_rollout",
  95. "bbone_scalein",
  96. "bbone_scaleout",
  97. ]
  98. # these need to be 1 in edit mode and 0 in pose mode, by default. Pain.
  99. need_different_defaults = [
  100. ("bbone_easein", 1, 0 ),
  101. ("bbone_easeout", 1, 0),
  102. ]
  103. # VERSIONING for Bone
  104. bone_hide_prop_group='bone'
  105. if bpy_version >= (5,0,0):
  106. bone_hide_prop_group='pose_bone'
  107. bone_hide_template = replace(HideTemplate, name='Hide', category='always_show',
  108. blender_property='hide', default_value=False,
  109. prop_owner_group = bone_hide_prop_group)
  110. bbone_template = SockTemplate( name="<BBone Template>",
  111. default_value = 0.0, blender_property=None, is_input=True,
  112. bl_idname='FloatSocket', prop_owner_group='bone',)
  113. # And there is some serious confusing stuff regarding BBones so I'll explain...
  114. # Blender has duplicated properties for Bone and Pose Bone
  115. # When there is a driver, you usually want the Pose Bone to hold it
  116. # but when there isn't you probably want it on the Bone since it isn't animated
  117. # and bones! this one is a bit much...
  118. from math import pi
  119. xFormBoneSockets = [
  120. replace(NameTemplate, default_value='Bone', category='always_show',
  121. is_animatable=False,),
  122. replace(RotationOrderTemplate, category='always_show',),
  123. BoneMatrixTemplate := replace(ObjectMatrixTemplate, is_animatable=False,
  124. blender_property='matrix', category='always_show',),
  125. replace(RelationshipInTemplate, category='always_show', is_animatable=False,),
  126. # IK
  127. IKStretch := SockTemplate(
  128. name="IK Stretch", is_input=True, bl_idname='FloatFactorSocket',
  129. default_value=0, blender_property='ik_stretch', category='IK',
  130. prop_owner_group='pose_bone',),
  131. IKLock := SockTemplate(
  132. name="Lock IK", is_input=True, bl_idname='BooleanThreeTupleSocket',
  133. default_value=(False, False, False), category='IK',
  134. blender_property=('lock_ik_x', 'lock_ik_y', 'lock_ik_z'),
  135. prop_owner_group='pose_bone', ),
  136. IKStiffness := SockTemplate(
  137. name="IK Stiffness", is_input=True, bl_idname='BooleanThreeTupleSocket',
  138. default_value=(False, False, False), category='IK',
  139. blender_property=('ik_stiffness_x', 'ik_stiffness_y', 'ik_stiffness_z'),
  140. prop_owner_group='pose_bone', ),
  141. IKLimit := SockTemplate(
  142. name="Limit IK", is_input=True, bl_idname='BooleanThreeTupleSocket',
  143. default_value=(False, False, False), category='IK',
  144. blender_property=('use_ik_limit_x', 'use_ik_limit_y', 'use_ik_limit_z'),
  145. prop_owner_group='pose_bone', ),
  146. IKXMin := SockTemplate(
  147. name="X Min", is_input=True, bl_idname='NodeSocketFloatAngle',
  148. default_value=-pi, blender_property='ik_min_x', category='IK',
  149. prop_owner_group='pose_bone', ),
  150. IKXMax := replace(IKXMin, name="X Max", default_value=pi,
  151. blender_property='ik_max_x',),
  152. IKYMax := replace(IKXMin, name="Y Min", blender_property='ik_min_y'),
  153. IKYMax := replace(IKXMax, name="Y Max", blender_property='ik_max_y'),
  154. IKZMax := replace(IKXMin, name="Z Min", blender_property='ik_min_z'),
  155. IKZMax := replace(IKXMax, name="Z Max", blender_property='ik_max_z'),
  156. # Visual Stuff
  157. BoneCollectionTemplate := SockTemplate(name="Bone Collection", is_input=True,
  158. bl_idname='BoneCollectionSocket', category='Display', use_multi_input=True,
  159. is_animatable=False,),
  160. CustomObjectTemplate := replace(SourcexFormTemplate, name='Custom Object',
  161. category='Display', is_animatable=False,),
  162. OverrideXFormTemplate := replace(SourcexFormTemplate, is_animatable=False,
  163. name='Custom Object xForm Override', category='Display',),
  164. CustomObjectScaleToBoneTemplate := replace(HideRenderTemplate,
  165. name='Custom Object Scale to Bone Length', category='Display',
  166. blender_property='use_custom_shape_bone_size',
  167. default_value=True, prop_owner_group='pose_bone', ),
  168. CustomObjectWireframeTemplate := replace(HideRenderTemplate,
  169. name='Custom Object Wireframe', category='Display',
  170. blender_property='show_wire', default_value=True,
  171. prop_owner_group='bone', ),
  172. CustomObjectScaleTemplate := SockTemplate(name="Custom Object Scale",
  173. is_input=True, bl_idname='VectorScaleSocket',
  174. category='Display', default_value=(1.0,1.0,1.0),
  175. blender_property = 'custom_shape_scale_xyz',
  176. prop_owner_group='pose_bone', ),
  177. CustomObjectTranslationTemplate := SockTemplate(name="Custom Object Translation",
  178. is_input=True, bl_idname='VectorSocket',
  179. category='Display', default_value=(0.0,0.0,0.0),
  180. blender_property = 'custom_shape_translation',
  181. prop_owner_group='pose_bone', ),
  182. CustomObjectRotationTemplate := SockTemplate(name="Custom Object Rotation",
  183. is_input=True, bl_idname='VectorEulerSocket',
  184. category='Display', default_value=(0.0,0.0,0.0),
  185. blender_property = 'custom_shape_rotation_euler',
  186. prop_owner_group='pose_bone', ),
  187. CustomColor := SockTemplate(name="Color",
  188. is_input=True, bl_idname='ColorSetSocket',
  189. category='Display', is_animatable=False,),
  190. InheritColor := SockTemplate(name="Inherit Color",
  191. is_input=True, bl_idname='BooleanSocket', is_animatable=False,
  192. category='Display', default_value=True, prop_owner_group='pose_bone', ),
  193. # Deform Stuff
  194. BoneDeformTemplate := replace(HideRenderTemplate, name='Deform',
  195. category='Deform', blender_property='use_deform', default_value=False,
  196. prop_owner_group='edit_bone', is_animatable=False,),
  197. EnvelopeDistanceTemplate := SockTemplate( name='Envelope Distance',
  198. bl_idname='FloatPositiveSocket', category='Deform',
  199. blender_property='envelope_distance', default_value=0,
  200. is_input=True, prop_owner_group='edit_bone', is_animatable=False,),
  201. EnvelopeWeightTemplate := replace(EnvelopeDistanceTemplate,
  202. name='Envelope Weight', bl_idname = 'FloatFactorSocket',
  203. blender_property='envelope_weight', default_value=1.0,
  204. prop_owner_group='edit_bone', is_animatable=False,),
  205. EnvelopeMultiplyTemplate := replace(EnvelopeDistanceTemplate,
  206. name='Envelope Multiply', bl_idname = 'BooleanSocket',
  207. blender_property='use_envelope_multiply', default_value=False,
  208. prop_owner_group='edit_bone', is_animatable=False,),
  209. EnvelopeHeadRadiusTemplate := replace(EnvelopeDistanceTemplate,
  210. name='Envelope Head Radius', blender_property='head_radius', default_value=0.0,),
  211. EnvelopeTailRadiusTemplate := replace(EnvelopeDistanceTemplate,
  212. name='Envelope Tail Radius', blender_property='tail_radius', default_value=0.0,),
  213. # BBone Stuff
  214. BBoneSegmentsTemplate := SockTemplate(name="BBone Segments", is_input=True,
  215. bl_idname='UnsignedIntSocket', category = 'bbone',
  216. blender_property='bbone_segments', default_value=1,
  217. prop_owner_group='bone', ),
  218. BBoneXSizeTemplate := replace(BBoneSegmentsTemplate, name='BBone X Size',
  219. bl_idname='FloatSocket', blender_property='bbone_x', default_value=0.0025,
  220. prop_owner_group='bone',),
  221. BBoneZSizeTemplate := replace(BBoneXSizeTemplate, name='BBone Z Size',
  222. blender_property='bbone_z', ),
  223. BBoneHQDeformation := replace(BBoneSegmentsTemplate, name='BBone HQ Deformation',
  224. bl_idname='BooleanSocket', blender_property='', default_value=None, is_animatable=False, ),
  225. BBoneXCurveInTemplate := replace( BBoneXSizeTemplate, name="BBone X Curve-In",
  226. bl_idname='FloatSocket', blender_property='bbone_curveinx', default_value=0.0,
  227. prop_owner_group='bone',),
  228. BBoneZCurveInTemplate := replace(BBoneXCurveInTemplate, name="BBone Z Curve-In",
  229. blender_property='bbone_curveinz', prop_owner_group='bone', ),
  230. BBoneXCurveOutTemplate := replace(BBoneXCurveInTemplate, name="BBone X Curve-Out",
  231. default_value=0.0,
  232. blender_property='bbone_curveoutx', prop_owner_group='bone', ),
  233. BBoneZCurveOutTemplate := replace(BBoneXCurveInTemplate, name="BBone Z Curve-Out",
  234. blender_property='bbone_curveoutz', prop_owner_group='bone', ),
  235. replace(bbone_template, name="BBone Roll-In",
  236. default_value = 0.0,
  237. blender_property='bbone_rollin',),
  238. replace(bbone_template, name="BBone Roll-Out", blender_property='bbone_rollout', ),
  239. replace(bbone_template, name="BBone Inherit End Roll",
  240. bl_idname='BooleanSocket', default_value=False,
  241. blender_property = 'use_endroll_as_inroll',
  242. is_animatable=False, prop_owner_group='bone',),
  243. replace(bbone_template, name="BBone Scale-In",
  244. bl_idname='VectorSocket', default_value=(1.0,1.0,1.0),
  245. blender_property = 'bbone_scalein'),
  246. replace(bbone_template, name="BBone Scale-Out",
  247. bl_idname='VectorSocket', default_value=(1.0,1.0,1.0),
  248. blender_property = 'bbone_scaleout'),
  249. replace(bbone_template, name="BBone Ease-In",
  250. blender_property = 'bbone_easein'),
  251. replace(bbone_template, name="BBone Ease-Out",
  252. blender_property = 'bbone_easeout'),
  253. replace(bbone_template, name="BBone Easing",
  254. bl_idname='BooleanSocket', default_value=False,
  255. blender_property='use_scale_easing', prop_owner_group='bone',),
  256. replace(bbone_template, name="BBone Start Handle Type",
  257. bl_idname="EnumBBoneHandleType",
  258. blender_property='bbone_handle_type_start', default_value=None,
  259. prop_owner_group='bone', is_animatable=False,),
  260. replace(bbone_template, name="BBone Custom Start Handle",
  261. bl_idname="StringSocket",
  262. blender_property=None, # not handled by this system
  263. default_value=None, is_animatable=False,),
  264. replace(bbone_template, name="BBone Start Handle Scale",
  265. bl_idname="BooleanThreeTupleSocket",
  266. default_value = (False, False, False),
  267. blender_property='bbone_handle_use_scale_start',
  268. prop_owner_group='bone', ),
  269. replace(bbone_template, name="BBone Start Handle Ease",
  270. bl_idname='BooleanSocket', default_value=False,
  271. blender_property = 'bbone_handle_use_ease_start',
  272. prop_owner_group='bone',),
  273. replace(bbone_template, name="BBone End Handle Type",
  274. bl_idname="EnumBBoneHandleType",
  275. blender_property='bbone_handle_type_end', default_value=None,
  276. prop_owner_group='bone', is_animatable=False,),
  277. replace(bbone_template, name="BBone Custom End Handle",
  278. bl_idname="StringSocket",
  279. blender_property=None, # not handled by this system
  280. default_value=None, is_animatable=False,),
  281. replace(bbone_template, name="BBone End Handle Scale",
  282. bl_idname="BooleanThreeTupleSocket",
  283. default_value= (False, False, False),
  284. blender_property='bbone_handle_use_scale_end',
  285. prop_owner_group='bone',),
  286. replace(bbone_template, name="BBone End Handle Ease",
  287. bl_idname='BooleanSocket', default_value=False,
  288. blender_property = 'bbone_handle_use_ease_end',
  289. prop_owner_group='bone',),
  290. # locks
  291. LockLocationTemplate := SockTemplate(name="Lock Location",
  292. is_input=True, bl_idname='BooleanThreeTupleSocket', category = 'lock',
  293. blender_property='lock_location', default_value=[True, True, True],
  294. prop_owner_group='pose_bone', ),
  295. LockRotationTemplate := replace(LockLocationTemplate, name="Lock Rotation",
  296. blender_property='lock_rotation',),
  297. LockRotationTemplate := replace(LockLocationTemplate, name="Lock Scale",
  298. blender_property='lock_scale',),
  299. # hide
  300. bone_hide_template,
  301. CustomPropsTemplate,
  302. # Output
  303. xFormOutTemplate,
  304. ]