Repository navigation
feat(ifc): an Area's space gets the region its boundary lines enclose, from its Level to the next storey (#763) (RE-317) - #1298
Conversation
…ry, scored against Revit's IfcSpace profile (RE-317)
…ach Area (RE-317)
… frame it was given (RE-317)
… around its point, from its Level to the next storey (#763) (RE-317)
…e's statement of the fact (RE-317)
…r an Area's body, with the RE-317 results (#763) (RE-317)
…probe on the 2024 samples (RE-317)
… the unmeasured non-story Level case (RE-317)
… read and placed, its Level and the Level above are both building stories, and no other Area has its region; the reason for each refusal is counted (RE-317)
…t figure in the space scorer's account, the unmeasured cases and the commands with their SHAs (RE-317)
…d lines are checked against the declared census, a line in a non-primary design option makes its group unreadable, and the free-end pruning is a worklist (RE-317)
…t the merge base, and the reproduce commands (RE-317)
…can returned, and the line groups are released before the regions are compared (#763) (RE-317)
…sources and counters beside the Area rows, refusals and area_body_refusals (#763) (RE-317)
… RE-316 and the door widths (RE-317)
|
Automated Claude Code review (the maintainer's review agent; it read the code, the report and the Measure runs, over three rounds). Round 1, two blocking items, fixed in 5a7e40a. The rule that every boundary line of the scheme on the Level is read was asserted, not checked: an Area is now drawn only when every boundary line the record chain declares is read and placed. The height also guessed in unmeasured cases: a body is now written only when the Area's Level and the Level above are both building stories. Round 2, no blocking items. Its findings were fixed in cdc21cf: an Area that shares its region with any placed Area gets no body; named lines are checked against the declared lines; a line in a non-primary design option makes its group unreadable; the pruning pass is linear. Round 3, no blocking items. Two findings were fixed in 6efadb4. The Level's Story Above setting is not read, and the docs list it as unmeasured. |
Summary
An Area's
IfcSpacegets the region that the lines of its area scheme on its Level enclose around its point, its holes the loops directly inside, extruded from its Level up to the Level above it, as Revit's export draws it. On the BIM4LCA office all 30 Areas, as built and at building permit, equal Revit's in area (within 0.1%), outline (within 0.01 ft) and base and top (within 0.01 ft); no other export moved (RE-317). An Area whose boundary is not proven keeps no body and says why.Motivation
Rooms and spaces are the first workflow made dependable (rooms first, #1260). The office's 30 Areas were written as
IfcSpacewith number, name and storey and no body (RE-191), the last 30 of Revit's 308 spaces rvt-rs did not draw. Refs #763.Changes
probes/examples/probe_re317_area_boundaries.rs,tools/re/area_boundaries_vs_ifc.py: where an Area's boundary lives (its scheme'sOST_AreaSchemeLineselements, whose boxes are the lines; a point in its data object at byte 107) and how it maps to Revit's profile; each Level's Building Story setting.src/research/partition_area_boundaries.rs(new): the planar arrangement of straight lines along the plan axes (splits at T joints and crossings, free ends left out, nested loops), capped at 2048 lines and 200,000 points, ring polygons built once, free ends pruned by a worklist (linear);face_at, the region around a point, fail closed.src/research/partition_area_records.rs: the Area's point, scheme, named lines, Level and the Level above. The fail-closed contract, after review:named_lines_not_in_scheme_and_level);RvtElementRecordGeometry.AreaBodyRefusaland is counted inexported.area_body_refusals(schema and docs updated).src/ifc/export_content.rs: the body,SpaceOutlineSourcearea_boundary,BodySource/ProfileSourcepartition_area_boundary_lines,BodyHeightSourcearea_level_to_next_storey; an Area is left out of the spaces that hold a room's furniture; the room schedule gives an Area its area.docs/export-diagnostics.mdand the schema:area_body_refusalsis empty when every Area is drawn or the export has no geometry;status.mdnames it;evidence.mdwording fixed; the report has the reproduce command for the samples probe.tools/re/space_profiles_vs_ifc.pycounts Areas as their own kind and scores the lowest and highest vertex of each body against Revit's (plan_profiles_vs_ifc.pycan return the heights).docs/rooms.md(what is not measured now names the top storey, non-story Levels, the story above, Areas bounded partly by walls and the other releases),export-diagnostics.md,status.md,evidence.md,supported-profile.md,support-matrix.json,user-guide.md,format-reconnaissance.md,reports/element-framing/RE-317-area-boundaries.md, changelog fragment.Testing
Unit tests are banned: end to end on real files only. No local build; GitHub's runners did all of it.
mainmerged in (37816e3: fix(elements): Revit 2008 to 2023 frames with no ElementId of their own take the id of the declared record around them, and 2016 to 2023 leave out the elements outside the export phase and in a non-primary design option (#1261) (RE-315) #1286, feat(rooms): a room whose stored solid the walk does not close takes the outline its solid's faces make, labelled stored_solid_faces or stored_solid_approximate (#90) (RE-316) #1292, the door widths), so the numbers below are againstmainas it now is:-f base=main -f nordic=true -f r2025=true -f samples=true -f holdout=true, every scorer, run 41740909229.space_profiles_vs_ifcon the BIM4LCA office as built and at permit: spaces without a body 30 -> 0; "rvt-rs area area boundary: 30, area within 0.1% 30, outline within 0.01 ft 30, both 30, boundary within 0.01 ft 30" and its height line "30, lowest and highest vertex within 0.01 ft 30" on each file; spaces in both 276 -> 306 and 278 -> 308; area within 0.1% 230 -> 260 and 232 -> 262, outline 220 -> 250 and 225 -> 255; every space's base and top within 0.01 ft (306 of 306 and 308 of 308); the room and family-instance lines are the onesmainprints.schema.txtthe 30 (office) and 3 (rac_advanced) new swept solids with a Position. Property sets, quantities, plan profiles, class sets, room names and storeys, and the WHERE rules print the same. No held-out model is in the scorer diff: every held-outspace profiles:count line is identical tomain's (BIM Whale 2021: 0 of Revit's 8 written, as before).rac_advanced3 of 25 Areas gain a body, 18 are refused asboundary_lines_not_readable(a slanted line or arc in their group) and 4 aspoint_in_no_single_region(their point lies in no loop of the lines; possibly Areas bounded partly by walls, the main gap, not examined further);rst_basic's one Area is refused asnext_storey_not_proven; every other sample is byte-identical.area_body_refusals; schedule rooms take their area per main's rule, Areas per this change's).tools/check-local.shwas not run: no local builds here.Audit-honesty checklist
changelog.d/added/docs/rooms.md"What is not measured" and in the report: the top storey, Levels that are not building stories, the story above (never read), Areas bounded partly by walls, boundary lines that are not along the plan axes, the Area's base offset, releases other than 2024, andQto_SpaceBaseQuantities.Height, which Revit writes on an Area and rvt-rs does not yetprobes/examples/, the dated RE-317 report and the reconnaissance addendumLegal and contribution hygiene
SpatialElementExporter.GetScaledHeightandLevelUtil.CalculateDistanceToNextLevel, cited and not copied); no fixtures added.Breaking changes
None to the stable API.
partition_area_records::areas_from_partition_chain_records(behindunstable-research) takes the recovered Levels as a fourth argument;ExportedModelDiagnosticsgainsarea_body_refusals(serde default).Screenshots or output samples
The Measure counts above. An Area now reads
SpaceOutlineSourcearea_boundary,BodySourcepartition_area_boundary_lines,ProfileVertexCount,ProfileVoidCountandBodyHeightSourcearea_level_to_next_storey; an Area without a body readsAreaBodyRefusal.Related issues
Refs #1194 (its Areas item: Revit 2024 Areas now get a body; Areas on other releases, slanted and arc boundary lines, and Story Above stay open), #1260 (rooms first). #763 (closed) was the earlier family-space work on the same office.