Skip to content

The pipeline

Assemble runs three stages. Each one is a package you can use on its own.

Package Does
step STEP/SPF (ISO 10303-21) tokenizer and entity graph. Schema-agnostic — no EXPRESS.
model Entity graph → semantic []Element. Ports ifcopenshell's util.element, util.placement, util.unit.
geometry Proxy tessellation, derived quantities, plane sections, and a Y-up GLB whose node names are GlobalIds.
bytes ──▶ step.ParseBytes ──▶ *step.File          entity graph, forward + inverse refs
                            model.Extract   ──▶ *model.Result     semantic elements
                            geometry.Build  ──▶ *geometry.Scene   meshes, bboxes, quantities
                            ifc.Assemble    ──▶ *Assembled        elements + scene
                            ifc.BuildImport ──▶ *ImportModel      tree, layers, storey plans

Why the split matters

step is genuinely standalone. It parses any STEP file, IFC or not — it knows nothing about walls or storeys, only #id=KEYWORD(args) and the reference graph between them. If you have a STEP file from a mechanical CAD tool, this package still works. See the step package.

model is where IFC semantics enter. It reads positional attribute indices that are stable across IFC2X3 and IFC4 for core entities, resolves placements, and normalises units. This is also the layer that carries the schema assumption noted in limitations — there is no EXPRESS schema behind it.

geometry is the only stage that approximates. Everything above it is lossless with respect to the file. Tessellation is where proxy meshes and derived, gross quantities come from, and it is why quantities carry a provenance tag.