Skip to content

Project Drawings

StatusShipped
LinearPIN-146 ↗ PIN-411 ↗
ModuleProgress 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.dwg plus 1 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.dwgDWG 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.

  1. Pick the Battery Park .dwg. Any other extension must be rejected with "Only .dxf, .dwg, or .pdf files are supported".
  2. Edit the Drawing name (pre-filled from the filename) and pick a Discipline (Mechanical / Electrical / Plumbing / Architectural / Other — default Mechanical).
  3. 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).

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.