Skip to content

v0.12.0 vs v0.6.1: some meshes export as bounding boxes; some doors as IfcOpeningElement #1247

Open

Description

@hemanth1986

Both versions built plain from their release tags (no patches), 49 of our own files, counts only.
Linux, 16 GB container. Elements are matched by Revit element id between the two versions.

1. Real meshes become 12-triangle boxes. On 9 of the 49 files, 665 elements that v0.6.1
exports with a real mesh come out of v0.12.0 as a 12-triangle bounding box. Most are beams (341
of them in one 142 MB Revit 2024 file); the rest are railings, light fixtures, doors and generic
models. Example: one light fixture goes from 18,944 triangles to 12. On 598 of the 665 the box
also differs from v0.6.1's mesh bounds by more than 0.5 mm.

2. Some doors exported as openings. On a 438 MB Revit 2024 file, rvt-ifc --large-model
writes 73 door instances as IfcOpeningElement instead of IfcDoor. Their family names all
start with AR_DOR_. The other 361 doors in the file come out as IfcDoor.

On the plus side, v0.12.0 reads 16 of these files that v0.6.1 cannot read at all, and it is
faster on most files both versions read (one 202 MB file: 135 s to 35 s).

Happy to run a candidate fix on these files and report counts.

Activity

  1. added
    type:bugCorrectness defect or regression.
    area:ifcWork in the ifc area.
    area:geometryWork in the geometry area.
    communityFrom a contributor outside the maintainers
    priority:P1High-impact work needed for the MVP or beta path.
    on Nov 2, 2026
  2. DrunkOnJava commented on Nov 2, 2026

    @DrunkOnJava
    Owner

    Thank you for running these comparisons and sharing such detailed results while keeping your project files private. I’m investigating both the mesh and door behavior, and I’ll follow up here with what the comparisons show. I really appreciate the time and care you put into the report.

  3. 38 remaining items

  4. DrunkOnJava commented on Nov 3, 2026

    @DrunkOnJava
    Owner

    v0.12.2 is out and includes all four fixes from candidate/1247-b, so there's no need to build the branch: pip install -U rvt, cargo install rvt --locked or the archives on the release page install it. The same two counts for your beams would still help, since their cause is still open: how many carry each BodySource value in the exported IFC's RvtElementRecordGeometry property set, and the line rvt-ifc prints about saved graphics. Thank you!

  5. hemanth1986 commented on Nov 3, 2026

    @hemanth1986
    Author

    Thanks! Results for 3913319 (candidate/1247-b) against v0.12.0, same 49 files and flags,
    counts only.

    Boxes: 665 → 560. No new box cases in any other file, and element counts match v0.12.0
    everywhere. 26 files gained triangles.

    file became box, v0.12.0 → candidate
    1 21 → 2
    2 10 → 10
    3 34 → 17
    4 151 → 133
    5 2 → 2
    6 (the beams) 341 → 341
    7 11 → 11
    8 67 → 17
    9 28 → 27

    The 341 beams: all 341 carry BodySource = partition_element_record_bbox, with or
    without --saved-meshes. With --saved-meshes, rvt-ifc reports 256 of 930 bbox bodies drawn
    from saved graphics and 674 kept their box; none of the 256 are among the beams.

    Doors (438 MB file): with --large-model the candidate still writes all 73 as
    IfcOpeningElement (0 as IfcDoor). rvt-ifc prints "saved graphics not read, bodies
    unchanged: reassembled group budget exceeded". The probe as given finds 0 rows, since it opens
    at default limits. In a local copy switched to large-model limits, all 73 doors match but show
    u, with "type records not read" and "group budget exceeded". So on this file the group budget
    stops us before the door type is read, even with --large-model.

  6. DrunkOnJava commented on Nov 3, 2026

    @DrunkOnJava
    Owner

    Thank you, that narrows both down.

    Doors: you found the cause. Every read of native records took a fixed 256 MiB budget for one reassembled group, and --large-model did not raise it. #1271, now on main, makes --large-model raise it, and a door is no longer written as its opening alone when its type could not be read. Could you run main (3ba5bda or later) with --large-model on the 438 MB file, and say how many of the 73 come out as IfcDoor and whether rvt-ifc still prints "group budget exceeded"?

    Beams: a beam keeps its box when its element data holds no location line, when the line it holds does not fit its record box, or when its stored copies in different partitions hold different lines (a rule v0.6.1 already had). Commit cd3aff0 (branch research/1247-beam-probe, which also has the door fix) adds a probe that sorts the boxed beams by which of these keeps each one: cargo run --profile ci -p rvt-probes --example probe_re306_beam_copies -- model.rvt. It opens the file with --large-model's limits, and its streams_not_read line says whether any part still could not be read. It prints counts only, no ids or names. Its census and disagree lines for the beam file would tell us which it is.

    Thanks again!

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:geometryWork in the geometry area.area:ifcWork in the ifc area.communityFrom a contributor outside the maintainerspriority:P1High-impact work needed for the MVP or beta path.type:bugCorrectness defect or regression.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions