"""Normalize an external STL (AhmedML / DrivAerML / NASA-CRM) to the EZFlow convention: max-extent L=1, centred at origin, and compute the frontal (y-z projected) reference area for Cd. Reuses the SAME normalizer the training data used (family_to_stl._normalize_and_measure), so the zero-shot geometries enter the model on exactly the same scale as training. Usage: python normalize_external.py Prints one line: NORM Aref= -> """ import sys, os sys.path.insert(0, r"C:\dev\EZFlow") from ezflow_v3.cfd.family_to_stl import _normalize_and_measure stl_in, name, out_dir = sys.argv[1], sys.argv[2], sys.argv[3] os.makedirs(out_dir, exist_ok=True) out_stl = os.path.join(out_dir, f"{name}.stl") lref, aref = _normalize_and_measure(stl_in, out_stl) print(f"NORM {name} Lref={lref:.3f} Aref={aref:.6f} -> {out_stl}", flush=True)