Concepts
Deep Feature Extraction
How ARCNM turns CAD and drawings into typed features — geometry, PMI, GD&T.
Deep Feature Extraction is the first stage of every ARCNM quote: raw CAD bytes in, a typed, ID-stable feature graph out. Three layers work together:
- 3D feature recognition — semantic features on STEP / STP input; envelope-only measures on an STL / OBJ mesh.
- Deep Drawing Understanding — extraction of PMI elements from drawings (PDF, image), at full depth on every drawing.
- Fusion — binds 2D PMI elements (dimensions, tolerances, GD&T, surface finish) to the 3D features they constrain.
Every feature gets a stable UUID. Re-runs on the same input emit identical IDs so your downstream system can persist + diff.
The recognition layer is continuously refined from tenant-observed ground truth — every correction you submit feeds the model.
3D extraction
Input formats: .step, .stp, .stl, .obj, .iges.
Recovered output:
| Output | Detail |
|---|---|
| Envelope | Bounding box, volume, surface area, centroid, principal axes |
| Wall thickness | Min / median / max |
| Features | Holes, pockets, faces, bosses, bends, slots, chamfers, threads, fillets, ribs, gears, splines |
| DFM issues | Undercuts, deep ratios, thin walls, sharp internal corners |
| Material classification | Metal / plastic / wood / composite + ISO machining group |
| PMI (semantic) | STEP AP242 tolerance + GD&T passthrough |
Example response (3D-only)
{
"envelope_mm": { "bbox": [120.0, 80.0, 25.0], "volume_mm3": 187500, "surface_mm2": 56400 },
"wall_thickness_mm": { "min": 2.0, "median": 4.5, "max": 12.0 },
"features": [
{
"id": "feat_a8e2…",
"kind": "drilled_hole",
"diameter_mm": 8.0,
"depth_mm": 25.0,
"through": true,
"axis": [0, 0, 1],
"face_id": "face_92ab…"
},
{
"id": "feat_2d6f…",
"kind": "pocket",
"depth_mm": 6.5,
"cross_section_mm2": 420.0,
"open_faces": 1
}
],
"discipline": { "winner": "milling", "confidence": 0.94 },
"material_classification": { "iso_group": "P", "candidate": "1.0577 — S355J2" }
}
Format fidelity
Quote quality scales with the format you upload. STEP/STP yields a
full semantic feature graph (typed holes, pockets, threads, tolerance
zones) and is the only input that supports a fully-featured quote.
STL / OBJ carry no B-rep — ARCNM produces an envelope, DFM issues and a
discipline classification, marks the result mesh_only_degraded, and
the pricing layer may decline to price it.
Upload STEP whenever you have it.
2D extraction
A single endpoint handles every drawing. ARCNM determines the right extraction strategy per drawing automatically — you don't pick.
What gets extracted
The typed DrawingExtraction payload covers:
- Title block (part number, revision, scale, material, drawn-by, date)
- General tolerances (ISO 2768, ISO 8015)
- PMI supplements (every dimension + tolerance + GD&T frame)
- Surface finishes (ISO 1302 / 21920 Ra/Rz callouts)
- Edge conditions (ISO 13715 — burrs, sharps, radii)
- Threads, chamfers, radii
- Heat treatment, coating, NDT, weld callouts
- Revision table, bill of materials, balloons
- Sectional views, projection method, primary process
Every field is always present in the response (null or empty
array when not on the drawing) so consumers never need to defensive-
check key existence.
There is nothing to configure
ARCNM runs one uniform engine. There is no extraction-mode setting, per request or per organisation:
- Attach a drawing → it is analysed automatically (deterministic parse fused with the vision model).
- Pure-3D part, no drawing → pricing runs from the geometry alone. No drawing analysis happens because there is no drawing to analyse.
You do not select between these; the engine decides from the inputs you
send. A retired extraction_tier field from older clients is ignored,
not rejected, so existing integrations keep working unchanged.
What actually ran is reported back for diagnostics as engine_path
(vlm or no_vlm) on the extraction analytics — read it, don't set it.
Confidence and self-correction
Each extracted field carries a confidence score. Low-confidence fields
trigger an automatic re-extraction with tighter constraints. The
retry log lives in the audit blob under self_correction for
inspection.
Fusion (binding 2D ↔ 3D)
Fusion binds 2D PMI elements to the 3D features they constrain. A
diameter callout Ø8 +0.018 / -0.000 H7 on the drawing gets resolved
to the specific drilled-hole feature on the 3D model, with its
tolerance zone applied.
Output:
{
"binding": {
"feat_a8e2…": {
"pmi_supplement_ids": ["pmi_d1…", "pmi_d2…"],
"tolerances": { "diameter": { "fit": "H7", "upper_um": 18, "lower_um": 0 } },
"surface_finish_id": "sf_b9…"
}
}
}
Unbound PMI (callout exists on the drawing but no 3D feature matches)
stays in unbound_pmi[] for review — never silently dropped.
Stable IDs
Every feature, face, and PMI element gets a UUID derived from its geometric signature. The same STEP file run a year apart produces identical IDs. Persist them in your system, diff across revisions, drive change-management workflows.
The hash includes:
- Feature kind + parametric signature
(e.g.
drilled_hole / Ø8 / depth 25 / through) - Bounding-volume centroid (rounded to 0.01 mm)
- Adjacent-face fingerprint
Not in the hash:
- Absolute position (so a part flipped in CAD space still matches)
- Naming (CAD layer name doesn't affect matching)
Invariants you can rely on
- Same input ⇒ same IDs. Always.
- Feature graph is acyclic (a hole cannot reference its own parent).
- PMI elements never lose source provenance — the audit trail records which page, which leader line, which source token.
- Extraction is independent of calibration. Tuning your environment's cost coefficients never changes the geometry, features, or PMI we recognise.
See also
- API → Calculations — the endpoint that returns extracted features.
- Concepts → Cost and lot-size — what comes next.
- Concepts → Audit & provenance — every field traces back.