Source code for pyvcad_attribute_resolver.modules.foaming

"""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()