Project Drawings¶
| Status | Shipped |
|---|---|
| Linear | PIN-146 ↗ PIN-411 ↗ |
| Module | Progress Drawings ↗ |
Upload CAD drawings (.dwg/.dxf) or plan-set PDFs to an awarded project, let the AI pipeline parse them, and work with the result in the drawing viewer: layer toggles, zones, equipment pins, measurements, and addendum diffs. This is the project-stage viewer — don't confuse it with the bid-stage PDF takeoff viewer (Takeoff).
Prerequisites¶
- Role: any login that can open the project — drawings have no extra permission gate.
- Project state: any project you can access.
- Test data from the test-app-files Drive folder,
drawings/:1 Battery Park Plaza-28th Floor Full MECH 28.08.06.dwgplus1 Battery Park Plaza-28th Floor_HVAC_SM-28-1_Rev02.pdf— the PDF is the ground-truth render of the same sheet; upload the DWG and compare the canvas against the PDF.2024.10.01 Ground Floor - Sheetmetal Shop Drawing - Rev 9.dwg+ its.pdf— a second, heavier pair.390 Park Avenue 8th floor_SM-8_Rev.03.dwg— DWG without a reference PDF.
1. Open the Drawings surface¶
Project detail → Drawings tab. This launchpad has two buttons: Upload drawing and Open drawings index (the full page at /projects/:projectId/drawings with KPIs, filters, and the per-discipline accordion).
2. Upload a drawing¶
Click Upload drawing. The dropzone reads "Drop a .dxf, .dwg, or .pdf here" with a Choose file button.
- Pick the Battery Park
.dwg. Any other extension must be rejected with "Only .dxf, .dwg, or .pdf files are supported". - Edit the Drawing name (pre-filled from the filename) and pick a Discipline (Mechanical / Electrical / Plumbing / Architectural / Other — default Mechanical).
- Click Upload — a progress bar shows live percent. On success the app navigates to the drawings index.
3. Watch the parse status¶
In the sheet table, the AI Status column starts as Parsing… (spinner) and flips to a green Parsed — live via server events, no manual refresh needed. Opening the sheet early shows "Processing drawing…" until it's ready.
If it lands on red Failed, the viewer shows "Drawing parse failed" with a Retry parse button — click it once before filing a bug, then file with the drawing name + timestamp if it fails again.
4. Explore the viewer¶
Click the sheet row to open /projects/:projectId/drawings/:drawingId (full-screen viewer, ← Back returns to the index).
| Control | What to check |
|---|---|
| Canvas | Ductwork/geometry renders and visually matches the reference PDF (…SM-28-1_Rev02.pdf) — same shapes, no missing regions. |
| Toolbar modes | View, Draw Zone, Multi-Select, Annotate, Measure (L) all switch cleanly. |
| Zoom Extents | Recenters the sheet if you get lost panning. |
| ⚠ Calibrate | Uncalibrated sheets show the warning form; after calibrating it reads ✓ {unit} and the metrics chips switch from raw units. |
| Left sidebar → Layers | Search layers, toggle groups on/off — geometry hides/shows accordingly. The per-layer discipline dropdown (M/P/E/S/A/FP/MISC) and the ⚑ flag feed the admin classification queue (separate walkthrough). |
| Left sidebar → Sheets | Lists paper-space layouts when the file has them. |
| Zones / Equipment toggle | Zones panel (list + status + comments) vs Equipment panel (grouped by category; empty state "No equipment parsed from this drawing yet." is valid for drawings without schedules). |
| Right sidebar | Annotations (with CSV export) and Measurements sections. |
5. Revisions and addendum diff¶
There is no "replace file" button — upload a second set and the app derives revisions:
- Index filter tabs: All / Compiled Set / {per-set tabs}; table columns Rev / Date / Set.
- Amber Scope change badge = a revision introduced by a later set; Superseded badge = a newer revision exists.
- In the viewer, a re-uploaded drawing gains Show Addendum Diff — added/removed/changed geometry highlighted against the parent revision.
Quick test: upload the Battery Park DWG twice (second time name it "…Addendum 1") and verify the badges + diff toggle appear.
Verification Checklist¶
- Non-CAD file (e.g. .docx) is rejected with the supported-types message
- DWG upload shows live progress and lands in the index without manual refresh
- AI Status transitions Parsing… → Parsed on its own
- Canvas render visually matches the reference PDF for Battery Park
- Layer toggles hide/show geometry; layer search filters the list
- Calibrate flow turns ⚠ Calibrate into ✓ {unit}
- Second upload of the same sheet produces Rev/Set columns, a Superseded badge, and a working Addendum Diff
- Failed parse offers Retry parse
- No console errors throughout
Known Issues / Current Gaps¶
Equipment parsed from schedules without a drawing anchor pans to the sheet origin (bottom-left) when clicked — known gap.
Parse time scales with drawing size — the Sheetmetal Shop DWG is a deliberately heavy case; minutes-long parsing is not a bug, a stuck spinner >10 min is.
Offline queue, annotation migration on re-upload, visual diff timeline — v2 scope (PIN-224).
Related docs¶
- Drawing Viewer — Layer Classification & Coverage — admin rules engine behind the layer disciplines
- Takeoff — the bid-stage PDF viewer (different feature, different stage)
Updating this walkthrough
Run the full flow yourself end-to-end. If it passes, bump last_verified: in the frontmatter to today's date. If any step fails, fix the doc or the code in the same PR — drift is the enemy.