mantis_dataclasses.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from dataclasses import dataclass, field
  2. from typing import List, Any, Tuple, Optional
  3. @dataclass
  4. class MantisSocketTemplate():
  5. name : str = field(default="")
  6. bl_idname : str = field(default="")
  7. traverse_target : str = field(default="")
  8. identifier : str = field(default="")
  9. display_shape : str = field(default="") # for arrays
  10. category : str = field(default="") # for use in display update
  11. blender_property : str | tuple[str] = field(default="") # for props_sockets -> evaluate sockets
  12. is_input : bool = field(default=False)
  13. hide : bool = field(default=False)
  14. use_multi_input : bool = field(default=False)
  15. ui_only : bool = field(default=False)
  16. default_value : Any = field(default=None)
  17. # this is a hint for the props_sockets system for complex situations
  18. # where multiple blender objects own the properties, like e.g. bone/posebone
  19. prop_owner_group : str = field(default="")
  20. # do? add versioning fields for Mantis, Blender version min/max
  21. is_animatable : bool = field(default=True) # controls whether a driver is legal or not
  22. @dataclass
  23. class xForm_info():
  24. object_type : str = field(default="")
  25. root_armature : str = field(default="")
  26. parent_pose_name : str = field(default="")
  27. parent_edit_name : str = field(default="")
  28. self_pose_name : str = field(default="")
  29. self_edit_name : str = field(default="")
  30. # should I add node signatures to this?
  31. @dataclass
  32. class custom_prop_template():
  33. name : str = field(default="")
  34. prop_type : str = field(default="")
  35. default_value_string : str = field(default="")
  36. default_value_bool : bool = field(default=False)
  37. default_value_int : int = field(default=0)
  38. default_value_float : float = field(default=0.0)
  39. default_value_vector : List[float] = field(default_factory=list)
  40. min : float|int = field(default=0)
  41. max : float|int = field(default=1)
  42. soft_min : float|int = field(default=1)
  43. soft_max : float|int = field(default=1)
  44. description : str = field(default="")
  45. @dataclass
  46. class MantisBoneTransform():
  47. matrix : Any = field(default=[1,0,0,0,
  48. 0,1,0,0,
  49. 0,0,1,0,
  50. 0,0,0,1,]),
  51. # I would like to have an intelligent way of handling
  52. # object- vs. world- space matrices
  53. matrix_space : str = field(default="OBJECT")
  54. length : float = field(default=1.0),
  55. @dataclass
  56. class MantisBBoneTransform():
  57. num_bbone_segmetns: int = field(default=1)
  58. # Offsets & Curve Handles
  59. bbone_curveinx: float = field(default=0.0)
  60. bbone_curveiny: float = field(default=0.0)
  61. bbone_curveoutx: float = field(default=0.0)
  62. bbone_curveouty: float = field(default=0.0)
  63. # Easing
  64. bbone_easein: float = field(default=1.0)
  65. bbone_easeout: float = field(default=1.0)
  66. # Roll
  67. bbone_rollin: float = field(default=0.0)
  68. bbone_rollout: float = field(default=0.0)
  69. # Scale Vectors
  70. bbone_scalein: Tuple[float, float, float] = field(
  71. default_factory=lambda: (1.0, 1.0, 1.0) )
  72. bbone_scaleout: Tuple[float, float, float] = field(
  73. default_factory=lambda: (1.0, 1.0, 1.0) )
  74. # Custom Handles
  75. use_bbone_custom_handles: bool = field(default=False)
  76. bbone_custom_handle_start: str = field(default=None)
  77. bbone_custom_handle_end: str = field(default=None)
  78. # used to apply values or drivers to blender properties in a generic way
  79. @dataclass
  80. class MantisSocketFiller():
  81. socket_name: str = field(default="")
  82. property_name : str = field(default="")
  83. default_value: Any = field(default=None)
  84. array_index: int = field(default=0) # for multi-input array sockets
  85. value_index: Optional[int] = field(default=None) # for vector properties
  86. # A Combo Property is a property that jams a bunch of blender properties into one socket
  87. combo_property: bool = field(default=False)
  88. def __repr__(self):
  89. return f"socket_name: {self.socket_name}, " \
  90. f"property_name: {self.property_name}, " \
  91. f"default_value: {self.default_value}, " \
  92. f"array_index: {self.array_index or 0}, " \
  93. f"value_index: {self.value_index or None}"