mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-29 00:03:17 +00:00
f05dd4aea5
An SI prefix attaches to the base unit symbol and the prefixed symbol is raised to the power as a whole: DECI CUBIC_METRE is dm3 = a litre = 1e-3 m3, not 0.1 m3. The scale factor previously applied the prefix multiplier linearly for all IfcSIUnits, inflating volumes x100 and areas x10 for such declarations (produced e.g. by MagiCAD for Revit MEP exports). Following the reviewer note in #9278, the exponent is taken from the derived attribute IfcSIUnit.Dimensions rather than from substring matching on the unit name: the multiplier is raised to LengthExponent only when the unit's dimensions are a pure power of length, so prefixed derived units (KILO PASCAL, MEGA NEWTON) and non-length units (KILO GRAM) correctly keep the linear multiplier. This matches the exponent handling already present in convert() and named_dimensions in the same module. Adds regression tests for prefixed AREAUNIT/VOLUMEUNIT and for the linear-prefix behaviour of PRESSUREUNIT/MASSUNIT.