Interoperability · SolidWorks

SolidWorks parts — .sldprt, opened directly

A .sldprt wraps a Parasolid transmit inside a proprietary container. NativeCAD walks the container natively, finds the embedded XT stream by content, and imports it through the Parasolid path — so a customer's SolidWorks part opens directly, no “please re-export as STEP” round trip.

Import — cad_import

Both container generations are walked natively: classic OLE2/CFB (header, FAT, DIFAT continuation, miniFAT, mini stream and the directory tree) and the chunk container SolidWorks moved to in 2015. The reader picks the body partition over ghost and history streams, detects the transmit by its **ABCDEFGH… marker rather than by stream name — names differ between releases — and hands the bytes to the XT reader. The import report carries the container generation and stream details alongside the usual XT record. A ZIP/OPC (3DExperience-era) package is refused by name (SLDPRT_ZIP_OPC_UNSUPPORTED), never mis-parsed.

Measured on a corpus of 501 public SolidWorks files: 413 open straight to watertight solids, 455 with tolerant:true, and every one of the rest returns a named refusal code, never a crash.

Options

The embedded transmit reads through the XT pipeline, so the Parasolid options apply unchanged: units overrides the transmit's scale, tolerant downgrades per-face refusals to skipped entries, and tolerant entities and seam splitting behave exactly as they do on a bare .x_t.

Export

None, deliberately: .sldprt is an import-only spoke, and writing one is SolidWorks' job. A NativeCAD part headed for SolidWorks ships as Parasolid XT, which SolidWorks opens natively.

Try it

There is no kernel-authored .sldprt sample for the same reason there is no exporter — this kernel does not write the container. Any part saved by SolidWorks itself works; the sample plate is available as .x_t/.x_b on the Parasolid page.

Refusals are named

The container has its own vocabulary: CFB_* codes for compound-file structure (truncation, chain loops, bad sector geometry), SLDPRT_NO_PARASOLID for a container that parses but carries no transmit, SLDPRT_ZIP_OPC_UNSUPPORTED for the 3DExperience package format. Past extraction, everything speaks the XT refusal vocabulary.

Roadmap: burning down the 501-file corpus refusals — the mass is in the transmit, not the container (XT_DANGLING_POINTER, XB_BAD_RECORD and XT_UNSUPPORTED_SURFACE top the audit, and the follow-ups are filed from those numbers) · the feature tree, sketches and rollback state stay out of scope by name: proprietary and undocumented, the body is what crosses.