Core engine
Layers
| Layer | Crate | Responsibility |
|---|---|---|
| source | ifc-source |
borrowed, owned, and mapped bytes |
| scanner | ifc-scan |
STEP entity ranges and bounded diagnostics |
| values/schema | ifc-value, ifc-schema |
lazy STEP values and EXPRESS metadata |
| indexes | ifc-index |
type, GUID, references, spatial, Pset |
| model | ifc-model |
schema-aware model and queries |
| edits | ifc-edit |
transactions, revisions, Patch Overlay, undo/redo |
| writer | ifc-write |
new IFC with unchanged ranges preserved |
| topology | ifc-brep |
bounded clipping and canonical BRep topology core |
| geometry | ifc-geometry |
placements, profiles, extrusion, mapped items, mesh |
| facade | ifccore |
minimal stable Rust API |
| adapter | ifc-wasm |
browser/Node boundary and IFCG/2 |
IFC bytes → scanner → ranges/type table → lazy indexes → query/geometry
↓
transaction/Patch Overlay
↓
writer → new IFC
Opening a model never changes the source buffer. Queries decode only requested records. The writer copies unchanged ranges and serializes affected entities.
Geometry outcomes are exact, fallback, unsupported, or invalid; objects
must not disappear silently. See the coverage matrix.
ifc-brep provides a parser-neutral
Solid → Shell → Face → Wire → HalfEdge graph. It deterministically builds
multiple solids and validates ownership, orientation, and manifold incidence.
Stage 2 adds schema-aware closed polygonal IfcFacetedBrep import; Stage 3 adds
a bounded IfcFacetedBrepWithVoids profile with canonical outer/void roles and
conservative convex-profile gates before tessellation. Stage 4 adds an in-house
bounded pure-Rust/WASM polygonal kernel for UNION, INTERSECTION, and
DIFFERENCE; successful results contain a watertight mesh and canonical topology,
while an empty result is explicit. Stage 5 adds an in-house bounded exact-sign
orient3d based on expansion arithmetic and keeps representable sub-tolerance
gaps distinct; intersections are still constructed in f64. Stage 6 adds a
bounded general DIFFERENCE slice for convex BRep × BRep, BRep × half-space,
nested clipping, sequential cuts, and typed empty outcomes. Stage 7 adds bounded
healing for UNION/INTERSECTION: conservative sewing, duplicate/degenerate
sliver cleanup, reconstructed shells, coplanar face merging, and separate
open/non-manifold diagnostics. Stage 8 adds bounded pure-Rust/WASM tessellation
for cylinders, cones, spheres, and non-self-intersecting tori, plus circles,
ellipses, and parameter-trimmed conics in the profile path. Cases outside the
verified profile go to the exact backend or a typed diagnostic. IfcAdvancedBrep,
arbitrary surface trims, B-Spline/NURBS, and universal exact booleans are not
claimed. See
BRep topology Stage 1,
IfcFacetedBrep Stage 2, and
void shells Stage 3, and
polygonal booleans Stage 4, and
exact predicates Stage 5, and
general difference Stage 6,
bounded healing Stage 7, and
analytic surfaces Stage 8
(Russian primary technical documents).
The ifccore facade and pinned WASM boundary are stable. Low-level workspace
crates are internal. Fragments, container, MCP, and AI bridge are previews.