The core issue
CAD exchange formats carry geometry reliably and topology unreliably. The surfaces almost always survive. The information about how those surfaces join — and at what tolerance — frequently does not. That gap is why imported models arrive as a pile of faces rather than a solid.
Every product that opens files from other CAD systems eventually discovers that "supports STEP" is not a feature you implement once. It is an ongoing engineering commitment.
What actually crosses the boundary
| Information | Survives? | Notes |
|---|---|---|
| Surface geometry | Usually | NURBS transfers well |
| Topology (how faces join) | Often degraded | Gaps and tolerance mismatches |
| Solid vs surface distinction | Sometimes lost | Especially via IGES |
| Assembly structure | Usually | Positions and hierarchy |
| Feature history | No | Not carried by neutral formats |
| Parametric relations | No | Design intent is lost |
| Colours and layers | Partially | Format and exporter dependent |
| PMI / tolerances | Varies | Supported by newer STEP APs |
Why topology degrades
Different CAD systems use different internal tolerances. System A considers two surfaces joined if they are within 10⁻⁶ mm; system B uses 10⁻⁵. When A exports, it writes surfaces that were joined under its rules — and B may find a gap.
Add to that the fact that trimming curves are computed numerically. A trimming curve accurate enough within its originating system may not land on the neighbouring surface accurately enough for yours.
The consequence for your product: you cannot simply read the file and expect a valid solid. You need a healing pipeline. Every serious CAD application has one, and its quality is a large part of why some products "just open" files that others reject.
What a healing pipeline does
- Parse and build entities — read surfaces, curves and topological references as written.
- Analyse validity — find gaps, self-intersections, sliver faces, inconsistent orientation.
- Stitch — join faces whose edges are within a working tolerance, building shells.
- Repair geometry — rebuild bad trimming curves, remove degenerate faces, fix tiny edges.
- Orient consistently — ensure normals point outward coherently.
- Attempt solid construction — if shells close, promote to a solid; otherwise report honestly what you have.
- Validate — confirm the result before handing it downstream.
Import is not reading a file. It is reading a file and then negotiating with it.
The tolerance dilemma
Healing tolerance is the central tuning decision, and there is no universally right value:
Too tight
- Genuine joins are treated as gaps
- Models fail to close into solids
- Users see "import failed" on valid files
Too loose
- Distinct features get merged
- Small but intentional detail is destroyed
- Silent geometry corruption
The practical answer used by mature kernels is tolerant topology: rather than one global value, each edge and vertex carries its own tolerance. Entities from a rough import are marked loose; precise ones stay tight. Downstream operations then respect per-entity tolerance instead of guessing.
Design intent, and why it cannot be recovered
Neutral formats carry the result of modelling, not the modelling itself. An imported part is a set of faces. It has no fillet you can change, no extrude depth you can edit, no pattern you can re-count.
Feature recognition can partially reconstruct intent — detecting that a set of faces forms a hole, a fillet, or a pocket — and it is genuinely useful for downstream CAM and for simple edits. But it is inference, not recovery, and it fails on complex or unusual geometry. Presenting it as "full parametric recovery" oversells it.
Practical guidance
- Prefer STEP AP242 for solids; treat IGES as a legacy fallback.
- Build a regression corpus of real files from the systems your customers use. This is your most valuable interop asset.
- Report honestly. If a model arrived as surfaces and could not be closed, say so rather than pretending it is a solid.
- Expose healing controls to advanced users — a tolerance slider with a preview is worth more than any automatic guess.
- Log what was repaired. When a downstream operation fails, knowing the model was stitched at a loose tolerance is the clue that solves it.
- Do not write parsers from scratch. Open CASCADE's STEP and IGES handling is mature and represents an enormous amount of solved work.
The highest-value thing you can do for interop: collect every customer file that failed to import and keep it as a permanent test case. Interop quality is built from accumulated real-world failures, not from reading the specification more carefully.
Building a product that must open other systems' files? Tell us which systems and what you do downstream. See our CAD kernel service and why booleans fail.