114 lines
4.8 KiB
Python
114 lines
4.8 KiB
Python
"""
|
|
types.py
|
|
--------
|
|
Shared type definitions for the knot_animation package.
|
|
|
|
KnotConfig is the typed dictionary that flows between:
|
|
KnotItem.to_dict() → knot_frame_handler → _make_torus_knot
|
|
and the material / blend system.
|
|
|
|
All keys are optional (total=False) so callers can provide only the
|
|
relevant subset; consumers must use .get() with a sensible default.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
try:
|
|
from typing import TypedDict
|
|
except ImportError: # Python < 3.8
|
|
from typing_extensions import TypedDict # type: ignore[no-redef]
|
|
|
|
|
|
class KnotConfig(TypedDict, total=False):
|
|
# ── Shape Type ───────────────────────────────────────────────────────────
|
|
shape_type: str # 'TORUS_KNOT' | 'MOBIUS' | 'LISSAJOUS' | 'SPIRAL'
|
|
|
|
# ── Topology (Torus Knot) ────────────────────────────────────────────────
|
|
torus_p: int
|
|
mod_torus_p: float
|
|
torus_q: int
|
|
mod_torus_q: float
|
|
flip_p: bool
|
|
flip_q: bool
|
|
multiple_links: bool
|
|
|
|
# ── Topology (Mobius) ────────────────────────────────────────────────────
|
|
mobius_twists: int
|
|
mod_mobius_twists: float
|
|
mobius_width: float
|
|
mod_mobius_width: float
|
|
|
|
# ── Topology (Lissajous 3D) ──────────────────────────────────────────────
|
|
liss_kx: int
|
|
mod_liss_kx: float
|
|
liss_ky: int
|
|
mod_liss_ky: float
|
|
liss_kz: int
|
|
mod_liss_kz: float
|
|
liss_amp: float
|
|
mod_liss_amp: float
|
|
|
|
# ── Topology (Spherical Spiral) ──────────────────────────────────────────
|
|
spiral_turns: int
|
|
mod_spiral_turns: float
|
|
spiral_R: float
|
|
mod_spiral_R: float
|
|
|
|
# ── Radii (Major/Minor mode) ──────────────────────────────────────────────
|
|
torus_R: float
|
|
mod_torus_R: float
|
|
torus_r: float
|
|
mod_torus_r: float
|
|
|
|
# ── Radii (Ext/Int mode) ─────────────────────────────────────────────────
|
|
mode: str # 'MAJOR_MINOR' | 'EXT_INT'
|
|
torus_eR: float
|
|
mod_torus_eR: float
|
|
torus_iR: float
|
|
mod_torus_iR: float
|
|
|
|
# ── Multipliers & phases ──────────────────────────────────────────────────
|
|
torus_u: int
|
|
torus_v: int
|
|
torus_rP: float
|
|
torus_sP: float
|
|
torus_h: float
|
|
mod_torus_h: float
|
|
|
|
# ── Per-knot animation rates ──────────────────────────────────────────────
|
|
spin_phase_rate: float
|
|
rev_phase_rate: float
|
|
height_rate: float
|
|
scale_rate: float
|
|
scale_amplitude: float
|
|
cycle_rate: float
|
|
|
|
# ── Geometry ──────────────────────────────────────────────────────────────
|
|
geo_extrude: float
|
|
mod_geo_extrude: float
|
|
geo_offset: float
|
|
mod_geo_offset: float
|
|
geo_bDepth: float
|
|
mod_geo_bDepth: float
|
|
|
|
# ── Transition ────────────────────────────────────────────────────────────
|
|
transition_frames: int
|
|
transition_easing: str # 'LINEAR' | 'QUAD_IN_OUT' | 'SMOOTHSTEP'
|
|
|
|
# ── Legacy TKP colour path ────────────────────────────────────────────────
|
|
use_colors: bool
|
|
colorSet: str
|
|
random_colors: bool
|
|
|
|
# ── Material ──────────────────────────────────────────────────────────────
|
|
material_mode: str # 'PRESET' | 'PROJECT'
|
|
shader_id: str
|
|
preset_color: tuple
|
|
preset_roughness: float
|
|
preset_metallic: float
|
|
preset_emission_strength: float
|
|
uid: str
|
|
|
|
# ── Private handler-injected keys (not stored in KnotItem) ───────────────
|
|
_skip_material: bool # tells _make_torus_knot to skip material assignment
|
|
_scale_override: float # per-frame scale multiplier computed by the handler
|