@ifc-lite/data@3.5.1
Patch Changes
-
#3325
111b733Thanks @BIMvoice! - The ParquetTypecolumn now names the IFC class the file declares, instead of the class itsIfcTypeEnumvalue coalesces to.IfcTypeEnummaps several STEP class names onto one value on purpose, so the viewer's scope chips show one chip per family:IfcDoorStandardCasesharesIfcDoor,IfcSlabStandardCasesharesIfcSlab, andIfcDistributionFlowElementandIfcDistributionControlElementboth shareIfcDistributionElement.EntityTable.getTypeNameresolves through that enum and only falls back to the parsed name when the enum saysUnknown, so a known-but-coalesced class never reached the fallback andParquetExporterwrote the coalesced name. A nine-entity model exportedIfcDoortwice for oneIFCDOORand oneIFCDOORSTANDARDCASEline,IfcDistributionElementthree times for three different classes, andIfcSlabfor anIFCSLABSTANDARDCASE— whileIfcWallStandardCasecame through intact only because it happens to hold its own enum value. The class is unrecoverable once written, and the archive disagreed withStepExporter, which re-emits every class verbatim.EntityTablegains an optionalgetExactTypeName, read through the newexactTypeName(entities, expressId)helper, which answers the declared class and falls back togetTypeNamefor table shapes that track no parsed names (a pre-v15 cache section, whose bytes never carried the column). Both table builders that keep their own columns now implement the accessor from one shared row reader,exactNameOfRow, also newly exported — so a model loaded from the server exports the same class as the same model parsed locally, rather than the coalesced one.getTypeNameitself is unchanged, so the ~90 grouping, search and display callers that depend on the coalescing — the scope chips among them — keep the answer they had.CSV, JSON and ifcx exports read the class through other paths and still report the coalesced name; those are not addressed here.
-
#3321
758ed93Thanks @BIMvoice! - Three IFC classes are no longer reported as a different IFC class.IfcTypeEnumcovers a fraction of the schema, so the table behindIfcTypeEnumFromStringdeliberately coalesces some classes onto a coarser one —IFCDOORSTANDARDCASEresolves toIfcDoor, which is lossy but sound because a door standard case is a door. Three rows pointed somewhere else entirely:IfcTendonAnchor→IfcTendon— siblings underIfcReinforcingElement.IfcFastener→IfcMechanicalFastener— the key's own child, so a plain fastener was reported as the narrower mechanical one.IfcCableCarrierSegment→IfcCableSegment— siblings underIfcFlowSegment; the tray was reported as the cable it holds.
entities.getTypeName()returned the wrong class for all three, which the Parquet exporter writes into itsTypecolumn. The rows are removed, so those classes fall through to the raw parsed name and keep their own spelling. A new test sweeps the whole table against the bundled IFC2X3/IFC4/IFC4X3 registries and fails any row whose key is not the class it resolves to or one of that class's ancestors, so this cannot come back under a different spelling.