189 lines
5.2 KiB
Python
189 lines
5.2 KiB
Python
from dataclasses import dataclass, field
|
|
from typing import List, Optional
|
|
|
|
|
|
@dataclass
|
|
class ConditionalTable:
|
|
"""
|
|
A model class for holding various values
|
|
|
|
Attributes
|
|
----------
|
|
@type from_values: List[float]
|
|
@param from_values: The list of values
|
|
|
|
@type to_values: List[float]
|
|
@param to_values: The list of values
|
|
|
|
@type slope_values: List[float]
|
|
@param slope_values: The list of slope values
|
|
|
|
@type cut_values: List[float]
|
|
@param cut_values: The list of cut values
|
|
|
|
@type inputs: List[int]
|
|
@param inputs: The indices of inputs
|
|
|
|
@type outputs: List[int]
|
|
@param outputs: The indices of outputs
|
|
"""
|
|
|
|
from_values: List[float] = field(default_factory=list)
|
|
to_values: List[float] = field(default_factory=list)
|
|
slope_values: List[float] = field(default_factory=list)
|
|
cut_values: List[float] = field(default_factory=list)
|
|
inputs: List[int] = field(default_factory=list)
|
|
outputs: List[int] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class PSDMatrix:
|
|
"""
|
|
A model class for holding data about Pose Space Deformation
|
|
|
|
Attributes
|
|
----------
|
|
@type count: int
|
|
@param count: The list of values
|
|
|
|
@type rows: List[int]
|
|
@param rows: List of row indices used for storing values
|
|
|
|
@type columns: List[int]
|
|
@param columns: List of row indices used for storing values
|
|
|
|
@type values: List[float]
|
|
@param values: The list of values, that can be accessed from the row and column index
|
|
"""
|
|
|
|
count: Optional[int] = field(default=None)
|
|
rows: List[int] = field(default_factory=list)
|
|
columns: List[int] = field(default_factory=list)
|
|
values: List[float] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class JointGroup:
|
|
"""
|
|
A model class for holding data about joint groups
|
|
|
|
Attributes
|
|
----------
|
|
@type lods: List[int]
|
|
@param lods: A list of lod indices that the joint group is contained within
|
|
|
|
@type values: List[float]
|
|
@param values: A list of values
|
|
|
|
@type joints: List[int]
|
|
@param joints: A list of joint indices
|
|
|
|
@type inputs: List[int]
|
|
@param inputs: The indices of inputs
|
|
|
|
@type outputs: List[int]
|
|
@param outputs: The indices of outputs
|
|
"""
|
|
|
|
lods: List[int] = field(default_factory=list)
|
|
values: List[float] = field(default_factory=list)
|
|
joints: List[int] = field(default_factory=list)
|
|
inputs: List[int] = field(default_factory=list)
|
|
outputs: List[int] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class BlendShapesData:
|
|
"""
|
|
A model class for holding data about blend shapes
|
|
|
|
Attributes
|
|
----------
|
|
@type lods: List[int]
|
|
@param lods: A list of lod indices that the blend shapes are contained within
|
|
|
|
@type inputs: List[int]
|
|
@param inputs: The indices of inputs
|
|
|
|
@type outputs: List[int]
|
|
@param outputs: The indices of outputs
|
|
"""
|
|
|
|
lods: List[int] = field(default_factory=list)
|
|
inputs: List[int] = field(default_factory=list)
|
|
outputs: List[int] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class AnimatedMapsData:
|
|
"""
|
|
A model class for holding data about animated maps
|
|
|
|
Attributes
|
|
----------
|
|
@type lods: List[int]
|
|
@param lods: A list of lod indices that the blend shapes are contained within
|
|
|
|
@type conditional_table: ConditionalTable
|
|
@param conditional_table: Data needed for animated maps
|
|
"""
|
|
|
|
lods: List[int] = field(default_factory=list)
|
|
conditional_table: ConditionalTable = field(default_factory=ConditionalTable)
|
|
|
|
|
|
@dataclass
|
|
class JointsData:
|
|
"""
|
|
A model class for storing data about joints
|
|
|
|
Attributes
|
|
----------
|
|
@type joint_row_count: int
|
|
@param joint_row_count: The row count of the matrix that stores the joints data
|
|
|
|
@type joint_column_count: int
|
|
@param joint_column_count: The column count of the matrix that stores the joints data
|
|
|
|
@type joint_variable_attribute_indices: List[List[int]]
|
|
@param joint_variable_attribute_indices: List of joint variable attribute indices per LOD
|
|
|
|
@type joint_groups: List[JointGroup]
|
|
@param joint_groups: The list of joint groups
|
|
"""
|
|
|
|
joint_row_count: Optional[int] = field(default=None)
|
|
joint_column_count: Optional[int] = field(default=None)
|
|
joint_variable_attribute_indices: List[List[int]] = field(default_factory=list)
|
|
joint_groups: List[JointGroup] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class Behavior:
|
|
"""
|
|
A model class for holding data about the behavior part of the DNA
|
|
|
|
Attributes
|
|
----------
|
|
@type gui_to_raw: ConditionalTable
|
|
@param gui_to_raw: Mapping data about gui to raw values
|
|
|
|
@type psd: PSDMatrix
|
|
@param psd: The data representing Pose Space Deformation
|
|
|
|
@type blend_shapes: BlendShapesData
|
|
@param blend_shapes: The data representing blend shapes
|
|
|
|
@type animated_maps: AnimatedMapsData
|
|
@param animated_maps: The data representing animated maps
|
|
|
|
@type joints: JointsData
|
|
@param joints: The data representing joints
|
|
"""
|
|
|
|
gui_to_raw: ConditionalTable = field(default_factory=ConditionalTable)
|
|
psd: PSDMatrix = field(default_factory=PSDMatrix)
|
|
blend_shapes: BlendShapesData = field(default_factory=BlendShapesData)
|
|
animated_maps: AnimatedMapsData = field(default_factory=AnimatedMapsData)
|
|
joints: JointsData = field(default_factory=JointsData)
|