Repository navigation
v0.6.0
rvt-rs writes IFC4, and 0.6.0 makes its property sets IFC4's. 0.5 took some
of them from Revit's exports of the RE1 models, which are IFC2X3; every
standard property set rvt-rs now writes matches buildingSMART's published
IFC4 property set definitions on all 89 exports Measure checks, by rvt-rs's
own check of them (#822, #826). buildingSMART's Validation Service has not
been run on them, and quantity sets are not checked. More of what
Revit's exporter writes is written: parameters named for any IFC4 property
set's property (RE-194, #817), IsExternal on every class but curtain
mullions and panels (RE-193), a type's Fire Rating, a door's overall size,
Revit 2024 Areas as spaces (RE-191), and each port's type and, where
Revit's exporter gives it one, its flow direction (RE-197). Projects saved
by Revit 2015 to 2022 and by Revit 2027 export their elements, as
experimental (RE-179 to RE-181).
puzzbobb's pull requests read Revit 2015 to 2022 and 2027 projects (#740,
#742) and found where a wall's function and roof attachment come from
(RE-185); Erry91's gives each door its overall size (#788); MadsHolten's
fixes a panic in the browser viewer (#835). Thank you.
Upgrading from 0.5
- Property sets moved to where IFC4 has them (#822). An element's
Referenceis inPset_EnvironmentalImpactIndicatorsand each IFC4 set
that applies to it and declaresReference, no longer in
Pset_QuantityTakeOfforPset_DistributionFlowElementCommon. Storeys and
spaces losePset_AirSideSystemInformationandPset_ProductRequirements.
A pipe's or duct'sLengthis inQto_PipeSegmentBaseQuantitiesor
Qto_DuctSegmentBaseQuantities, anIfcElementQuantity, and a pipe's
InvertElevationinPset_PipeSegmentOccurrence. A room's Floor Finish is
inPset_SpaceCoveringRequirements, a proxy's Serial Number in
Pset_ManufacturerOccurrenceonly, and a pipe fitting's nominal diameter
inRvtElementRecordGeometry.NominalDiameter, one length. - Public API.
ifc::entities::PropertySet::name_setsis removed and
storey_setstakes no name; aPropertySetnamedQto_is written as an
IfcElementQuantity;ifc::export_content::TypedProductionAppendgains
computed_inverts;ifc::entities::IfcEntity::Portgains
predefined_typeandflow_direction; and
native_connectors::symbol_port_indicesreturns(index, domain)pairs. - Older and newer releases export elements. A Revit 2015 to 2022 or 2027
project, which exported no building element, now exports them, as
experimental: measured against the same models saved by a neighbouring
release, not against a Revit export of them.
Added
- A port is typed by its connector's domain, and an electrical port is
SOURCEANDSINK(#828, RE-197). Revit's IFC4 export types each port by
its connector's domain,DUCT,CABLEorPIPE, and writes every
connector but an HVAC or piping one as bidirectional (revit-ifc
ConnectorExporter). rvt-rs wrote noPredefinedTypeandNOTDEFINEDfor
every direction. On the BIM4LCA office all 67 ports now have Revit's
PredefinedType(none before) and 43 itsFlowDirection; all 53 of RE1
Electrical's ports areSOURCEANDSINK, as in Revit's export, and no port
takes a direction Revit's export does not give it. The direction rule is
measured on electrical connectors only; for others outside HVAC and piping
it rests on revit-ifc's rule. An electrical connector whose description
setsFlow=SourceorFlow=Sinkis exported with that direction by Revit;
rvt-rs does not read the description (#834), so it writes such a port
SOURCEANDSINK. An HVAC or piping connector's direction, a
duct's or pipe's included, is the family's and is not read, so it stays
NOTDEFINED(the office's 24 pipe ends areSOURCEANDSINKin Revit's
export);SystemTypeis not written.ifc::entities::IfcEntity::Portgains
predefined_typeandflow_direction, which the writer writes only as a
value of IFC4's enumeration, andtools/re/ports_vs_ifc.pycompares the
three attributes on the ports both exports hold. - A type's Fire Rating fills an element's IFC4
FireRating(RE-77,
RE-194). Revit's exporter reads a parameter named for the property
(Pset_WallCommon.FireRating) first and the type's Fire Rating after it.
rvt-rs read the type's Fire Rating (RE-77) but wrote it only in its own
set; it now also goes in each IFC4 standard set declaringFireRating
that applies to the element, wherever no such parameter supplies one. On
the BIM4LCA officePset_WallCommon.FireRatinggoes from 71 to 97 of
Revit's 97 values (26 walls carry their type's), on RE1 Architecture from
0 to 7 of 7; none differs, and where a parameter and the type disagree
(4 elements) Revit's export has the parameter's, as rvt-rs does. - A parameter named for any IFC4 property set's property is written (#817).
The sets RE-194 writes such parameters in are now IFC4's 278 property sets
that apply to an entity, generated bytools/ci/gen_standard_property_sets.py
from buildingSMART's own list of IFC4's definitions (the one its validation
service checks rule PSE001 against) and IFC4's entity hierarchy, instead of
21 sets listed by hand; a set scoped to a predefined type applies only with
it, andIfcIntegerproperties are read too. CI checks the table is the
generator's output. No measured model has parameters for the new sets, so
no export changes. - Parameters named for a standard property set's property are written in
that set (RE-194). Revit's exporter reads a project or shared parameter
named<set>.<property>, such asPset_WallCommon.FireRatingor
Pset_WindowCommon.ThermalTransmittance, before anything else for that
property. rvt-rs now reads each such parameter of an IFC4 set's property
from the element and writes it there, where IFC4 applies the set to the
entity written. Booleans, labels and text, counts, lengths and thermal
transmittance are read; a thermal transmittance is written as
IfcThermalTransmittanceMeasure, with its unit declared. The parameter's
value replaces rvt-rs's own. On the BIM4LCA office, as built, property
values equal to Revit's go from 14,531 to 18,374. The 7 stair riser values
that differed are now Revit's, and 55OccupancyNumbervalues differ only
in type: IFC4'sIfcCountMeasureagainst the export'sIfcInteger. What
that export takes from its user-defined property set file, such as a
glazing set on walls, is not written. IsExternalas Revit's exporter sets it, on every class but curtain
mullions and panels (RE-193).
Revit's export reads a Yes/No parameter named for the property set first
(Pset_WallCommon.IsExternalon a wall), then calculates the value from a
parameter namedIsExternal, the type's Function, a roof's category, and
otherwise writes not external. rvt-rs now does the same for walls, curtain
walls, doors, windows, slabs, roofs, columns, beams, coverings, railings,
ramps, stairs, proxies and spaces, with a wall's Function from its type's
native record (RE-185). On the BIM4LCA office, as built, theIsExternal
values equal to Revit's go from 266 to 2,110 and those that differ from 29
to none; on the reference and R2025 models from 13 to 245, none differing.
Curtain mullions and panels get no value, nor do windows whose type's
Function is not read: Revit's export does not follow their curtain wall or
host wall.- Revit 2024 Areas export as
IfcSpace(#763, RE-191). An Area's
partition record carries no bounding-box marker, so the element-record
scan never read one. A placed Area now exports asIfcSpace .SPACE.under
Revit's GlobalId: its number asName, its name asLongName, in its
Level's storey, typed by anIfcSpaceTypeof its own and with
Pset_SpaceCommon.Reference, as Revit's export writes it. It has no body:
the Area's boundary is not decoded. On the BIM4LCA office, as built and at
building permit, rvt-rs now writes all 30 of the area spaces in Revit's
export, with number, name and GlobalId as Revit's. The permit file's two
Areas that are not placed are left out, as Revit leaves them out. Revit
2024 only. - Revit 2015 to 2018 projects export their elements, as experimental
(RE-181). Revit 2015 to 2018 frame their element records as 2019 does,
so the 32-bit readers read them with each release's own schema tags. Three
layouts differ: a Level record's placement kind, a wall's flip, which
follows its location line with no word as on 2019 and 2020, and a
material's shading frame, which holds two pattern slots where 2019 holds
four. A type's element-data name is looked for in its own data only, past
any one-unit entry. There is no Revit export of a 2015 to 2018 file to
measure against; on Autodesk's 2016 to 2018rac_basic,rst_basicand
rac_advancedevery ElementId shared with the 2019 copy has its class,
2018rac_basicandrac_advancedagree with it on every field, and the
exports have the 2019 copies' building elements, class for class, and pass
IfcOpenShell's schema validation. Autodesk's six 2015 sample projects
(#801) frame their records the same way and carry the 2015 tags; on five
of them every ElementId shared with the 2019 copy has its class, and the
sixth,rst_basic, is another model. Before, a 2015 to 2018 project exported
no building element. Beyond RE-180's, it changes no 2019 to 2027 export.
Revit 2014 is not read: no documented 2014 file backs it. By puzzbobb
(#742). - Revit 2019 to 2022 projects export their elements, as experimental
(RE-180). Revit 2019 to 2022 frame their element records as 2023 does,
so the 2023 readers read them, each constant taken as the release's own tag
of the same schema class: element data, materials, the category material
frame and layers. Revit 2019 and 2020 write a wall's flip with no word
before it, and in 32-bit data a one-id list reads as a one-unit name, which
is no longer taken. There is no Revit export of a 2019 to 2022 file to
measure against; on Autodesk's 2019 to 2022rac_basic,rst_basicand
rac_advancedevery ElementId shared with the 2023 copy has its class. The
rac_basicandrst_basicexports, and the 2021 and 2022rac_advanced
ones, have 2023's building elements, class for class (the 2019 and 2020
rac_advancedare an earlier edit of the model), and every export passes
IfcOpenShell's schema validation. Before, a 2019 to 2022 project exported
no building element. Every 2024 to 2027 export is byte-identical. Of the
2023 samples onlyrac_advancedchanges: the one-unit name rule gives its
export 2 more entities and 2 more property values. By puzzbobb (#742). - Revit 2027 projects export their elements, as experimental (RE-179).
The partition readers take their 2027 constants from the file's schema, as
RE-124 found every release's to be: the record marker, Level elevations,
element data, layers and materials. Layer records, wall join lists and
mullion type materials keep their 2026 layouts. Revit 2027 writes most
element frames without an ElementId at+0x00, type symbols among them, so
from 2027 a symbol frame takes its enclosing record's id as an instance
already does (RE-35). There is no Revit 2027 IFC export to measure against;
on Autodesk's five 2027 sample projects the elements equal those of the
same models saved by Revit 2026 (20,818 of 20,818 ElementIds, every class
the same, 363,072 of 363,256 fields, measured by Measure's paired probe,
#799), and the six 2027 exports pass
IfcOpenShell's schema validation. Before, a 2027 project exported no
building element. Every 2023 to 2026 export is byte-identical. By puzzbobb
(#740). - A door's
OverallWidth/OverallHeightfrom its type (#759, RE-187).
A door type's Width and Height are Revit'sOverallWidthand
OverallHeighton every door where they are read, so a door with no
opening read now writes them instead of$: all 132 of Core Interior's
doors and 4 of RE1 Architecture's 5, each equal to Revit's (none before).
A door cut at its rough size keeps that size (RE-94). Windows keep failing
closed: Core Interior's type size is not Revit's. Checked by
tests/door_overall_sizes.rsand scored by
tools/re/door_window_sizes_vs_ifc.py. By Erry91 (#788).
Changed
ifc::entities::PropertySet::name_setsis removed, andstorey_sets
takes no name (#822). The two setsname_setsbuilt are IFC2X3's, and a
storey's sets no longer include them.- Measure checks each export's standard property sets against IFC4's
definitions (#822).tools/ci/ifc4_property_sets.pycounts, for every
Pset_set an export relates to an object or a type, what buildingSMART's
IFC4 definitions (the list its validation service checks rule PSE001
against, pinned by #817's generator) do not allow: sets IFC4 does not
define, properties a set does not have, sets on entities IFC4 does not
apply them to, and values of another kind or type. Measure appends it to
every export'sschema.txt. On the 89 measured exports ofmainbefore
#822's fixes it found IFC2X3'sPset_QuantityTakeOff,
Pset_DistributionFlowElementCommon,Pset_ProductRequirementsand
flow-segment sets,Pset_AirSideSystemInformationon storeys, and IFC2X3's
NominalDiameter,LengthandSerialNumberin three IFC4 sets that do
not have them, and no value of another type. - CI and Measure run IfcOpenShell 0.9.0.post1 (#773). Five of Measure's
scorers let go of an IFC file while they still used its elements, which
IfcOpenShell 0.9 does not allow (room_names_vs_ifccrashed under 0.9.0);
they now keep it open. The geometry scorers also print why IfcOpenShell
cannot mesh an element, which they used to count without a reason. On
main's commit Measure's scores are byte-identical under 0.8.5 and
0.9.0.post1 (runs 39153682389 and 39153684706; only the export timings
differ), walls included, which 0.9.0 could not mesh. So the pin moves, and
Dependabot proposes IfcOpenShell's minor releases again. - CI installs Rust with rustup (#765). Every workflow's toolchain step
now runsrustup toolchain installitself, with the components and targets
its job needs, instead of the third-partydtolnay/rust-toolchainaction.
That action'sstableandnightlybranches are force-pushed, so its pins
went stale and zizmor flagged them, and GitHub's runners already ship
rustup.
Fixed
rvt-inspectandrvt-corpus doctortake Revit 2015 and 2027 files
(#838). Both reported such a file as an unsupported version before
looking at its export, though rvt-rs now reads its element records,
experimentally (RE-179, RE-181), as it reads 2019 to 2022, which both
already took. Their range is now 2015 to 2027.- The browser viewer no longer panics on a string field whose length is
corrupt (#835). On wasm32, whereusizeis 32 bits, a UTF-16 string
field's end,4 + 2 × length, could wrap past its bounds check when the
length was corrupt, and slicing then panicked, ending the whole export; a
64-bit build cannot wrap there. The end is computed with checked
arithmetic, and such a field is read as raw bytes, as one too short already
is. Found and fixed by MadsHolten, on a private Revit 2024 project. - A pipe's or duct's length and a pipe's invert are where IFC4 puts them
(#822). RE-131, RE-134 and RE-157 wrote them in IFC2X3's
Pset_FlowSegmentPipeSegmentandPset_FlowSegmentDuctSegment(and a
duct's length also inPset_DuctSegmentTypeCommon), as Revit's IFC2X3
exports of the RE1 models do. IFC4 has neither flow-segment set, and its
Pset_DuctSegmentTypeCommonhas noLength. The length is now in the
segment's base quantities,Qto_PipeSegmentBaseQuantitiesor
Qto_DuctSegmentBaseQuantities, as anIfcElementQuantity, and a pipe's
invert inPset_PipeSegmentOccurrence, where Revit's IFC4 export of the
BIM4LCA office writes them, on an element written as a pipe or duct segment
only, not one its Export to IFC As writes as another entity. A pipe's own
parameter namedPset_PipeSegmentOccurrence.InvertElevationis written as
it is, with no storey elevation taken off. APropertySetnamedQto_is
now written as anIfcElementQuantityof IFC4 simple quantities. A
building-element proxy's Serial Number is no longer also written in
Pset_PrecastConcreteElementGeneral, which in IFC4 has noSerialNumber;
Pset_ManufacturerOccurrenceholds it. - A pipe fitting's nominal diameter is no longer written in
Pset_PipeFittingTypeCommon(#822). RE-165 wrote it there as Revit's
IFC2X3 exports of the RE1 models do, a list of one length. IFC4's
Pset_PipeFittingTypeCommonhas noNominalDiameter, and Revit's IFC4
Reference View export writes none of the port sets that hold one: revit-ifc
certifies none of them for that view, and its export of the BIM4LCA office
writes no property set on any of its 67 ports. The measured value is now in
rvt-rs's ownRvtElementRecordGeometryset, as one length. - An element's
Referenceis in IFC4's property sets, not IFC2X3's
(#822). RE-154 wrote the type's name inPset_QuantityTakeOffon every
element with a type and inPset_DistributionFlowElementCommonon MEP
elements, as Revit's exports of the RE1 models do. Those exports are
IFC2X3, and IFC4 has neither set. The name now goes in every IFC4 set,
from #817's table, that applies to the element's entity and declares
Reference:Pset_EnvironmentalImpactIndicatorson every element, the
entity's common set, the reinforcement sets of walls, slabs, columns and
beams, and a distribution element's own type set
(Pset_SanitaryTerminalTypeCommonand so on), as Revit's IFC4 export of
the BIM4LCA office writes them. Columns, windows, beams and shading
devices had noReferencebefore, and MEP elements had it only in the
IFC2X3 set. On the office as built, values equal to Revit's go from 18,502
to 32,053 (from 18,501 to 32,225 at building permit) and values Revit does
not write from 13,257 to 621; every new value Revit's export holds is
equal. Against Revit's IFC2X3 exports of the RE1 models everyReference
value is still Revit's, each in the IFC4 set that holds it. - Storeys and spaces carry no IFC2X3 name sets (#822).
Pset_AirSideSystemInformationandPset_ProductRequirementsholding a
storey's or space's name, as Revit's IFC2X3 export of the RE1 models writes
them, are no longer written: IFC4 has noPset_ProductRequirementsand
appliesPset_AirSideSystemInformation, the information of the air-side
system serving a space, to spaces and zones only, and Revit's IFC4 export
of the office writes neither. - Each piece of an element written in pieces carries the element's
property sets (#816). An element whose sketch has separate loops is one
entity per piece (#331), and every set it gets after its body went on the
first piece only, among themReference,IsExternal,Serial Number,
the level and stair sets and the parameters named for a standard set.
Revit's export gives each piece all of them, as its export of Snowdon
Towers' architectural model shows on its 19 elements in pieces. - A room's Floor Finish is in
Pset_SpaceCoveringRequirements, where IFC4
puts a space's coverings. RE-153 wrote it asPset_SpaceCommon.FloorCovering,
following Revit's export of RE1 Architecture, which is IFC2X3 (where that
set holds the coverings), not IFC4 as RE-153 recorded. IFC4's
Pset_SpaceCommonhas no covering properties, so the IFC4 file rvt-rs
writes carried one its standard set does not define.psets_vs_ifc
reads an IFC2X3 reference's space coverings under their IFC4 set. - A room with no number is named, typed and referred to as Revit's export
does it (RE-196). A room's number and name were read only as two
non-empty texts, so a room with no number got neither: its space was
Room-<ElementId>with noLongName, noIfcSpaceTypeand no
Reference. It is now<name>:<ElementId>with its name asLongName,
typed and referred to by the same name, as Revit's exporter falls back
to. An empty number or name also counts as the latest copy's value (#800):
at building permit the BIM4LCA office's rooms had kept older copies'
numbers and Finnish names where the current copy has none. The office's
rooms all have Revit's number and name now, as built and at permit, 264
of 264 (221 before), and the text parameters read the same way, so an
emptied Floor Finish or Serial Number writes nothing. - A stair's
IsExternaljoins itsPset_StairCommon(RE-194). RE-193
wrote it in a second set of that name, beside the riser and tread
dimensions RE-47 writes, where Revit's export writes one set. On Autodesk's
2024 sample projects 34 stairs now carry one set fewer, with the same
values. - An element's "Export to IFC As" of
IfcStairorIfcDooris honoured
(#792). On both BIM4LCA office files two generic models carry their own
IfcStairand a curtain panel its ownIfcDoorwithDOOR, and Revit's
export writes them asIfcStair .NOTDEFINED.andIfcDoor .DOOR.. rvt-rs
did not act on either value and wrote a proxy and a plate. - A wall sweep in a Revit 2024 file stays an
IfcBuildingElementProxy,
whatever its "Export to IFC As" says (#792, RE-192). On both BIM4LCA
office files 9 wall sweeps carry their ownIfcCovering(predefined type
ROOFING), and Revit's export writes all 9 as proxies. rvt-rs followed the
value and wrote coverings. This is measured on that one project, not read
from the exporter's source, whose wall sweep path takes the entity from the
same lookup as other elements; other releases keep following the value. - A family's or type's name comes from its latest copy, so its elements
keep their type (#807). The family and type name index and the system
family type names dropped a name whose copies in different partitions
differed, and the elements joined through it got no type. That follows
#800's rule (RE-145). On the BIM4LCA office's building-permit file, where
every family and type has a Finnish-named older copy and an English-named
newer one, rvt-rs typed none of 345 columns, 52 doors, 43 light fixtures and
20 appliances, and no 4 walls and 8 slabs. It now types the same elements
as on the as-built file. Revit's names now match on all of those
columns, doors and light fixtures, and the permit file gets materials on
403 more elements and 67 ports, Revit's count. The other files export as
before. - A room's name and its other parameters come from its latest copy
(#800). Where several partitions hold copies of a room's data that
differ, the number and name readers (RE-117) and the text and integer
parameter readers (RE-153, RE-158) gave the room nothing. They now take the
copy in the latest partition, the one RE-145 found current wherever an
element's records differ, and give nothing only when copies within that
partition disagree. The BIM4LCA office's building-permit file holds an
older copy of every room and area with Finnish names and a newer one with
English names, and Revit's export uses the English ones. There, rooms
named as in Revit's export go from 1 to 191 of 234, as on the as-built
file, and each named room gets itsIfcSpaceType. The as-built file, the
six reference models and the samples export as before. - Fixtures and appliances follow their "Export to IFC As" (#792,
RE-190). Revit's export writes an element as the entity its type's
"Export Type to IFC As" names: waste, fire suppression, sanitary and air
terminals and electric appliances on the BIM4LCA office. rvt-rs now does
too, with the type's predefined type where it is an IFC4 enumerator of the
entity. Waste and fire suppression terminals get their type entities and
ports, and a room's space contains them as Revit's export does. On the
as-built file 185 elements now have Revit's class (78 waste terminals, 51
electric appliances, 40 fire suppression terminals, 15 wash-hand basins
and an air terminal), and the type entity is Revit's on 12,355 of 12,358
elements (was 12,170). On the permit file the count is 165, because rvt-rs
types none of 20 appliances there. - An export value belongs to the data object that holds it, on Revit
2024 and later (#792, RE-190). RE-45 gave an entry to the last
element-data header within 0x800 bytes. On the office's permit file that
gaveIfcSpaceto doors, curtain walls, sketch lines and five drains,
whose types'IfcWasteTerminalTypeit hid, and the drains' type was
written twice under one GlobalId (four schema-validation findings, now
none). Revit 2023 and earlier keep the header rule. The six reference
models export as before. - A pipe or duct type name needs the
u32 0before its length (RE-179).
RE-130's scan matched an element's reference lists on Autodesk's 2027
rme_basicand named 33 pipes였縿괜쭃. All six type names of RE1
Plumbing and Mechanical carry the zero word; the false match does not. - A curtain wall in a Revit 2024 file is
IfcCurtainWall, whatever its
"Export to IFC As" says (#792, RE-188). Revit 2024's exporter never reads
the value on a curtain wall: revit-ifc 24.1.0 to 24.3.40 create every
curtain wall as one. rvt-rs followed the value, and wrote the 124 BIM4LCA
office curtain walls set toIfcShadingDeviceas shading devices, where
Revit's export of both files has curtain walls. In 2025 and 2026 files,
whose exporters read the value from 25.2.0 on, a curtain wall keeps
following it. That half is read from the exporter's source and not
measured on a Revit export. The export diagnostics also warn with every
"Export to IFC As" value the export does not apply, counted by value and
class, whichcategory_map's documentation had already promised. - An ElemTable record's first id is no longer declared where it differs
from its second (#760, RE-189). On Autodesk's Snowdon Towers 2024
samples, 84 records (Architectural) and 27 (Structural) carry two ids: the
element's ElementId and the id it was created with. Nothing in either
project names a first id that is not also some element's current id, so
elem_table::declared_idsnow declares each record's current id only,
dropping 84 and 20 ids that named no element. Measured on the 49 Autodesk
samples Measure reads and CI's 6 reference models, exports andrvt-info
are unchanged; only the two Snowdon models'decoded_element_fraction
rises, as its denominator shrinks. - Export diagnostics report the file name the model was saved under, not
its folders (#782). Theirinput.original_pathkept the whole path with
only the Windows account folder redacted, so client and project folder
names reached a file people attach to bug reports. It is now the file name,
as the export's name has been since 0.5.1: RE1 Architecture's reads
RE1.rvt.
Research
- RE-194: where a parameter named for a property set's property keeps its
value, and where Revit's export writes it. A Yes/No or integer is the
u32after the parameter's ElementId in the element's own data object, a
text theu32 n · UTF-16after it, and a number thef64just before it.
Revit's export of the BIM4LCA office writes every such value on the element
itself, never only on its type. Probeprobe_re194_pset_parameters,
scorerpset_parameters_vs_ifc.psets_vs_ifcnow also counts the values
only rvt-rs writes, by set and property, and Measure gives each reference
model's export the schema check a sample's gets, up to 120 MB: the office
files' thermal transmittance unit is a writer path nothing else reaches. - Measure hashes each sample's IFC export. A sample's export was checked
for schema findings and then dropped, so a change that moved only its
names or properties showed nowhere in a run. Each sample now gets the
ifc.sha256a model gets, with the export time ignored. The compare job
lists the samples with the models as identical or differing, or as having
no base hash when the base ran before this change. - RE-185: where a wall's
IsExternalandExtendToStructurecome from
(#35). A wall'sIsExternalis its type's nativeWallType.m_function
(0 interior, 1 exterior), and itsExtendToStructureis true exactly where
its record holds aJoinToRoofGStep. These agree with Revit's IFC4 export
on 8 walls of RE1 Architecture and 117 of puzzbobb's Revit 2025 models,
and Measure reproduces them with-f r2025=true. A window'sFireRating
is a family-type text entry that RE-77's scan does not read. Probe
examples/probe_re185_wall_function.rs; nothing is exported from these
yet. By puzzbobb. - Measure scores puzzbobb's Revit 2025 models (#766, #356). With
-f r2025=trueit fetchesR2025_Models.zipby its pinned hash
(research/r2025-models.tsv): 23 projects that each isolate one feature
(roofs, slope arrows, rooms, stairs, wall joins). Measure scores the 22 that
come with Revit's IFC4 export against it, as it scores the reference
models. Their author released them under Apache-2.0 on #356; they are
fetched for the run and never stored. - The class-set scorer says why an element is in another class (#792).
tools/re/class_sets_vs_ifc.pyprints, for each group in another class
than Revit's, Revit's category, PredefinedType and type object and the
RE-45 value rvt-rs read. A new probe scorer,
tools/re/export_parameters_vs_ifc.py, compares every "Export to IFC As"
value the RE-45 probe reads with Revit's export. The RE-45 probe prints
each entry's owner under both rules.ports_vs_ifcprints its first ten
schema-validation findings. - Autodesk's Revit 2015 sample projects are pinned for Measure (#742).
Autodesk keeps all six on its download host underDocs/, where the 2016
to 2027 samples are underDocs/InProd/, so a 2015 reading no longer rests
on files only a contributor holds. The 2019 MEP andrst_advancedprojects
are pinned with them, so each 2015 project has a 2019 copy to compare
with (-f probe_pair_release=2019): nine more files, 58 in all. - Measure compares each sample with the same project saved by another
release (#740, #742). With-f probe_pair_release=<year>, a two-file
probe also runs on every sample of another release and the same project
saved by that year, the sample first, into the sample'sprobe-pair.txt;
-f sample_years="<first> <last>"reads only the samples of those
releases. The comparisons of Autodesk's 2027 samples with their 2026
copies, and of earlier releases with their 2023 and 2019 copies, then run
on the runners instead of on one machine. - Measure scores the BIM4LCA office against Revit's exports (#763). With
-f nordic=trueit reads the concrete office as built and at building
permit, with Revit's IFC export of each, by byte range
(research/bim4lca-measure.tsv), and scores them like the reference
models. A new scorer,tools/re/class_sets_vs_ifc.py, runs on every model:
per IFC class of Revit's export, how many of its elements rvt-rs writes as
the same class, as another class or not at all, paired by Tag (spaces by
GlobalId), with the missing and the extra ones listed by name, type and
storey. - The BIM4LCA models are read in CI (#766). The tier-two job fetches the
four Revit 2024 models and the Revit IFC export its targets read from VTT's
1.58 GBARCH.zipby byte range (tools/ci/fetch-bim4lca.py), each
checked againstresearch/bim4lca-models.tsv, so the targets that measure
#751's level parameters, #752's shared elevations, #753's column bottoms
and #757's cut columns on them run on every pull request; they skipped.
Corrected after the release: these notes first said every element's IsExternal is written; curtain mullions and panels get none, as the entry's own text says. 0.6.1 corrects the README packed into the crate and the wheel.
User guide: https://github.com/DrunkOnJava/rvt-rs/blob/v0.6.0/docs/user-guide.md