Skip to content

CAD sources

Any CAD that exports STEP works. Fusion, SolidWorks, Rhino, Onshape, Inventor, NX, CATIA, FreeCAD — Hardcraft reads the solid, not the badge on the package. STEP is the general path.

The Plasticity bridge is the second path: a live link to one specific modeller, a convenience rather than a requirement.

Both paths end up as a mesh carrying the same metadata contract, so detection and fill are identical downstream. What differs is how much CAD truth survives the trip, and that changes what the fill can do.

Plasticity bridge STEP import
Extra install none converter binary
CAD face grouping (face_ids, groups)
CAD vertices → hard boundary splits
Surface-type oracle (plane/cylinder/torus/…)
Periodic-face seams
CAD parametric UV (hc_cad_uv)
One object per CAD body ❌ manual ✅ automatic
Tessellation control in Plasticity linear/angular deflection, re-tessellation
Live round-trip while modelling ❌ file-based

Rule of thumb: STEP by default, bridge for live iteration in Plasticity. STEP carries strictly more — the surface-type oracle, periodic seams and the CAD parametric UV exist only there, and wrapped walls, bores and repeated features lean on exactly those.

Exporter quality varies, the contract does not

Different CADs write different STEP: tessellation quality, how surfaces were built, whether a shell is clean. Import repairs what it can and says what it cannot. If a body shades badly, rebuild the surface in the source CAD and re-export — see Known issues.

The metadata contract

Both paths hand detection the same two mesh ID-properties:

mesh["face_ids"]
one integer per CAD face — the surface's persistent id.
mesh["groups"]
flat (loop_start, loop_count) pairs, one per CAD face, indexing the loop buffer. A polygon inherits the CAD id of its loops.

Each CAD face arrives as its own shell — coincident but unwelded seam vertices. Neighbouring faces tessellate a shared edge independently, so matching boundary edges between them is unreliable. What does coincide is CAD vertices: a boundary vertex whose position is shared by three or more CAD faces is a real CAD 0-cell, and therefore a hard segment split. Between two CAD vertices the run is exactly one CAD edge — one parametric curve — fitted as a line or an arc.

That is the whole basis of detection accuracy, and the reason for the next warning.

Detection needs a raw export

Editing, separating, joining or re-extracting the CAD mesh destroys the metadata. Detection then falls back to pure geometry and the patch/curve split degrades. Do not debug detection on an edited mesh — re-export first. This is the single most common source of "the patches make no sense".

Plasticity bridge

The path of least friction: export or stream from Plasticity, hit New Target (fill all) or New Target (empty). Editing the CAD mid-retopo is supported — see Re-importing an edited CAD.

What it does not carry: BREP edge identity and per-vertex parametric UV. Both are on the wishlist for the bridge and neither is available today, so the STEP route is the only way to get surface-type and parametric-UV information into Hardcraft.

STEP import

Conversion runs through the bundled OCCT converter as a background process, and produces more than a mesh.

One object per CAD body. The XCAF assembly tree is walked to its leaves and each part is additionally split by solid — a part built from ten solids arrives as ten objects, named from the STEP MANIFOLD_SOLID_BREP entries, with a parts.json sidecar recording the mapping.

A type oracle. Per CAD face, the analytic surface type OCCT reports. This is what makes Select Similar (Shift+G in PATCH) work at all — on the bridge it reports No CAD oracle — and lets fill dispatch pick a tube/grid/loft route from CAD truth rather than from guessed curvature.

Periodic seams. For a periodic face the converter traces the seam and records it, so the unwrap knows where the surface closes on itself instead of tearing a cylinder open at an arbitrary place.

CAD parametric UV. The converter's own (u, v) per corner is stamped as the hc_cad_uv loop layer (plus per-face periods for closed surfaces). Fill can then work in the CAD's own chart — the most reliable interior for wrapped walls and faces with holes, where an LSCM unwrap has to invent something.

Priority when several charts exist: your manual UV cut wins, then the CAD chart, then LSCM.

Tessellation and repair

The imported CAD mesh shades from its own tessellation, and it is also what you bake normals from later — so density is a per-import decision. The Import STEP file dialog carries it in its sidebar: a Tessellation preset (Retopo — the working default; Bake — dense enough to shade clean as a bake source) and the two numbers behind it, Chord (in the file's own units) and Angular (degrees), editable after picking a preset. The values an import ran with are remembered on the mesh and Re-import CAD repeats them; a denser mesh is a fresh import through the dialog. The converter floors the chord at 2e-4 of the body's extent so a huge model cannot explode. The dialog opens on the STEP_LIN_DEFL / STEP_ANG_DEFL_DEG defaults (Settings). OCCT's mesher occasionally tears a closed body at a given tolerance; the repair (STEP_REFINE_TORN, on by default) re-runs only that body at denser steps, keeping the best result.

Imported normals are also repaired on the way in — collapsed triangles are dropped, inverted normals are judged by the triangle cone, and outliers are judged against their own CAD face's field (a single CAD face is smooth by construction, so the face's own normals are the honest reference).

Plasticity → STEP: swept faces

Plasticity writes some swept surfaces as OFFSET_SURFACE over a C0 base, which OCCT refuses to load — the face goes missing. The workaround is to enable convert analytics to NURBS on export, at the cost of the analytic types the oracle would otherwise give you. Check the imported body for missing faces before retopologizing it.

Re-importing an edited CAD

Fixing the CAD mid-retopo no longer costs you the work. Edit the part in the source CAD, re-export, and repoint the session:

  • STEP: one click — Re-import CAD (PATCH section of the N-panel). It re-reads the same .stp, converts, and rebinds automatically.
  • Plasticity bridge: re-export the part, select the new import in Object Mode and press Rebind Target (re-export).

The rebind matches every island of the old CAD to the new one by persistent face identity (Plasticity kernel ids, or content hashes the STEP converter derives per face) and translates your session onto it. The report tells you exactly what happened; the same text lands in the log.

What happens to your patches:

CAD face after the edit Your patch
untouched carried as-is — fills, spans, strokes, freeze all survive
re-trimmed (same surface, moved edges) carried + marked stale — rebuilds on your next gesture with its parametric edits
surface rebuilt / deleted the old fill is removed (there is nothing to hang it on)
split into pieces the old fill stays as a legacy fill — press X on any piece to remove it whole
frozen + geometry changed freeze is kept, reported as FROZEN AT RISK — you decide: rework by hand or unfreeze to rebuild

Update the converter binary

Face identity on the STEP path needs per-face entity ids from the converter. An older binary still imports fine, but stamps no identity — the rebind then refuses instead of guessing (the log says update the converter binary). Objects imported with an older build carry no identity either: re-import them once after updating.