| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- from dataclasses import dataclass, field
- from typing import List, Any, Tuple, Optional, Callable
- @dataclass(slots=True)
- class MantisSocketTemplate():
- name : str = field(default="")
- bl_idname : str = field(default="")
- traverse_target : Optional[str] = field(default=None)
- identifier : str = field(default="")
- display_shape : str = field(default="") # for arrays
- category : str = field(default="") # for use in display update
- blender_property : str | tuple[str] = field(default="") # for props_sockets -> evaluate sockets
- is_input : bool = field(default=False)
- hide : bool = field(default=False)
- use_multi_input : bool = field(default=False)
- ui_only : bool = field(default=False)
- default_value : Any = field(default=None)
- # The data operator is used to transform the Mantis data to a format Blender can use.
- # For example, type-casting when Blender's C/C++ is more type-sensitve than Python
- property_value_operator : Optional[Callable] = field (default=None)
- # this is a hint for the props_sockets system for complex situations
- # where multiple blender objects own the properties, like e.g. bone/posebone
- prop_owner_group : str = field(default="")
- is_animatable : bool = field(default=True) # controls whether a driver is legal or not
- # These attributes are for deprecated or new features in Blender
- min_bpy_version : Optional[tuple[int]] = field(default=None)
- max_bpy_version : Optional[tuple[int]] = field(default=None)
- @dataclass(slots=True)
- class xForm_info():
- object_type : str = field(default="")
- root_armature : str = field(default="")
- parent_pose_name : str = field(default="")
- parent_edit_name : str = field(default="")
- self_pose_name : str = field(default="")
- self_edit_name : str = field(default="")
- # should I add node signatures to this?
- @dataclass(slots=True)
- class custom_prop_template():
- name : str = field(default="")
- prop_type : str = field(default="")
- default_value_string : str = field(default="")
- default_value_bool : bool = field(default=False)
- default_value_int : int = field(default=0)
- default_value_float : float = field(default=0.0)
- default_value_vector : List[float] = field(default_factory=list)
- min : float|int = field(default=0)
- max : float|int = field(default=1)
- soft_min : float|int = field(default=1)
- soft_max : float|int = field(default=1)
- description : str = field(default="")
- @dataclass(slots=True)
- class MantisBoneTransform():
- matrix : Any = field(default=[1,0,0,0,
- 0,1,0,0,
- 0,0,1,0,
- 0,0,0,1,]),
- # I would like to have an intelligent way of handling
- # object- vs. world- space matrices
- matrix_space : str = field(default="OBJECT")
- length : float = field(default=1.0),
- @dataclass(slots=True)
- class MantisBBoneTransform():
- bbone_segments: int = field(default=1)
- # Offsets & Curve Handles
- bbone_curveinx: float = field(default=0.0)
- bbone_curveinz: float = field(default=0.0)
- bbone_curveoutx: float = field(default=0.0)
- bbone_curveoutz: float = field(default=0.0)
- # Easing
- bbone_easein: float = field(default=1.0)
- bbone_easeout: float = field(default=1.0)
- # Roll
- bbone_rollin: float = field(default=0.0)
- bbone_rollout: float = field(default=0.0)
- # Scale Vectors
- bbone_scalein: Tuple[float, float, float] = field(
- default_factory=lambda: (1.0, 1.0, 1.0) )
- bbone_scaleout: Tuple[float, float, float] = field(
- default_factory=lambda: (1.0, 1.0, 1.0) )
- # Custom Handles
- bbone_handle_type_start: str = field(default="AUTO")
- bbone_handle_type_end: str = field(default="AUTO")
- bbone_custom_handle_start: str = field(default="")
- bbone_custom_handle_end: str = field(default="")
- @classmethod
- def bbone_transform_from_bone(cls, bone):
- return cls(
- bbone_segments = bone.bbone_segments,
- bbone_curveinx = bone.bbone_curveinx,
- bbone_curveinz = bone.bbone_curveinz,
- bbone_curveoutx = bone.bbone_curveoutx,
- bbone_curveoutz = bone.bbone_curveoutz,
- bbone_easein = bone.bbone_easein,
- bbone_easeout = bone.bbone_easeout,
- bbone_rollin = bone.bbone_rollin,
- bbone_rollout = bone.bbone_rollout,
- bbone_scalein = bone.bbone_scalein,
- bbone_scaleout = bone.bbone_scaleout,
- bbone_handle_type_start = bone.bbone_handle_type_start,
- bbone_handle_type_end = bone.bbone_handle_type_end,
- bbone_custom_handle_start = bone.bbone_custom_handle_start,
- bbone_custom_handle_end = bone.bbone_custom_handle_end,
- )
- # used to apply values or drivers to blender properties in a generic way
- @dataclass(slots=True)
- class MantisSocketFiller():
- socket_name: str = field(default="")
- property_group : str = field(default="")
- property_name : str = field(default="")
- default_value: Any = field(default=None)
- array_index: int = field(default=0) # for multi-input array sockets
- value_index: Optional[int] = field(default=None) # for vector properties
- # A Combo Property is a property that jams a bunch of blender properties into one socket
- combo_property: bool = field(default=False) # i.e. it provides a vector of Blender Properties
- vector_property : bool = field(default=False)
- is_animatable : bool = field(default=True) # for catching bad drivers
- # we pack a function for transforming the data if needed.
- property_value_operator: Optional[Callable] = field(default=None)
- @dataclass(slots=True)
- class RerouteCacheItem:
- reroute_name : str = field(default="") # the reroute node name in the tree
- reroute_tree_name : str = field(default="") # the tree to find the reroute in
- source : Tuple[str, str] = field(default_factory=tuple) # the beginning of the reroute network
- destinations : set[Tuple[str, str]] = field(default_factory=set) # (node_name, socket_name)
|