Skip to content

feat(ifc): door types' Fire Rating and family types' Manufacturer, read from a family type table's entries (#1185) (RE-354) - #1490

Open
DrunkOnJava wants to merge 18 commits into
mainfrom
feat/1185-door-type-values
Open

DrunkOnJava wants to merge 18 commits into
mainfrom
feat/1185-door-type-values

Conversation

@DrunkOnJava

@DrunkOnJava DrunkOnJava commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Closes #1185. Its done-when is met on what it names: FireRating, Manufacturer and LoadBearing are written and equal on both office files, IsExternal on type objects and a door type's ThermalTransmittance are left out with their evidence, and the criteria page says what is written. The residuals have their own issues: #1507 (windows' FireRating), #1496 (the RE1 Plumbing tank) and #792, where the office's one type-object Pset_SanitaryTerminalTypeCommon.Reference that Revit's export omits stays (unchanged from main, and not one of #1185's four properties).

Summary

  • A door type's Fire Rating and a family type's Manufacturer are read where the BIM4LCA office stores them: in the form of a family type table's entries (u32 n · UTF-16 × n · (u32 0 | ff ff ff ff · u16) · f64 · i64 -1 · i64 BuiltInParameter, RE-185 section 3.3), the text first, in the type's own value block, under -1001206 and -1010108. RE-77's reader takes the parameter id first and never meets them, and RE-289's probe looked for that form alone, so its Manufacturer negative is overturned. The type object, and a door of that type whose own Pset_DoorCommon.FireRating is empty, carry the Fire Rating; the type object alone carries the Manufacturer, and only where IFC4 applies Pset_ManufacturerTypeInformation (the type of an IfcElement).
  • An entry is a type's only where no value block mark of any id lies between the type's mark and the entry (on probe run 42118085660, 33 of the office's 88 Manufacturer entries lie more than 100 KB from their mark, up to 3.2 MB; the 12 that match Revit's export lie within 8.4 KB), and a type whose copies disagree, across partitions or with RE-77's form, gets neither and is counted in the diagnostics. The disagreement rule is unexercised on the office, whose entries are all in Partitions/425.
  • A door type's ThermalTransmittance (3.7021, the f64 · ff × 8 · i64 -1005430 entry of its block) is found and left out: reading it was equal on the office but wrote a value on a door type of each of r2025-12 to r2025-17, whose Revit 25.0.2 IFC4 exports write none, so Revit's exporters disagree (the standing rule). The office's one value stays missing, 18 of 19.
  • RE1 Plumbing's extras go from 2 to 3, on the one type Revit's export doesn't hold. The type is 442362, 224200-FIXT-Rough In Water Closet Tank:Water Closet Tank_M, Manufacturer Generic: the type of the water closet tank 442378, which rvt-rs writes and Revit's export does not hold (RE-160, RE-169 section 4, RE-262). Every property on it is a value Revit does not write (two already counted). It is not the class difference of BIM4LCA office: fixture 3095244 is IfcSanitaryTerminal where Revit writes IfcFlowTerminal, and the permit model writes a column Revit's export leaves out #792, and RE1's export is IFC2X3, counted apart and never a reason to remove a value. The tank is tracked by RE1 Plumbing: water closet tank 442378 is written, and Revit's export holds neither it nor its type #1496.
  • Measured residual, not reached: Pset_WindowCommon.FireRating stays missing with the same counts before and after (4 on each of r2025-12 to r2025-17, 13 on each of the held-out 2024 to 2027 models, 11 on each of the held-out office 2024 to 2027 models): R2025's 0.5h are table entries under family-parameter ids 12482 and 12220, not -1001206. Filed as W7: windows' Pset_WindowCommon.FireRating is read from family-parameter table entries (R2025 models 12 to 17, held-out models) #1507 (0.16.0).
  • attach_type_text_parameters also copies the type's two texts as Text onto every element of the type in rvt-rs's own non-Pset_ set, so "the instance gets none" is about Pset_ sets only.

Motivation

#1185's remaining values: the six door types' FireRating (and the two doors whose rating is that type's -), the one door type's ThermalTransmittance and the six family types' Manufacturer. probe_re354_door_type_blocks (Measure runs 42115439931 and 42118085660) found the texts of the exported types in their own blocks in this form.

Changes

  • src/research/partition_type_parameters.rs: the table-form scan beside RE-77's, both flag forms, attributed only where no mark of any id lies between the owner's mark and the entry; copies that disagree across partitions or with the id-first form give the type neither.
  • src/reader.rs, src/ifc/mod.rs: the types left out so are counted in the export diagnostics.
  • src/ifc/export_content.rs: the type object's Manufacturer set, for an entity IFC4 applies Pset_ManufacturerTypeInformation to.
  • probes/examples/probe_re354_door_type_parameters.rs, probe_re354_door_type_blocks.rs; reports/element-framing/RE-354-door-type-values-and-family-type-manufacturer.md (and notes in RE-286 and RE-289), the changelog fragment, the addendum to docs/format-reconnaissance.md, the type-text-parameters row of docs/support-matrix.json and the criteria page's and contribution map's entries.

Testing

Unfiltered Measure run 42135050819 on head e07349c against main at daf3610 (-f base=main -f nordic=true -f r2025=true -f holdout=true -f samples=true -f keep_ifc=true, no ifc_flags, every scorer; the office as built and at permit, the 18 held-out models (counts only), the 24 R2025 models, the four RE1 models, Core Interior, Einhoven and the sample projects). The same-project gates check passes on e07349c, and the full CI passes on it.

  • office, as built and at permit: Pset_DoorCommon.FireRating 47 to 55 of 55 equal and Pset_ManufacturerTypeInformation.Manufacturer 0 to 6 of 6; equal 44,413 to 44,427 and 44,562 to 44,576; different stays 1 and the values rvt-rs writes that Revit does not stay 2 and 7; ThermalTransmittance stays 18 of 19; the quantities are unchanged. The earlier run 42123166507 (before the attribution rule was narrowed) gave the same 55 of 55 and 6 of 6, so the narrowing lost no value the scorer sees;
  • AA house (Revit 26.4's IFC4X3 export): FireRating 15 of 15 and Manufacturer 16 of 16 equal (0 before), different 0, extras 13 unchanged;
  • Snowdon Towers Architectural (Revit 2024), scored apart against its local Revit IFC4 export: the door FireRating 16 to 128 of 128 equal, different (44) and extras (512) unchanged; Pset_WindowCommon.FireRating stays 71 missing (W7: windows' Pset_WindowCommon.FireRating is read from family-parameter table entries (R2025 models 12 to 17, held-out models) #1507);
  • RE1: Manufacturer gains 11, 3 and 5 equal on Electrical, Mechanical and Plumbing, none different; Architecture's IFC is main's; the one extra is on Plumbing, above;
  • Core Interior (its export writes no property set): 4 door type objects and 50 doors gain a FireRating; IFCPROPERTYSET 6,510 to 6,514 and IFCPROPERTYSINGLEVALUE 27,962 to 28,066, which the pins and the witness observations already hold, and the witness replay matches (counts and hash unchanged), so nothing was refreshed; decoded.parameter_value_count 4,126 to 4,180, the values counted apart 4,126 to 4,177;
  • the four rac_basic samples (2024 to 2027): 23 type objects gain a Manufacturer each, unscored;
  • IFC hashes of 111 exports against main's: 99 the same, 12 moved (the office files, AA, Core Interior, RE1 Electrical, Mechanical and Plumbing, Snowdon Architectural and the four rac_basic samples), each by the properties above and no others; the 24 R2025 models, the 17 other held-out models, Einhoven and RE1 Architecture are main's;
  • the disagreement rule fires once on Core Interior and once on Snowdon Architectural, in no other model, and loses no value there that Revit's export holds (Snowdon's door and wall FireRating are 128 of 128 and 710 of 710 equal);
  • diagnostics against the census: +22 against +14 on the office is 9 door type objects and 11 family type objects and 2 doors written, against 6 and 6 Tags and 2 that the scorer counts (it keys a type object by its Tag, and Revit writes one per original symbol): from the kept IFC, 3 and 5 type objects share a Tag.

Not measured: the rule on Revit 2015 to 2023, where no model of the run (the 33 samples of those releases and the held-out models of 2018 to 2022 included) has a table-form value that moved; and the copies of a type's entry across partitions on the office (all in Partitions/425).

@DrunkOnJava DrunkOnJava added the ready-when-green Draft whose code is complete: marked ready for review once its fast CI passes label Nov 5, 2026
@DrunkOnJava
DrunkOnJava marked this pull request as ready for review November 5, 2026 23:14
@DrunkOnJava DrunkOnJava removed the ready-when-green Draft whose code is complete: marked ready for review once its fast CI passes label Nov 5, 2026
# Conflicts:
#	research/witness/magnetar-2024-core-interior-slim/observations/rvt-rs.json
#	research/witness/magnetar-2024-core-interior/observations/rvt-rs.json
… block mark lies between, copies must agree, and a Manufacturer goes only on IfcElement types (#1185) (RE-354)
@DrunkOnJava DrunkOnJava changed the title feat(ifc): door types' Fire Rating in a family type table's form and their Heat Transfer Coefficient (#1185) (RE-354) feat(ifc): door types' Fire Rating and family types' Manufacturer, read from a family type table's entries (#1185) (RE-354) Nov 5, 2026
…final head, the rule's reach per building, and why the diagnostics gain 22 to the census's 14 (#1185)
@DrunkOnJava
DrunkOnJava enabled auto-merge (squash) November 6, 2026 01:09

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.

W7: type objects' common-set values (IsExternal, LoadBearing, FireRating, Manufacturer) on the BIM4LCA office's types

1 participant