Measure to SI
64-bitA property value in meters, square meters or cubic meters.
area = v × L²; volume = v × L³
Multiplies by lengthToMetre, lengthToMetre ** 2 or lengthToMetre ** 3 in 64-bit, so the unit factor is applied after it is raised to the power, not to the value each time.
export function siValue(type, value, lengthToMetre = 1) {
if (typeof value !== 'number' || !Number.isFinite(value)) return null;
const T = String(type || '').toUpperCase();
if (LEN.test(T) || T === 'LENGTH') return { value: value * lengthToMetre, unit: 'm' };
if (T === 'IFCAREAMEASURE' || T === 'AREA') return { value: value * lengthToMetre ** 2, unit: 'm2' };
if (T === 'IFCVOLUMEMEASURE' || T === 'VOLUME') return { value: value * lengthToMetre ** 3, unit: 'm3' };
if (T === 'IFCMASSMEASURE' || T === 'WEIGHT') return { value, unit: 'kg' };
return null;
}