Import 3D Model
Status: Implemented

Import 3D Model loads a STEP (.step/.stp, ISO 10303-21) or IGES (.iges/.igs)
file as exact B-rep solids. Everything below applies to IGES too unless it says otherwise:
an IGES assembly is a file of subfigure instances (408), and its body colours come in as a
STEP file's do.
STL, 3MF and OBJ inputs are reconstructed to STEP before this feature is added. STL and 3MF open an adjustable BREP preview; Accept import commits the result. A mesh file holding several separate shells — a multi-body STL or OBJ, a 3MF build that places more than one instance — reconstructs as one solid per shell, all carried by this single feature. See File Formats.
Inputs
id– astring, defaultnull.
The feature is never form-edited: the import stores its source inside the feature, either the STEP/IGES text or the exact geometry in the app's native form.
Behaviour
- Solids are exact B-rep, with no mesh repair or tessellated intermediate.
- Stored STEP/IGES text is parsed when the feature runs; an unchanged result may be reused.
- Native geometry is restored under exactly the names stored with it, so face and edge names, and the metadata and constraints keyed to them, survive a reload unchanged.
- No timeline or feature history is recovered from the source file.
Importing an assembly
Before a .step/.stp upload is imported, the app reads the file's product structure. When the file has one — real part occurrences with geometry — a
choice appears instead of an immediate import:
"bracket-assy.step" contains an assembly
7 parts, 23 instances.
Flatten sub-assemblies
[ Import as assembly ] [ Import as bodies ] [ Cancel ]
- The counts are the file's leaf counts: how many distinct parts it contains and how
many times they are placed. When the file has sub-assemblies the line grows a
, N levels deepclause, because a nested import then produces fewer top-level components than the instance count. - Flatten sub-assemblies is offered only when the file actually has sub-assemblies (more than one level). It starts unchecked — the default import keeps the tree.
- Esc, or a click outside the dialog, is the same as Cancel.
- A file with no product structure — an ordinary part file — never shows this dialog; it imports as bodies exactly as before.
Import as assembly
- Each distinct part is stored once in the document's parts library, in native form. Two products with identical content collapse to a single library entry.
- One Assembly Component is added per occurrence, at that occurrence's pose. They are appended in one batch — one rebuild, one undo step. The first component is grounded (fixed) when the document has no components yet.
- Nested (default): each sub-assembly becomes one rigid component that you can expand read-only in the Assembly structure tree, so the file's structure survives the import.
- Flattened: every leaf part is placed directly in this document at its world position. The component list is longer and flat, but a part reused at two levels is stored once rather than once per level — the better answer for a deep or awkward file. On a single-level file both options produce the identical document.
- Part names come from the STEP
PRODUCTname; an unnamed product is named<file>-part-<n>. A part placed with a mirror or a scale factor is baked into its own part entry, whose name carries a(mirrored)or(scaled)suffix. A nested import cannot represent a mirrored or scaled sub-assembly: it is skipped and reported, so import that file flattened. - Part numbers come from the STEP
PRODUCTid: it is recorded as the part'sPart_Numberattribute, the field the Part Properties dialog edits and the BOM reads, so the vendor's own numbering reaches your parts list and is written back out when you export. A product with no id there leaves the part without a number. - When the document had no assembly components before the import, the app switches to the Assembly workbench, unless the assembly panels are already showing (the Assembly, All and Wire harness workbenches).
- The result is reported as a notice, e.g.
imported as1-ug-214.stp — 3 parts, 4 components, with(N mirrored instances baked)and; N products could not be builtappended where they apply. - If the structure cannot be built after all, the file is imported as bodies with the text the dialog still holds, and the notice says so.
Import as bodies
The flat lane: one Import 3D Model feature carrying the STEP text, every body placed at its world position, no parts library entries, no components, no workbench switch.
Cancel
Nothing is imported and the parsed structure is dropped.
Known gaps
- The original STEP text is not retained by an assembly import. Re-importing from the source file is always available, and any part exports through the normal STEP export lane, but the vendor's exact Part-21 bytes cannot be recovered from the document.
A KiCad footprint's model
A part imported from KiCad (Symbol,
Pads) brings its footprint's 3D model as one
Import 3D Model feature. The model is the .step beside the .wrl the footprint names,
read from your KiCad 3D-model folder. Its bodies are placed as KiCad places them: scaled,
turned about X, then Y, then Z by the footprint's rotate angles, each negated as KiCad
negates them, then moved by its offset in millimetres. The frame is KiCad's 3D view of the
footprint, with y pointing the other way from the footprint file's and z up from the board's
top copper.
The placed bodies are stored as a native payload, so the document keeps no STEP text and
needs no KiCad library to reopen. The feature records what placed them: the (model …) path, the .step read, and the offset, scale and rotation
numbers. Changing that record does not move the model.
Colours
Colours authored in a STEP file's presentation entities are read on import and stamped
as a color attribute — an uppercase #RRGGBB value — on the imported name:
- a per-face colour lands on that face's name; a per-body colour lands on the body's name only, and is never fanned out onto its faces;
- the attribute is visible (and editable) in the Info window's Metadata tab — select
the body or face and use
Infoon the context bar. A#RRGGBBvalue draws a colour picker beside its name, so you can recolour by eye; an object with no colour yet gets a Set color button that gives it one; - the stamp does not overwrite, so a colour you edit there survives a history replay, and it rides the native payload into the parts library and back through save/reload.
The color attribute is what the viewport shades from. Both levels render: a
per-face colour paints that face, a per-body colour paints every face that has no
colour of its own, and an object with neither falls back to the uniform or name-hashed
mode from Settings. Because the colour lives in metadata rather than on the display, it
survives a feature edit, a rollback and a save/reload. It is also what a STEP export
writes: every body
and face carrying a color goes out as a presentation style, so a colour you read in or
picked here reaches the next system — see File formats.
To view a model without its colours, tick Settings ▸ Display ▸ Faces ▸ Override model colors. That is a display switch only: it makes the viewport fall back to the Settings face colour mode and never touches the stored attributes, so unticking brings every colour straight back and a document saved with it ticked still carries them all.
Two further limits: a file that styles the same item differently per representation
context collapses to one colour, and INVISIBILITY is ignored — a body hidden in the
source file still imports.
STEP import
Supported surface types include plane, cylindrical, conical, spherical, toroidal,
surface-of-revolution, linear-extrusion, offset, and NURBS/B-spline surfaces.
Solid bodies are read from MANIFOLD_SOLID_BREP, FACETED_BREP, certified
BREP_WITH_VOIDS, and the closed shells of a SHELL_BASED_SURFACE_MODEL.
Known limitations:
- Conical faces that cross or precede the cone apex are rejected.
- A body the importer cannot read is skipped and the rest of the file still imports; the feature does not report the skipped body. When a file yields no importable body at all, the feature fails with the reason.
- Some files still import with wrong orientation (inside-out solids, normals facing inward) or mis-shaped faces; very large STEP files can be slow or may appear to hang.
- A file that is not ISO 10303-21 at all is refused up front, before any feature is added.
- A body whose closed shell does not quite close (two faces sharing an edge are trimmed at
different curves, a defect of the file) is still imported when the gap is small, and the
feature then carries an approximation: the History panel
shows a blue
approximate (…)row under the feature naming the body, the measured vector area against its bar, and the bound this puts on the body's volume; the form lists the faces and edges that carry it. Over a size-relative cap the body is refused instead.