Source code for scfile.content.models.enums
"""Model enumerations."""
from enum import IntEnum, StrEnum, auto
[docs]
class Feature(StrEnum):
"""Optional model feature."""
UV = auto()
UV2 = auto()
NORMALS = auto()
TANGENTS = auto()
COLORS = auto()
SKELETON = auto()
BLEND_SHAPES = auto()
ANIMATION = auto()
BONE_ANIMATION = auto()
MORPH_ANIMATION = auto()
@property
def members(self) -> tuple["Feature", ...]:
"""Concrete features represented by this feature."""
if self is Feature.ANIMATION:
return (
Feature.BONE_ANIMATION,
Feature.MORPH_ANIMATION,
)
return (self,)
@property
def requires(self) -> tuple["Feature", ...]:
"""Features required to serialize this feature."""
if self is Feature.BONE_ANIMATION:
return (Feature.SKELETON,)
return ()
@property
def parent(self) -> "Feature":
"""Parent feature used for shared behavior."""
if self in Feature.ANIMATION.members:
return Feature.ANIMATION
return self
[docs]
class ModelUnits(IntEnum):
"""Model structure element counts."""
POSITIONS = 4
TEXTURES = 2
NORMALS = 4
TANGENTS = 4
TRIANGLES = 3
QUADS = 4
LINKS = 4
BONES = 6
FRAMES = 7
[docs]
class UVOrigin(StrEnum):
"""UV coordinate origin."""
TOP_LEFT = auto()
BOTTOM_LEFT = auto()
[docs]
class UVSign(StrEnum):
"""UV coordinate sign."""
POSITIVE = auto()
NEGATIVE = auto()
[docs]
class LinkSpace(StrEnum):
"""Vertex link coordinate space."""
GLOBAL = auto()
LOCAL = auto()
[docs]
class SkeletonSpace(StrEnum):
"""Skeleton bones coordinate space."""
GLOBAL = auto()
LOCAL = auto()
[docs]
class AnimationTranslation(StrEnum):
"""Animation translation mode."""
DELTA = auto()
ABSOLUTE = auto()
[docs]
class AnimationRotation(StrEnum):
"""Animation rotation format."""
QUATERNION = auto()
EULER = auto()