Repository navigation
feat(elements): Furniture Systems are exported as IfcSystemFurnitureElement, on one project and 3 elements (#1444) (RE-352) - #1486
Open
DrunkOnJava wants to merge 7 commits into
Open
DrunkOnJava wants to merge 7 commits into
DrunkOnJava wants to merge 7 commits into
Conversation
DrunkOnJava
marked this pull request as ready for review
November 6, 2026 01:04
DrunkOnJava
enabled auto-merge (squash)
November 6, 2026 01:20
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Furniture Systems (
OST_FurnitureSystems, -2001100) are read from their element records on every release the exporter reads and written asIfcSystemFurnitureElementwith noPredefinedType, the class and the absent enumerator of Revit's own IFC4 export. The evidence is one project and 3 elements: Revit's public IFC4 export of Autodesk's 2018rac_basicsample (RE-326 section 5) holds 3IfcSystemFurnitureElement; the 3 this head writes for that save are its 3 byTag, none extra and none missing, and their record boxes equal Revit's bodies to 0.0000 ft. No other model in Measure places a Furniture System, so there is no held-out check. The export has no licence: only counts and distances are quoted, no id of its, tag list or name.This is the second pull request of #1444. Rebar and Structural Beam Systems have no Revit export that shows them and stay unread, with their reasons in RE-350 (#1467, landed).
Motivation
#1444: RvtIO counts 3 Furniture Systems on
rac_basicthat rvt-rs does not read;category_map.rsmapped aFurnitureSystemclass toIfcFurnitureand nothing produced it. RE-350's census found Revit's own export writes them asIfcSystemFurnitureElement, so the category meets the rule that a category is added only where a Revit export holds it and the ids match with no false positive.Changes
src/research/partition_element_records.rs:OST_FURNITURE_SYSTEMSinPRODUCT_RECORD_CATEGORIES(43) andRECOVERED_CATEGORIES(50).src/ifc/category_map.rs:FurnitureSystemasIFCSYSTEMFURNITUREELEMENT,PredefinedTypeunset, replacingIFCFURNITURE.src/ifc/export_content.rs: noConstraintsLevel parameter and noReferenceproperty for the class (the export writes no property set on its 3, and a set is written only where a Revit export confirms it); the class joinsROOM_CONTENT_TYPES(the export contains all 3 in a space).src/ifc/gltf.rs,src/ifc/sheet.rs: the colourIfcFurniturehas.src/bin/rvt_ifc.rs,viewer/src/main.ts: the entity's display name.reports/element-framing/RE-352-furniture-systems.md,changelog.d/added/1444-furniture-systems.md,docs/support-matrix.json,docs/status.md,docs/compatibility.md,docs/format-reconnaissance.md; the wording ofchangelog.d/research/1444-1445-category-stages.mdfor both shipping in one release.Testing
Unit tests are banned in this repository, and none are added.
4ca938ad, basedaf36102,-f base=main -f nordic=true -f r2025=true -f holdout=true -f samples=true -f keep_ifc=true, every scorer): 13 of 111 exports move and 98 are byte for byte main's (Core Interior, Einhoven, RE1, the office, the 24 R2025 models, the 19 held-out and spent files, 45 of 58 samples). The 13 are everyrac_basicsave of 2015 to 2027, each by exactly 3IfcSystemFurnitureElementand no other class.schema.txtof each of the 13: IFC4 arity, validate 0, EXPRESS rules 0, property sets 0 findings and the census equal to main's.same-project gates: success (9 samples held to their earlier saves and the Areas; the threerac_basicsaves among them hold the category and pass). The advisory semantic check finds no difference in 34 models.Tag, counts and distances only): 3 written, 3 in the export, 3 of 3Tagequal both ways (0 false positives, 0 false negatives), none under another class; the 3 record boxes equal Revit's bodies, extents and centres to at most 0.0000 ft. The written elements carry noPset_set and noReference;decoded.parameter_value_countdoes not move.IfcSpace, and rvt-rs contains 2 of the 3 in a space on Revit 2024 and later only (as for every furniture class; the marker the containment reads is written from 2024), the third has no Level and stays in the building; it types all 3 and rvt-rs types none.NESTED_COMPONENT_CATEGORIESnames only the device categories) and the design-option and phase filters.Audit-honesty checklist
changelog.d/added/1444-furniture-systems.md; the support-matrix entry isexperimental.Legal and contribution hygiene
Breaking changes
None for the API. An export of a project with Furniture Systems gains those elements, as
IfcSystemFurnitureElement.Related issues
Closes #1444 (RE-350, landed in #1467, records Rebar and Structural Beam Systems with their reasons). Discussion #1241, RE-350, RE-319.