ARCNM

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:

  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)

{
  "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