Skip to content

feat(ifc): the sloped line of a wall's edited elevation profile goes on, along its slope, to the wall's end (#1473) (RE-358) - #1501

Draft
DrunkOnJava wants to merge 13 commits into
mainfrom
fix/1473-far-end-stub
Draft

DrunkOnJava wants to merge 13 commits into
mainfrom
fix/1473-far-end-stub

Conversation

@DrunkOnJava

@DrunkOnJava DrunkOnJava commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

A wall whose elevation profile was edited keeps its cut-out past the profile, to the wall's end, where the wall goes on past the profile. The opening that voids the wall (RE-151) stopped at the profile's end, so a stretch of the wall that goes on past it stayed as the box had it while Revit's body goes on along the profile (#1473, RE-358). Two shapes are read: a sloped line, carried along its slope, and the cut-out of a notch (both neighbours level), carried straight out and told from the wall's own top or base by height, not by the order the outline lists its vertices in.

Motivation

#1470 (RE-348) made the ends of the BIM4LCA office's Basement walls 2057668, 2057670, 2058499 and 2058501 Revit's but left each 0.209 ft3 over Revit's volume as built (0.207 at permit): a 0.4101 ft stretch past the profile's end, flat at 183.7343 ft where Revit's top reaches 183.085 ft. #1410's volume done-when rests on it.

Changes

  • src/research/partition_schema_mvp/walls.rs, fields.rs: the profile's lowest and highest points along its own axis are kept with the wall's openings (m_profile_extent), on the rule's own release list (Revit 2024).
  • src/ifc/export_content/wall_profile.rs (new), export_content.rs: after the wall ends and base cuts, an opening that reaches an end of the profile with one vertical edge is carried on to the wall's end, where the wall goes on past the profile by more than 0.001 ft and the stretch is at most the wall's thickness (a stated heuristic; the record lists no joined wall at the office's stub ends, so none is asked for). Not read: ProfileStubRefusal. extended is pure and has unit tests of its failure modes next to it.
  • src/ifc/mod.rs, export_decisions.rs, rvt-mcp/src/*.rs, docs/export-diagnostics.md, docs/mcp.md, docs/schemas/export-diagnostics.schema.json, tools/re/wall_rule_counts.py, tests/export_decisions_counts.rs: exported.wall_profile_sources, exported.wall_profile_refusals and the decision wall_profile_extension_refused.
  • Report RE-358 and a changelog fragment.

Testing

Unit tests are banned; measured end to end on Revit's own exports.

  • Verified end to end on real Revit files (the BIM4LCA office, CC BY-SA 4.0): Measure 42130070528 at 3c461d02 against main at 8060ecc8 (nordic=true samples=true sample_years="2024 2024", models nordic-office-* core-interior sample-2024-*, the four wall scorers). Eight Basement walls take the rule on each office file (wall_profile_sloped_past_the_high_end 6, _low_end 2, no refusal): the four of A profile-edited wall's sloped top stops at the profile's end: a 0.41 ft stub stays flat, 0.65 ft too high #1473 go from 0.209 ft3 over Revit's (0.207 at permit) to Revit's within 1.1e-5, with plan rows equal 100 taller 0; 2056705 and 2056770 (Walls 2056705 and 2056770: Revit cuts their ends back above 182.087 ft and steps them, and neither office file draws that #1474) move 0.206 ft3 towards Revit's; 2070689 and 2070691, which the prediction did not name, go from 0.249 over to Revit's within 4.1e-5. No lower anywhere. This meets Wall ends Revit steps up the height: the second step is left out (RE-337 follow-up) #1410's volume done-when (2057668 and 2057670 within 1e-5 ft3, no top above Revit's).
  • Outside the office the same run moved two more 2024 files: Autodesk's rac_basic (walls 198694 at both ends and 493612 at the low end, one refusal profile_cut_not_read_at_the_wall_end; no Revit export to check them) and Snowdon Towers Architectural (wall 1996082 at the low end, one refusal profile_slope_leaves_the_cut; against the local Revit export its plan rows go from equal 662 taller 10 to equal 672 taller 0 of 672 and it is the only wall of 1,078 that moves, its volume still 8.16 ft3 over Revit's from 12.59). Core Interior and every other 2024 file are byte for byte main's.
  • Run 2, Measure 42138664887 at 337ca29c against main at c5bae9ed (nordic=true samples=true sample_years="2024 2027", models nordic-office-* core-interior sample-*, default scorers, keep_ifc; 30 exports): that head asked for a joined wall at the carried end, and it carried nothing. exported.wall_profile_sources is empty and exported.wall_profile_refusals is profile_end_has_no_join_partner 8 on each office file, 2 on rac_basic and 1 on Snowdon: every end run 1 carried was refused. ifc.sha256 moved on those four files for the markers alone (the scorer diff holds wall_rules.txt only). The same-project gates check run is success (9 samples held to their earlier saves, and the Areas on 4 saves), of a head that carried nothing and a gate that does not compare these walls. The probe of run 42096049754 shows why: at all eight office stub ends the record's end step lists no joined wall (m_realJoined and m_geomJoined empty) and names one exposed neighbour, face 6, which 175 of 1,601 ends without a joined wall also have. The requirement is dropped in the push after run 2; the level fix, the names and the release list are measured by no run yet.
  • Run 3, Measure 42143081343 at 8e351289 against main (nordic=true samples=true sample_years="2024 2027", models nordic-office-* core-interior sample-*, default scorers, keep_ifc): the rule without the join requirement, the level fix by height, the form names, the release list, the same-project gate on a head that carries, and exported.wall_profile_height_checks, a count of how a carried sloped line stands against the record box's top (a rising line should equal it; the office's falling ones cannot) that nothing is carried or kept by. Not yet read.
  • Against Revit's own public IFC4 export of the Revit 2018 rac_basic (local only, no licence): walls 198694 and 493612 are in it with the same names and Tags, and neither matches before or after the rule (equal 0 of 425 and of 646 plan points); the rule moves their volumes 6.37 and 2.79 ft3 towards Revit's, and they stay 35.2 and 7.7 ft3 from it for reasons the rule does not touch. They are unchecked; the same-project gate does not compare them (the profile openings are read on 2024 only).

Audit-honesty checklist

  • Docs state the rule as it is: the line's slope is read from the file, its going on to the wall's end is a rule that Revit's export shows on 4 walls in one project, not a byte of the file.
  • A fragment under changelog.d/fixed/.
  • The release list is the profile openings' own (Revit 2024).

Breaking changes

None (additions to exported diagnostics and one decision reason).

Related issues

Closes #1410 (its volume done-when is met: 2057668 and 2057670 within 1e-5 ft3, no top above Revit's).

Refs #1473 (not closed here): its done-when says no other wall moves and the stub is read from the bytes. Seven other walls move (2056705, 2056770, 2070689, 2070691 and three of rac_basic and Snowdon); the slope is read from the profile's bytes and rac_basic 493612's record box carries the line to the wall's end, while that Revit goes on along it is shown against Revit's export on the office and one Snowdon wall.

Refs #1474 (stays open): walls 2056705 and 2056770 go from 0.339 ft3 over Revit's at permit to 0.132; what remains is the end step above 182.087 ft.

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wall ends Revit steps up the height: the second step is left out (RE-337 follow-up)

1 participant