Skip to content
Keith Sloan edited this page Sep 2, 2026 · 3 revisions

ImportExport 3DM — Wiki

FreeCAD import/export for Rhino .3dm files, geometry preserved as true NURBS.

Pages

  • Import Gallery — rendered imports of the openNURBS V1–V6 sample set, for eyeballing import quality.
  • Gallery Utility — the make_3dm_gallery macro that builds a gallery for any folder of .3dm files.
  • Trimmed Surfaces — FreeCAD's lossy trimmed-surface export, and the separate import_trim_3DM / trim3dm importer.

Import types (File → Open / Import dropdown; first is the default)

  1. 3DM (default) — pure-Python import3DM. Native Rhino files: curves, NurbsSurfaces, trimmed Breps (official rhino3dm path). SubD objects import as their smooth subdivided limit surface (mesh) — complete and faithful — and the Rhino control-net meshes in the file are auto-hidden.
  2. 3DM Trimmed via trim3dmimport_trim_3DM, backed by the trim3dm C++/OpenNURBS extension. Robust on complex trimmed solids and FreeCAD-exported trimmed files (see Trimmed Surfaces). The .so is not committed — build per platform.

Experimental (not a menu option): an exact SubD-as-NURBS reconstruction (importSubD.makeSubD) emits exact bicubic B-spline limit patches for the regular quad regions plus a control-net cage. It is geometrically exact where it exists but incomplete at extraordinary vertices (holes → blocky tessellation), so it is retained in the repo but not registered as an import type. Completing it (Stam evaluation → watertight NURBS → CAM-ready) is future work.

Known import issues

Findings from the gallery below, tracked as GitHub issues (default 3DM importer):

  • #4 — Point objects import but render blank (points / point-cloud / point-with-user-data files)
  • #5 — Lights and named viewports import blank (spot_light, viewports — non-geometric)
  • #6 — V6 my_surfaces renders blank (V2/V3 render fine)
  • #7 — Trimmed surfaces show spiky untrimmed-edge artefacts (Camera, T-Joint, DinerMug)
  • #8 — Some surfaces import as wireframe / isocurves (SphericalSpiral, Speeder LHS)
  • #9 — Stray wireframe box beneath model (Soccer)
  • #10v5_ring import hangs; v4_DVDCase_Solid sews into an invalid solid (blank). Shared fragile Part.Shell sew; the trim importer handles both.

The 3DM Trimmed via trim3dm importer avoids the trim/sew issues (#7, #10) — see Trimmed Surfaces.

Clone this wiki locally