Interoperability · IGES
IGES — the legacy surface spoke
IGES 5.3 (ANSI/US PRO/IPO-100-1996), the 80-column format that decades of
aerospace and automotive archives are written in. NativeCAD reads the ASCII form —
.igs / .iges — through its own pure-JS reader and converts fifteen
entity types straight into the kernel's entity graph, so an imported IGES model tessellates,
measures and exports through the same pipeline as everything else.
The scope decision: sew what matches, never fake topology
IGES carries no shared-edge topology — two neighbouring trimmed surfaces each own a private copy
of the curve they meet on, and nothing in the file says they're the same edge. Pretending otherwise
is how importers make leaky "solids". NativeCAD builds every surface exactly and then sews: as of
2026-09-01 stitch runs during import by default, orienting the shell
(two-coloring with multi-edge group resolution and same_sense harmonisation) and
publishing a watertight solid when the sew closes. A genuinely open surface set stays a
sheet body with a named IGES_STITCH_FAILED warning — never a refusal,
never a faked solid. Pass stitch:false to keep the raw open sheet.
Measured across the 647-file real-archive sweep: 596 files import at least one body (92.1%) and 428 come back as watertight solids — up from zero solids before default stitch, with zero regressions elsewhere. Strict-mode seam refusals fell 71 → 0 (partial revolutions rebuilt as single patches; self-closing spline surfaces split at their seam). And of the name-matched STEP↔IGES twin pairs in the archive, 324 import on both sides and 245 agree on volume — a real geometric oracle, not our reader grading our own writer.
Trimmed surfaces (144), composite curves, rational B-spline curves and surfaces (126/128), surfaces of revolution and tabulated cylinders (120/122 — rebuilt as exact rational NURBS, so a revolved cylinder measures its radius to 1e-12), planes, lines, arcs and transformation chains all map; annotation, colour and view entities are ignored because they carry no geometry. A revolution of more than half a turn is split into ≤180° patches to keep seams resolvable.
Options
| Option | Kind | What it does |
|---|---|---|
tolerant | skips translation | Downgrades a per-face refusal to a skipped entry and imports what works.
Off by default — deliberately, so nothing can "pass" by importing nothing. The result
reports exactly what was skipped and why. |
units | behavior | Overrides IGES global field 14 for a file that declares nothing or declares wrong; otherwise the file's own declaration is honoured. |
stitch (+ stitchTol) at import | behavior | On by default since 2026-09-01: the imported sheet runs through
ops/stitch.js during the same cad_import call and a solid is
published when the sew closes it. Reports the full stitch() result plus a
named imported.stitchStatus (IGES_STITCH_CLOSED /
IGES_STITCH_OPEN) — never a fake solid. Pass stitch:false for
the raw open sheet. |
stitch as a separate call | behavior | Still available and unchanged: import the open sheet, then run stitch on
it directly, with the healing pipeline (stitch → simplify → tighten) behind it for dirty
geometry. |
Refusals are named, never silent
Anything the reader cannot build fails by code — IGES_UNSUPPORTED_SURFACE,
IGES_SEAMED_SURFACE, IGES_DANGLING_POINTER and the rest of an
eleven-code vocabulary — each carrying the offending directory entry, so a failing archive file is
a diagnosis, not a shrug.
Try it
IGES is an import-only spoke — NativeCAD deliberately does not write IGES (STEP is the neutral
format worth writing in 2026) — so there is no kernel-authored .igs sample. To
exercise the reader, feed it any legacy .igs from your archive; to compare what the
kernel authors, take the sample plate in STEP or Parasolid.