mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
540f3acf52
FederationConfig holds the federation-wide display unit (defaults to METRE; on load the first model's MapUnit becomes the default). FederationOrigin captures stage 3 — XYZ in federation unit + Z-rot — and composes to R_z · T(-xyz_meters), nominating a point as the new origin and rotating around it. ModelTransform captures stage 4 — A in model project or map unit (per AFrame), B and pivot in federation unit, full intrinsic-XYZ Euler rotation — and composes to T(B - R_pivot · A) · R_pivot, rotating first then translating so the rotated A lands at B. ModelUnits caches per-model project/map unit-to-metres scales so the compose helpers don't need to re-read the IFC each call. All composed matrices are in metres; user-typed numbers are stored in source units to round-trip without precision loss, and converted on compose via Unit.h. Not yet wired into the streamer or .ifcfed I/O — pure data model and maths, integrated in subsequent commits. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>