deformer_definitions.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. import bpy
  2. from bpy.types import NodeTree, Node, NodeSocket
  3. from .base_definitions import MantisNode, DeformerNode, get_signature_from_edited_tree
  4. from .utilities import (prRed, prGreen, prPurple, prWhite, prOrange,
  5. wrapRed, wrapGreen, wrapPurple, wrapWhite,
  6. wrapOrange,)
  7. def TellClasses():
  8. return [
  9. DeformerArmatureNode,
  10. DeformerMorphTargetDeform,
  11. DeformerMorphTarget,
  12. ]
  13. icons = (
  14. 'NONE', 'QUESTION', 'ERROR', 'CANCEL', 'TRIA_RIGHT',
  15. 'TRIA_DOWN', 'TRIA_LEFT', 'TRIA_UP', 'ARROW_LEFTRIGHT',
  16. 'PLUS', 'DISCLOSURE_TRI_RIGHT', 'DISCLOSURE_TRI_DOWN',
  17. 'RADIOBUT_OFF', 'RADIOBUT_ON', 'MENU_PANEL', 'BLENDER',
  18. 'GRIP', 'DOT', 'COLLAPSEMENU', 'X', 'DUPLICATE', 'TRASH',
  19. 'COLLECTION_NEW', 'OPTIONS', 'NODE', 'NODE_SEL', 'WINDOW',
  20. 'WORKSPACE', 'RIGHTARROW_THIN', 'BORDERMOVE', 'VIEWZOOM',
  21. 'ADD', 'REMOVE', 'PANEL_CLOSE', 'COPY_ID', 'EYEDROPPER',
  22. 'CHECKMARK', 'AUTO', 'CHECKBOX_DEHLT', 'CHECKBOX_HLT',
  23. 'UNLOCKED', 'LOCKED', 'UNPINNED', 'PINNED', 'SCREEN_BACK',
  24. 'RIGHTARROW', 'DOWNARROW_HLT', 'FCURVE_SNAPSHOT',
  25. 'OBJECT_HIDDEN', 'TOPBAR', 'STATUSBAR', 'PLUGIN', 'HELP',
  26. 'GHOST_ENABLED', 'COLOR', 'UNLINKED', 'LINKED', 'HAND',
  27. 'ZOOM_ALL', 'ZOOM_SELECTED', 'ZOOM_PREVIOUS', 'ZOOM_IN',
  28. 'ZOOM_OUT', 'DRIVER_DISTANCE', 'DRIVER_ROTATIONAL_DIFFERENCE',
  29. 'DRIVER_TRANSFORM', 'FREEZE', 'STYLUS_PRESSURE',
  30. 'GHOST_DISABLED', 'FILE_NEW', 'FILE_TICK', 'QUIT', 'URL',
  31. 'RECOVER_LAST', 'THREE_DOTS', 'FULLSCREEN_ENTER',
  32. 'FULLSCREEN_EXIT', 'BRUSHES_ALL', 'LIGHT', 'MATERIAL',
  33. 'TEXTURE', 'ANIM', 'WORLD', 'SCENE', 'OUTPUT', 'SCRIPT',
  34. 'PARTICLES', 'PHYSICS', 'SPEAKER', 'TOOL_SETTINGS',
  35. 'SHADERFX', 'MODIFIER', 'BLANK1', 'FAKE_USER_OFF',
  36. 'FAKE_USER_ON', 'VIEW3D', 'GRAPH', 'OUTLINER', 'PROPERTIES',
  37. 'FILEBROWSER', 'IMAGE', 'INFO', 'SEQUENCE', 'TEXT',
  38. 'SPREADSHEET', 'SOUND', 'ACTION', 'NLA', 'PREFERENCES',
  39. 'TIME', 'NODETREE', 'GEOMETRY_NODES', 'CONSOLE', 'TRACKER',
  40. 'ASSET_MANAGER', 'NODE_COMPOSITING', 'NODE_TEXTURE',
  41. 'NODE_MATERIAL', 'UV', 'OBJECT_DATAMODE', 'EDITMODE_HLT',
  42. 'UV_DATA', 'VPAINT_HLT', 'TPAINT_HLT', 'WPAINT_HLT',
  43. 'SCULPTMODE_HLT', 'POSE_HLT', 'PARTICLEMODE', 'TRACKING',
  44. 'TRACKING_BACKWARDS', 'TRACKING_FORWARDS',
  45. 'TRACKING_BACKWARDS_SINGLE', 'TRACKING_FORWARDS_SINGLE',
  46. 'TRACKING_CLEAR_BACKWARDS', 'TRACKING_CLEAR_FORWARDS',
  47. 'TRACKING_REFINE_BACKWARDS', 'TRACKING_REFINE_FORWARDS',
  48. 'SCENE_DATA', 'RENDERLAYERS', 'WORLD_DATA', 'OBJECT_DATA',
  49. 'MESH_DATA', 'CURVE_DATA', 'META_DATA', 'LATTICE_DATA',
  50. 'LIGHT_DATA', 'MATERIAL_DATA', 'TEXTURE_DATA', 'ANIM_DATA',
  51. 'CAMERA_DATA', 'PARTICLE_DATA', 'LIBRARY_DATA_DIRECT',
  52. 'GROUP', 'ARMATURE_DATA', 'COMMUNITY', 'BONE_DATA',
  53. 'CONSTRAINT', 'SHAPEKEY_DATA', 'CONSTRAINT_BONE',
  54. 'CAMERA_STEREO', 'PACKAGE', 'UGLYPACKAGE', 'EXPERIMENTAL',
  55. 'BRUSH_DATA', 'IMAGE_DATA', 'FILE', 'FCURVE', 'FONT_DATA',
  56. 'RENDER_RESULT', 'SURFACE_DATA', 'EMPTY_DATA', 'PRESET',
  57. 'RENDER_ANIMATION', 'RENDER_STILL', 'LIBRARY_DATA_BROKEN',
  58. 'BOIDS', 'STRANDS', 'GREASEPENCIL', 'LINE_DATA',
  59. 'LIBRARY_DATA_OVERRIDE', 'GROUP_BONE', 'GROUP_VERTEX',
  60. 'GROUP_VCOL', 'GROUP_UVS', 'FACE_MAPS', 'RNA', 'RNA_ADD',
  61. 'MOUSE_LMB', 'MOUSE_MMB', 'MOUSE_RMB', 'MOUSE_MOVE',
  62. 'MOUSE_LMB_DRAG', 'MOUSE_MMB_DRAG', 'MOUSE_RMB_DRAG',
  63. 'MEMORY', 'PRESET_NEW', 'DECORATE', 'DECORATE_KEYFRAME',
  64. 'DECORATE_ANIMATE', 'DECORATE_DRIVER', 'DECORATE_LINKED',
  65. 'DECORATE_LIBRARY_OVERRIDE', 'DECORATE_UNLOCKED',
  66. 'DECORATE_LOCKED', 'DECORATE_OVERRIDE', 'FUND',
  67. 'TRACKER_DATA', 'HEART', 'ORPHAN_DATA', 'USER', 'SYSTEM',
  68. 'SETTINGS', 'OUTLINER_OB_EMPTY', 'OUTLINER_OB_MESH',
  69. 'OUTLINER_OB_CURVE', 'OUTLINER_OB_LATTICE',
  70. 'OUTLINER_OB_META', 'OUTLINER_OB_LIGHT', 'OUTLINER_OB_CAMERA',
  71. 'OUTLINER_OB_ARMATURE', 'OUTLINER_OB_FONT',
  72. 'OUTLINER_OB_SURFACE', 'OUTLINER_OB_SPEAKER',
  73. 'OUTLINER_OB_FORCE_FIELD', 'OUTLINER_OB_GROUP_INSTANCE',
  74. 'OUTLINER_OB_GREASEPENCIL', 'OUTLINER_OB_LIGHTPROBE',
  75. 'OUTLINER_OB_IMAGE', 'OUTLINER_COLLECTION',
  76. 'RESTRICT_COLOR_OFF', 'RESTRICT_COLOR_ON', 'HIDE_ON',
  77. 'HIDE_OFF', 'RESTRICT_SELECT_ON', 'RESTRICT_SELECT_OFF',
  78. 'RESTRICT_RENDER_ON', 'RESTRICT_RENDER_OFF',
  79. 'RESTRICT_INSTANCED_OFF', 'OUTLINER_DATA_EMPTY',
  80. 'OUTLINER_DATA_MESH', 'OUTLINER_DATA_CURVE',
  81. 'OUTLINER_DATA_LATTICE', 'OUTLINER_DATA_META',
  82. 'OUTLINER_DATA_LIGHT', 'OUTLINER_DATA_CAMERA',
  83. 'OUTLINER_DATA_ARMATURE', 'OUTLINER_DATA_FONT',
  84. 'OUTLINER_DATA_SURFACE', 'OUTLINER_DATA_SPEAKER',
  85. 'OUTLINER_DATA_LIGHTPROBE', 'OUTLINER_DATA_GP_LAYER',
  86. 'OUTLINER_DATA_GREASEPENCIL', 'GP_SELECT_POINTS',
  87. 'GP_SELECT_STROKES', 'GP_MULTIFRAME_EDITING',
  88. 'GP_ONLY_SELECTED', 'GP_SELECT_BETWEEN_STROKES',
  89. 'MODIFIER_OFF', 'MODIFIER_ON', 'ONIONSKIN_OFF',
  90. 'ONIONSKIN_ON', 'RESTRICT_VIEW_ON', 'RESTRICT_VIEW_OFF',
  91. 'RESTRICT_INSTANCED_ON', 'MESH_PLANE', 'MESH_CUBE',
  92. 'MESH_CIRCLE', 'MESH_UVSPHERE', 'MESH_ICOSPHERE', 'MESH_GRID',
  93. 'MESH_MONKEY', 'MESH_CYLINDER', 'MESH_TORUS', 'MESH_CONE',
  94. 'MESH_CAPSULE', 'EMPTY_SINGLE_ARROW', 'LIGHT_POINT',
  95. 'LIGHT_SUN', 'LIGHT_SPOT', 'LIGHT_HEMI', 'LIGHT_AREA', 'CUBE',
  96. 'SPHERE', 'CONE', 'META_PLANE', 'META_CUBE', 'META_BALL',
  97. 'META_ELLIPSOID', 'META_CAPSULE', 'SURFACE_NCURVE',
  98. 'SURFACE_NCIRCLE', 'SURFACE_NSURFACE', 'SURFACE_NCYLINDER',
  99. 'SURFACE_NSPHERE', 'SURFACE_NTORUS', 'EMPTY_AXIS', 'STROKE',
  100. 'EMPTY_ARROWS', 'CURVE_BEZCURVE', 'CURVE_BEZCIRCLE',
  101. 'CURVE_NCURVE', 'CURVE_NCIRCLE', 'CURVE_PATH',
  102. 'LIGHTPROBE_CUBEMAP', 'LIGHTPROBE_PLANAR', 'LIGHTPROBE_GRID',
  103. 'COLOR_RED', 'COLOR_GREEN', 'COLOR_BLUE', 'TRIA_RIGHT_BAR',
  104. 'TRIA_DOWN_BAR', 'TRIA_LEFT_BAR', 'TRIA_UP_BAR',
  105. 'FORCE_FORCE', 'FORCE_WIND', 'FORCE_VORTEX', 'FORCE_MAGNETIC',
  106. 'FORCE_HARMONIC', 'FORCE_CHARGE', 'FORCE_LENNARDJONES',
  107. 'FORCE_TEXTURE', 'FORCE_CURVE', 'FORCE_BOID',
  108. 'FORCE_TURBULENCE', 'FORCE_DRAG', 'FORCE_FLUIDFLOW',
  109. 'RIGID_BODY', 'RIGID_BODY_CONSTRAINT', 'IMAGE_PLANE',
  110. 'IMAGE_BACKGROUND', 'IMAGE_REFERENCE', 'NODE_INSERT_ON',
  111. 'NODE_INSERT_OFF', 'NODE_TOP', 'NODE_SIDE', 'NODE_CORNER',
  112. 'ANCHOR_TOP', 'ANCHOR_BOTTOM', 'ANCHOR_LEFT', 'ANCHOR_RIGHT',
  113. 'ANCHOR_CENTER', 'SELECT_SET', 'SELECT_EXTEND',
  114. 'SELECT_SUBTRACT', 'SELECT_INTERSECT', 'SELECT_DIFFERENCE',
  115. 'ALIGN_LEFT', 'ALIGN_CENTER', 'ALIGN_RIGHT', 'ALIGN_JUSTIFY',
  116. 'ALIGN_FLUSH', 'ALIGN_TOP', 'ALIGN_MIDDLE', 'ALIGN_BOTTOM',
  117. 'BOLD', 'ITALIC', 'UNDERLINE', 'SMALL_CAPS', 'CON_ACTION',
  118. 'MOD_LENGTH', 'MOD_DASH', 'MOD_LINEART', 'HOLDOUT_OFF',
  119. 'HOLDOUT_ON', 'INDIRECT_ONLY_OFF', 'INDIRECT_ONLY_ON',
  120. 'CON_CAMERASOLVER', 'CON_FOLLOWTRACK', 'CON_OBJECTSOLVER',
  121. 'CON_LOCLIKE', 'CON_ROTLIKE', 'CON_SIZELIKE', 'CON_TRANSLIKE',
  122. 'CON_DISTLIMIT', 'CON_LOCLIMIT', 'CON_ROTLIMIT',
  123. 'CON_SIZELIMIT', 'CON_SAMEVOL', 'CON_TRANSFORM',
  124. 'CON_TRANSFORM_CACHE', 'CON_CLAMPTO', 'CON_KINEMATIC',
  125. 'CON_LOCKTRACK', 'CON_SPLINEIK', 'CON_STRETCHTO',
  126. 'CON_TRACKTO', 'CON_ARMATURE', 'CON_CHILDOF', 'CON_FLOOR',
  127. 'CON_FOLLOWPATH', 'CON_PIVOT', 'CON_SHRINKWRAP',
  128. 'MODIFIER_DATA', 'MOD_WAVE', 'MOD_BUILD', 'MOD_DECIM',
  129. 'MOD_MIRROR', 'MOD_SOFT', 'MOD_SUBSURF', 'HOOK',
  130. 'MOD_PHYSICS', 'MOD_PARTICLES', 'MOD_BOOLEAN',
  131. 'MOD_EDGESPLIT', 'MOD_ARRAY', 'MOD_UVPROJECT', 'MOD_DISPLACE',
  132. 'MOD_CURVE', 'MOD_LATTICE', 'MOD_TINT', 'MOD_ARMATURE',
  133. 'MOD_SHRINKWRAP', 'MOD_CAST', 'MOD_MESHDEFORM', 'MOD_BEVEL',
  134. 'MOD_SMOOTH', 'MOD_SIMPLEDEFORM', 'MOD_MASK', 'MOD_CLOTH',
  135. 'MOD_EXPLODE', 'MOD_FLUIDSIM', 'MOD_MULTIRES', 'MOD_FLUID',
  136. 'MOD_SOLIDIFY', 'MOD_SCREW', 'MOD_VERTEX_WEIGHT',
  137. 'MOD_DYNAMICPAINT', 'MOD_REMESH', 'MOD_OCEAN', 'MOD_WARP',
  138. 'MOD_SKIN', 'MOD_TRIANGULATE', 'MOD_WIREFRAME',
  139. 'MOD_DATA_TRANSFER', 'MOD_NORMALEDIT',
  140. 'MOD_PARTICLE_INSTANCE', 'MOD_HUE_SATURATION', 'MOD_NOISE',
  141. 'MOD_OFFSET', 'MOD_SIMPLIFY', 'MOD_THICKNESS', 'MOD_INSTANCE',
  142. 'MOD_TIME', 'MOD_OPACITY', 'REC', 'PLAY', 'FF', 'REW',
  143. 'PAUSE', 'PREV_KEYFRAME', 'NEXT_KEYFRAME', 'PLAY_SOUND',
  144. 'PLAY_REVERSE', 'PREVIEW_RANGE', 'ACTION_TWEAK', 'PMARKER_ACT',
  145. 'PMARKER_SEL', 'PMARKER', 'MARKER_HLT', 'MARKER',
  146. 'KEYFRAME_HLT', 'KEYFRAME', 'KEYINGSET', 'KEY_DEHLT',
  147. 'KEY_HLT', 'MUTE_IPO_OFF', 'MUTE_IPO_ON', 'DRIVER',
  148. 'SOLO_OFF', 'SOLO_ON', 'FRAME_PREV', 'FRAME_NEXT',
  149. 'NLA_PUSHDOWN', 'IPO_CONSTANT', 'IPO_LINEAR', 'IPO_BEZIER',
  150. 'IPO_SINE', 'IPO_QUAD', 'IPO_CUBIC', 'IPO_QUART', 'IPO_QUINT',
  151. 'IPO_EXPO', 'IPO_CIRC', 'IPO_BOUNCE', 'IPO_ELASTIC',
  152. 'IPO_BACK', 'IPO_EASE_IN', 'IPO_EASE_OUT', 'IPO_EASE_IN_OUT',
  153. 'NORMALIZE_FCURVES', 'VERTEXSEL', 'EDGESEL', 'FACESEL',
  154. 'CURSOR', 'PIVOT_BOUNDBOX', 'PIVOT_CURSOR',
  155. 'PIVOT_INDIVIDUAL', 'PIVOT_MEDIAN', 'PIVOT_ACTIVE',
  156. 'CENTER_ONLY', 'ROOTCURVE', 'SMOOTHCURVE', 'SPHERECURVE',
  157. 'INVERSESQUARECURVE', 'SHARPCURVE', 'LINCURVE', 'NOCURVE',
  158. 'RNDCURVE', 'PROP_OFF', 'PROP_ON', 'PROP_CON',
  159. 'PROP_PROJECTED', 'PARTICLE_POINT', 'PARTICLE_TIP',
  160. 'PARTICLE_PATH', 'SNAP_FACE_NEAREST', 'SNAP_FACE_CENTER',
  161. 'SNAP_PERPENDICULAR', 'SNAP_MIDPOINT', 'SNAP_OFF', 'SNAP_ON',
  162. 'SNAP_NORMAL', 'SNAP_GRID', 'SNAP_VERTEX', 'SNAP_EDGE',
  163. 'SNAP_FACE', 'SNAP_VOLUME', 'SNAP_INCREMENT',
  164. 'STICKY_UVS_LOC', 'STICKY_UVS_DISABLE', 'STICKY_UVS_VERT',
  165. 'CLIPUV_DEHLT', 'CLIPUV_HLT', 'SNAP_PEEL_OBJECT', 'GRID',
  166. 'OBJECT_ORIGIN', 'ORIENTATION_GLOBAL', 'ORIENTATION_GIMBAL',
  167. 'ORIENTATION_LOCAL', 'ORIENTATION_NORMAL', 'ORIENTATION_VIEW',
  168. 'COPYDOWN', 'PASTEDOWN', 'PASTEFLIPUP', 'PASTEFLIPDOWN',
  169. 'VIS_SEL_11', 'VIS_SEL_10', 'VIS_SEL_01', 'VIS_SEL_00',
  170. 'AUTOMERGE_OFF', 'AUTOMERGE_ON', 'UV_VERTEXSEL', 'UV_EDGESEL',
  171. 'UV_FACESEL', 'UV_ISLANDSEL', 'UV_SYNC_SELECT',
  172. 'GP_CAPS_FLAT', 'GP_CAPS_ROUND', 'FIXED_SIZE',
  173. 'TRANSFORM_ORIGINS', 'GIZMO', 'ORIENTATION_CURSOR',
  174. 'NORMALS_VERTEX', 'NORMALS_FACE', 'NORMALS_VERTEX_FACE',
  175. 'SHADING_BBOX', 'SHADING_WIRE', 'SHADING_SOLID',
  176. 'SHADING_RENDERED', 'SHADING_TEXTURE', 'OVERLAY', 'XRAY',
  177. 'LOCKVIEW_OFF', 'LOCKVIEW_ON', 'AXIS_SIDE', 'AXIS_FRONT',
  178. 'AXIS_TOP', 'LAYER_USED', 'LAYER_ACTIVE',
  179. 'OUTLINER_OB_CURVES', 'OUTLINER_DATA_CURVES', 'CURVES_DATA',
  180. 'OUTLINER_OB_POINTCLOUD', 'OUTLINER_DATA_POINTCLOUD',
  181. 'POINTCLOUD_DATA', 'OUTLINER_OB_VOLUME',
  182. 'OUTLINER_DATA_VOLUME', 'VOLUME_DATA', 'CURRENT_FILE', 'HOME',
  183. 'DOCUMENTS', 'TEMP', 'SORTALPHA', 'SORTBYEXT', 'SORTTIME',
  184. 'SORTSIZE', 'SHORTDISPLAY', 'LONGDISPLAY', 'IMGDISPLAY',
  185. 'BOOKMARKS', 'FONTPREVIEW', 'FILTER', 'NEWFOLDER',
  186. 'FOLDER_REDIRECT', 'FILE_PARENT', 'FILE_REFRESH',
  187. 'FILE_FOLDER', 'FILE_BLANK', 'FILE_BLEND', 'FILE_IMAGE',
  188. 'FILE_MOVIE', 'FILE_SCRIPT', 'FILE_SOUND', 'FILE_FONT',
  189. 'FILE_TEXT', 'SORT_DESC', 'SORT_ASC', 'LINK_BLEND',
  190. 'APPEND_BLEND', 'IMPORT', 'EXPORT', 'LOOP_BACK',
  191. 'LOOP_FORWARDS', 'BACK', 'FORWARD', 'FILE_ARCHIVE',
  192. 'FILE_CACHE', 'FILE_VOLUME', 'FILE_3D', 'FILE_HIDDEN',
  193. 'FILE_BACKUP', 'DISK_DRIVE', 'MATPLANE', 'MATSPHERE',
  194. 'MATCUBE', 'MONKEY', 'CURVES', 'ALIASED', 'ANTIALIASED',
  195. 'MAT_SPHERE_SKY', 'MATSHADERBALL', 'MATCLOTH', 'MATFLUID',
  196. 'WORDWRAP_OFF', 'WORDWRAP_ON', 'SYNTAX_OFF', 'SYNTAX_ON',
  197. 'LINENUMBERS_OFF', 'LINENUMBERS_ON', 'SCRIPTPLUGINS', 'DISC',
  198. 'DESKTOP', 'EXTERNAL_DRIVE', 'NETWORK_DRIVE', 'SEQ_SEQUENCER',
  199. 'SEQ_PREVIEW', 'SEQ_LUMA_WAVEFORM', 'SEQ_CHROMA_SCOPE',
  200. 'SEQ_HISTOGRAM', 'SEQ_SPLITVIEW', 'SEQ_STRIP_META',
  201. 'SEQ_STRIP_DUPLICATE', 'IMAGE_RGB', 'IMAGE_RGB_ALPHA',
  202. 'IMAGE_ALPHA', 'IMAGE_ZDEPTH', 'HANDLE_AUTOCLAMPED',
  203. 'HANDLE_AUTO', 'HANDLE_ALIGNED', 'HANDLE_VECTOR',
  204. 'HANDLE_FREE', 'VIEW_PERSPECTIVE', 'VIEW_ORTHO',
  205. 'VIEW_CAMERA', 'VIEW_PAN', 'VIEW_ZOOM', 'BRUSH_BLOB',
  206. 'BRUSH_BLUR', 'BRUSH_CLAY', 'BRUSH_CLAY_STRIPS',
  207. 'BRUSH_CLONE', 'BRUSH_CREASE', 'BRUSH_FILL', 'BRUSH_FLATTEN',
  208. 'BRUSH_GRAB', 'BRUSH_INFLATE', 'BRUSH_LAYER', 'BRUSH_MASK',
  209. 'BRUSH_MIX', 'BRUSH_NUDGE', 'BRUSH_PAINT_SELECT',
  210. 'BRUSH_PINCH', 'BRUSH_SCRAPE', 'BRUSH_SCULPT_DRAW',
  211. 'BRUSH_SMEAR', 'BRUSH_SMOOTH', 'BRUSH_SNAKE_HOOK',
  212. 'BRUSH_SOFTEN', 'BRUSH_TEXDRAW', 'BRUSH_TEXFILL',
  213. 'BRUSH_TEXMASK', 'BRUSH_THUMB', 'BRUSH_ROTATE',
  214. 'GPBRUSH_SMOOTH', 'GPBRUSH_THICKNESS', 'GPBRUSH_STRENGTH',
  215. 'GPBRUSH_GRAB', 'GPBRUSH_PUSH', 'GPBRUSH_TWIST',
  216. 'GPBRUSH_PINCH', 'GPBRUSH_RANDOMIZE', 'GPBRUSH_CLONE',
  217. 'GPBRUSH_WEIGHT', 'GPBRUSH_PENCIL', 'GPBRUSH_PEN',
  218. 'GPBRUSH_INK', 'GPBRUSH_INKNOISE', 'GPBRUSH_BLOCK',
  219. 'GPBRUSH_MARKER', 'GPBRUSH_FILL', 'GPBRUSH_AIRBRUSH',
  220. 'GPBRUSH_CHISEL', 'GPBRUSH_ERASE_SOFT', 'GPBRUSH_ERASE_HARD',
  221. 'GPBRUSH_ERASE_STROKE', 'BRUSH_CURVES_ADD',
  222. 'BRUSH_CURVES_COMB', 'BRUSH_CURVES_CUT',
  223. 'BRUSH_CURVES_DELETE', 'BRUSH_CURVES_DENSITY',
  224. 'BRUSH_CURVES_GROW_SHRINK', 'BRUSH_CURVES_PINCH',
  225. 'BRUSH_CURVES_PUFF', 'BRUSH_CURVES_SLIDE',
  226. 'BRUSH_CURVES_SMOOTH', 'BRUSH_CURVES_SNAKE_HOOK',
  227. 'KEYTYPE_KEYFRAME_VEC', 'KEYTYPE_BREAKDOWN_VEC',
  228. 'KEYTYPE_EXTREME_VEC', 'KEYTYPE_JITTER_VEC',
  229. 'KEYTYPE_MOVING_HOLD_VEC', 'HANDLETYPE_FREE_VEC',
  230. 'HANDLETYPE_ALIGNED_VEC', 'HANDLETYPE_VECTOR_VEC',
  231. 'HANDLETYPE_AUTO_VEC', 'HANDLETYPE_AUTO_CLAMP_VEC',
  232. 'COLORSET_01_VEC', 'COLORSET_02_VEC', 'COLORSET_03_VEC',
  233. 'COLORSET_04_VEC', 'COLORSET_05_VEC', 'COLORSET_06_VEC',
  234. 'COLORSET_07_VEC', 'COLORSET_08_VEC', 'COLORSET_09_VEC',
  235. 'COLORSET_10_VEC', 'COLORSET_11_VEC', 'COLORSET_12_VEC',
  236. 'COLORSET_13_VEC', 'COLORSET_14_VEC', 'COLORSET_15_VEC',
  237. 'COLORSET_16_VEC', 'COLORSET_17_VEC', 'COLORSET_18_VEC',
  238. 'COLORSET_19_VEC', 'COLORSET_20_VEC', 'COLLECTION_COLOR_01',
  239. 'COLLECTION_COLOR_02', 'COLLECTION_COLOR_03',
  240. 'COLLECTION_COLOR_04', 'COLLECTION_COLOR_05',
  241. 'COLLECTION_COLOR_06', 'COLLECTION_COLOR_07',
  242. 'COLLECTION_COLOR_08', 'SEQUENCE_COLOR_01',
  243. 'SEQUENCE_COLOR_02', 'SEQUENCE_COLOR_03',
  244. 'SEQUENCE_COLOR_04', 'SEQUENCE_COLOR_05',
  245. 'SEQUENCE_COLOR_06', 'SEQUENCE_COLOR_07',
  246. 'SEQUENCE_COLOR_08', 'SEQUENCE_COLOR_09',
  247. 'LIBRARY_DATA_INDIRECT', 'LIBRARY_DATA_OVERRIDE_NONEDITABLE',
  248. 'EVENT_A', 'EVENT_B', 'EVENT_C', 'EVENT_D', 'EVENT_E',
  249. 'EVENT_F', 'EVENT_G', 'EVENT_H', 'EVENT_I', 'EVENT_J',
  250. 'EVENT_K', 'EVENT_L', 'EVENT_M', 'EVENT_N', 'EVENT_O',
  251. 'EVENT_P', 'EVENT_Q', 'EVENT_R', 'EVENT_S', 'EVENT_T',
  252. 'EVENT_U', 'EVENT_V', 'EVENT_W', 'EVENT_X', 'EVENT_Y',
  253. 'EVENT_Z', 'EVENT_SHIFT', 'EVENT_CTRL', 'EVENT_ALT',
  254. 'EVENT_OS', 'EVENT_F1', 'EVENT_F2', 'EVENT_F3', 'EVENT_F4',
  255. 'EVENT_F5', 'EVENT_F6', 'EVENT_F7', 'EVENT_F8', 'EVENT_F9',
  256. 'EVENT_F10', 'EVENT_F11', 'EVENT_F12', 'EVENT_ESC',
  257. 'EVENT_TAB', 'EVENT_PAGEUP', 'EVENT_PAGEDOWN', 'EVENT_RETURN',
  258. 'EVENT_SPACEKEY')
  259. def default_traverse(self, socket):
  260. if (socket == self.outputs["Deformer"]):
  261. return self.inputs["Deformer"]
  262. if (socket == self.inputs["Deformer"]):
  263. return self.outputs["Deformer"]
  264. return None
  265. class DeformerArmatureNode(Node, DeformerNode):
  266. '''A node representing an Armature Deformer'''
  267. bl_idname = 'DeformerArmature'
  268. bl_label = "Armature Deform"
  269. bl_icon = 'MOD_ARMATURE'
  270. initialized : bpy.props.BoolProperty(default = False)
  271. def init(self, context):
  272. # self.inputs.new ("RelationshipSocket", "Input Relationship")
  273. self.inputs.new('xFormSocket', "Armature Object")
  274. self.inputs.new('StringSocket', "Blend Vertex Group")
  275. # self.inputs.new('StringSocket', "Preserve Volume Vertex Group") #TODO figure out the right UX for automatic dual-quat blending
  276. self.inputs.new('BooleanSocket', "Invert Vertex Group")
  277. self.inputs.new('BooleanSocket', "Preserve Volume")
  278. # TODO: make the above controlled by a vertex group instead.
  279. self.inputs.new('BooleanSocket', "Use Multi Modifier")# might just set this auto
  280. self.inputs.new('BooleanSocket', "Use Envelopes")
  281. self.inputs.new('BooleanSocket', "Use Vertex Groups")
  282. self.inputs.new("DeformerSocket", "Deformer")
  283. s = self.inputs.new("xFormSocket", "Copy Skin Weights From")
  284. s.hide = True
  285. self.inputs.new("EnumSkinning", "Skinning Method")
  286. self.outputs.new('DeformerSocket', "Deformer")
  287. self.initialized = True
  288. def display_update(self, parsed_tree, context):
  289. self.inputs["Copy Skin Weights From"].hide = True
  290. node_tree = context.space_data.path[0].node_tree
  291. nc = parsed_tree.get(get_signature_from_edited_tree(self, context))
  292. if nc:
  293. if nc.evaluate_input("Skinning Method") == "COPY_FROM_OBJECT":
  294. self.inputs["Copy Skin Weights From"].hide = False
  295. from .utilities import get_socket_maps, relink_socket_map
  296. # TODO this should probably not be in this file but intstead in Utilities or something
  297. def simple_do_relink(node, map, in_out='INPUT'):
  298. from bpy.types import NodeSocket
  299. for key, val in map.items():
  300. s = node.inputs.get(key) if in_out == "INPUT" else node.outputs.get(key)
  301. if s is None:
  302. if in_out == "INPUT":
  303. if node.num_targets > 0:
  304. s = node.inputs["Target."+str(node.num_targets-1).zfill(3)]
  305. else:
  306. continue
  307. if isinstance(val, list):
  308. for sub_val in val:
  309. if isinstance(sub_val, NodeSocket):
  310. if in_out =='INPUT':
  311. node.id_data.links.new(input=sub_val, output=s)
  312. else:
  313. node.id_data.links.new(input=s, output=sub_val)
  314. else:
  315. try:
  316. s.default_value = val
  317. except (AttributeError, ValueError, TypeError): # must be readonly or maybe it doesn't have a d.v.. TypeError if the d.v. is None at this point
  318. pass
  319. # Dynamic
  320. # - each Morph Target gets a MT input
  321. # - each Morph Target gets an influence input
  322. # this node creates a GN deformer that ADDS the position deltas (from the base position)
  323. # Value has to scale the delta
  324. class DeformerMorphTargetDeform(Node, DeformerNode):
  325. '''A node representing a Morph Target Deformer'''
  326. bl_idname = 'DeformerMorphTargetDeform'
  327. bl_label = "Morph Deform"
  328. bl_icon = 'MOD_ARMATURE'
  329. initialized : bpy.props.BoolProperty(default = False)
  330. num_targets : bpy.props.IntProperty(default = 0)
  331. def init(self, context):
  332. self.id_data.do_live_update = False
  333. self.inputs.new('DeformerSocket', 'Previous Deformer', )
  334. self.inputs.new('WildcardSocket', '', identifier='__extend__')
  335. self.outputs.new('DeformerSocket', "Deformer")
  336. self.update()
  337. def update(self):
  338. if self.id_data.is_executing:
  339. return # so that we don't update it while saving/loading the tree
  340. self.initialized = False
  341. input_map = get_socket_maps(self)[0]
  342. # checc to see if targets have been removed... then modify the input map if necessary
  343. targets_deleted = 0 # this should usually be either 0 or 1
  344. for i in range(self.num_targets):
  345. name = "Target."+str(i).zfill(3); inf_name = "Value."+str(i).zfill(3)
  346. if self.inputs[name].is_linked == False:
  347. del input_map[name]; del input_map[inf_name]
  348. targets_deleted+=1
  349. elif targets_deleted: # move it back
  350. new_name = "Target."+str(i-targets_deleted).zfill(3); new_inf_name = "Value."+str(i-targets_deleted).zfill(3)
  351. input_map[new_name] = input_map[name]; input_map[new_inf_name] = input_map[inf_name]
  352. del input_map[name]; del input_map[inf_name]
  353. self.num_targets-=targets_deleted
  354. if self.inputs[-1].is_linked and self.inputs[-1].bl_idname == 'WildcardSocket':
  355. self.num_targets+=1
  356. self.inputs.clear()
  357. self.inputs.new('DeformerSocket', 'Previous Deformer', )
  358. # have to do this manually to avoid making things harder elsewhere
  359. # input_map
  360. for i in range(self.num_targets):
  361. self.inputs.new("MorphTargetSocket", "Target."+str(i).zfill(3))
  362. self.inputs.new("FloatSocket", "Value."+str(i).zfill(3))
  363. # if self.num_targets > 0:
  364. simple_do_relink(self, input_map, in_out='INPUT')
  365. if len(self.inputs)<1 or self.inputs[-1].bl_idname not in ["WildcardSocket"]:
  366. self.inputs.new('WildcardSocket', '', identifier='__extend__')
  367. self.initialized = True
  368. # TODO: there is no reason for this to be a separate node!
  369. class DeformerMorphTarget(Node, DeformerNode):
  370. '''A node representing a single Morph Target'''
  371. bl_idname = 'DeformerMorphTarget'
  372. bl_label = "Morph Target"
  373. bl_icon = 'SHAPEKEY_DATA'
  374. initialized : bpy.props.BoolProperty(default = False)
  375. num_targets : bpy.props.IntProperty(default = 0)
  376. def init(self, context):
  377. self.inputs.new('xFormSocket', "Relative to")
  378. self.inputs.new('xFormSocket', "Object")
  379. self.inputs.new('StringSocket', "Vertex Group")
  380. self.outputs.new('MorphTargetSocket', "Morph Target")
  381. self.initialized = True