“Failed to create empty document.” That error message from SolidWorks when opening a STEP file means the STEP importer could not even initialize a document container before hitting a fatal problem. It is not a timeout. It is not a permissions issue. The file has structural corruption that SolidWorks’s geometric kernel cannot work around.
STEP Import Error Messages and What They Actually Mean
SOLIDWORKS and Inventor produce several different error strings for STEP import failures. Which one you see tells you where to start the recovery.
“Failed to create empty document.” The importer aborted before creating a model document. Usually caused by a dangling entity reference very early in the DATA section — the file header or product structure block is corrupted. Try FreeCAD first; its OCCT reader handles missing entity references more gracefully.
“The import operation was not successful.” A generic fallback. The geometry parsed but could not be assembled into solid bodies. Check if SolidWorks created an empty FeatureManager or a document with zero bodies. If the document is empty, treat it the same as “Failed to create empty document.” If you got surface bodies (not solid bodies), the shell was open — proceed to FreeCAD’s Convert to Solid step.
“The document cannot be opened due to an internal error.” File-level corruption: the STEP file may be binary-corrupted (not just entity-reference errors). Open it in a text editor and confirm it starts with ISO-10303-21; and ends with END-ISO-10303-21;. If it is binary garbage or does not start with that header, the file transfer was corrupted — re-request the file.
“Import Diagnostics found N problem(s).” The file imported but the geometry has quality issues. This is not a failure — SolidWorks opened something. Run Import Diagnostics (Tools > Import Diagnostics > Run Diagnostics) to triage the specific problems. Open edges and gaps in surfaces can often be closed automatically within Import Diagnostics. If it fixed the issues, save the file and proceed. If not, export to Parasolid and reimport.
“Cannot knit surface into solid body.” The imported geometry is a shell (surface body) that could not be closed. This appears as a surface body icon in the FeatureManager instead of a solid body. The shell has at least one open edge — a gap between adjacent faces. Import Diagnostics often closes these. If not, use FreeCAD’s Convert to Solid.
“Entity #XXXXX is undefined / dangling reference.” Some STEP viewers and importers produce this directly; SolidWorks typically does not expose the entity number, but you can grep the file:
# Find all entity references in the file
grep -oP '#\d+' file.step | sort -n | uniq > referenced.txt
# Find all defined entities
grep -oP '^#\d+' file.step | sort -n | uniq > defined.txt
# Dangling references are in referenced but not defined
comm -23 referenced.txt defined.txt
If the diff is large (thousands of dangling references), the file was truncated. If it is small (a few dozen), the corruption is localized and FreeCAD may load everything except the broken sub-tree.
If you got this from a vendor file, a downloaded dataset, or a STEP that was partially written when something crashed, SolidWorks is not going to open it. The recovery path goes through a different STEP importer — one with a higher tolerance for malformed AP214 entity references — and then back into SolidWorks via Parasolid.
Why Different Tools React Differently to the Same File
STEP (ISO 10303) has two common engineering profiles: AP203 (configuration-controlled 3D design) and AP214 (automotive, assembly product structure). Most CAD software exports AP214 for assemblies. The standard is large and the conformance requirements leave room for interpretation — a file that passes one importer’s validation can fail another’s. For a full breakdown of which AP version to send your supplier — including the AP242 PMI trap — see our STEP version comparison.
SolidWorks’s STEP importer (historically built on Geometric’s D-Cubed/Spatial ACIS) is strict about certain entity relationships. If an ADVANCED_BREP_SHAPE_REPRESENTATION references an AXIS2_PLACEMENT_3D entity that is missing or has a null pointer, SolidWorks aborts at document creation time. The error message is generic and gives you no line reference.
OnShape’s STEP importer uses the Siemens Parasolid translator, which is the same translator used in NX and Solid Edge. It is more tolerant: it can skip malformed sub-entities and continue loading valid geometry. The tradeoff is that you may get incomplete geometry — bodies with missing faces, open shells — but you get something rather than nothing.
FreeCAD’s STEP importer is built on OpenCASCADE Technology (OCCT), the open-source geometric modeling kernel. OCCT has its own AP214 reader that handles certain classes of entity errors differently from both SolidWorks and Parasolid. In practice, files that cause SolidWorks to output “Failed to create empty document” often import cleanly into FreeCAD, though the resulting geometry may need repair.
The recovery strategy is to try both OnShape and FreeCAD, use whichever gives better geometry coverage, then export to Parasolid for re-import into SolidWorks.
What Causes This Specific Error
Before spending time on recovery, it is worth understanding what broke, because the cause affects which recovery path will work.
Truncated file. If the STEP file was partially written during a crash or network failure, it may be missing the mandatory END-ISO-10303-21; terminator and some entity definitions. Check the last line of the file: open it in a text editor (STEP is plain text, though potentially gigabytes). If it ends mid-sentence or without the terminator, entity-count mismatches will cause SolidWorks to fail at document init.
# Last line of a healthy STEP file:
END-ISO-10303-21;
# Last line of a truncated STEP file:
#48391 = ADVANCED_BREP_SHAPE_REPRESEN
If the file is truncated, FreeCAD’s OCCT reader is the better first attempt — it does partial reads more gracefully.
Invalid entity references. The STEP entity graph is a chain of references (#1234 = SOME_ENTITY(..., #5678, ...)). If a referenced entity number does not exist in the file — because it was deleted, renumbered incorrectly during a STEP merge, or never written — the reference is dangling. SolidWorks walks the reference chain from the top-level product definition down to geometry and fails hard when it hits a dangling reference early.
Geometry that failed the kernel’s checks. Some STEP exporters produce geometrically valid but numerically degenerate entities: zero-length edges, degenerate B-spline control points, surfaces that report valid bounds but have collinear or coincident rows in the control polygon. SolidWorks’s import validation rejects these. OCCT is generally more permissive on numerical degeneracy.
Recovery Path 1: OnShape
OnShape is free for public workspaces and can import STEP files up to 1 GB. Upload the corrupt STEP file and let its importer attempt it.
- Create a new OnShape document → click the + (Insert) button in the Document browser on the left → Import file → upload the
.stepor.stpfile - OnShape processes the file server-side. When complete, it opens the model tab. If geometry survived, you will see the 3D bodies in the viewport
- After import, check the Notifications bell icon (top-right) for import warnings. In the 2025 OnShape UI, import warnings appear as a notification with a summary count (“Imported with 3 warnings”) rather than a tab icon. Click the notification to see which bodies were skipped or had issues
- If geometry is present: right-click the Part Studio tab at the bottom → Export → choose Parasolid (
.x_t)
The Parasolid export is the critical step. Since OnShape runs on the Parasolid kernel internally, exporting to .x_t does not involve a format conversion — it serializes the kernel’s in-memory representation directly. This makes it the most geometrically faithful export OnShape can produce. The geometry you see in OnShape’s viewer is exactly what ends up in the .x_t file.
Importing the Parasolid into SolidWorks:
Open the .x_t file in SolidWorks the same way you’d open any part: File → Open → change the file type filter to Parasolid (.x_t, .x_b). SolidWorks will import each body as a solid or surface. Multi-body assemblies will come in as a single multi-body part — you will need to save individual bodies using Insert → Part or the Split feature if you need separate files.
Recovery Path 2: FreeCAD
If OnShape cannot import the file or produces incomplete geometry, try FreeCAD. Use FreeCAD 1.0.x (the current stable line as of 2025–2026) — the OCCT 7.7 STEP reader included from 1.0 onwards handles entity-reference errors significantly better than 0.20. Download the installer from freecad.org, not a package manager, since distribution repositories often carry older versions.
- Open FreeCAD → File > Import → select the STEP file
- Switch to the Part workbench (View > Workbench > Part)
- In the Model tree, you will see the imported shapes. Select all of them
- Part > Check Geometry (or Part > Part > Check Geometry depending on version)
- The Check Geometry report lists:
- Open shells: the solid has gaps between faces — the boundary representation is incomplete
- Invalid faces: individual face geometry is degenerate
- Self-intersections: face geometry intersects itself — typically produces rebuild failures in SolidWorks
For shapes with open shells: select the shape → Part > Convert to Solid. OCCT attempts to close the shell by analyzing edge loops and bridging gaps within a tolerance. This works for minor edge gaps (< 0.01 mm); larger gaps require manual repair in a surface modelling tool.
For self-intersecting faces: select the problematic face in the shape, use Part > Shape Builder to extract and rebuild the face as a new Shell, then re-knit with the rest of the body.
If the geometry checks out after repair, export back to STEP via File > Export → choose STEP AP214 format. The OCCT writer re-serializes the entity graph, assigns new sequential entity numbers, and writes a valid END-ISO-10303-21; terminator. This OCCT-written STEP file almost always imports cleanly into SolidWorks, even when the original failed.
FreeCAD Python console approach for batch repair:
If you have multiple bodies to repair, the Python console (View > Panels > Python Console) is faster than the GUI:
import Part
# Load the corrupt STEP
shape = Part.read("/path/to/corrupt.step")
# Check geometry
Part.checkGeometry(shape)
# Try to make solids from each shell
for i, solid in enumerate(shape.Solids):
if solid.ShellCount > 0:
converted = Part.makeSolid(solid)
Part.export([converted], f"/path/to/recovered_body_{i}.step")
This script iterates each solid body, attempts shell closure, and exports each to a numbered STEP file for reimport into SolidWorks.
When the Assembly Product Structure Is the Problem
STEP AP214 uses a layered product structure: PRODUCT → PRODUCT_DEFINITION → PRODUCT_DEFINITION_SHAPE → REPRESENTATION → SHAPE_REPRESENTATION → geometry entities. If the corruption is in the upper layers (product structure) rather than the geometry itself, the recovery is different.
The geometry entities (MANIFOLD_SOLID_BREP, ADVANCED_BREP_SHAPE_REPRESENTATION) may be completely valid, but the product structure that connects them to assembly positions is broken. In this case:
Strip the assembly structure and import geometry only. Open the STEP file in a text editor (or grep it) and search for MANIFOLD_SOLID_BREP or ADVANCED_BREP_SHAPE_REPRESENTATION entity blocks. These are the raw solid bodies. If you can identify their entity numbers, you can extract them into a minimal STEP file with a synthetic product structure.
A minimal synthetic wrapper looks like:
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('Extracted geometry'),'2;1');
FILE_NAME('recovered.step','2026-05-10T00:00:00',(''),(''),'','','');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = PRODUCT('part','part','',(#2));
#2 = PRODUCT_CONTEXT('',#3,'mechanical');
#3 = APPLICATION_CONTEXT('automotive design');
#4 = PRODUCT_DEFINITION_FORMATION('','',#1);
#5 = PRODUCT_DEFINITION('design','',#4,#6);
#6 = PRODUCT_DEFINITION_CONTEXT('part definition',#3,'design');
#7 = PRODUCT_DEFINITION_SHAPE('','',#5);
#8 = SHAPE_DEFINITION_REPRESENTATION(#7,#9);
#9 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#100),#200);
/* paste your MANIFOLD_SOLID_BREP entity block starting at #100 here */
/* paste your geometry entities here */
END-ISO-10303-21;
This approach requires understanding STEP entity numbering, but it is effective when the geometry is good and the product structure is the only broken part. The resulting single-body STEP file imports reliably into SolidWorks.
Verifying What You Recovered
Before committing time to cleaning up the recovered geometry, verify it is complete. In SolidWorks, after importing the Parasolid or repaired STEP:
- Check for import errors: Tools → Import Diagnostics → Run Diagnostics. This catches open surfaces, missing faces, and edge gaps that SolidWorks’s importer tolerated but the kernel flagged internally.
- Confirm solid status: The FeatureManager should show a solid body icon (cube), not a surface body icon (mesh square). If it shows surface bodies, the shell closure failed somewhere.
- Measure against known reference. If you have a drawing or 2D print with overall dimensions, measure the recovered model. Corrupt STEP files occasionally import with a unit scale error (millimetres treated as inches) which shows up as a 25.4× size difference.
The import diagnostics workflow is covered in more detail in why your STEP-imported models break DXF export from drawings — the same checks apply here, with the additional context that the geometry itself may have more surface-level issues than a cleanly exported STEP.
After Recovery: Getting Clean Exports
Once the model is in SolidWorks as a solid body or set of solid bodies, the downstream export workflow is standard. If the recovery brought in a multi-body part and you need per-body DXFs — for flat patterns or laser cutting — use Insert → Part (or the Split feature) to isolate individual bodies into their own part files, then export DXF from each.
For assemblies with many recovered components, batch DXF export from a SolidWorks assembly applies directly. The only additional step is checking import diagnostics on each part before including it in the batch — geometry that silently has open edges will produce unexpected DXF output (extra line segments, missing outlines) that is hard to catch downstream at the laser or waterjet.
The recovery path described here — STEP → OnShape → Parasolid → SolidWorks — handles the most common class of corrupt STEP files where the SolidWorks importer fails immediately. For files that SolidWorks does import but produces corrupt geometry within, checking STEP import health before committing to a save-bodies workflow is the right follow-on step.
Prevention: How to Avoid Corrupt STEP Files
Recovery takes time. The upstream controls that prevent corrupt STEP files from reaching you in the first place are worth understanding.
Export Settings That Matter
Always use AP214 for assemblies, AP203 for single parts. AP214 carries product structure (assembly hierarchy, component placement transforms) and is what most assembly importers expect. Exporting a multi-component assembly as AP203 will produce a STEP file that looks structurally valid but collapses all geometry into a single product node — the importer will attempt to import it as one body and may fail. For AP version guidance, see STEP AP203 vs AP214 vs AP242.
Verify the STEP file immediately after export. In SOLIDWORKS: File > Open the file you just exported. If it does not open cleanly on the machine that exported it, the export itself failed — do not send it. Common cause: SOLIDWORKS ran out of memory during a large assembly export and silently wrote a partial file.
For large assemblies, export from a resolved (not lightweight) state. Lightweight components that are not fully loaded at export time produce placeholder geometry or dangling references in the output. Before exporting to STEP: Edit > Completely Resolved (or right-click the assembly root > Set Lightweight to Resolved). Wait for the assembly to fully load, then export.
What to Ask From Suppliers
When requesting STEP files from vendors or collaborators:
- Request AP214 or AP242 for assemblies (not AP203)
- Ask them to confirm the file opens in their own CAD tool after export — a five-second sanity check that catches truncated exports
- Ask for file size as a reference. A STEP assembly that should be 50 MB but arrives as 2 MB was probably truncated in transfer. Compare against the file size they report
- If the file is large (> 500 MB), request transfer via a direct download link rather than email attachment — email servers and some cloud storage systems mangle large binary attachments or apply compression that corrupts the file
File Transfer Integrity
STEP is plain text (ASCII), but large STEP files are often zip-compressed before transfer. Verify the archive after download:
# Windows PowerShell — verify zip integrity before unzipping
Test-Path recovered_assembly.zip # confirm file exists
$zip = [System.IO.Compression.ZipFile]::OpenRead("recovered_assembly.zip")
$zip.Entries | ForEach-Object { Write-Host $_.FullName, $_.Length }
$zip.Dispose()
If entries show length 0 or the unzip fails, the archive is corrupt at the container level — the STEP inside will be unreadable regardless of the importer used. Re-request the file.
For STEP files transferred over FTP or SSH, verify the byte count after transfer:
# Source machine
sha256sum assembly.step > assembly.step.sha256
# Destination — after transfer
sha256sum --check assembly.step.sha256
A SHA-256 mismatch means the file was modified in transit. This is rare but non-zero on long FTP transfers, especially over high-latency connections.