ifc-geometry — the IFC side of geometry.
What this crate is
It answers "what does this IFC entity mean geometrically" and lowers
implemented slices into the format-neutral axiolid-model DAG. It does not
triangulate, evaluate NURBS, or perform booleans itself.
The opt-in compile feature is the one narrow exception: it hands the
lowered DAG to an Axiolid provider and returns triangles. It is off by
default because selecting a provider and a memory budget is application
policy, not something the IFC file determines. See the compile module
and ADR 0004.
ifc-model this crate geometry package
(untyped graph) --> typed/family views --> GeometryGraph
+ IFC resolution (implemented elsewhere)
Scope
The three IFC geometry resource schemas, counted from IFC4 ADD2 TC1:
| Schema | Entities | Types | Functions |
|---|---|---|---|
IfcGeometryResource |
59 | 14 | 25 |
IfcGeometricModelResource |
42 | 4 | 2 |
IfcGeometricConstraintResource |
11 | 5 | 1 |
Design
Views and explicit inventory. The 89 concrete entities are represented by dedicated or shared subtype-aware borrowed views. The 23 abstract entities are inheritance/inventory entries, not falsely presented as constructible views. All 23 schema types are modeled.
Honest partial lowering. Exact profiles and extrusion/revolution are
implemented vertical slices. Every other assigned declaration is tracked in
the support ledger; attempting an unimplemented lowering returns typed
[crate::GeometryError::Unsupported] rather than panicking or substituting
approximate geometry.
Neutral DAG output. Implemented lowerers resolve IFC units, placements,
profiles, and representation relationships into axiolid-model nodes. Active
lowering owns no duplicate geometry types and never selects a CPU/GPU
provider.
Feature lowering (default on) carries the neutral geometry crates.
Without it this crate is representation selection only -- contexts,
plan/body choice, profiles, curves, surfaces, solids, units and
placements -- and links no geometry code at all.