ifc-geometry
IFC semantic views lowered into the format-neutral geometry DAG.
| Status | Partial |
| Latest release | 0.5.0 (2026-09-29) |
| Registries | crates.io ifc-geometry |
| Via the facade | openbim-ifc feature geometry-select |
| API documentation | rustdoc · docs.rs |
| Source | crates/ifc-geometry/ |
Overview
ifc-geometry — the IFC side of geometry.
Features
| Feature | Default | Enables |
|---|---|---|
compile | lowering, dep:axiolid-contracts, dep:axiolid-mesh-compile-contract, dep:axiolid-curve-evaluate-contract | |
compile-reference-backend | compile, dep:axiolid-mesh-compile, dep:axiolid-mesh-boolean-boolmesh, dep:axiolid-construct | |
lowering | yes | dep:ifc-alignment, dep:axiolid-core, dep:axiolid-curve, dep:axiolid-mesh, dep:axiolid-model, dep:axiolid-topology, dep:axiolid-primitive, dep:axiolid-profile, dep:axiolid-surface |
Depends on
Changes
Latest release, 0.5.0 (2026-09-29):
Changed
MaterialProfileSetUsageGeometry::newacceptsIfcMaterialProfileSetUsageTapering, the schema subtype ofIfcMaterialProfileSetUsage, whose inherited slots it reads unchanged; the newMaterialProfileSetUsageGeometry::tapering()returns itsMaterialProfileSetUsageTaperingGeometry(end profile set and end cardinal point), orNonefor a plain usage (#136).
Changed (breaking)
ViolationKind,SupportandFunctionStatusare#[non_exhaustive]: a match needs a wildcard arm.RuleViolation,LoweredGeometryandMappedInstanceare#[non_exhaustive]; they can no longer be built with a struct literal outside the crate.authoring::surface_curve_swept_area_solid,authoring::fixed_reference_swept_area_solidandauthoring::swept_disk_solidare removed (#210). Without the model they could not write every release correctly: the two directrix sweeps wrote the IFC4X3IFCPARAMETERVALUE(..)trim into IFC4 files, and the swept disk wrote$for the trim IFC2X3 requires. Usesurface_curve_swept_area_solid_in,fixed_reference_swept_area_solid_inand the newswept_disk_solid_in, which take&Modelafter the transaction and otherwise the same arguments.SurfaceCurveSweptAreaSolid::start_param/end_paramandFixedReferenceSweptAreaSolid::start_param/end_paramreturnGeometryResult<Option<TrimMeasure>>instead ofOption<f64>(#210). In IFC4X3 the trim is anIfcCurveMeasureSelect, and anIFCLENGTHMEASURE(..)trim is a distance along the directrix, not a curve parameter; the reader now says which (TrimMeasure::ParameterorTrimMeasure::Length) instead of returning both as a parameter. A bare number is a parameter, as IFC2X3 and IFC4 declare. A typed value that is not one of the SELECT's members is refused withWrongValueKindinstead of being unwrapped.- Lowering an
IfcSurfaceCurveSweptAreaSolidorIfcFixedReferenceSweptAreaSolidwhose trim is anIfcLengthMeasurefails withUnsupported(#210). It used to pass the length on as a curve parameter, which on a conic directrix reads metres as radians; converting a length into the directrix's parameter needs arc-length evaluation, which lowering does not do.
Added
authoring::swept_disk_solid_in(#210): anIfcSweptDiskSolidin the model's declared release. The trim is written bare in every release, as before; in IFC2X3, which declaresStartParamandEndParamrequired, an unset one is refused withInvalidAuthoredValueand nothing is staged.solid::swept::TrimMeasure(re-exported fromsolid), the kind and value of a directrix sweep's trim, andTrimMeasure::parameter.
Fixed
authoring::curve_segmentwrites aCurveMeasure::LengthasIFCLENGTHMEASURE(..)(#210). It wroteIFCNONNEGATIVELENGTHMEASURE(..), which is not a member of IFC4X3IfcCurveMeasureSelect = SELECT (IfcLengthMeasure, IfcParameterValue)and is anifc-validateerror. BecauseIfcLengthMeasureis signed and neither slot is bounded, a negative length is now written as given instead of refused.
Changed
- Depends on
ifc-schemawith its default features named explicitly (every bundled release), now that the workspace dependency turns them off for the facade's per-release features (#112). - A model whose header declares
IFC4X1orIFC4X2is refused with the existing unsupported-schema error.ifc-schemanow bundles both releases, but no layout here is verified against them, so they are never read as IFC4 or IFC4X3.
Full history: crates/ifc-geometry/CHANGELOG.md