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 / STL / OBJ / IGES input.
- Deep Drawing Understanding — extraction of PMI elements from drawings (PDF, image), at a depth chosen per drawing.
- 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)
{
"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:
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.
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 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 — the endpoint that returns extracted features.
- Concepts → Cost and lot-size — what comes next.
- Concepts → Audit & provenance — every field traces back.