Interoperability · STEP
STEP — every version, every file verified
NativeCAD writes AP203 ed1 and ed2, AP214, AP242 ed1, ed2 and ed3, and compressed .stpZ, and every file is verified by an independent reader. What you model here opens in the other system as a clean solid, and what another system wrote comes in as a body you can edit like one you built.
Every STEP version your customer asks for
Save to the exact STEP version the receiving system wants, from 1994's AP203 to 2022's AP242 ed3. Every file came back exact: 150 of 150 read by an independent CAD kernel (Open CASCADE), with volume, area and centre of mass inside the CAx-IF tolerance bands.
- 6 + .stpZSTEP versions written and read
- 150 / 150files verified by an independent reader
- 25test parts per version, from fillets to assemblies
| Version | Write | Read | Independent reader | Carries |
|---|---|---|---|---|
| AP203 ed1ISO 10303-203:1994 | ✓ | ✓ | 25 / 25 | GeometryAssemblies |
| AP203 ed2ISO 10303-203:2011 | ✓ | ✓ | 25 / 25 | GeometryAssembliesColoursLayers |
| AP214ISO 10303-214 | ✓ | ✓ | 25 / 25 | GeometryAssembliesColoursLayers |
| AP242 ed1ISO 10303-242:2014 | ✓ | ✓ | 25 / 25 | GeometryAssembliesColoursLayersPMITessellation |
| AP242 ed2ISO 10303-242:2020 | ✓ | ✓ | 25 / 25 | GeometryAssembliesColoursLayersPMITessellation |
| AP242 ed3ISO 10303-242:2022 | ✓ | ✓ | 25 / 25 | GeometryAssembliesColoursLayersPMITessellation |
| STEP-Zip .stpZ · any version above, compressed | ✓ | ✓ | same files, zipped | Whatever its version carries |
Ask for it by name: cad_save { path: "bracket.stp", schema: "ap214" }. End the path in
.stpZ for the compressed file CATIA, SolidWorks, NX and most PDM systems take. Leave the schema out and you get AP242 ed2.
Import — cad_import
Every MANIFOLD_SOLID_BREP in the file is grafted as a solid and published with its
own addressable handle, so an imported part chains into edits, booleans, DFM checks and CFD exactly
like a built one. Assemblies keep their product structure (NAUO/CDSR) through
cad_assembly_import; a SHELL_BASED_SURFACE_MODEL sitting beside a real
solid is recognized as a construction surface (the CATIA Fill/Split pattern) and published on the
sheet channel instead of being promoted to a fake part body. The file's own
LENGTH_UNIT declaration is honoured — an inch-declaring file converts at
25.4 mm/unit — and an import-health report accompanies every read.
| Option | Kind | What it does |
|---|---|---|
units | behavior | Overrides a missing or wrong LENGTH_UNIT declaration (um…ft).
Omit it and the file's own declaration wins; either way the document holds millimetres and
the result records what was declared, what was applied, and which one decided. |
document | behavior | Targets a second, independent document ("new") so two parts import and
export without touching each other. |
| body addressing | skips translation | A multi-solid file publishes every body as <id>#k — downstream ops
take just the body you name, so you never pay to process the rest. |
Assembly filters — structureOnly / subtree
Shipped 2026-08-29, for assemblies too large to fully translate just to see what's
in them. structureOnly returns the instance tree only — per node the
instance path, product name, occurrence (NAUO) id, local transform and solid counts, plus
whole-file stats — and translates no geometry at all:
StepProductStructure.scanFile() never builds a B-rep, so no body is minted (the result
carries a structureId, refused by every solid-taking verb the same way the mesh
channel is). No bounding box either — a box is measured off tessellated geometry, which is the
cost this option skips. The tree is capped at 400 nodes (truncated says so);
stats always counts the whole file.
subtree:"<instance path>" — the path string comes straight out of
structureOnly, and an occurrence id #nnn also addresses it — imports
only that occurrence and what hangs under it, each body grafted at its WORLD
placement: one product instantiated N times yields N placed bodies. Reports
imported.subtree (path, occurrence, one entry per placed instance, and
fileBodies = what a plain import would have translated). Refusals by name on
reasonCode: STRUCTURE_UNSUPPORTED_FORMAT /
SUBTREE_NOT_FOUND (lists the file's paths) / SUBTREE_EMPTY /
STRUCTURE_MALFORMED. Combine both options for the tree rooted at one occurrence,
still without geometry.
Export — cad_export_body format:"step" and cad_save
| Option | Kind | What it does |
|---|---|---|
of | skips translation | Default serializes the whole assembled document; naming ONE body writes a STEP file containing only that body — two parts in one document export as two files. |
transforms | behavior | Per-body placements written into the exported product structure — paste a solved mate
set's cadTransform straight in and the file exports assembled. |
units | behavior | The unit the file is written in. Defaults to the document's own declared unit (mm unless an import set it); re-importing reproduces the geometry to one multiply and one divide. |
| body names | behavior | Imported and explicit names survive; anything unnamed falls back to its stable op id, so
a receiving viewer shows vane_7, never an undifferentiated blob. |
PMI
Semantic PMI (GD&T frames, datums, tolerances) is read from AP242 and drives the modeler's
per-face callouts; graphical PMI (leaders, extension lines, callout outlines) and saved cameras are
carried into 3D-PDF export via pmiFrom. Face-attachment rates
are measured against the NIST MBE corpus, not asserted.
Try it
STEP nativecad-plate.step 75 KB
The kernel-authored sample plate as AP-flavoured Part 21 — open it in SolidWorks, NX, Fusion or FreeCAD; the same file is available in every other format we write.
Proven on every write
The round-trip fidelity gate imports every corpus part, writes it back out, re-imports the written copy and diffs the two against each other: face/edge/vertex counts exact, watertight defects must not increase, volume within 0.1%. The current corpus round-trips clean on every solid measured. Unit and precision policy mirror the commercial-kernel contract (resabs/resnor).
AP242's other implementation form — the domain-model XML that PLM and PDM systems
exchange when the assembly structure is the payload — ships as
format:"ap242-xml": AP242 XML →
-tg archival flavour · growing the NIST round-trip corpus.