nx_polymer_thermal.nx
buildroot/runtime/nx_polymer_thermal.nx
about
nx_polymer_thermal.nx -- per-polymer thermal envelope for FDM
printing. Combines polymer chemistry (Tg, Tm, Td) with engineering
constraints (recommended print + bed temp ranges) into a single
substrate primitive the slicer composes for thermal-safety
validation BEFORE emitting G-code with operator-supplied temps.
Per META-CARDINAL feedback-engineering-sciences-bits-up-3d-print-first:
this is the substrate's FIRST primitive that bridges Layer 2
(pure chemistry: nx_chem_periodic / nx_chem_molecule -- already
shipped) with Layer 3 (engineering applications: nx_material_profile
+ nx_gcode_emit). Composes:
- nx_material_profile (NX_MAT_* sealed-enum keys)
- chemistry knowledge (Tg / Tm / Td values from polymer literature)
Future v2 could compose nx_chem_molecule to compute mol weight
from PLA repeating unit (C3H4O2)n etc., but v1 ships the slicer-
relevant constants directly per material class.
Thermal values verified against polymer-literature consensus:
PLA: Tg 60°C / Tm 160°C / Td 250°C / print 190-230 / bed 50-65
PETG: Tg 80°C / Tm 240°C / Td 290°C / print 220-250 / bed 70-85
ABS: Tg 105°C / amorphous / Td 270°C / print 220-260 / bed 90-110
ASA: Tg 105°C / amorphous / Td 270°C / print 240-260 / bed 100-110
PC: Tg 145°C / amorphous / Td 320°C / print 270-310 / bed 110-130
TPU: Tg variable / Tm 180°C / Td 240°C / print 200-230 / bed 50-60
NYLON: Tg 50°C / Tm 220°C / Td 320°C / print 240-280 / bed 80-100
PA-CF: same as NYLON with reinforcement (no thermal delta)
PEEK: Tg 143°C / Tm 343°C / Td 575°C / print 360-400 / bed 120-145
Amorphous polymers (ABS, ASA, PC) use Tm = 0 as sentinel meaning
"no crystalline melt; soften gradually above Tg". Validator
treats this case correctly.
license_tier: ORIGINAL
dependencies 2 imports · 2 importers
imports: nx_syscalls.nxnx_material_profile.nx
imported by: nx_polymer_thermal_test.nxnx_preflight.nx
structs
| 63 | struct NxPolymerThermal |
consts
| 41 | const NX_POLYTHERM_SAFE: i64 = 0 |
| 42 | const NX_POLYTHERM_PRINT_TOO_LOW: i64 = 1 |
| 43 | const NX_POLYTHERM_PRINT_TOO_HIGH: i64 = 2 |
| 44 | const NX_POLYTHERM_DECOMP_RISK: i64 = 3 |
| 45 | const NX_POLYTHERM_BED_TOO_LOW: i64 = 4 |
| 46 | const NX_POLYTHERM_BED_TOO_HIGH: i64 = 5 |
| 47 | const NX_POLYTHERM_UNKNOWN_CLASS: i64 = 6 |
| 48 | const NX_POLYTHERM_N: i64 = 7 |
| 74 | const NX_POLYTHERM_BYTES: i64 = 64 // 8 i64 |
functions
| 50 | func nx_polytherm_verdict_name(v: i64) -> *u8 |
| 78 | func nx_polytherm_set(p: *NxPolymerThermal, cls: i64, called by 1: nx_polymer_thermal_for |
| 99 | func nx_polymer_thermal_for(material_class: i64) -> *NxPolymerThermal |
| 151 | func nx_polymer_thermal_validate(p: *NxPolymerThermal, |
| 168 | func nx_polymer_validate_profile(mat: *NxMaterialProfile) -> i64 |