| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533 |
- import bpy
- from bpy.types import NodeSocket, NodeSocketStandard
- # Classes which do not have default_value
- # needed to detect when there is an error updating dynamic nodes
- no_default_value= [
- 'MantisSocket',
- 'RelationshipSocket',
- 'DeformerSocket',
- 'xFormSocket',
- 'GeometrySocket',
- 'GenericRotationSocket',
- 'FCurveSocket',
- 'DriverSocket',
- 'DriverVariableSocket',
- 'xFormParameterSocket',
- 'MorphTargetSocket',
- 'KeyframeSocket',
- 'WildcardSocket',
- ]
- # the sockets that do not have this field do not transfer data.
- # instead, it is the link itself which is meaningful.
- class MantisSocket(NodeSocket):
- is_valid_interface_type=False
-
- from .utilities import (prRed, prGreen, prPurple, prWhite,
- prOrange,
- wrapRed, wrapGreen, wrapPurple, wrapWhite,
- wrapOrange,)
- transform_spaces_bone_to = (('WORLD', "World", "World Space"),
- ('LOCAL', "Local", "Local Space"),
- ('POSE', "Pose", "Pose Space"),
- ('CUSTOM', "Custom", "Custom Space"),
- ('LOCAL_WITH_PARENT', "Local (With Parent)", "Local Space"),
- ('LOCAL_OWNER_ORIENT', "Local (Owner Orientation)", "Local Space"),)
- transform_spaces_bone_from = (('WORLD', "World", "World Space"),
- ('LOCAL', "Local", "Local Space"),
- ('POSE', "Pose", "Pose Space"),
- ('CUSTOM', "Custom", "Custom Space"),
- ('LOCAL_WITH_PARENT', "Local (With Parent)", "Local Space"),)
-
-
- transform_spaces_bone_object = (('WORLD', "World", "World Space"),
- ('LOCAL', "Local", "Local Space"),
- ('POSE', "Pose", "Pose Space"),
- ('CUSTOM', "Custom", "Custom Space"),)
- transform_spaces_object = (('WORLD', "World", "World Space"),
- ('LOCAL', "Local", "Local Space"),
- ('CUSTOM', "Custom", "Custom Space"),)
- enumRotationOrder =(('AUTO', 'Auto', 'Auto'),
- ('XYZ', "XYZ", "XYZ"),
- ('XZY', "XZY", "XZY"),
- ('ZXY', "ZXY", "ZXY"),
- ('ZYX', "ZYX", "ZYX"),
- ('YXZ', "YXZ", "YXZ"),
- ('YZX', "YZX", "YZX"),
- ('QUATERNION', "Quaternion", "Quaternion"),
- ('AXIS_ANGLE', "Axis Angle", "Axis Angle"),)
- # node socket colors:
- cFloat = (0.631373, 0.631373, 0.631373, 1.000000)
- cColor = (0.780392, 0.780392, 0.160784, 1.000000)
- cVector = (0.388235, 0.388235, 0.780392, 1.000000)
- cShader = (0.388235, 0.780392, 0.388235, 1.000000)
- cInt = (0.058824, 0.521569, 0.149020, 1.000000)
- cString = (0.388235, 0.388235, 0.388235, 1.000000)
- # cBool = (0.698039, 0.650980, 0.188235, 1.000000)
- cParameter = (0.48, 0.24, 0.24, 1.0)
- cDriver = (0.88, 0.11, 0.88, 1.0)
- cDriverVariable = (0.66, 0.33, 0.04, 1.0)
- cFCurve = (0.77, 0.77, 0.11, 1.0)
- cKeyframe = (0.06, 0.22, 0.88, 1.0)
- cEnable = (0.92, 0.92, 0.92, 1.0)
- cBoneCollection = (0.82, 0.82, 0.82, 1.0)
- cDeformer = (0.05, 0.08, 0.45, 1.0)
- cShapeKey = (0.95, 0.32, 0.05, 1.0)
- # custom colors:
- cIK = (0.596078, 0.596078, 0.364706, 1.000000) #because it's yellow in Blender
- cRelationship = (0.352941, 0.584314, 0.431373, 1.000000) #constraint color
- cMatrix = (0.0, 1.0, 0.75, 1)
- cxForm = (0.843137, 0.592157, 0.388235, 1.000000) #could even fetch the theme colors...
- cTransformSpace = (1.0, 0.4, 0.216, 1.0)
- cBool = (0.1, 0.1, 0.1, 1.0)
- cBool3 = (0.35, 0.25, 0.18, 1.0)
- cRotationOrder = (0.0, 0.8, 0.0, 1.0)
- cQuaternion = (0.85, 0.25, 0.18, 1.0)
- #
- cGeometry = (0.000000, 0.672443, 0.366253, 1.000000)
- # think about making colors that are representative of the data's purpose:
- # location
- # rotation
- # scale
- # OR make all of it a reference to the type of data within?
- # Hybrid approach: Make same-data, similar purpose have similar colors.
- from typing import List
- def TellClasses() -> List[MantisSocket]:
- return [ #MantisSocket,
- #DefaultSocket,
- #InputSocket,
- MatrixSocket,
- xFormSocket,
- RelationshipSocket,
- DeformerSocket,
- GeometrySocket,
- GenericRotationSocket,
- EnableSocket,
- HideSocket,
- # InverseKinematicsSocket,
- DriverSocket,
- DriverVariableSocket,
- FCurveSocket,
- # LayerMaskSocket,
- # LayerMaskInputSocket,
- BoneCollectionSocket,
- EnumArrayGetOptions,
-
- xFormParameterSocket,
- ParameterBoolSocket,
- ParameterIntSocket,
- ParameterFloatSocket,
- ParameterVectorSocket,
- ParameterStringSocket,
-
- TransformSpaceSocket,
- BooleanSocket,
- BooleanThreeTupleSocket,
- RotationOrderSocket,
- QuaternionSocket,
- QuaternionSocketAA,
- UnsignedIntSocket,
- IntSocket,
- StringSocket,
- EnumMetaRigSocket,
- EnumMetaBoneSocket,
- EnumCurveSocket,
- BoolUpdateParentNode,
- # LabelSocket,
- IKChainLengthSocket,
- EnumInheritScale,
- EnumRotationMix,
- EnumRotationMixCopyTransforms,
- EnumMaintainVolumeStretchTo,
- EnumRotationStretchTo,
- EnumTrackAxis,
- EnumUpAxis,
- EnumFollowPathForwardAxis,
- EnumFloorAxis,
- EnumLockAxis,
- EnumLimitMode,
- EnumYScaleMode,
- EnumXZScaleMode,
- EnumTransformationMap,
- EnumTransformationRotationMode,
- EnumTransformationRotationOrder,
- EnumTransformationTranslationMixMode,
- EnumTransformationRotationMixMode,
- EnumTransformationScaleMixMode,
- EnumTransformationAxes,
- EnumBBoneHandleType,
- # Deformers
- EnumSkinning,
- MorphTargetSocket,
- #
- FloatSocket,
- FloatPositiveSocket,
- FloatFactorSocket,
- FloatAngleSocket,
- VectorSocket,
- VectorEulerSocket,
- VectorTranslationSocket,
- VectorScaleSocket,
- # Drivers
- EnumDriverVariableType,
- EnumDriverVariableEvaluationSpace,
- EnumDriverVariableTransformChannel,
- EnumDriverRotationMode,
- EnumDriverType,
- KeyframeSocket,
- EnumKeyframeInterpolationTypeSocket,
- EnumKeyframeBezierHandleTypeSocket,
- EnumLatticeInterpolationTypeSocket,
- eFCrvExtrapolationMode,
-
- # Math
- MathFloatOperation,
- MathVectorOperation,
- MatrixTransformOperation,
- #conditions
- EnumCompareOperation,
- # Schema
- WildcardSocket,
- # xFormArraySocket,
- # RelationshipArraySocket,
- # BooleanArraySocket,
- # IntArraySocket,
- # FloatArraySocket,
- # BooleanThreeTupleArraySocket,
- # VectorArraySocket,
- # QuaternionArraySocket,
- # MatrixArraySocket,
- # StringArraySocket,
- ]
- def Tell_bl_idnames(): # reroute nodes
- return [cls.bl_idname for cls in TellClasses()]#+["NodeSocketColor"]
- def tell_valid_bl_idnames():
- valid_classes = filter(lambda cls : cls.is_valid_interface_type, [cls for cls in TellClasses()])
- return (cls.bl_idname for cls in valid_classes)
- # Was setting color like this:
- # color : bpy.props.FloatVectorProperty(size = 4, default = cFCurve,)
- # but this didn't work when Blender automatically generated interface classes?
- # so changed it to color = cVariable
- # but for color-changing sockets, if I make them, this won' work? Maybe?
- #
- # I actually think I was wrong about all of that lol
- # TODO change it back, dingus
- ########################################################################
- # Update Callbacks
- ########################################################################
- def socket_update(mantis_node, ui_socket, socket_name=None):
- node_updated = mantis_node.ui_modify_socket(ui_socket, socket_name)
- if not node_updated: # so that we can tag its dependencies
- mantis_node.reset_execution_recursive()
- return node_updated
- def default_update(ui_socket, context, do_execute=True):
- context = bpy.context
- if not context.space_data:
- return
- if not hasattr(context.space_data, "path"):
- return
- try:
- node_tree = context.space_data.path[0].node_tree
- except IndexError: # not in the UI, for example, in a script instead.
- return
- if node_tree.is_executing or node_tree.is_exporting or not node_tree.do_live_update:
- return
- # if it is a Schema Node, it will fail the checks below -- but we need it to update the tree.
- from .base_definitions import SchemaUINode
- if isinstance(ui_socket.node, SchemaUINode):
- node_tree.update_tree(context, force = True)
- prPurple(f"Executing tree after socket change: {ui_socket.node.name}:{ui_socket.name}")
- node_tree.execute_tree(context)
- return
- if hasattr(ui_socket.node, "initialized"):
- if not ui_socket.node.initialized: return
- elif hasattr(ui_socket.node, 'is_updating'):
- if ui_socket.node.is_updating: return
- else: return
- # if the socket has survived THAT ordeal, then the context is OK.
- # first, we try to update the Mantis tree in-situ.
- # Some nodes can update their b-objects, others will have to force-update the tree
- # because we just modified the data without modifying the topology of the graph.
- # finally, try and execute it if mantis couldn't update the b_objects itself.
- from .base_definitions import array_output_types
- mantis_updated=True
- if (ui_socket.node.bl_idname in ["MantisNodeGroup", "MantisSchemaGroup"]):
- mantis_updated=False # this kind of socket can't be updated here (yet)
- node_tree.update_tree(context, force=True)
- elif ui_socket.node.bl_idname in array_output_types:
- mantis_updated=False
- node_tree.update_tree(context, force=True)
- elif hasattr(ui_socket, 'default_value'):
- # we may not have to regenerate the tree; try and update the socket
- from .utilities import tree_from_nc
- for mantis_node in node_tree.parsed_tree.values():
- # check to see if the mantis node is in the same ui-tree as this ui_socket
- if mantis_node.ui_signature is None: continue # autogenerated nodes
- if mantis_node.ui_signature[-1] == ui_socket.node.name and \
- tree_from_nc(mantis_node.ui_signature, node_tree) == ui_socket.node.id_data:
- node_updated = True
- from .misc_nodes import SimpleInputNode
- if isinstance(mantis_node, SimpleInputNode):
- node_updated = socket_update(mantis_node, ui_socket)
- for l in mantis_node.outputs[ui_socket.name].links:
- node_updated = node_updated and socket_update(l.to_node, ui_socket, l.to_socket)
- else:
- node_updated = socket_update(mantis_node, ui_socket)
- # execute the tree if even one node didn't update
- mantis_updated = node_updated and mantis_updated
- # we want to force it if we have made an unhandled change inside of a schema.
- node_tree.update_tree(context, force = (mantis_updated == False))
- node_tree.display_update(context)
- if mantis_updated==False:
- try:
- prPurple(f"Executing tree after socket change: {ui_socket.node.name}:{ui_socket.name}")
- node_tree.execute_tree(context)
- except Exception as e:
- prRed("Automatic Tree Execution failed because of %s" % e)
- def update_socket(self, context,):
- default_update(self,context)
- def driver_variable_socket_update(self, context):
- default_update(self,context)
-
- def driver_socket_update(self, context):
- default_update(self,context)
-
- def update_mute_socket(self, context):
- self.node.mute = not self.default_value
- default_update(self,context)
-
- def update_hide_socket(self, context):
- self.node.mute = self.default_value
- default_update(self,context)
-
- def ik_chain_length_update_socket(self, context):
- default_update(self,context)
- # self.node.update_chain_length(context)
- def update_parent_node(self, context):
- default_update(self,context)
- if hasattr(self.node, "display_update"):
- self.node.display_update(context)
- def update_metarig_armature(self, context,):
- if self.search_prop:
- self.node.armature = self.search_prop.name
- self.node.inputs["Meta-Bone"].search_prop = self.search_prop
- default_update(self,context)
- def update_metarig_posebone(self, context,):
- self.node.pose_bone = self.default_value
- default_update(self,context)
- ########################################################################
- # Sockets
- ########################################################################
- def ChooseDraw(self, context, layout, node, text, icon = "NONE", use_enum=True, nice_bool=True, icon_only=False):
- # return
- # TEXT ONLY
- if self.node.bl_idname in ["NodeGroupInput", "NodeGroupOutput"]:
- layout.label(text=text)
- elif hasattr(self, "display_text") and self.display_text and self.is_linked:
- layout.label(text=self.display_text)
- else:
- # ENUM VALUES (this is a HACK, fix it later)
- if ('Enum' in self.bl_idname) and (use_enum):
- if not (self.is_output or self.is_linked):
- layout.prop_tabs_enum(self, "default_value",)
- else:
- layout.label(text=text)
- # for OUTPUT sockets that take INPUT (confusing name!)
- elif ((hasattr(self, "default_value")) and hasattr(self, "input") and getattr(self, "input")):
- # for simple input nodes
- layout.prop(self, "default_value", text=text, toggle=nice_bool, slider=True)
- # for INPUTS that are NOT CONNECTED
- elif (hasattr(self, "default_value")) and not (self.is_output or self.is_linked):
- # DO: expose these values as parameters for this function
- # and set them for each socket.
- if icon == 'NONE': icon_only = False
- elif icon_only == True : text = "" # "real" icon-only looks bad for strings, need to check other props types.
- layout.prop(self, "default_value", text=text, toggle=nice_bool, slider=True, icon=icon,)
- # CONNECTED sockets and outputs without input fields
- else:
- layout.label(text=text)
- class RelationshipSocket(MantisSocket):
- # Description string
- '''Relationship'''
- # Optional identifier string. If not explicitly defined, the python class name is used.
- bl_idname = 'RelationshipSocket'
- bl_label = "Relationship"
- color_simple = cRelationship
- color : bpy.props.FloatVectorProperty(default=cRelationship, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class DeformerSocket(MantisSocket):
- # Description string
- '''Deformer'''
- # Optional identifier string. If not explicitly defined, the python class name is used.
- bl_idname = 'DeformerSocket'
- bl_label = "Deformer"
- is_valid_interface_type=True
- color_simple = cDeformer
- color : bpy.props.FloatVectorProperty(default=cDeformer, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class MatrixSocket(MantisSocket):
- '''Matrix Input Output'''
- bl_idname = 'MatrixSocket'
- bl_label = "Matrix"
- default_value : bpy.props.FloatVectorProperty(
- default = (1.0, 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0, 0.0,
- 0.0, 0.0, 1.0, 0.0,
- 0.0, 0.0, 0.0, 1.0),
- size=16,
- update = update_socket,)
- color_simple = cMatrix
- color : bpy.props.FloatVectorProperty(default=cMatrix, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- # Optional function for drawing the socket input value
- def draw(self, context, layout, node, text):
- layout.label(text=text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Utility functions to make handling the 16 numbers more bearable
- def SetValue(self, mat):
- self.default_value = ( mat[0][0], mat[0][1], mat[0][2], mat[0][3],
- mat[1][0], mat[1][1], mat[1][2], mat[1][3],
- mat[2][0], mat[2][1], mat[2][2], mat[2][3],
- mat[3][0], mat[3][1], mat[3][2], mat[3][3], )
- def TellValue(self):
- from mathutils import Matrix
- v = self.default_value
- return Matrix( ( ( v[ 0], v[ 1], v[ 2], v[ 3],),
- ( v[ 4], v[ 5], v[ 6], v[ 7],),
- ( v[ 8], v[ 9], v[10], v[11],),
- ( v[12], v[13], v[14], v[15]), ) )
- #NOTE, we're not using the last row
- # so we're gonna use it to store data
- # unused, unused, unused, bone_length
- # but we're not going to make it
- # available except by accessor functions
- # would like to make this stuff easier to deal with tho
- def TellBoneLength(self):
- return self.default_value[15]
- class xFormSocket(MantisSocket):
- '''xFrom Input Output'''
- bl_idname = 'xFormSocket'
- bl_label = "xForm"
- color_simple = cxForm
- color : bpy.props.FloatVectorProperty(default=cxForm, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class GeometrySocket(MantisSocket):
- '''Geometry Input Output'''
- bl_idname = 'GeometrySocket'
- bl_label = "Geometry"
- color_simple = cGeometry
- color : bpy.props.FloatVectorProperty(default=cGeometry, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class GenericRotationSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'GenericRotationSocket'
- bl_label = "Rotation"
- color = (0.0,0.0,0.0,0.0)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- ###############################
- class EnableSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnableSocket'
- bl_label = "Enable"
- default_value: bpy.props.BoolProperty(default=True, update = update_mute_socket,)
- color_simple = cEnable
- color : bpy.props.FloatVectorProperty(default=cEnable, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, nice_bool=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class HideSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'HideSocket'
- bl_label = "Hide"
- default_value: bpy.props.BoolProperty(default=False, update = update_hide_socket,)
- color_simple = cEnable
- color : bpy.props.FloatVectorProperty(default=cEnable, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, nice_bool=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class FCurveSocket(MantisSocket):
- '''fCurve'''
- bl_idname = 'FCurveSocket'
- bl_label = "fCurve"
- color_simple = cFCurve
- color : bpy.props.FloatVectorProperty(default=cFCurve, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- is_valid_interface_type=True
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class DriverSocket(MantisSocket):
- '''Driver'''
- bl_idname = 'DriverSocket'
- bl_label = "Driver"
- color_simple = cDriver
- color : bpy.props.FloatVectorProperty(default=cDriver, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- is_valid_interface_type=True
-
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class DriverVariableSocket(MantisSocket):
- '''Driver'''
- bl_idname = 'DriverVariableSocket'
- bl_label = "Driver Variable"
- color_simple = cDriverVariable
- color : bpy.props.FloatVectorProperty(default=cDriverVariable, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- is_valid_interface_type=True
-
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # transform_spaces
- # transform_spaces_bone_object
- # transform_spaces_object
- # def get_transform_space_enum(self, context):
- # pass
- def get_transform_space(self, context):
- if "Owner" in self.name:
- return transform_spaces_bone_from
- else:
- return transform_spaces_bone_to
- class TransformSpaceSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'TransformSpaceSocket'
- bl_label = "Transform Space"
- default_value: bpy.props.EnumProperty(
- name="Space Transform",
- description="Space Transform",
- items=get_transform_space,
- default=0,
- update = update_socket,)
- color_simple = cTransformSpace
- color : bpy.props.FloatVectorProperty(default=cTransformSpace, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class BooleanSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'BooleanSocket'
- bl_label = "Boolean"
- default_value: bpy.props.BoolProperty(update = update_socket,)
- color_simple = cBool
- color : bpy.props.FloatVectorProperty(default=cBool, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class BooleanThreeTupleSocket(MantisSocket):
- # Description string
- '''Custom node socket type'''
- # Optional identifier string. If not explicitly defined, the python class name is used.
- bl_idname = 'BooleanThreeTupleSocket'
- bl_label = "Boolean Vector"
- default_value: bpy.props.BoolVectorProperty(subtype = "XYZ",update = update_socket,)
- color_simple = cBool3
- color : bpy.props.FloatVectorProperty(default=cBool3, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- def TellValue(self):
- return (self.default_value[0], self.default_value[1], self.default_value[2])
- class RotationOrderSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'RotationOrderSocket'
- bl_label = "Rotation Order"
- default_value: bpy.props.EnumProperty(
- name="Rotation Order",
- description="Rotation Order",
- items=enumRotationOrder,
- default='AUTO',
- update = update_socket,)
- color_simple = cRotationOrder
- color : bpy.props.FloatVectorProperty(default=cRotationOrder, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class QuaternionSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'QuaternionSocket'
- bl_label = "Quaternion"
- default_value: bpy.props.FloatVectorProperty(
- subtype = "QUATERNION",
- size = 4,
- default = (1.0, 0.0, 0.0, 0.0,),
- update = update_socket,)
- color_simple = cQuaternion
- color : bpy.props.FloatVectorProperty(default=cQuaternion, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class QuaternionSocketAA(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'QuaternionSocketAA'
- bl_label = "Axis Angle Quaternion"
- color_simple = cQuaternion
- color : bpy.props.FloatVectorProperty(default=cQuaternion, size=4)
- input : bpy.props.BoolProperty(default =False,)
- default_value: bpy.props.FloatVectorProperty(
- subtype = "AXISANGLE",
- size = 4,
- default = (1.0, 0.0, 0.0, 0.0,),
- update = update_socket,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class IntSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'IntSocket'
- bl_label = "Integer"
- default_value: bpy.props.IntProperty(default=0, update = update_socket, soft_min=-256, soft_max=256)
- color_simple = cInt
- color : bpy.props.FloatVectorProperty(default=cInt, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class UnsignedIntSocket(MantisSocket):
- '''Unsigned Integer Socket'''
- bl_idname = 'UnsignedIntSocket'
- bl_label = "Unsigned Integer"
- default_value: bpy.props.IntProperty(default=0, update = update_socket, min=0, soft_max=256, max=2**13)
- color_simple = cInt
- color : bpy.props.FloatVectorProperty(default=cInt, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class StringSocket(bpy.types.NodeSocketString, MantisSocket):
- """Float Input socket"""
- bl_idname = 'StringSocket'
- bl_label = "String"
- default_value : bpy.props.StringProperty(default = "", update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- icon : bpy.props.StringProperty(default = "NONE",)
- input : bpy.props.BoolProperty(default =False,)
- display_text : bpy.props.StringProperty(default="")
- is_valid_interface_type=True
- # def init(self):
- # if self.node.bl_idname == 'UtilityBoneProperties':
- # self.display_shape='CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, icon=self.icon, icon_only=True,)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class BoneCollectionSocket(MantisSocket):
- """Bone Collection socket"""
- bl_idname = 'BoneCollectionSocket'
- bl_label = "Bone Collection"
- default_value: bpy.props.StringProperty(default = "Collection", update = update_socket,)
- input : bpy.props.BoolProperty(default =False,)
- color_simple = cBoneCollection
- color : bpy.props.FloatVectorProperty(default=cBoneCollection, size=4)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eArrayGetOptions =(
- ('CAP', "Cap", "Fail if the index is out of bounds."),
- ('WRAP', "Wrap", "Wrap around to the beginning of the array once the idex goes out of bounds."),
- ('HOLD', "Hold", "Reuse the last element of the array if the index is out of bounds."),)
- class EnumArrayGetOptions(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumArrayGetOptions'
- bl_label = "OoB Behaviour"
- default_value: bpy.props.EnumProperty(
- items=eArrayGetOptions,
- name="OoB Behaviour",
- description="Out-of-bounds behaviour.",
- default = 'HOLD',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- #####################################################################################
- # Parameters
- #####################################################################################
- class xFormParameterSocket(MantisSocket):
- '''xFrom Parameter'''
- bl_idname = 'xFormParameterSocket'
- bl_label = "sForm Parameter"
- color_simple = cxForm
- color : bpy.props.FloatVectorProperty(default=cxForm, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
-
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # what is this one again?
- class ParameterBoolSocket(MantisSocket):
- """Boolean Parameter Socket"""
- bl_idname = 'ParameterBoolSocket'
- bl_label = "Boolean Parameter"
- color_simple = cBool
-
- color : bpy.props.FloatVectorProperty(default=cBool, size=4)
- input : bpy.props.BoolProperty(default =False,)
- #custom properties:
- min:bpy.props.FloatProperty(default = 0)
- max:bpy.props.FloatProperty(default = 1)
- soft_min:bpy.props.FloatProperty(default = 0)
- soft_max:bpy.props.FloatProperty(default = 1)
- description:bpy.props.StringProperty(default = "")
- default_value : bpy.props.BoolProperty(default = False, update = update_socket,)
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- # if True:
- # print (self.is_property_set("default_value"))
- # ui_data = self.id_properties_ui("default_value")
- # ui_data.update(
- # description=self.description,
- # default=0,) # for now
- # ui_data.update(
- # min = self.min,
- # max = self.max,
- # soft_min = self.soft_min,
- # soft_max = self.soft_max,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class ParameterIntSocket(MantisSocket):
- """Integer Parameter socket"""
- bl_idname = 'ParameterIntSocket'
- bl_label = "Integer Parameter"
-
- default_value : bpy.props.IntProperty(default = 0, update = update_socket,)
- color_simple = cInt
- color : bpy.props.FloatVectorProperty(default=cInt, size=4)
- input : bpy.props.BoolProperty(default =False,)
- #custom properties:
- min:bpy.props.FloatProperty(default = 0)
- max:bpy.props.FloatProperty(default = 1)
- soft_min:bpy.props.FloatProperty(default = 0)
- soft_max:bpy.props.FloatProperty(default = 1)
- description:bpy.props.StringProperty(default = "")
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class ParameterFloatSocket(MantisSocket):
- """Float Parameter socket"""
- bl_idname = 'ParameterFloatSocket'
- bl_label = "Float Parameter"
- default_value : bpy.props.FloatProperty(default = 0.0, update = update_socket,)
- color_simple = cFloat
-
- color : bpy.props.FloatVectorProperty(default=cFloat, size=4)
- input : bpy.props.BoolProperty(default =False,)
- #custom properties:
- min:bpy.props.FloatProperty(default = 0)
- max:bpy.props.FloatProperty(default = 1)
- soft_min:bpy.props.FloatProperty(default = 0)
- soft_max:bpy.props.FloatProperty(default = 1)
- description:bpy.props.StringProperty(default = "")
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class ParameterVectorSocket(MantisSocket):
- """Vector Parameter socket"""
- bl_idname = 'ParameterVectorSocket'
- bl_label = "Vector Parameter"
- default_value : bpy.props.FloatVectorProperty(
- default = (0.0, 0.0, 0.0),
- update = update_socket,)
- color_simple = cVector
-
- color : bpy.props.FloatVectorProperty(default=cVector, size=4)
- input : bpy.props.BoolProperty(default =False,)
- #custom properties:
- description:bpy.props.StringProperty(default = "")
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class ParameterStringSocket(MantisSocket):
- """String Parameter socket"""
- bl_idname = 'ParameterStringSocket'
- bl_label = "String Parameter"
- default_value : bpy.props.StringProperty(default = "", update = update_socket,)
- color_simple = cString
-
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- #custom properties:
- description:bpy.props.StringProperty(default = "")
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- #####################################################################################
- # Additional socket types, for special cases
- #####################################################################################
- from bpy.props import PointerProperty, StringProperty
- def poll_is_armature(self, obj):
- return obj.type == "ARMATURE"
-
- # def poll_is_armature(self, obj):
- # return obj.type == "ARMATURE"
- class EnumMetaRigSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumMetaRigSocket'
- bl_label = "Meta Rig"
-
-
- search_prop:PointerProperty(type=bpy.types.Object, poll=poll_is_armature, update=update_metarig_armature)
-
- def get_default_value(self):
- if self.search_prop:
- return self.search_prop.name
- return ""
-
- def set_default_value(self, value):
- if ob:= bpy.data.objects.get(value):
- if ob.type == 'ARMATURE':
- self.search_prop=ob
-
- default_value : StringProperty(name = "", get=get_default_value, set=set_default_value)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- def draw(self, context, layout, node, text):
- if self.is_output:
- layout.label(text=self.name)
- elif not (self.is_linked):
- layout.prop_search(data=self, property="search_prop", search_data=bpy.data, search_property="objects", text="", icon="OUTLINER_OB_ARMATURE", results_are_suggestions=True)
- elif hasattr(self.node, "armature"):
- layout.label(text=self.node.armature)
- # TODO: we should actually use the parsed tree to query this info directly, since this socket may belong to a node group in/out
- # which doesn't have this parameter. whatever.
- else:
- layout.label(text=self.name)
-
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- def poll_is_curve(self, obj):
- return obj.type == "CURVE"
- class EnumCurveSocket(MantisSocket):
- '''Choose a curve'''
- bl_idname = 'EnumCurveSocket'
- bl_label = "Curve"
- is_valid_interface_type=True
-
- search_prop:PointerProperty(type=bpy.types.Object, poll=poll_is_curve, update=update_socket)
-
- def get_default_value(self):
- if self.search_prop:
- return self.search_prop.name
- return ""
-
- def set_default_value(self, value):
- if ob:= bpy.data.objects.get(value):
- if ob.type == 'CURVE':
- self.search_prop=ob
-
- default_value : StringProperty(name = "", get=get_default_value, set=set_default_value)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- def draw(self, context, layout, node, text):
- if not (self.is_linked) and not self.is_output:
- layout.prop_search(data=self, property="search_prop", search_data=bpy.data, search_property="objects", text="", icon="CURVE_DATA", results_are_suggestions=True)
- else:
- try:
- layout.label(text=self.search_prop.name)
- except AttributeError: # TODO make this show the graph's result
- layout.label(text=self.name)
-
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- def SearchPBDraw(self, context, layout, node, text, icon = "NONE", use_enum=True, nice_bool=True, icon_only=False):
- layout.prop_search(data=self, property="default_value", search_data=self.search_prop.data, search_property="bones", text=text, icon=icon, results_are_suggestions=True)
-
- class EnumMetaBoneSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumMetaBoneSocket'
- bl_label = "Meta Bone"
-
-
- search_prop:PointerProperty(type=bpy.types.Object)
- bone:StringProperty()
-
- def populate_bones_list(self, context):
- # just gonna hardcode the value
- if (meta_rig := self.search_prop):
- retList = []
- armatures = []
- i = -1
- retList.append( ('NONE', '', '', 'NONE', i:=i+1 ) )
- for b in meta_rig.data.bones:
- retList.append( (b.name, b.name, "Bone to copy matrix from", "BONE_DATA", i:=i+1 ) )
- return(retList)
- return None
- # default_value : bpy.props.EnumProperty(
- # items = populate_bones_list,
- # name = "Meta Rig")
-
- # def get_default_value(self):
- # return self.search_prop.name
-
- default_value : StringProperty(name = "", update=update_metarig_posebone)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- def draw(self, context, layout, node, text):
- if not (self.is_linked):
- if self.search_prop is None:
- layout.prop(self, "default_value", text="", icon="BONE_DATA",)
- else:
- SearchPBDraw(self, context, layout, node, text="")
- else:
- layout.label(text=self.node.pose_bone)
-
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
-
-
-
-
- class BoolUpdateParentNode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'BoolUpdateParentNode'
- bl_label = "Boolean"
- default_value: bpy.props.BoolProperty(default=False, update = update_parent_node)
- color_simple = cBool
- color : bpy.props.FloatVectorProperty(default=cBool, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class IKChainLengthSocket(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'IKChainLengthSocket'
- bl_label = "IK Chain Length"
- default_value: bpy.props.IntProperty(default=0, update = ik_chain_length_update_socket, min = 0, max = 255)
- color_simple = cInt
-
- color : bpy.props.FloatVectorProperty(default=cInt, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Inherit
- eInheritScale = (
- ('FULL', "Full", "Fully inherit scale", 1),
- ('AVERAGE', "Average", "todo", 2),
- ('ALIGNED', "Aligned", "todo", 3),
- ('FIX_SHEAR', "Fix Shear", "todo", 4),
- ('NONE', "None", "todo", 5),
- )
- class EnumInheritScale(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumInheritScale'
- bl_label = "Inherit Scale"
- default_value: bpy.props.EnumProperty(
- items=eInheritScale,
- name="Inherit Scale",
- description="Inherit Scale",
- default = 'FULL',
- #options = set(),
- update = update_socket,)
- color_simple = cString
-
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Copy Rotation
- eRotationMix =(
- ('REPLACE', "Replace", "Fully inherit scale", 0),
- ('BEFORE', "Before", "Fully inherit scale", 1),
- ('AFTER', "After", "Fully inherit scale", 2),
- ('ADD', "Add", "Fully inherit scale", 3),
- #todo, but i don't care much
- )
-
- # TODO HACK
- # I am trying to figure out how to do enum_flag as
- # mutually exclusive options
- # but! I don't think it's possible
- # I just like the UI for it :P
-
- class EnumRotationMix(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumRotationMix'
- bl_label = "Rotation Mix"
- default_value: bpy.props.EnumProperty(
- items=eRotationMix,
- name="Rotation Mix",
- description="Rotation Mix",
- default = 'REPLACE',#{'REPLACE'},
- options = set(), # this has to be a set lol
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eRotationMix_copytransforms =(
- ('REPLACE', "Replace (Aligned)", "Fully inherit scale"),
- ('BEFORE', "Before (Aligned)", "Fully inherit scale"),
- ('AFTER', "After (Aligned)", "Fully inherit scale"),
- ('REPLACE_SPLIT', "Replace (Split Channels)", "Fully inherit scale"),
- ('BEFORE_SPLIT', "Before (Split Channels)", "Fully inherit scale"),
- ('AFTER_SPLIT', "After (Split Channels)", "Fully inherit scale"),
- ('REPLACE_FULL', "Replace (Full)", "Fully inherit scale"),
- ('BEFORE_FULL', "Before (Full)", "Fully inherit scale"),
- ('AFTER_FULL', "After (Full)", "Fully inherit scale"),)
- class EnumRotationMixCopyTransforms(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumRotationMixCopyTransforms'
- bl_label = "Rotation Mix"
-
- default_value: bpy.props.EnumProperty(
- items=eRotationMix_copytransforms,
- name="Rotation Mix",
- description="Rotation Mix",
- default = 'REPLACE', #{'REPLACE'},
- #options = {'ENUM_FLAG'}, # this sux
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # STRETCH TO
- eMaintainVolumeStretchTo = (('VOLUME_XZX', "XZ", "XZ", 1),
- ('VOLUME_X', "X", "X", 2),
- ('VOLUME_Z', "Z", "Z", 4),
- ('NO_VOLUME', "None", "None", 8),)
- class EnumMaintainVolumeStretchTo(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumMaintainVolumeStretchToSocket'
- bl_label = "Maintain Volume"
-
- default_value: bpy.props.EnumProperty(
- items=eMaintainVolumeStretchTo,
- name="Maintain Volume",
- description="Maintain Volume",
- default = 'VOLUME_XZX',
- #options = {'ENUM_FLAG'},
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eRotationStretchTo = (('PLANE_X', "XZ", "XZ", 1),
- ('PLANE_Z', "ZX", "ZX", 2),
- ('SWING_Y', "Swing", "Swing", 4),)
- class EnumRotationStretchTo(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumRotationStretchTo'
- bl_label = "Rotation"
-
- default_value: bpy.props.EnumProperty(
- items=eRotationStretchTo,
- name="Rotation",
- description="Rotation",
- default = 'PLANE_X',
- #options = {'ENUM_FLAG'},
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Track-To
- eTrackAxis = (('TRACK_X', "X", "X", 1),
- ('TRACK_Y', "Y", "Y", 2),
- ('TRACK_Z', "Z", "Z", 4),
- ('TRACK_NEGATIVE_X', "-X", "-X", 8),
- ('TRACK_NEGATIVE_Y', "-Y", "-Y", 16),
- ('TRACK_NEGATIVE_Z', "-Z", "-Z", 32,))
- eUpAxis = (('UP_X', "X", "X", 1),
- ('UP_Y', "Y", "Y", 2),
- ('UP_Z', "Z", "Z", 4),)
- # ugly but I can't change it easily without messing up versioning
- class EnumTrackAxis(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTrackAxis'
- bl_label = "Track Axis"
-
- default_value: bpy.props.EnumProperty(
- items=eTrackAxis,
- name="Track Axis",
- description="Track Axis",
- default = 'TRACK_X',
- #options = {'ENUM_FLAG'},
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class EnumUpAxis(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumUpAxis'
- bl_label = "Up Axis"
-
- default_value: bpy.props.EnumProperty(
- items=eUpAxis,
- name="Up Axis",
- description="Up Axis",
- default = 'UP_X',
- #options = {'ENUM_FLAG'},
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Follow Track Forward axis
- eForwardAxis = (('FORWARD_X', "X", "X", 0),
- ('FORWARD_Y', "Y", "Y", 1),
- ('FORWARD_Z', "Z", "Z", 2),
- ('TRACK_NEGATIVE_X', "-X", "-X", 3),
- ('TRACK_NEGATIVE_Y', "-Y", "-Y", 4),
- ('TRACK_NEGATIVE_Z', "-Z", "-Z", 5),)
- class EnumFollowPathForwardAxis(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumFollowPathForwardAxis'
- bl_label = "Forward Axis"
-
- default_value: bpy.props.EnumProperty(
- items=eForwardAxis,
- name="Forward Axis",
- description="Forward Axis",
- default = 'FORWARD_X',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Follow Track Forward axis
- eFloorAxis = (('FLOOR_X', "X", "X", 0),
- ('FLOOR_Y', "Y", "Y", 1),
- ('FLOOR_Z', "Z", "Z", 2),
- ('FLOOR_NEGATIVE_X', "-X", "-X", 3),
- ('FLOOR_NEGATIVE_Y', "-Y", "-Y", 4),
- ('FLOOR_NEGATIVE_Z', "-Z", "-Z", 5),)
- class EnumFloorAxis(MantisSocket):
- '''Floor Constraint Axis'''
- bl_idname = 'EnumFloorAxis'
- bl_label = "Floor Axis"
-
- default_value: bpy.props.EnumProperty(
- items=eFloorAxis,
- name="Floor Axis",
- description="Floor Axis",
- default = 'FLOOR_X',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Locked Track
- eLockAxis = (('LOCK_X', "X", "X", 1),
- ('LOCK_Y', "Y", "Y", 2),
- ('LOCK_Z', "Z", "Z", 4),)
- class EnumLockAxis(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumLockAxis'
- bl_label = "Lock Axis"
-
- default_value: bpy.props.EnumProperty(
- items=eLockAxis,
- name="Lock Axis",
- description="Lock Axis",
- default = 'LOCK_X',
- #options = {'ENUM_FLAG'},
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Limit Distance:
- eLimitMode = (('LIMITDIST_INSIDE', "Inside", "Inside",),
- ('LIMITDIST_OUTSIDE', "Outside", "Outside",),
- ('LIMITDIST_ONSURFACE', "On Surface", "On Surface",),)
- class EnumLimitMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumLimitMode'
- bl_label = "Clamp Region"
-
- default_value: bpy.props.EnumProperty(
- items=eLimitMode,
- name="Clamp Region",
- description="Clamp Region",
- default = 'LIMITDIST_INSIDE',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Spline IK
- eYScaleMode = (('NONE', "None", "Don’t scale the X and Z axes.",),
- ('FIT_CURVE', "Fit Curve", "Scale the bones to fit the entire length of the curve.",),
- ('BONE_ORIGINAL', "Bone Original", "Use the original scaling of the bones.",),)
- eXZScaleMode = (('NONE', "None", "Don’t scale the X and Z axes.",),
- ('BONE_ORIGINAL', "Bone Original", "Use the original scaling of the bones.",),
- ('INVERSE_PRESERVE', "Inverse Scale", "Scale of the X and Z axes is the inverse of the Y-Scale.",),
- ('VOLUME_PRESERVE', "Volume Preservation", "Scale of the X and Z axes are adjusted to preserve the volume of the bones.",),)
- class EnumYScaleMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumYScaleMode'
- bl_label = "Y Scale Mode"
-
- default_value: bpy.props.EnumProperty(
- items=eYScaleMode,
- name="Y Scale Mode",
- description="Y Scale Mode",
- default = 'FIT_CURVE',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class EnumXZScaleMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumXZScaleMode'
- bl_label = "XZ Scale Mode"
-
- default_value: bpy.props.EnumProperty(
- items=eXZScaleMode,
- name="XZ Scale Mode",
- description="XZ Scale Mode",
- default = 'NONE',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eMapxForm = (('LOCATION', "Location", "Location",),
- ('ROTATION', "Rotation", "Rotation",),
- ('SCALE', "Scale", "Scale",),)
- eRotationMode = (('AUTO', 'Auto', 'Automattically Selected.', 0),
- ('XYZ', "XYZ", "Euler using the XYZ rotation order", 1),
- ('XZY', "XZY", "Euler using the XZY rotation order", 2),
- ('ZXY', "ZXY", "Euler using the ZXY rotation order", 3),
- ('ZYX', "ZYX", "Euler using the ZYX rotation order", 4),
- ('YXZ', "YXZ", "Euler using the YXZ rotation order", 5),
- ('YZX', "YZX", "Euler using the YZX rotation order", 6),
- ('QUATERNION', "Quaternion", "Quaternion", 7),
- ('SWING_TWIST_X', 'Swing and X Twist.', 'Decompose into a swing rotation to aim the X axis, followed by twist around it.', 8),
- ('SWING_TWIST_Y', 'Swing and Y Twist.', 'Decompose into a swing rotation to aim the Y axis, followed by twist around it.', 9),
- ('SWING_TWIST_Z', 'Swing and Z Twist.', 'Decompose into a swing rotation to aim the Z axis, followed by twist around it.', 10),)
- enumTransformationRotationOrder = enumRotationOrder[:6]
- eTranslationMix =(
- ('ADD', "Add", "", 0),
- ('REPLACE', "Replace", "", 1),
- )
-
- eScaleMix =(
- ('MULTIPLY', "Multiply", "", 0),
- ('REPLACE', "Replace", "", 1),
- )
-
- class EnumTransformationMap(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationMap'
- bl_label = "Map To/From"
-
- default_value: bpy.props.EnumProperty(
- items=eMapxForm,
- name="Map To/From",
- description="Map To/From",
- default = 'LOCATION',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class EnumTransformationRotationMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationRotationMode'
- bl_label = "Map To/From"
-
- default_value: bpy.props.EnumProperty(
- items=eRotationMode,
- name="Rotation Mode",
- description="Rotation Mode",
- default = 'AUTO',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class EnumTransformationRotationOrder(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationRotationOrder'
- bl_label = "Map To/From"
-
- default_value: bpy.props.EnumProperty(
- items=enumTransformationRotationOrder,
- name="Rotation Order",
- description="Rotation Order",
- default = 'AUTO',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class EnumTransformationTranslationMixMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationTranslationMixMode'
- bl_label = "Mix Mode"
-
- default_value: bpy.props.EnumProperty(
- items=eTranslationMix,
- name="Mix Translation",
- description="Mix Translation",
- default = 'ADD',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class EnumTransformationRotationMixMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationRotationMixMode'
- bl_label = "Mix Mode"
-
- default_value: bpy.props.EnumProperty(
- items=eRotationMix,
- name="Mix Rotation",
- description="Mix Rotation",
- default = 'ADD',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class EnumTransformationScaleMixMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationScaleMixMode'
- bl_label = "Mix Mode"
-
- default_value: bpy.props.EnumProperty(
- items=eScaleMix,
- name="Mix Scale",
- description="Mix Scale",
- default = 'REPLACE',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eAxes = (
- ('X', "X", "X", 0),
- ('Y', "Y", "Y", 1),
- ('Z', "Z", "Z", 2),
- )
-
- class EnumTransformationAxes(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumTransformationAxes'
- bl_label = "Axes"
-
- default_value: bpy.props.EnumProperty(
- items=eAxes,
- # name="",
- # description="",
- default = 'X',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- #
- eBBoneHandleType = (
- ('AUTO', "Automatic", "", 0),
- ('ABSOLUTE', "Absolute", "", 1),
- ('RELATIVE', "Relative", "", 2),
- ('TANGENT', "Tangent", "", 3),
- )
- class EnumBBoneHandleType(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumBBoneHandleType'
- bl_label = "Axes"
-
- default_value: bpy.props.EnumProperty(
- items=eBBoneHandleType,
- # name="",
- # description="",
- default = 'AUTO',
- update = update_socket,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- eSkinningMethod = (('EXISTING_GROUPS', "Use Existing Groups", "Use the existing vertex groups, or create empty groups if not found.",),
- ('AUTOMATIC_HEAT', "Automatic (Heat)", "Use Blender's heatmap automatic skinning",),
- ('COPY_FROM_OBJECT', "Copy from object", "Copy skin weights from the selected object"),)
- class EnumSkinning(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumSkinning'
- bl_label = "Skinning Method"
- default_value: bpy.props.EnumProperty(
- items=eSkinningMethod,
- name="Skinning Method",
- description="Skinning Method",
- default = 'AUTOMATIC_HEAT',
- update = update_socket,)
- color_simple = cString
-
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class MorphTargetSocket(MantisSocket):
- """Morph Target"""
- bl_idname = 'MorphTargetSocket'
- bl_label = "Morph Target"
-
- color_simple = cShapeKey
- color : bpy.props.FloatVectorProperty(default=cShapeKey, size=4)
- input : bpy.props.BoolProperty(default =False,)
- is_valid_interface_type=True
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eDriverVariableType = (
- ( 'SINGLE_PROP',
- "Property",
- "Property",
- 1),
- ( 'LOC_DIFF',
- "Distance",
- "Distance",
- 2),
- ( 'ROTATION_DIFF',
- "Rotational Difference",
- "Rotational Difference",
- 3),
- # ( 'TRANSFORMS',
- # "Transform Channel",
- # "Transform Channel",
- # 4),
- )
- class EnumDriverVariableType(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumDriverVariableType'
- bl_label = "Variable Type"
-
- default_value: bpy.props.EnumProperty(
- items = eDriverVariableType,
- name = "Variable Type",
- description = "Variable Type",
- default = 'SINGLE_PROP',
- update = driver_variable_socket_update,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eDriverVariableEvaluationSpace = (
- ( 'WORLD_SPACE',
- "World",
- "World",
- 1),
-
- ( 'TRANSFORM_SPACE',
- "Transform",
- "Transform",
- 2),
- ( 'LOCAL_SPACE',
- "Local",
- "Local",
- 3),
- )
- class EnumDriverVariableEvaluationSpace(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumDriverVariableEvaluationSpace'
- bl_label = "Evaluation Space"
-
- default_value: bpy.props.EnumProperty(
- items = eDriverVariableEvaluationSpace,
- name = "Evaluation Space",
- description = "Evaluation Space",
- default = 'WORLD_SPACE',
- update = driver_variable_socket_update,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- eDriverVariableTransformChannel = (
- ("LOC_X", "X Location", "The X-coordinate of an object's location.", 1),
- ("LOC_Y", "Y Location", "The Y-coordinate of an object's location.", 2),
- ("LOC_Z", "Z Location", "The Z-coordinate of an object's location.", 3),
- ("ROT_X", "X Rotation", "Rotation X-axis.", 4),
- ("ROT_Y", "Y Rotation", "Rotation Y-axis.", 5),
- ("ROT_Z", "Z Rotation", "Rotation Z-axis.", 6),
- ("ROT_W", "W Rotation", "Rotation W-axis.", 7),
- ("SCALE_X", "X Scale", "The X-scale of an object's scale.", 8),
- ("SCALE_Y", "Y Scale", "The Y-scale of an object's scale.", 9),
- ("SCALE_Z", "Z Scale", "The Z-scale of an object's scale.", 10),
- ("SCALE_AVG", "Average Scale", "The scale factor of an object's scale.", 11),
- )
- class EnumDriverVariableTransformChannel(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumDriverVariableTransformChannel'
- bl_label = "Transform Channel"
-
- default_value: bpy.props.EnumProperty(
- items = eDriverVariableTransformChannel,
- name = "Transform Channel",
- description = "Transform Channel",
- default = 'LOC_X',
- update = driver_variable_socket_update,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class EnumDriverRotationMode(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumDriverRotationMode'
- bl_label = "Rotaton Mode"
-
- default_value: bpy.props.EnumProperty(
- items = eRotationMode,
- name = "Rotation Mode",
- description = "Rotation Mode",
- default = 'AUTO',
- update = driver_variable_socket_update,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- #
- eDriverType = (('AVERAGE', 'Average', 'Average', 0),
- ('SUM', "Sum", "Sum", 1),
- ('SCRIPTED', "Scripted", "Scripted Expression", 2),
- ('MIN', "Min", "Minimum", 3),
- ('MAX', "Max", "Maximum", 4),)
- class EnumDriverType(MantisSocket):
- '''Custom node socket type'''
- bl_idname = 'EnumDriverType'
- bl_label = "Driver Type"
-
- default_value: bpy.props.EnumProperty(
- items = eDriverType,
- name = "Driver Type",
- description = "Driver Type",
- default = 'AVERAGE',
- update = driver_socket_update,)
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text, use_enum=False)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- # Keyframe
- # Enum for kf handle type
- # enum for interpolation type
- # eventually gonna make it to the fancy stuff
- class FloatSocket(bpy.types.NodeSocketFloat, MantisSocket):
- """Float Input socket"""
- bl_idname = 'FloatSocket'
- bl_label = "Float"
- is_valid_interface_type=True
- default_value : bpy.props.FloatProperty(default = 0.0, update = update_socket,)
- color_simple = cFloat
- color : bpy.props.FloatVectorProperty(default=cFloat, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
-
- class FloatPositiveSocket(bpy.types.NodeSocketFloat, MantisSocket):
- """Float Input socket"""
- bl_idname = 'FloatPositiveSocket'
- bl_label = "Float (Positive)"
- is_valid_interface_type=True
- default_value : bpy.props.FloatProperty(default = 0.0, min=0, update = update_socket,)
- color_simple = cFloat
- color : bpy.props.FloatVectorProperty(default=cFloat, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class FloatFactorSocket(bpy.types.NodeSocketFloatFactor, MantisSocket):
- '''xFrom Input Output'''
- bl_idname = 'FloatFactorSocket'
- bl_label = "Float (Factor)"
- is_valid_interface_type=True
- default_value : bpy.props.FloatProperty(
- default = 0.0,
- min = 0.0,
- max=1.0,
- update = update_socket,
- subtype='FACTOR',)
- color_simple = cFloat
- color : bpy.props.FloatVectorProperty(default=cFloat, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class FloatAngleSocket(bpy.types.NodeSocketFloatAngle, MantisSocket):
- '''xFrom Input Output'''
- bl_idname = 'FloatAngleSocket'
- bl_label = "Float (Angle)"
- is_valid_interface_type=True
- default_value : bpy.props.FloatProperty(
- default = 0.0,
- min = -180,
- max=180,
- update = update_socket,
- subtype='ANGLE',)
- color_simple = cFloat
- color : bpy.props.FloatVectorProperty(default=cFloat, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class VectorSocket(bpy.types.NodeSocketVectorEuler, MantisSocket):
- """Vector Input socket"""
- bl_idname = 'VectorSocket'
- bl_label = "Vector"
- is_valid_interface_type=True
- default_value : bpy.props.FloatVectorProperty(
- default = (0.0, 0.0, 0.0),
- update = update_socket,)
- color_simple = cVector
- color : bpy.props.FloatVectorProperty(default=cVector, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class VectorEulerSocket(bpy.types.NodeSocketVectorEuler, MantisSocket):
- """Vector Input socket"""
- bl_idname = 'VectorEulerSocket'
- bl_label = "Euler"
- is_valid_interface_type=True
- default_value : bpy.props.FloatVectorProperty(
- default = (0.0, 0.0, 0.0),
- update = update_socket,
- subtype='EULER',)
- color_simple = cVector
- color : bpy.props.FloatVectorProperty(default=cVector, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class VectorTranslationSocket(bpy.types.NodeSocketVectorTranslation, MantisSocket):
- """Vector Input socket"""
- bl_idname = 'VectorTranslationSocket'
- bl_label = "Vector (Translation)"
-
- default_value : bpy.props.FloatVectorProperty(
- default = (0.0, 0.0, 0.0),
- update = update_socket,
- subtype='TRANSLATION',)
- color_simple = cVector
- color : bpy.props.FloatVectorProperty(default=cVector, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class VectorScaleSocket(bpy.types.NodeSocketVectorXYZ, MantisSocket):
- """Vector Input socket"""
- bl_idname = 'VectorScaleSocket'
- bl_label = "Vector (Scale)"
-
- default_value : bpy.props.FloatVectorProperty(
- default = (1.0, 1.0, 1.0),
- update = update_socket,
- subtype='XYZ',)
- color_simple = cVector
- color : bpy.props.FloatVectorProperty(default=cVector, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class KeyframeSocket(MantisSocket):
- '''Keyframe'''
- bl_idname = 'KeyframeSocket'
- bl_label = "Keyframe"
- is_valid_interface_type=True
- color_simple = cKeyframe
- color : bpy.props.FloatVectorProperty(default=cKeyframe, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- def init(self):
- self.display_shape = 'CIRCLE_DOT'
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- EnumKeyframeInterpolationType = (('CONSTANT', 'Stepped', 'Stepped'),
- ('LINEAR', "Linear", "Linear"),
- ('BEZIER', "Bezier", "Bezier"),)
- class EnumKeyframeInterpolationTypeSocket(MantisSocket):
- '''Keyframe Interpolation Type'''
- bl_idname = 'EnumKeyframeInterpolationTypeSocket'
- bl_label = "Keyframe Interpolation Type"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Interpolation",
- items=EnumKeyframeInterpolationType,
- default='LINEAR',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- EnumKeyframeBezierHandleType = (('FREE', 'Free', 'Completely independent manually set handle.'),
- ('ALIGNED', "Aligned", "Manually set handle with rotation locked together with its pair."),
- ('VECTOR', "Vector", "Automatic handles that create straight lines."),
- ('AUTO', "Automatic", "Automatic handles that create smooth curves."),
- ('AUTO_CLAMPED', "Auto Clamped", "Automatic handles that create smooth curves which only change direction at keyframes."),)
- class EnumKeyframeBezierHandleTypeSocket(MantisSocket):
- '''Keyframe Bezier Handle Type'''
- bl_idname = 'EnumKeyframeBezierHandleTypeSocket'
- bl_label = "Keyframe Bezier Handle Type"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Handle Type",
- items=EnumKeyframeBezierHandleType,
- default='AUTO_CLAMPED',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- enumExtrapolationMode = (('CONSTANT', 'Constant', 'Constant'),
- ('LINEAR', "Linear", "Linear"),)
- class eFCrvExtrapolationMode(MantisSocket):
- '''FCurve Extrapolation Mode'''
- bl_idname = 'eFCrvExtrapolationMode'
- bl_label = "Extrapolation Mode"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Handle Type",
- items=enumExtrapolationMode,
- default='CONSTANT',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- EnumLatticeInterpolationType = (('KEY_LINEAR', 'Linear', 'Linear Interpolation.'),
- ('KEY_CARDINAL', "Cardinal", "Cardinal Interpolation."),
- ('KEY_CATMULL_ROM', "Catmull Rom", "Catmull Rom Interpolation."),
- ('KEY_BSPLINE', "B-Spline", "B Spline Interpolation."),)
- class EnumLatticeInterpolationTypeSocket(MantisSocket):
- '''Lattice Interpolation Type'''
- bl_idname = 'EnumLatticeInterpolationTypeSocket'
- bl_label = "Lattice Interpolation Type"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Interpolation Type",
- items=EnumLatticeInterpolationType,
- default='KEY_BSPLINE',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False, update = update_socket)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- enumFloatOperations = (('ADD', 'Add', 'Add'),
- ('SUBTRACT', "Subtract", "Subtract"),
- ('MULTIPLY', "Multiply", "Multiply"),
- ('DIVIDE', "Divide", "Divide"),
- ('POWER', "Power", "Power"),
- ('FLOOR_DIVIDE', "Floor Divide", "Floor Divide"),
- ('MODULUS', "Modulus", "Modulus"),
- ('ABSOLUTE', "Absolute", "Absolute Value"),
- ('MAXIMUM', "Maximum", "Maximum"),
- ('MINIMUM', "Minimum", "Minimum"),
- ('GREATER THAN', "Greater Than", "Greater Than"),
- ('LESS THAN', "Less Than", "Less Than"),
- ('ARCTAN2', "atan2", "2-argument arctan function"),
- ('FLOOR', "Floor", "the nearest integer lower than input A"),
- ('CEIL', "Ceiling", "the next integer higher than input A"),
- ('ROUND', "Round", "Round to the nearest integer"),)
- class MathFloatOperation(MantisSocket):
- """Float Math Operation"""
- bl_idname = 'MathFloatOperation'
- bl_label = "Operation"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Operation",
- items=enumFloatOperations,
- default='MULTIPLY',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- enumVectorOperations = (('ADD', 'Add', 'Add (Component-wise)'),
- ('SUBTRACT', "Subtract", "Subtract (Component-wise)"),
- ('MULTIPLY', "Multiply", "Multiply (Component-wise)"),
- ('SCALE', "Scale", "Scales vector by input float or average magnitude of input vector's components."),
- ('DIVIDE', "Divide", "Divide (Component-wise)"),
- ('POWER', "Power", "Power (Component-wise)"),
- ('LENGTH', "Length", "Length"),
- ('CROSS', "Cross Product", "Cross product of A X B"),
- ('NORMALIZE', "Normalize", "Returns a normalized vector."),
- ('DOT', "Dot Product", "Dot product of A . B"),
- ('LINEAR_INTERP', "Linear Interpolation", "Linear Interpolation between vectors A and B by factor"))
-
- class MathVectorOperation(MantisSocket):
- """Vector Math Operation"""
- bl_idname = 'MathVectorOperation'
- bl_label = "Operation"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Operation",
- items=enumVectorOperations,
- default='MULTIPLY',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- enumMatrixTransform = (('TRANSLATE', 'Translate', 'Translate'),
- ('ROTATE_AXIS_ANGLE', "Rotate (Axis-angle)", "Rotates a number of radians around an axis"),
- # ('ROTATE_EULER', "Rotate (Euler)", "Euler Rotation"),
- # ('ROTATE_QUATERNION', "Rotate (Quaternion)", "Quaternion Rotation"),
- ('SCALE', "Scale", "Scale"),)
-
- class MatrixTransformOperation(MantisSocket):
- """Matrix Transform Operation"""
- bl_idname = 'MatrixTransformOperation'
- bl_label = "Operation"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Operation",
- items=enumMatrixTransform,
- default='TRANSLATE',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- enumIntOperations = (('ADD', 'Add', 'Add'),
- ('SUBTRACT', "Subtract", "Subtract"),
- ('MULTIPLY', "Multiply", "Multiply"),
- ('FLOOR_DIVIDE', "Floor Divide", "Floor Divide"),
- ('POWER', "Power", "Power"),
- ('MODULUS', "Modulus", "Modulus"),
- ('ABSOLUTE', "Absolute", "Absolute Value"),
- ('MAXIMUM', "Maximum", "Maximum"),
- ('MINIMUM', "Minimum", "Minimum"),
- ('GREATER THAN', "Greater Than", "Greater Than"),
- ('LESS THAN', "Less Than", "Less Than"),)
- class MathIntOperation(MantisSocket):
- """Int Math Operation"""
- bl_idname = 'MathIntOperation'
- bl_label = "Operation"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Operation",
- items=enumIntOperations,
- default='MULTIPLY',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- enumCompareOperations = (('EQUAL', "Equal", "Equal"),
- ('NOT_EQUAL', "Not Equal", "Not Equal"),
- ('GREATER_THAN', "Greater Than", "Greater Than"),
- ('GREATER_THAN_EQUAL', "Greater Than or Equal", "Greater Than or Equal"),
- ('LESS_THAN', "Less Than", "Less Than"),
- ('LESS_THAN_EQUAL', "Equal or Less Than", "Equal or Less Than"),)
- class EnumCompareOperation(MantisSocket):
- """Compare Operation"""
- bl_idname = 'EnumCompareOperation'
- bl_label = "Comparison"
-
- default_value :bpy.props.EnumProperty(
- name="",
- description="Comparison",
- items=enumCompareOperations,
- default='EQUAL',
- update = update_socket,)
-
- color_simple = cString
- color : bpy.props.FloatVectorProperty(default=cString, size=4)
- input : bpy.props.BoolProperty(default =False,)
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
- class WildcardSocket(MantisSocket):
- """Some kind of node socket lol I donno"""
- bl_idname = 'WildcardSocket'
- bl_label = ""
-
- color_simple = (0.0,0.0,0.0,0.0)
- color : bpy.props.FloatVectorProperty(default=(0.0,0.0,0.0,0.0), size=4)
- input : bpy.props.BoolProperty(default =False,)
-
- def draw(self, context, layout, node, text):
- ChooseDraw(self, context, layout, node, text)
- def draw_color(self, context, node):
- return self.color
- @classmethod
- def draw_color_simple(self):
- return self.color_simple
|