Does a STEP file look wrong?
This question keeps arriving on 3D printing and CAD forums, so it gets its own page. Every number below was measured on the machine that wrote it and is re-checked by npm test. Nothing here is a rule of thumb.
The short answer
A faceted STEP file is normal, and it is not broken. A STEP file stores geometry as exact mathematical surfaces. It contains no triangles at all. Every flat panel you can see was invented by whichever tool tessellated it, and how many panels it chose is a quality setting, not a fact about your file. That is why the same STEP file can look smooth in one program and visibly faceted in another, and neither one is corrupt.
So there is a real answer to “is this file wrong”, but you cannot get it by looking at the curved surfaces. You get it by looking at the flat ones.
1. Judge the flat parts, not the curved ones
A plane face needs no approximation, so a tessellator reproduces it exactly and always spends the same amount on it: two triangles. If a flat face in your file is showing more than that, or is not flat at all, the file genuinely has something wrong with it. Curved faces tell you nothing about file health, because they have to be approximated by someone.
This is measured on our own test files. The flat cubes — the same solid in STEP, in IGES, and in a simplified variant — return 12 triangles at Draft, Normal and Fine alike. The three settings are indistinguishable on a flat part. That number is the floor for any closed solid: a cube has six faces of two triangles each, and no closed solid can be built from fewer.
2. Why the same file looks different in different programs
Nothing is changing between the programs; they are choosing differently. CAD packages routinely tessellate finely for the screen, where shading hides the facets, and more coarsely for export, where triangle count costs money. Some reuse a cached preview mesh. The result is a file that previews smooth and exports visibly faceted, which reads as damage and is not.
The lever is the export tessellation setting. Raising it is the same decision as moving up a quality preset here: the available range on our conical surface is 286 to 2,142 triangles, Draft to Fine. If the exported result looks worse than the preview, that gap is what you are fighting, and closing it means raising the setting rather than repairing the file.
3. What the conversion actually costs you
One thing, and it is worth being exact about. The exact surfaces are replaced by flat facets, so the shape becomes an approximation of itself. Nothing else is lost, and the STEP file you started from is never modified.
How closely the facets follow the real surface is the only question, and it is measurable. On a rounded cube the three settings give 40, 56 and 140 triangles. On a flat cube they give 12, 12 and 12, because a plane face needs no approximation at all. The same pattern holds on the 18-part assemblies, which go from 3,848 to 17,848 triangles on one file and 4,900 to 21,116 on another — both at Normal to Fine.
4. A low triangle count is not itself a warning
Triangle count follows curvature, not file history. A flat cube is 12 triangles however it was exported and at whatever setting, and a curved part can legitimately be a few hundred. So a small number on its own tells you nothing about whether the file was simplified or damaged.
What would matter is a small count on a part that should carry curved detail, or a shell that does not close. Both are checkable without a reference model: the triangle count is recoverable from the output file size alone, because a binary STL is exactly 84 + 50 × triangles, and the edge count tells you whether every edge is shared by exactly two triangles. A 12-triangle cube is 684 bytes and closes with 18 edges.
The whole thing on one screen
| Faceted curves | Expected. A STEP file stores no triangles, so the facets were chosen by the tool that drew it. Not damage. |
|---|---|
| Faceted flat faces | A real fault. A plane face needs no approximation and must read 2 triangles per face. |
| Flat cube, any setting | 12 triangles. The setting cannot change a planar face, so this number is constant. |
| Cone, Draft to Fine | 286, 516 and 2,142 triangles — a factor of 7.5. This is the quality dial working normally. |
| Preview vs export | Different tessellation settings, not damage. Raise the export setting to close the gap. |
| Open shell | The one thing worth ruling out. Count edges: every edge used exactly twice means closed. |
If the flat faces are flat, the shell closes, and the size matches the triangle count, then a faceted STEP file is a normal file that has been drawn with flat pieces — which is the only way any viewer can draw it.
Where these numbers come from
- 12 / 40 / 56 / 140 / 286 / 516 / 2,142 / 3,848 / 17,848 / 4,900 / 21,116 triangles — produced by running the shipped engine (occt-import-js 0.0.23, a WebAssembly build of OpenCASCADE) in Node.js over the project’s own test files at Draft, Normal and Fine.
npm testre-runs every count and fails on a mismatch. - 84 + 50 × triangles, and the 684-byte cube — the published binary STL record layout, cross-checked against the reference STL shipped with the engine vendor’s own test set. The same identity is used on the verification page, which shows the arithmetic.
- 18 edges across 12 triangles — 12 triangles carry 36 edge-uses, and a closed mesh spends each edge exactly twice, so 36 ÷ 2 = 18. Measured on our IGES test cube.
The format comparison covers why the conversion only runs one way, and the verification page has all five checks. The converter reports the bounding box, triangle count and piece count for your own file after every run.