InterpolationEngine

Handles interpolation of states and individual values.

Constructor

InterpolationEngine(easing_resolver, path_resolver = None)

Initialize the interpolation engine.

Parameters

easing_resolver
EasingResolver instance for determining easing functions
path_resolver
PathResolver instance for determining path functions (optional)

Methods

compute_changed_fields

compute_changed_fields(
    start_state: State,
    end_state: State,
    attribute_keystates_fields: set
) -> Tuple[set, Dict[str, Tuple[Any, Any]]]

Pre-compute which fields differ between two states.

Returns

Tuple of (set of changed field names, dict of field_name -> (start_val, end_val))

create_eased_state

create_eased_state(
    start_state: State,
    end_state: State,
    t: float,
    segment_easing_overrides: Optional[Dict[str, Callable[[float], float]]],
    attribute_keystates_fields: set,
    vertex_buffer: Optional[Tuple[List, List[List]]] = None,
    segment_interpolation_config: Optional[Dict[str, Callable]] = None,
    morphing_config: Optional[Any] = None,
    changed_fields: Optional[Tuple[set, Dict[str, Tuple[Any, Any]]]] = None,
    linear_angle_interpolation: bool = False
) -> State

Create an interpolated state between two keystates.

Parameters

start_state
Starting state
end_state
Ending state
t
Interpolation parameter (0.0 to 1.0)
segment_easing_overrides
Per-segment easing overrides
attribute_keystates_fields
Attributes managed by field keystates
vertex_buffer
Optional reusable buffer for vertex interpolation
segment_interpolation_config
Optional per-field path config dict {field_name: path_func}
morphing_config
Optional morphing configuration (Morphing or MorphingConfig)
changed_fields
Optional pre-computed (changed_field_names, field_values) tuple
linear_angle_interpolation
If True, rotation uses linear interpolation (no angle wrapping)

interpolate_value

interpolate_value(
    start_state: State,
    end_state: State,
    field_name: str,
    start_value: Any,
    end_value: Any,
    eased_t: Union[float, Tuple[float, float]],
    vertex_buffer: Optional[Tuple[List, List[List]]] = None,
    segment_interpolation_config: Optional[Dict[str, Callable]] = None,
    mapper: Optional[Any] = None,
    vertex_aligner: Optional[Any] = None,
    linear_angle_interpolation: bool = False
) -> Any

Interpolate a single value based on its type and context.