Skip to content

fix(reader): a wall whose record holds its previous location line is read by VWallDriver.m_pCrv, so 14 doors of rac_advanced 2027 take the axes rule (#1475) (RE-360) - #1500

Draft
DrunkOnJava wants to merge 10 commits into
mainfrom
research/1475-wall-location-curve
Draft

DrunkOnJava wants to merge 10 commits into
mainfrom
research/1475-wall-location-curve

Conversation

@DrunkOnJava

@DrunkOnJava DrunkOnJava commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

Closes #1475.

On Revit 2027's save of rac_advanced, 18 of 180 SWall records hold a second GLine besides the location curve, owned by WallRunTimeData.m_prevLocLine. native_walls left out any wall with a second curve, so the 8 host walls of 14 doors returned no native line and the doors kept the default axes (RE-360). A record of exactly two curves is now read where one is the level GLine VWallDriver.m_pCrv names and the other is a GLine that only m_prevLocLine names. A record with the one GLine reads as before, and any other set of curves stays unread (a CurveLoop.m_curves profile wall, an arc, a null or ambiguous m_pCrv).

Motivation

#1456's second read found 14 doors of rac_advanced's 2027 save left on the default axes. #1454's check compares each cut opening with the 2025 save, so the 14 differ on axes alone. Both done-when items of #1475 are met: the missing row is explained from the bytes (RE-360 section 1), and the 14 doors are placed by the rule on 2027. The 15th door of the 2024 save's 8 hosts is hosted by another wall on 2027: #1454's cause, not this one.

Changes

Testing

Unit tests are banned in this repository: none added. Measured on Autodesk's sample projects of 2024 to 2027 (25 files, no Revit export of any):

  • Measure 42129732742, head d741927: the probe, the cause.

  • Measure 42134051521, head 0a0ba7ce against base ce3a3c47 (the same code without the rule), default scorers, every job green. The figures below are from it. It was dispatched from main, so it took main's gate.

  • Measure 42137808608 on head b470a9ab: the same-project gates check passes on 9 samples, but reads "Scored by workflow commit c5bae9ed", main's gate, whose 2027 ceiling is 42. It did not exercise this PR's edit of bodies_across_saves.py, so 61, 18 and 28 are not yet scored by anything.

  • Measure 42141380072, the unfiltered run on head 5754c7f3, dispatched from this branch (-f base=main -f samples=true -f nordic=true -f r2025=true -f holdout=true -f keep_ifc=true, the probe on every model), so its scorers include the edited gate: queued, not read yet.

  • Verified end to end on real Revit files: the command, the files and the measured result are in the report, with the probe that reproduces it

  • Touches the IFC exporter through what the wall read feeds: of the 25 sample exports five change and 20 are byte for byte the base's. The models that are not Autodesk samples (Core Interior, RE1, the offices, the Revit 2025 models, the held-out models) are in the unfiltered run above, not read yet

  • Not a performance change

Measured result (run 42134051521, samples only)

  • What each save reads (base, head): rac_advanced 2027 162, 180 (2024 to 2026 180, 180); rac_basic 47, 52 on 2024 to 2026 and 46, 52 on 2027; rme_advanced, rme_basic, rst_basic unchanged; Snowdon Architectural 1,202, 1,204. On the head rac_basic reads the same 52 walls and rac_advanced the same 180 on all four saves, by id. No wall the old rule read is un-read. 26 walls are newly read over every SWall record of the 25 files (the probe's count), of which 20 can reach an export: the 18 of rac_advanced 2027 and rac_basic's 709245 and 234869, none on Snowdon.
  • What settles which line is the location curve (RE-360 section 1): the previous line has the location curve's direction and length, so length cannot say. On the 4 walls where it is offset it is offset across the wall by exactly half the type thickness (0.4970 of 0.9941 ft, 0.2272 of 0.4544 ft); m_pCrv's line equals the partition axis (RE-53) to 0.0000 ft on all 13 dumped walls that have one, and attach_wall_lengths gives m_wall_curve_length only within 1e-4 ft of that axis, which all 17 newly read plain walls got. A record whose m_pCrv names the stale line could not be told apart by naming; none exists in the 25 files. Curtain walls have no axis and no guard, so only the rule protects them; both here have a coincident previous line.
  • What moves in the IFC: rac_basic 2024 to 2027 and rac_advanced 2027 only. rac_basic: curtain wall 709245 gains Qto_CurtainWallQuantities.Length 3.01 m, nothing else. rac_advanced 2027: curtain wall 149877 gains Length 25.6109 m (its 2024 to 2026 value); 14 doors gain PlacementAxesSource; 13 doors and their 13 openings change placement. No body volume or world box moves, no product added or removed. No other wall, neighbour reach, shell or length changes on any save. No check holds the two curtain Length values: no Revit export of these files exists, no gate compares a curtain wall's Length, 709245 gains it on all four saves at once, and only its box width of 9.8753 ft corroborates it.
  • Pinned walls (lane/1454-gates): one overlap, 234869 on rac_basic 2027; its body, volume, box and properties are unchanged, so its pin holds. Nothing re-pinned.
  • Snowdon Architectural: byte for byte the base's; the 2 newly read walls are not products of rvt-rs's export nor of Revit's IFC4 (counts only), so nothing is scored and no wall moves from Revit's.
  • The 14 doors: equal to the 2025 save's (and the 2024 save's) in axes, origin, body vertices and volume, 14 of 14 (base: 1 of 14), placed by the RE-347 axes rule. The same-project gate of that run, main's: rac_advanced 2027 compares 79 (61 doors, 18 windows) and leaves 28 out, where the base compared 65 and left 42 out.
  • The 14 cut openings: placement now equal to the 2025 save's; their volume and vertices still differ on all 14 (0.3526 ft at the farthest) before and after, because the cut loop of a door's symbol is read on 2024 and 2025 only. feat(ifc): Revit 2026 and 2027 pipes, ports, door and window cuts and the 2025 properties are read as on 2025 (#1190) (RE-346) #1454 widens that list; not measured together.
  • Not measured yet: any Revit export of these files; the walls' lengths and directions against Revit's; every model that is not an Autodesk sample, which the unfiltered run covers.

Audit-honesty checklist

  • README and docs reflect the state: no capability claim changes beyond the two values above
  • Changelog fragment under changelog.d/fixed/
  • A limitation remains and is stated: the 14 openings' size on 2027 (above)
  • Commit messages describe what changed
  • No emojis; no private paths or personal addresses in committed files
  • Reverse-engineering finding: a reproducible probe under probes/examples/ and the report RE-360

Legal and contribution hygiene

  • I agree this work is licensable under Apache-2.0
  • No Autodesk proprietary source, decompiled internals or NDA'd SDK content: member names and bytes of Autodesk's public sample files
  • No fixtures

Breaking changes

None.

…ts location curve on rac_advanced's 2027 save (#1475) (RE-360)
…o a wall reads across the 2024 to 2027 saves by its id (#1475) (RE-360)
…ed's 2027 walls is the previous location line, and no rule that reads those walls leaves 2024 to 2026 alone (#1475)
@DrunkOnJava DrunkOnJava changed the title research(elements): which curve of a wall's record is its location curve, on rac_advanced's 2027 save (#1475) (RE-360) research(elements): RE-360 finds the second GLine in 18 of rac_advanced's 2027 walls is the previous location line (#1475) Nov 5, 2026
…ds, every field of each wall with an SWall record, and each door and window (#1475)
…re its record also holds a previous location line (#1475) (RE-360)
@DrunkOnJava DrunkOnJava changed the title research(elements): RE-360 finds the second GLine in 18 of rac_advanced's 2027 walls is the previous location line (#1475) fix(reader): a wall's location line is read by VWallDriver.m_pCrv where its record also holds a previous location line (#1475) (RE-360) Nov 6, 2026
…s read, no wall that was read moves, the 14 doors take the axes rule, and the 2027 gate floor and ceiling move (#1475) (RE-360)
@DrunkOnJava DrunkOnJava changed the title fix(reader): a wall's location line is read by VWallDriver.m_pCrv where its record also holds a previous location line (#1475) (RE-360) fix(reader): a wall whose record holds its previous location line is read by VWallDriver.m_pCrv, so 14 doors of rac_advanced 2027 take the axes rule (#1475) (RE-360) Nov 6, 2026
…f 26 walls that reach an export, the curtain Length no check holds and the gate numbers no run scored (#1475) (RE-360)

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.

rac_advanced's 2027 save: 8 walls return no native straight-line row, so the doors and windows they host keep the default axes

1 participant