One case step by step
Alongside the 3D model, every run must deliver a measurement log: the self-documentation that traces every decision back to a piece of evidence. Shown here as an example is the log of Claude Code · opus-5 · run 1 for its own bearing-block case — the run reached shape fidelity 1.00.
The short version
Task: Build a 3D model from the technical drawing of a bearing block (17 dimensions) — the supplied text recognition reproduced only 4 of the 17 dimension texts, one of them incorrectly. Approach: The agent did not merely look at the vector drawing, it measured it (scale 1:1) and tagged every dimension with an evidence level. Self-correction: It resolved the recognition error “R9” by measurement into R8 + Ø9; it refuted its own misreading of the “60” as plate width against the dimension-line endpoints. Result: projection check 44/44, all 47 template edges coincident, volume counter-check 0.0000 % — shape fidelity 1.00. Limits: material, tolerances, and manufacturing interpretation remain open and are documented as assumptions.
The path in eight steps
Here is how the case ran chronologically — each station points to the section with the evidence:
- Receive the task package — drawing (vector PDF), nearly empty text-recognition output, task statement (§0).
- Assign the views — the title block names projection method E, so the top view lies below the front view (§1).
- Substantiate every dimension — 17 dimension texts, each with evidence level OCR/image/PDF; the drawing is converted to mm and measured (§2).
- Resolve contradictions — “R9” is a recognition error (really: R8 + Ø9); the “60” is a hole spacing, not the plate width (§4).
- Derive undimensioned quantities — plate width 44 = 2 × R22, overall height 74 = 52 + 22, rib angle redundantly confirmed (§3).
- Build the model — via the command interface as an executable sequence of operations; the build path is given, redacted, in “The build path” below.
- Self-check — three projections measured by machine: 44 checks, 0 deviations; all 47 template edges individually reconciled; volume computed against the analytic value (§5).
- Deliver and state the limits — STEP re-imported and validated; seven assumptions explicitly marked (§6, §7).
0. Method — what is evidence and what is derivation
Alongside the drawing, the task package for each case includes a machine text-recognition output (recognized text and cropped view regions) — the line references in this log refer to it.
The text recognition is nearly empty. As dimension text it contains only four entries: R9 (line 3), 45° (line 10), 14 (line 11), 50 (line 12) — plus the title block (line 17): Lagerbock Demo-900 · 1:1 · mm · ISO 2768-m · Projektion: Methode E (ISO 5456-2). All remaining dimensions appear only in the image crops or in the text layer of the PDF. That is why the dimension table states three evidence levels per dimension:
| Level | Meaning |
|---|---|
| OCR | verbatim in the text recognition (line number + quote) |
| Image | read from the image crop — omitted by the text recognition |
| text object or measured vector geometry of the drawing |
The drawing is a vector drawing (produced with FreeCAD TechDraw), not a raster graphic. The agent therefore did not merely look at it but measured it: scale 1:1 ⇒ 1 mm = 2.83465 pt. That allowed every part edge in the template to be converted to mm — all values land exactly on whole millimeters (residual error ≤ 0.003 mm from the rounding of the PDF coordinates). This replaces no dimension; it decides which feature a dimension figure belongs to (see §4, “60”).
For the completeness of this measurement: the drawing knows exactly two line weights — 1.98 pt (47 paths = part edges) and 0.99 pt (49 paths = extension lines/arrows). Not a single path has a dash pattern ⇒ the drawing contains no hidden edges. All 47 part edges are checked edge by edge against the model in §5.
1. The views and their assignment
Title block: “Projektion: Methode E (ISO 5456-2)” ⇒ European method / first angle.
| View | Position on the sheet | Extent (measured) |
|---|---|---|
| Front view | top left | 90 × 74 mm |
| Top view | below the front view | 90 × 50 mm |
| Side view | right of the front view | 50 × 74 mm |
By method E, the view below the front view is the top view (looking from above), and its edge facing the front view is the rear edge of the part. That is where the upright plate stands in the template — consistent with the front view. The view on the right is the view from the left.
Open point (inconsequential): Read the drawing wrongly by third angle, and “front” and “rear” would swap. The delivered solid does not change as a result: the part is mirror-symmetric about the plane X = 45, so a 180° rotation about Z maps one reading congruently onto the other. The relative arrangement (R8 corners opposite the upright plate, rib foot 14 mm from the R8 side) follows in any case from the consistency of the top and side views alone.
Model coordinates: X = width 0…90, Y = depth 0 (front, R8 corners) … 50 (rear, upright plate), Z = height 0 (underside of base plate) … 74.
2. Dimension table — per dimension: evidence, view, derivation
| # | Dimension | Evidence | View | What follows from it |
|---|---|---|---|---|
| 1 | 90 | Image/PDF text; measured: outer contour 255.11 pt = 90.000 mm | Top/front view | Width of the base plate |
| 2 | 50 | OCR l. 12; PDF text (2×) | Side/top view | Depth of the base plate |
| 3 | 12 | PDF text (2×) | Front/top view | 1× thickness of base plate, 1× thickness of upright plate — both dimension spans exactly 34.01 pt = 12.000 mm |
| 4 | R8 | Image + PDF text; measured: arc radius 22.68 pt = 8.000 mm | Top view | Corner radius, only the two front corners (§3) |
| 5 | Ø9 | Image + PDF text; measured: circle Ø 25.52 pt = 9.000 mm | Top view | 2 fastening holes, through |
| 6 | 15 | Image/PDF text; measured 42.52 pt = 15.000 mm | Top view | 1st hole axis from the left edge |
| 7 | 60 | Image/PDF text; measured: endpoints land on both hole axes | Top view | Axis spacing of the Ø9, not the plate width (§4, failed attempt) |
| 8 | 20 | Image/PDF text; measured 56.70 pt = 20.000 mm | Top view | Hole axes from the front edge |
| 9 | 10 | Image/PDF text; measured 28.35 pt = 10.000 mm | Top view | Rib width |
| 10 | 52 | Image/PDF text; measured 147.40 pt = 52.000 mm | Front view | Axis height of the bearing bore above the underside of the base plate |
| 11 | 16 | Image/PDF text; measured 45.36 pt = 16.000 mm | Front view | Distance hole axis → rib top edge ⇒ rib top edge at Z = 52 − 16 = 36 |
| 12 | R22 | Image + PDF text; measured: arc radius 62.36 pt = 22.000 mm | Front view | Half-circle head of the upright plate, concentric to the Ø20 |
| 13 | Ø20 | Image + PDF text; measured: circle Ø 56.69 pt = 20.000 mm | Front view | Bearing bore, axis horizontal (∥ Y) |
| 14 | 14 | OCR l. 11; PDF text; measured 39.68 pt = 14.000 mm | Side view | Rib foot from the front edge of the base plate |
| 15 | 45° | OCR l. 10; PDF text; measured: flank line dy/dx = 68.03/68.03 pt | Side view | Inclination of the rib flank |
| 16 | 1:1 / mm / ISO 2768-m | OCR l. 17 | Title block | Scale 1:1 ⇒ direct pt→mm conversion; general tolerance medium — no nominal dimension |
3. Derived dimensions (not dimensioned, but mandatory)
| Quantity | Value | Derivation |
|---|---|---|
| Width of the upright plate | 44 | = 2 × R22. The flanks run tangentially into the head arc; measured plate width 124.72 pt = 44.000 mm = 2 × 22 ✓ |
| Overall height | 74 | = 52 + R22 (the head is a half-circle about the bore axis). Measured view height 209.76 pt = 74.000 mm ✓ |
| Position of the upright plate in Y | 38…50 | 12 thick, flush with the rear edge: measured front face 38.000 mm from the front edge = 50 − 12 ✓ |
| Rib legs | 24 × 24 | horizontal 38 − 14 = 24; vertical 36 − 12 = 24 ⇒ 45° — the three figures (14, 16, 45°) are redundant and consistent; the dimension check of the build script anchors exactly this. |
| Rib in X | 40…50 | 10 wide, centered (measured center = view center) |
| Upright plate in X | 23…67 | 44 wide, centered |
| R8 only at the front | 2 corners | Only the paths at the front edge are arcs; at the rear a straight line meets the side edge at a right angle. Confirmed by the tangent lines in the front and side views. |
4. What the text recognition did not yield — and a corrected misreading
- The drawing carries 17 dimension texts. The text recognition reproduced three of them correctly (45°, 14, 50), garbled one (“R9”, see below), and omitted 13 — those come from the image crops and the PDF text layer.
- “R9” is a recognition error. In the image and in the PDF text layer there are two separate entries at this spot: R8 (corner radius) and Ø9 (hole diameter). The measurement decides unambiguously: corner-arc radius = 8.000 mm, hole circle Ø = 9.000 mm. A corner radius “R9” does not exist in the drawing. → built: R8 and Ø9.
- Own failed attempt, documented: From the image alone, the agent had at first taken “60” to be the width of the upright plate. Measuring the dimension-line endpoints refutes that: they end on the two hole axes (x = 15 and x = 75 mm), and the plate width measures 44, not 60. Counter-check: 15 + 60 + 15 = 90 = overall width ✓
5. Projection check — mandatory part of the delivery
5a. Measured self-check: 44 checks, 0 deviations
From the finished solid, three TechDraw projections are generated via the command interface and read out and measured by machine — no image inspection. The view orientation is derived from the projection (which axis carries height/depth, which side is the front), not assumed — otherwise one would be checking one's own assumption.
| View | checked | Target | Measured | Dev. |
|---|---|---|---|---|
| Front view | Span width / height | 90 / 74 | 90.000 / 74.000 | 0 |
| Ø20 present as a circle, axis height / axis position | 52 / 45 | 52.000 / 45.000 | 0 | |
| R22 is an arc, not a straight line, concentric to Ø20 | arc at 52 | arc r = 22 at 52.000 | 0 | |
| no R8 arcs in this view | 0 | 0 | — | |
| 2 R8 tangent lines, each 8 from the outer edge | 2 | 2 | — | |
| Rib: exactly 2 flanks, width / top edge / center | 2 / 10 / 36 / 45 | 2 / 10.000 / 36.000 / 45.000 | 0 | |
| Upright-plate flanks tangential (length 40) | present | present | — | |
| Top view | Span width / depth | 90 / 50 | 90.000 / 50.000 | 0 |
| exactly 2 Ø9; axis spacing / from side edge / from front edge | 2 / 60 / 15 / 20 | 2 / 60.000 / 15.000 / 20.000 | 0 | |
| exactly 2 R8 corner arcs, both on the same side | 2 / yes | 2 / yes | — | |
| Upright plate at the rear, thickness / width | 12 / 44 | 12.000 / 44.000 | 0 | |
| exactly 2 rib longitudinal edges, width / foot from front edge | 2 / 10 / 14 | 2 / 10.000 / 14.000 | 0 | |
| no Ø20 circle (axis lies horizontal) | 0 | 0 | — | |
| Side view | Spans = {depth 50, height 74} | yes | yes | — |
| Edge length at the top edge = plate thickness | 12 | 12.000 | 0 | |
| 45° flank as an inclined line (not a rectangle), length | 1 pc / 33.941 | 1 / 33.941 | 0 | |
| Foot point: height / distance from front edge | 12 / 14 | 12.000 / 14.000 | 0 | |
| Apex: height / distance from front edge | 36 / 38 | 36.000 / 38.000 | 0 | |
| Direction of the slope: rises toward the upright plate | yes | yes | — | |
| Tangent line head/flank at axis height | 52 | present | — | |
| Base-plate thickness / plate rear face at the rear edge | 12 / 40 | 12.000 / 40.000 | 0 |
Overall check: passed (44/44).
The three deviations reported at first were errors in the checking procedure, not in the model: the side view maps height and depth onto the view axes differently than assumed, and one edge was searched over the maximum instead of by position. Both were fixed; the view orientation has since been derived.
5b. Edge-by-edge comparison against the vector geometry of the template
Beyond the self-check, every visible part edge of the template (all 47 thick paths, converted to mm) was held against the corresponding edge of the run's own projection (tolerance 0.02 mm):
| View | Template | Own model | missing | extra |
|---|---|---|---|---|
| Front view | 15 lines + 6 arc segments | 11 lines + 4 splines + circles | 0 | 0 |
| Top view | 12 lines + 10 arc segments | 10 lines + 2 splines + circles | 0 | 0 |
| Side view | 14 lines + 0 arc segments | 10 lines + 4 splines | 0 | 0 |
Coincident: yes. The difference “line ↔ spline” is purely a matter of representation: where a circle is projected parallel to an edge, the template draws a straight line, and the run's own projection draws the same segment as a degenerate spline of the same length and position — each of these edges was individually matched by length and position.
5c. Weight check — not applicable
The title block names neither material nor density nor weight; the weight check is dropped for lack of a target value. As a substitute, the volume was checked against the value computed analytically from the dimensions:
V(model) = 81 496.8314 mm³ · V(analytic) = 81 496.8314 mm³ · deviation 0.0000 %
The build path — from the agent's build script, redacted
The delivered build script is an executable program against the command interface; every value in it carries, as a comment, its origin in the drawing. Here is the sequence in essence (pseudo-commands — the concrete interface names remain internal):
- Coordinate system and dimension check first. X = width 0–90, Y = depth 0–50 (front = rounded corners), Z = height 0–74. All 17 dimensions sit in a table with an origin comment. Before the first build step, the script checks the redundant dimensions against each other: rib legs 38 − 14 = 24 and 36 − 12 = 24 ⇒ exactly 45°; hole pattern 15 + 60 + 15 = 90. Were the drawing self-contradictory, the script would abort here.
- Base plate from four sub-bodies. Rear cuboid (sharp corners), front strip, and two corner cylinders R8 — so the roundings arise only at the two front corners, exactly as the drawing shows them.
- Upright plate at the rear, flush. Cuboid 44 × 12 from the top of the base plate up to the bore axis (52), and above it a lying half-cylinder R22 as the head — the plate width 44 follows from 2 × R22 (flanks tangential).
- Rib as a triangular profile. Right triangle (legs 24/24) as a closed polyline, extruded 10 mm thick and tilted centered between base plate and upright plate.
- Unite. Fuse all sub-bodies into one blank.
- Drill with overshoot. Bearing bore Ø20 across through the head, two Ø9 vertically through the base plate — the drilling cylinders deliberately protrude on both sides beyond the material, so the cut is guaranteed to go through. Form the difference, clean the result to exactly one body.
- Self-check within the script. Volume against the formula computed analytically from the dimensions: 81 496.8314 mm³, deviation 0.0000 % (§5c/§6); exactly one valid solid.
- The gate first, then the export. The script generates three projections of its own model and measures them through by machine — those are the 44 checks from §5. Only then does it write the STEP file.
6. Numerical validation of the result
After re-import of the delivered STEP file:
| Topology | 1 solid, closed, valid · 18 faces · 48 edges · 32 vertices |
| Volume / surface area | 81 496.8314 mm³ · 19 509.756 mm² |
| Bounding dimensions | 90 × 50 × 74 mm — identical to the overall dimensions of the drawing |
7. Assumptions and open points
Marked as an assumption, because the drawing is silent on it:
- No hidden features. The drawing demonstrably contains no dashed lines (§0); every visible contour is explained by the model (§5b). It is assumed that there are no undepicted internal features — e.g., no countersinks at the Ø9. Risk: low, but unprovable — no section exists.
- No chamfers/edge breaks. Neither dimensioned nor stated collectively in the title block. Built with sharp edges.
- No transition radii between rib, upright plate, and base plate. The template shows straight lines there without tangent lines in all three views — that is a finding, not merely an assumption; manufacturing could nonetheless include a fillet.
- Material unknown. No material, density, or weight entry ⇒ no weight check possible and no statement about the manufacturing process.
- Upright plate continuous. No parting line to the base plate; modeled as a single material bond. Unambiguous for the volume — not for the manufacturing interpretation (welded construction vs. milled part).
- Tolerances/fits not modeled: only ISO 2768-m in general; no fit is specified at the Ø20 bearing bore — built to nominal dimension.
- Front/rear is fixed by method E (§1); the alternative reading yielded the same solid up to a 180° rotation. No open risk for the geometry.
The manufacturing heuristics of the rulebook (“when in doubt, air, not material”) do not come into play here: there are neither draft angles nor undimensioned gaps. Every face of the part is dimensioned and evidenced by at least two views — the template evidence decides completely, without a rule of doubt.