---
title: Deep Feature Extraction
description: How ARCNM turns CAD and drawings into typed features — geometry, PMI, GD&T.
---

# Deep Feature Extraction

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:

1. **3D feature recognition** — semantic features on STEP / STP / STL /
   OBJ / IGES input.
2. **Deep Drawing Understanding** — extraction of PMI elements from
   drawings (PDF, image), at a depth chosen per drawing.
3. **Fusion** — binds 2D PMI elements (dimensions, tolerances, GD&T,
   surface finish) to the 3D features they constrain.

Every feature gets a deterministic 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)

```json
{
  "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). STL / OBJ are mesh formats — ARCNM still produces an
envelope, DFM issues, and a discipline classification, but
semantic features that depend on B-rep topology degrade gracefully.

**Always upload the highest-fidelity format you have.**

---

## 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.

### Pinning a tier

For most workloads, let ARCNM decide. For specific cases —
compliance / audit runs where you need the highest-detail trail, or
bulk-triage runs where you want the cheapest valid extraction — you
can pin a tier on the request:

```bash
curl -X POST https://api.arcnm.io/api/v1/parts/calculations/quote \
  -H "X-API-Key: $ARCNM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "part_revision_id":      "1f…",
    "costing_environment_id":"7c…",
    "extraction_tier":       "full"
  }'
```

Valid values: `"auto"` (default), `"lite"`, or `"full"`. See
[Pricing](../pricing.md).

### 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:

```json
{
  "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
deterministically 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](../api/calculations.md) — the endpoint that returns extracted features.
- [Concepts → Cost and lot-size](./cost-and-lot-size.md) — what comes next.
- [Concepts → Audit & provenance](./audit-provenance.md) — every field traces back.
