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.

VersionWriteReadIndependent readerCarries
AP203 ed1ISO 10303-203:1994✓✓25 / 25GeometryAssemblies
AP203 ed2ISO 10303-203:2011✓✓25 / 25GeometryAssembliesColoursLayers
AP214ISO 10303-214✓✓25 / 25GeometryAssembliesColoursLayers
AP242 ed1ISO 10303-242:2014✓✓25 / 25GeometryAssembliesColoursLayersPMITessellation
AP242 ed2ISO 10303-242:2020✓✓25 / 25GeometryAssembliesColoursLayersPMITessellation
AP242 ed3ISO 10303-242:2022✓✓25 / 25GeometryAssembliesColoursLayersPMITessellation
STEP-Zip .stpZ · any version above, compressed✓✓same files, zippedWhatever 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.

OptionKindWhat it does
unitsbehavior 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.
documentbehavior Targets a second, independent document ("new") so two parts import and export without touching each other.
body addressingskips 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

OptionKindWhat it does
ofskips 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.
transformsbehavior Per-body placements written into the exported product structure — paste a solved mate set's cadTransform straight in and the file exports assembled.
unitsbehavior 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 namesbehavior 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 →

Roadmap: AP242 tessellated-geometry ingest for the -tg archival flavour · growing the NIST round-trip corpus.