"""Foaming filament conversion registrations.
Each entry wraps empirical lookup-table data measured for ColorFabb
VarioShore TPU and ColorFabb LW-PLA foaming filaments.
Usage::
import pyvcad_attribute_resolver as resolver
resolver.register_foaming_conversions() # all 5
resolver.register_tpu_conversions() # TPU-only (3)
resolver.register_pla_conversions() # PLA-only (2)
"""
import pyvcad as pv
from pyvcad_attribute_resolver.registry import register_conversion
from .data import (
TPU_SHORE_HARDNESS,
TPU_DENSITY,
TPU_FLOW_COMPENSATION,
PLA_DENSITY,
PLA_FLOW_COMPENSATION,
)
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
def _lut_factory(source_attr, target_attr, data):
"""Return a zero-arg callable that builds a fresh LookupTableConverter."""
entries = [pv.LookupTableEntry(kv[0], kv[0], kv[1]) for kv in data]
def _factory():
return pv.LookupTableConverter(
[source_attr], [target_attr],
entries, pv.InterpolationMode.LINEAR,
)
return _factory
# ---------------------------------------------------------------------------
# Public registration functions
# ---------------------------------------------------------------------------
[docs]
def register_tpu_conversions():
"""Register the three VarioShore TPU conversions."""
register_conversion(
source="shore_hardness", target="temperature",
converter_factory=_lut_factory(
pv.DefaultAttributes.SHORE_HARDNESS,
pv.DefaultAttributes.TEMPERATURE,
TPU_SHORE_HARDNESS,
),
name="tpu_shore_hardness_to_temperature",
priority=0,
tags=["foaming_tpu"],
)
register_conversion(
source="density", target="temperature",
converter_factory=_lut_factory(
pv.DefaultAttributes.DENSITY,
pv.DefaultAttributes.TEMPERATURE,
TPU_DENSITY,
),
name="tpu_density_to_temperature",
priority=0,
tags=["foaming_tpu"],
)
register_conversion(
source="temperature", target="flow_rate",
converter_factory=_lut_factory(
pv.DefaultAttributes.TEMPERATURE,
pv.DefaultAttributes.FLOW_RATE,
TPU_FLOW_COMPENSATION,
),
name="tpu_temperature_to_flow_rate",
priority=0,
tags=["foaming_tpu"],
)
[docs]
def register_pla_conversions():
"""Register the two LW-PLA conversions."""
register_conversion(
source="density", target="temperature",
converter_factory=_lut_factory(
pv.DefaultAttributes.DENSITY,
pv.DefaultAttributes.TEMPERATURE,
PLA_DENSITY,
),
name="pla_density_to_temperature",
priority=0,
tags=["foaming_pla"],
)
register_conversion(
source="temperature", target="flow_rate",
converter_factory=_lut_factory(
pv.DefaultAttributes.TEMPERATURE,
pv.DefaultAttributes.FLOW_RATE,
PLA_FLOW_COMPENSATION,
),
name="pla_temperature_to_flow_rate",
priority=0,
tags=["foaming_pla"],
)
[docs]
def register_foaming_conversions():
"""Register all five foaming filament conversions (TPU + PLA)."""
register_tpu_conversions()
register_pla_conversions()