"""Build a T-pier .3dm from app params in a headless Rhino run. usage: python build_model.py [--upto G1..G5] """ import argparse import json import sys from pathlib import Path APP = Path(__file__).resolve().parents[1] sys.path.insert(0, str(APP)) from engine.pipeline import TOLERANCE_MM, build_steps # noqa: E402 from runner import run_job # noqa: E402 def build(params, out, upto="G5"): return run_job(build_steps(params, upto), save=out, units_mm_tolerance=TOLERANCE_MM) if __name__ == "__main__": ap = argparse.ArgumentParser() ap.add_argument("params") ap.add_argument("out") ap.add_argument("--upto", default="G5") a = ap.parse_args() r = build(a.params, a.out, a.upto) print("wall", r["wall_secs"], "s; objects", r["objects"], "; saved", r.get("saved_to")) for st in r["steps"]: print(f" {st['name']:<28} {st['secs']:>7}s {st['stdout'].strip()[:160]}") (Path(a.out).with_suffix(".build.json")).write_text(json.dumps(r, ensure_ascii=False, indent=1), encoding="utf-8")