Skip to content

ifc-geometry ​

IFC semantic views lowered into the format-neutral geometry DAG.

StatusPartial
Latest release0.5.0 (2026-09-29)
Registriescrates.io ifc-geometry
Via the facadeopenbim-ifc feature geometry-select
API documentationrustdoc · docs.rs
Sourcecrates/ifc-geometry/

Overview ​

ifc-geometry — the IFC side of geometry.

Features ​

FeatureDefaultEnables
compilelowering, dep:axiolid-contracts, dep:axiolid-mesh-compile-contract, dep:axiolid-curve-evaluate-contract
compile-reference-backendcompile, dep:axiolid-mesh-compile, dep:axiolid-mesh-boolean-boolmesh, dep:axiolid-construct
loweringyesdep: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::new accepts IfcMaterialProfileSetUsageTapering, the schema subtype of IfcMaterialProfileSetUsage, whose inherited slots it reads unchanged; the new MaterialProfileSetUsageGeometry::tapering() returns its MaterialProfileSetUsageTaperingGeometry (end profile set and end cardinal point), or None for a plain usage (#136).

Changed (breaking) ​

  • ViolationKind, Support and FunctionStatus are #[non_exhaustive]: a match needs a wildcard arm.
  • RuleViolation, LoweredGeometry and MappedInstance are #[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_solid and authoring::swept_disk_solid are removed (#210). Without the model they could not write every release correctly: the two directrix sweeps wrote the IFC4X3 IFCPARAMETERVALUE(..) trim into IFC4 files, and the swept disk wrote $ for the trim IFC2X3 requires. Use surface_curve_swept_area_solid_in, fixed_reference_swept_area_solid_in and the new swept_disk_solid_in, which take &Model after the transaction and otherwise the same arguments.
  • SurfaceCurveSweptAreaSolid::start_param/end_param and FixedReferenceSweptAreaSolid::start_param/end_param return GeometryResult<Option<TrimMeasure>> instead of Option<f64> (#210). In IFC4X3 the trim is an IfcCurveMeasureSelect, and an IFCLENGTHMEASURE(..) trim is a distance along the directrix, not a curve parameter; the reader now says which (TrimMeasure::Parameter or TrimMeasure::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 with WrongValueKind instead of being unwrapped.
  • Lowering an IfcSurfaceCurveSweptAreaSolid or IfcFixedReferenceSweptAreaSolid whose trim is an IfcLengthMeasure fails with Unsupported (#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): an IfcSweptDiskSolid in the model's declared release. The trim is written bare in every release, as before; in IFC2X3, which declares StartParam and EndParam required, an unset one is refused with InvalidAuthoredValue and nothing is staged.
  • solid::swept::TrimMeasure (re-exported from solid), the kind and value of a directrix sweep's trim, and TrimMeasure::parameter.

Fixed ​

  • authoring::curve_segment writes a CurveMeasure::Length as IFCLENGTHMEASURE(..) (#210). It wrote IFCNONNEGATIVELENGTHMEASURE(..), which is not a member of IFC4X3 IfcCurveMeasureSelect = SELECT (IfcLengthMeasure, IfcParameterValue) and is an ifc-validate error. Because IfcLengthMeasure is signed and neither slot is bounded, a negative length is now written as given instead of refused.

Changed ​

  • Depends on ifc-schema with 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 IFC4X1 or IFC4X2 is refused with the existing unsupported-schema error. ifc-schema now 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

Released under the AGPL-3.0-or-later licence. ISO and CEN standards material is not redistributed.