← Research
metadome.ai — mesh-to-CAD

From sculpture to recipe: reconstructing CAD from meshes

1st November, 2026
The one-pass CAD: large red areas where it misses the engine block, large blue areas where it adds material
One pass
43.1% missing
Stage 1's CAD: mostly grey but stair-stepped, with one cylinder bore filled in and showing red
Stage 1
Close, breaks on export
Stage 2's CAD: almost all grey, with thin red and blue lines along a few edges
Stage 2
One valid solid · 7.1% missing · 2,803 faces
A published agentic approach's CAD: a rough block, mostly red where it misses detail and blue where it fills hollow space
Published agentic approach
71.3% missing
One engine block, rebuilt four ways. Each tile is the CAD result: grey matches the mesh, red is part of the mesh the CAD missed, blue is geometry the CAD added. Both are measured at 0.35% of the part's size, the same cut-off as the scores.

A mesh is a sand sculpture: a million grains, looks right, can't be edited.

CAD is the recipe, with named dimensions.

Scanners and 3D generation keep making better sculptures.

We write the recipe from the sculpture, and grade every attempt against it.

A mesh can be reshaped, but not edited parametrically: it has no features or dimensions to change. Turning one into CAD still means an expert rebuilding it by hand. Mesh-to-CAD reconstruction recovers that model: one that builds, matches the shape, and is clean enough to edit.

Takeaways
  • A mesh shows the shape; engineering runs on CAD. Reconstructing CAD from 3D geometry is well studied on clean data, but scores roughly halve on real parts.
  • We built two stages. A construction pipeline builds a valid base model and measures the part. An LLM then writes a new parametric program from those measurements, inside a harness that checks every attempt against the mesh.
  • Stage 1 gets most parts to a valid model. We ran it on 60 meshes of mechanical parts: 44 of 60 became a single solid that survives export to STEP.
  • Stage 2 makes it closer and cleaner. In a four-part pilot it cut missing geometry by up to 4.5× and the face count by up to 8×, and produced a valid engine block where stage 1's attempt broke on export.
  • Published methods, tried on the same meshes, missed 17–87% of the geometry, against 1.8–7.1% for our full method.

1Reconstructing CAD from 3D

There are two ways to arrive at a CAD model with AI: reconstruct it from 3D geometry, such as a scan, a point cloud or a mesh, or generate it from images, drawings or a description.

Work on reconstruction falls into five families.

FamilyHow it worksExamples
Fit primitivesFit surfaces, then join themPoint2CAD1
Recover the B-repPredict faces, edges and corners togetherComplexGen2, DualBrep3
Recover the build stepsPredict sketches, extrusions or CAD codeDeepCAD4, CAD-Recode5, cadrille6
Search and buildTry build operations, keep what matchesCADFit7
Agents in a loopWrite CAD, run it, compare, try againPublished agentic approaches8

Most of this work is trained and tested on shapes sampled from clean CAD. Real and noisy inputs are where it gets hard.

Real mechanical parts
~93 → ~49
Match score of leading point-cloud models, clean benchmark vs real parts9
Added noise
−0.05 to −0.58
IoU lost on noisy meshes, depending on the method10
Real scans
5.9% → 0.2%
Invalid outputs, after training with geometric rewards6

2What we built: two stages

We built a two-stage reconstruction for meshes, combining two of the families above. A construction pipeline first searches for a way to build the part, produces a valid base model and measures the part. A large language model (LLM) then writes a new parametric CAD program, guided by the pipeline's measurements and the harness's error feedback. The harness builds, checks and scores every attempt, and the LLM repairs its program until the result stops improving. It does not edit the pipeline's model; it rebuilds the part as a cleaner program.

Input mesh

Detailed shape, no CAD structure.

INtriangle mesh
→
Stage 1 · Pipeline

Chooses how to construct the part, builds a valid base model and measures the part.

INmesh
OUTbase CAD + measurements
→
Stage 2 · Refinement loop

The LLM writes and repairs a new parametric program; the harness builds it into a solid.

INmeasurements + feedback
OUTcandidate CAD
→
Check

Does it build? Does it match the mesh, and where not? Is it clean?

INcandidate CAD
OUTscores + error map
→
Output

The best valid attempt: a program with named dimensions, and its STEP file.

OUTCAD + STEP
↻ Check feeds back into stage 2 until the result stops improving
Two stages. The first gets to a valid model and measures the part; the second writes a new, cleaner parametric program from those measurements. The LLM inside the harness can be a general-purpose model or one trained for the job.

3How we score a result

A single similarity score can rate a broken part highly. We ask three separate questions of every result.

01Builds
We measureOne solid, still valid after a round trip through STEP.
A single score missesSolids that pass every check, then break after export.
02Matches
We measureMissing and extra geometry, separately.
A single score missesTrade-offs: on the engine block, stage 2 misses less than stage 1 (7.1% vs 10.6%) but adds more (7.5% vs 5.5%).
03Clean
We measureThe face count, and a look at every passing result.
A single score missesStaircases: curved surfaces rebuilt as thin layers stay close to the mesh.
A cast tooth mesh (left) and its stage 1 CAD (right), rebuilt as stair-stepped layers
Passes both thresholds · 2,034 faces
Three questions, scored separately. Beside them, a cast tooth mesh (left) and its stage 1 CAD (right): 8.5% missing and 13.1% extra, inside both thresholds, and still a staircase.

The measuring stick needs checking too. Scoring large flat faces without subdividing them first reported 28% error on a part whose true figure was 13%.

There is a fourth question we cannot answer yet: is it the right part? Every score here is measured against the mesh, and the mesh is itself only an approximation of the part. Section 5, What's next, comes back to it.

4Results

One part, step by step

The engine block at the top of this article is a mesh of about a million triangles: four cylinder bores, a hollow crankcase, ribs and bosses. Each picture there is the CAD from one step, compared with the mesh: grey where it matches, red where it misses part of the mesh, and blue where it adds geometry the mesh doesn't have. A surface counts as missed or added when it is more than 2 units from the other (0.35% of the part's size), the same cut-off as the scores, so the red and blue areas are the missing and extra shares.

  1. 01One pass. The LLM's first program, before the harness has fed anything back, misses 43.1% of the mesh and adds 35.1% that is not there. It is a valid solid, but not this part.
  2. 02Stage 1. The pipeline got close to the mesh: 10.6% missing and 5.5% extra. But its best attempt was 40,974 stair-stepped faces with one cylinder bore filled in solid, and it broke once written to STEP. No pipeline method produced a valid solid for this part.
  3. 03Stage 2. Over 19 iterations and 76 minutes, the LLM in the harness produced one valid solid: 7.1% missing, 7.5% extra, and 2,803 faces, about 15× fewer than the stage 1 attempt. The error that remains sits at a few edges and bore rims.
Input mesh
Input mesh · 1,000,000 triangles · picture
Stage 1 + stage 2 · 2,803 faces
Loading…
Stage 1 + stage 2: 7.1% missing · 7.5% extra · 2,803 faces · one valid STEP solid
Compare the results. The mesh on the left, the CAD on the right, from the same fixed view. Switch between results with the tabs, and turn on Error colours: red on the mesh is what the CAD missed, blue on the CAD is what it added.

Stage 1 across 60 meshes

We ran the pipeline on 60 meshes of mechanical parts: brackets, housings, turned parts, gears, valve blocks and castings, from about 90,000 to a million triangles each.

Triangles in
~1,000,000
Median input mesh
CAD faces out
~1,250
Median of valid results
Does it build?
44of 60
Become one solid that survives export
Gear mesh beside its stage 1 CAD
Gear
0.3% missing · 0.3% extra
Enclosure mesh beside its stage 1 CAD
Enclosure
0.7% missing · 1.0% extra
Connector block mesh beside its stage 1 CAD
Connector block
1.6% missing · 2.6% extra
Where stage 1 already works. Each pair is the mesh, then the CAD.
  • Does it build? 44 of 60 parts become a single solid that survives a round trip through STEP. Large castings are the hard case: three of them never became a valid solid, whatever we tried.
  • Does it match? 34 of 60 are also within the bar: at most 10% of the mesh lies more than 0.35% of the part's size from the CAD, and at most 15% of the CAD lies that far from the mesh. Gear-type parts come back within 0.3% both ways. Picking the best construction per part after scoring raises the count to 42 of 60. That is an upper bound, because the same score makes the choice.
  • Is it clean? Valid results have a median of about 1,250 faces. Some passing results are visibly stair-stepped, which is why we look at every one.

Stage 2 on four parts

We then ran the second stage on four parts: a hub, a bearing, a valve block and the engine block above.

Builds · engine block
Valid
Stage 1's attempt broke on export; stage 2 is one valid solid
Matches · hub
4.5×less
Missing geometry, 8.2% → 1.8%
Clean · hub
8×fewer
545 → 70 faces, closer to how a designer would model it
Hub mesh
Mesh
97,802 triangles
Hub CAD from stage 1, with many small faces
Stage 1
545 faces · 8.2% missing
Hub CAD from stage 2, with few, clean faces
Stage 2
70 faces · 1.8% missing
Hub CAD from CADFather, without the grooves
CADFather
37 faces · 17.2% missing
The hub, side by side. The mesh, then the CAD from each system, from the same camera. Black lines are the CAD's face boundaries.
missing geometry
stage 1 · pipelinestage 2 · refinement loopresult exists, not a valid solid
0%5%10%15%20%Hub, stage 1 · pipeline: 8.2%8.2%Hub, stage 2 · refinement loop: 1.8%1.8%HubBearing, stage 1 · pipeline: 19.6%19.6%Bearing, stage 2 · refinement loop: 6.2%6.2%BearingValve block, stage 1 · pipeline: 5.4%5.4%Valve block, stage 2 · refinement loop: 4.6%4.6%Valve blockEngine block, stage 1 · pipeline: 10.6%, not valid10.6%not validEngine block, stage 2 · refinement loop: 7.1%7.1%Engine block
lower is better
Does it match? Missing geometry. Share of the mesh farther than 0.35% of the part's size from the CAD.
extra geometry
stage 1 · pipelinestage 2 · refinement loopresult exists, not a valid solid
0%5%10%15%Hub, stage 1 · pipeline: 12.3%12.3%Hub, stage 2 · refinement loop: 2.2%2.2%HubBearing, stage 1 · pipeline: 13.7%13.7%Bearing, stage 2 · refinement loop: 2.7%2.7%BearingValve block, stage 1 · pipeline: 10.8%10.8%Valve block, stage 2 · refinement loop: 6.1%6.1%Valve blockEngine block, stage 1 · pipeline: 5.5%, not valid5.5%not validEngine block, stage 2 · refinement loop: 7.5%7.5%Engine block
lower is better
Does it match? Extra geometry. Share of the CAD farther than 0.35% of the part's size from the mesh.
faces in the final model
stage 1 · pipelinestage 2 · refinement loopresult exists, not a valid solid
01,0002,0003,000Hub, stage 1 · pipeline: 545545Hub, stage 2 · refinement loop: 7070HubBearing, stage 1 · pipeline: 463463Bearing, stage 2 · refinement loop: 180180BearingValve block, stage 1 · pipeline: 1,5981,598Valve block, stage 2 · refinement loop: 345345Valve blockEngine block, stage 1 · pipeline: 40,974, not valid40,974not validEngine block, stage 2 · refinement loop: 2,8032,803Engine block
fewer is cleaner
Is it clean? Faces in the final model. The engine block's stage 1 result runs off the scale at 40,974 faces, and it is not a valid solid: it does not survive a round trip through STEP. Four parts, one run each; stage 2 keeps its best of 12–19 attempts, chosen by the same score reported here, and each part took 21–76 minutes.

Published methods on the same meshes

To see how published approaches handle these meshes, we ran three of them on the same four parts and scored every result with the same tool: CADFather8, cadrille6 and CAD-Recode5. In CADFather, a vision-language model picks the tools that build the geometry; in our stage 2, the LLM writes the parametric program itself.

MethodInput → outputHow it was runParts
Stage 1 + stage 2mesh → measurements → parametric program → solidOur full method. Stage 1 builds a base model and measures the part; stage 2, an LLM in our harness, writes and repairs a new parametric program. Best valid attempt of 12–19, chosen by the score shown here.All four parts
Stage 1 onlymesh → solidOur construction pipeline on its own: the best valid method per part (for the engine block, its best attempt, which is not a valid solid).All four parts
CADFathermesh → CAD program → solidOpen-source code, full system. A vision-language model picks the tools that build the geometry. One run per part, with a commercial assistant model in place of the paper's.All four parts
cadrille256 points → CAD program → solidThe authors' released model and preprocessing: 256 points sampled from the mesh. Best of 10 samplings, chosen by our score; all 10 programs ran on every part.All four parts
CAD-Recode256 points → CAD program → solidThe authors' released model (v1.5), same setup as cadrille. Best of 10 samplings; 5, 10, 10 and 7 of the 10 programs ran on the valve block, hub, bearing and engine block (the rest fail in CAD code).All four parts
MethodHubBearingValve blockEngine block
Stage 1 + stage 2
1.8 / 2.2
70 faces
6.2 / 2.7
180 faces
4.6 / 6.1
345 faces
7.1 / 7.5
2,803 faces
Stage 1 only
8.2 / 12.3
545 faces
19.6 / 13.7
463 faces
5.4 / 10.8
1,598 faces
10.6 / 5.5
40,974 faces · not valid
CADFather8
17.2 / 18.2
37 faces
57.5 / 53.1
46 faces
39.3 / 35.6
59 faces
71.3 / 61.3
142 faces
cadrille6
58.3 / 58.0
16 faces
71.4 / 61.6
6 faces
54.6 / 52.2
25 faces
86.2 / 74.0
34 faces
CAD-Recode5
65.7 / 63.8
11 faces
61.7 / 56.8
36 faces
65.8 / 58.1
32 faces
87.3 / 78.8
41 faces

Each cell: missing % / extra %, then the face count. cadrille and CAD-Recode were designed for clean point clouds sampled from CAD, and see only 256 points of these meshes, so their numbers show the gap on this kind of input rather than a flaw in the methods. CADFather's own metric is volume IoU; here it is also scored with ours.

Input mesh · 98,352 triangles
Loading…
Stage 1 + stage 2 · 345 faces
Loading…
Stage 1 + stage 2: 4.6% missing · 6.1% extra · 345 faces · one valid STEP solid
The valve block, five ways. Stage 1 only, stage 1 + stage 2, and three published methods on the same mesh. Both panes are interactive here, and the cameras turn together.

5What's next

  • Is it the right part? Today every score is measured against the mesh. Next we take parts whose real CAD we have, get meshes of them by scanning or generating, and compare each rebuild with the original on what an engineer checks: hole counts, key dimensions in millimetres, and handedness. That also tests whether a good score against the mesh really means a good part.
  • A model trained for the loop. The strongest results so far come from a general-purpose LLM in the second stage. Next is a model trained for exactly this task, aiming for the same quality at a fraction of the time and cost per part.
  • Editable, by test. Beyond a valid solid with named dimensions: change a dimension and check that the model rebuilds and stays valid.
  • More kinds of mesh. Scans of physical parts and legacy files, which bring noise, holes and missing faces.
  • The casting gap. Large organic castings are where every approach still struggles.
  • Baselines beside every score, such as a bounding box or convex hull, so a number shows how much it really says.

References

  1. Y. Liu et al. Point2CAD: Reverse Engineering CAD Models from 3D Point Clouds. 2023. arXiv 2312.04962
  2. H. Guo et al. ComplexGen: CAD Reconstruction by B-Rep Chain Complex Generation. ACM Transactions on Graphics (SIGGRAPH 2022). arXiv 2205.14573
  3. Y. Liu et al. DualBrep: A Dual-Field Continuous Representation for B-rep Modelling. SIGGRAPH 2026. arXiv 2606.31579
  4. R. Wu et al. DeepCAD: A Deep Generative Network for Computer-Aided Design Models. ICCV 2021. arXiv 2105.09492
  5. D. Rukhovich et al. CAD-Recode: Reverse Engineering CAD Code from Point Clouds. 2024. arXiv 2412.14042
  6. M. Kolodiazhnyi et al. cadrille: Multimodal CAD Reconstruction with Reinforcement Learning. 2025. arXiv 2505.22914
  7. G. Nehme et al. CADFit: Precise Mesh-to-CAD Program Generation with Hybrid Optimization. 2026. arXiv 2605.01171
  8. G. Savrasov et al. CADFather: Autonomous CAD Reconstruction through Coordinated Tool Use. 2026. arXiv 2610.09127
  9. S. Kabisov et al. CADENA: Stepwise CAD Reverse Engineering. 2026. arXiv 2608.00799
  10. A. C. Doris et al. CadBench: A Multimodal Benchmark for AI-Assisted CAD Program Generation. 2026. arXiv 2605.10873
EVERY MONTH ◈

One result, in public.

Model drops, findings, and hands-on demos, published monthly, no gatekeeping. Bring your hardest part.