Skip to content

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
mainfrom
feat/1444-furniture-systems
Open

DrunkOnJava wants to merge 7 commits into
mainfrom
feat/1444-furniture-systems

Conversation

@DrunkOnJava

@DrunkOnJava DrunkOnJava commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

Furniture Systems (OST_FurnitureSystems, -2001100) are read from their element records on every release the exporter reads and written as IfcSystemFurnitureElement with no PredefinedType, 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 2018 rac_basic sample (RE-326 section 5) holds 3 IfcSystemFurnitureElement; the 3 this head writes for that save are its 3 by Tag, 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_basic that rvt-rs does not read; category_map.rs mapped a FurnitureSystem class to IfcFurniture and nothing produced it. RE-350's census found Revit's own export writes them as IfcSystemFurnitureElement, 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_SYSTEMS in PRODUCT_RECORD_CATEGORIES (43) and RECOVERED_CATEGORIES (50).
  • src/ifc/category_map.rs: FurnitureSystem as IFCSYSTEMFURNITUREELEMENT, PredefinedType unset, replacing IFCFURNITURE.
  • src/ifc/export_content.rs: no Constraints Level parameter and no Reference property 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 joins ROOM_CONTENT_TYPES (the export contains all 3 in a space).
  • src/ifc/gltf.rs, src/ifc/sheet.rs: the colour IfcFurniture has. 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 of changelog.d/research/1444-1445-category-stages.md for both shipping in one release.

Testing

Unit tests are banned in this repository, and none are added.

  • Verified end to end on real Revit files. Measure run 42135914864 (head 4ca938ad, base daf36102, -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 every rac_basic save of 2015 to 2027, each by exactly 3 IfcSystemFurnitureElement and no other class. schema.txt of 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 three rac_basic saves among them hold the category and pass). The advisory semantic check finds no difference in 34 models.
  • Against Revit's export, on the 2018 save (the kept IFC paired with the public export by Tag, counts and distances only): 3 written, 3 in the export, 3 of 3 Tag equal 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 no Pset_ set and no Reference; decoded.parameter_value_count does not move.
  • Differences from Revit's export, stated: it contains all 3 in an 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.
  • Not exercised: nested components of the class's own category (NESTED_COMPONENT_CATEGORIES names only the device categories) and the design-option and phase filters.

Audit-honesty checklist

  • Docs and the report state the count (one project, 3 elements) wherever the category is claimed.
  • Not written, and said so: type objects, Revit's property sets, containment in a space before Revit 2024.
  • A user-visible change has its fragment changelog.d/added/1444-furniture-systems.md; the support-matrix entry is experimental.

Legal and contribution hygiene

  • Apache-2.0; no Autodesk proprietary source, decompiled internals or NDA'd content (CLEANROOM source 5 is not read for this change).

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.

@DrunkOnJava DrunkOnJava added the ready-when-green Draft whose code is complete: marked ready for review once its fast CI passes label Nov 6, 2026
@DrunkOnJava
DrunkOnJava marked this pull request as ready for review November 6, 2026 01:04
@DrunkOnJava DrunkOnJava added land Reads and final Measure are in: the watcher lands it next, one at a time and removed ready-when-green Draft whose code is complete: marked ready for review once its fast CI passes labels Nov 6, 2026
@DrunkOnJava
DrunkOnJava enabled auto-merge (squash) November 6, 2026 01:20

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

land Reads and final Measure are in: the watcher lands it next, one at a time

Projects

None yet

Development

Successfully merging this pull request may close these issues.

rvt-rs reads no reinforcing bars, element assemblies or Furniture Systems

1 participant