Expand description
Property VALUE resolution: turning a decoded IfcProperty attribute
(nominal value, enumerated/list members, complex-property nesting) into
the display string + kind + measure tag + candidate list that
properties::extract_property wires onto a Property. Split out of
properties.rs to keep entity-shape extraction (which pset/property to
walk) separate from value-shape resolution (how to stringify one).
ConstantsΒ§
- MAX_
COMPLEX_ πPROPERTY_ DEPTH - Guards
resolve_complex_property_valueagainst a pathological/cyclicHasPropertieschain, mirroring the TSMAX_COMPLEX_PROPERTY_DEPTHinpackages/parser/src/property-complex-value.tsexactly: real IFC nestsIfcComplexPropertyat most a couple of levels deep.
FunctionsΒ§
- complex_
property_ πtruncation_ marker - The suffix minted into a complex propertyβs display value when the depth
cap stops the walk with
HasPropertiesmembers still unread (issue #3972). Byte-identical tocomplexPropertyTruncationMarker()inpackages/parser/src/property-complex-value.tsβ the two paths feed the same property panel, CSV/parquet export and compare fingerprints, so a divergence here reads as a data difference between server and browser. - fmt_
number π - Render a number the way JS
String(n)would for the canonical value string (integers without a trailing.0, so200.0-> β200β). - infer_
data_ πtype - The IFC type tag of a typed-wrapper attribute (
List([String(type), _])), upper-cased β mirrors the WASMinferDataType. - logical_
token π - Normalise an
.ENUM.-style logical/boolean token (dots already stripped to the inner letter by the tokenizer, e.g.Enum("T"); or a bareString). - member_
list π - Stringified members of a
List(...)attribute (the WASM candidate array before joining), orNonewhen the attribute is not a list or every member filters out β the display and thevalueswire field both derive from this, so they can never disagree. - property_
reference_ πlabel - What an
IfcPropertyReferenceValuereads as (#5475): the referenced objectβsName, else itsIdentification(an external reference, a person), else#<id>so the property still reads as present. MirrorsresolvePropertyReferenceValueinpackages/parser/src/property-reference-value.ts. - resolve_
complex_ πproperty_ value - Resolve an
IfcComplexPropertyβs nestedHasProperties(EXPRESS:[Name, Description, UsageName, HasProperties], index 3) into a display value plus a flatvaluescandidate list, recursing into any further nestedIfcComplexPropertyβ mirrorsresolveComplexPropertyValue(packages/parser/src/property-complex-value.ts) member-for-member: - resolve_
single_ πvalue - Resolve an
IfcPropertySingleValueNominalValue β (value string, kind, data_type), matchingparsePropertyValueβs single-value branch exactly. - shared_
member_ πtype - The IFC type every member of a list attribute shares (
IFCLABELfor(IFCLABEL('X'),IFCLABEL('Y'))), orNonewhen a member is untyped or the types differ. Mirrors the WASMsharedMemberType(#5224). - stringify_
member π - Stringify one member of an enumerated / list value, mirroring the WASM
String(v)/String(v[1]): a typed wrapperList([type, inner])yields the inner, a scalar yields itself.Nonefor nulls (dropped, like the TS.filter(v => v !== 'null')). - stringify_
scalar π