Repository navigation
feat(ifc): a column cut across its top by one slab gets the cut mesh's CrossSectionArea and NetVolume (#1203) (RE-353) - #1477
Merged
Conversation
…s CrossSectionArea and NetVolume (#1203) (RE-353)
…e circumference times its height (#1203) (RE-353)
… its voids and non-convex outline (#1203) (RE-353)
… second slab across its top that misses the section is harmless (#1203) (RE-353)
… and named lengths (#1203) (RE-353)
…n round (#1203) (RE-353)
… offsets (#1203) (RE-353)
…ith its fragment, addendum and criteria entries (#1203)
DrunkOnJava
marked this pull request as ready for review
November 5, 2026 23:41
DrunkOnJava
enabled auto-merge (squash)
November 6, 2026 00:51
DrunkOnJava
added a commit
to puzzbobb/rvt-rs
that referenced
this pull request
Nov 6, 2026
Main moved by DrunkOnJava#1468, DrunkOnJava#1477 and DrunkOnJava#1481; the addenda of RE-353 and RE-362 both stay.
12 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #1203. Figures from the unfiltered run 42130190386 at 35cfd89, which holds every limit below.
Summary
CutPairGStepnames the slab, a clean pair joins the column to the same slab, the slab's span starts inside the column and reaches its top) gets the quantities Revit's export writes on the 18 meshed columns of the BIM4LCA office at building permit:NetVolume, the volume of the box less the part of the slab inside it, andCrossSectionArea, half the surface of that cut box, where every edge of the slab inside the section runs parallel to a side of it (NetVolumealone otherwise). 17 of the 18 are written equal (run 42130190386, as at 223968a before the limits); the 18th, whose cut pairs name a wall that only touches it, is left out.OuterSurfaceArea, the circumference times its height, where its type's named lengths areDiameter, equal to both sides of its box, and at most the family'sOffset BaseandOffset Top, each exactly 0 (any other named length leaves it out). That is one column on each of the two office files, the same column, taken as round from the captionDiameteralone. ItsCrossSectionArea,GrossVolumeandNetVolumestay out: they are not the circle's (RE-353 section 4). The type's named lengths are those three, notDiameteralone as RE-291 took them to be (probe run 42121438036); RE-291 is corrected here.b(andh) equal to its box's sides is not implemented. It is:rectangular_sectionandfills_sectionhave required it since feat(ifc): write the base quantities of a joined column that nothing cuts or crosses (#1046) (RE-291) #1204 (RE-291 section 3), and 13 and 15 unjoined columns are written through it.Limits of the rules (the second read's findings)
SlabTop::Flat: record read, no shape edit moves its top: a sloped floor's underside is not its base), and the same slab a clean pair joins to the column. Any other slab across the column's top, joined by a clean pair, must have no plan area in the section.CrossSectionAreais written only where every edge of the slab inside the section is parallel to a side (1e-6 in the sine of the angle),NetVolume, exact geometry, either way. RE-353 section 3 states the limit.NEW_RULE_REVIT_VERSIONS): the office is the only file either is measured on, andsamples=true's verdict does not compare column quantities, so a later release is not opened by a run that cannot see it. The existing RE-291 rule keeps the releases it read. A column RE-178 trimmed (its body is cut though its source says record box) is left out. On Revit 2024 a floor's shaft is cut from its outline, so a floor with a shaft has its true outline; the later releases that export it whole are not read.body_geometry(plan_outline,Placement,clip_ring_to_band,signed_area, nowpub(crate)) instead of a copy.Motivation
#1203 items 2 and 3. revit-ifc (
PropertyUtil.CreateBeamColumnBaseQuantities, IFC_v24.3.40, CLEANROOM.md source 5) was read and cited, and no code was copied or translated: its column quantities takeLength,OuterSurfaceAreaandGrossVolumefrom the extrusion its exporter finds and, where there is none,CrossSectionAreafrom the element's computed area parameter andNetVolumefrom its computed volume. Measured on Revit's own export of the office at permit, all 18 meshed columns have exactly those two quantities, the volume is the mesh's and the area is half the mesh's surface (RE-353 section 2).Changes
src/ifc/export_content/column_quantities.rs: the column's cut pairs are assessed as before, and one slab across the top is now a third outcome beside clear and refused; the slab's plan region (outline and voids) is clipped to the column's section; the limits above. A round column'sOuterSurfaceArea.src/research/partition_type_parameters.rs,partition_schema_mvp.rs,partition_schema_mvp/{fields,framing}.rs,src/ifc/export_content.rs,src/ifc/body_geometry.rs(one visibility): the round section a column type holds and the file's release, queued for the pass, and the floors' known tops.probes/examples/probe_re353_column_cut_footprints.rs,probe_re353_round_column.rs;reports/element-framing/RE-353-cut-columns-and-the-round-column.md(and RE-291's correction), the changelog fragment, the addendum todocs/format-reconnaissance.md, the criteria page's entries anddocs/contribution-map.md's W7: the round column and the meshed columns' values, and the section check on box-drawn columns #1203 line.Testing
Unfiltered Measure run 42130190386 (head 35cfd89 against
mainat 8060ecc;-f base=main -f nordic=true -f r2025=true -f holdout=true -f samples=true, every scorer,qtos_vs_ifcandpsets_vs_ifcwith--revit-set-placement; the office as built and at permit, the 18 held-out models, the 24 R2025 models, the four RE1 models, Core Interior, Einhoven and the sample projects):CrossSectionArea320 to 337 andNetVolume265 to 282 of 345,OuterSurfaceArea320 to 321 of 327); as built 29,760 to 29,761 (OuterSurfaceArea278 to 279 of 279). 17 columns stay, the same count as at 223968a before the limits;main's, and the IFC sha256 of Core Interior, Einhoven, RE1 Architecture, the 18 held-out models and 108 of the 111 exports ismain's. The three that moved are the two office files andsample-2024-snowdon_towers_sample_architectural(Revit 2024), whose IFC is 136 bytes longer with the same entity total (40,945) and diagnostics. Run 42135731462 (filtered, head f60e0d3,keep_ifc=true) kept its IFCs: the 136 bytes are theOuterSurfaceAreaof its 2 round columns, which are all the round columns it has (RE-353 section 5.1). Revit's IFC4 export of the sample holds no base quantities at all (0IfcElementQuantity; RE-242), so the 2 values are counted apart, not scored equal, different or extra; Revit's own extrusion of each column (outer perimeter times depth) gives rvt-rs's value to 2.4e-7 and 1.5e-7 m², which checks the rule's inputs and not a value Revit wrote;same-project gatescheck passes on 35cfd89 (it does not compare column quantities).Files that exercise the rules: the cut-column rule, the office at permit alone (17 columns, scored equal); the round-column rule, the office as built (1 column) and at permit (the same column), both scored equal, and Snowdon Towers Architectural (2 columns, not scored against a value). No other model of the run has a column either rule takes.
Not measured: that the 17 are the columns the rule is meant to keep, by tag (the scorer counts); and the rules' generality, since the held-out models hold no column either rule takes. The branch now also holds the merge of
mainat daf3610 (CI files only) and the figures.