1045 lines
23 KiB
Markdown
1045 lines
23 KiB
Markdown
# Project Scope: Calibrated Trace CAD
|
|
|
|
## 1. Purpose
|
|
|
|
This document defines the initial product scope, technical architecture, development priorities, and implementation rules for a desktop application that converts manually traced real-world outlines into clean, scale-accurate 2D CAD geometry and DXF exports.
|
|
|
|
The application is not an AI-based image-to-vector tool. It is a deterministic, user-controlled 2D tracing and sketching application that uses a calibrated printed sheet and photo reference as a scale-accurate background layer. The user manually reconstructs clean CAD geometry over the reference image using lines, arcs, circles, and assisted fitting tools.
|
|
|
|
The goal is to produce technically valid 2D DXF drawings suitable for laser cutting, CNC routing, milling preparation, or further editing in CAD software.
|
|
|
|
---
|
|
|
|
## 2. Product Concept
|
|
|
|
The product should allow a user to:
|
|
|
|
1. Print a calibrated marker sheet.
|
|
2. Place or trace a real object on the sheet using a pencil, fineliner, or marker.
|
|
3. Photograph or scan the sheet.
|
|
4. Import the image into the application.
|
|
5. Let the software detect the sheet, correct perspective, and establish a real-world millimetre coordinate system.
|
|
6. Manually trace the visible sketch using precise CAD-style tools.
|
|
7. Optionally refine the geometry with dimensions or constraints.
|
|
8. Export a clean DXF file using real CAD entities.
|
|
|
|
The standard workflow must not require manual dimensioning. Dimensioning and constraints are optional advanced features.
|
|
|
|
The core UX principle is:
|
|
|
|
> The physical sheet provides scale. The photo provides visual reference. The user creates clean geometry manually.
|
|
|
|
---
|
|
|
|
## 3. Non-Goals
|
|
|
|
The application must not be designed as:
|
|
|
|
- A fully automatic AI image-to-DXF converter.
|
|
- A raster autotracing tool that blindly converts pixels into vector paths.
|
|
- A general-purpose 3D CAD application.
|
|
- A parametric CAD clone in the first MVP.
|
|
- A web-only prototype.
|
|
- A Python application.
|
|
|
|
Automatic detection of pencil lines may be added later as an assistive feature, but it must never become the source of final geometry without explicit user confirmation.
|
|
|
|
---
|
|
|
|
## 4. Target Platform and Technology Stack
|
|
|
|
### 4.1 Primary Stack
|
|
|
|
Use:
|
|
|
|
- Language: C#
|
|
- Runtime: .NET 8 or newer
|
|
- UI framework: Avalonia UI
|
|
- Rendering: Avalonia custom controls / SkiaSharp where useful
|
|
- Computer vision: OpenCvSharp / OpenCV
|
|
- DXF export: netDxf initially, with an abstraction layer to allow replacement later
|
|
- Project format: custom JSON
|
|
- Unit tests: xUnit
|
|
|
|
### 4.2 Release Target
|
|
|
|
The first release target is:
|
|
|
|
- Windows x64
|
|
- Portable executable or portable application folder
|
|
- No forced installer
|
|
- No Python runtime dependency
|
|
- No external CAD dependency
|
|
|
|
Preferred initial packaging:
|
|
|
|
```bash
|
|
# Portable folder build, preferred while native OpenCV DLLs are involved
|
|
dotnet publish src/TraceCad.App \
|
|
-c Release \
|
|
-r win-x64 \
|
|
--self-contained true
|
|
```
|
|
|
|
Single-file publishing may be evaluated later:
|
|
|
|
```bash
|
|
dotnet publish src/TraceCad.App \
|
|
-c Release \
|
|
-r win-x64 \
|
|
--self-contained true \
|
|
/p:PublishSingleFile=true \
|
|
/p:IncludeNativeLibrariesForSelfExtract=true
|
|
```
|
|
|
|
### 4.3 Future Platforms
|
|
|
|
The architecture should not block later builds for:
|
|
|
|
- Linux x64
|
|
- macOS x64
|
|
- macOS arm64
|
|
|
|
However, Windows x64 is the first-class MVP target.
|
|
|
|
---
|
|
|
|
## 5. Recommended Solution Structure
|
|
|
|
Use a clean multi-project .NET solution.
|
|
|
|
```text
|
|
TraceCad/
|
|
src/
|
|
TraceCad.App/ # Avalonia UI application
|
|
TraceCad.Core/ # Geometry, document model, tools, snapping, validation
|
|
TraceCad.Dxf/ # DXF export/import abstraction
|
|
TraceCad.Vision/ # OpenCV, marker detection, homography, calibration
|
|
tests/
|
|
TraceCad.Tests/ # Unit tests for geometry, export, transforms, validation
|
|
docs/
|
|
project_scope.md
|
|
architecture.md
|
|
mvp.md
|
|
dxf-export.md
|
|
samples/
|
|
reference-images/
|
|
exports/
|
|
```
|
|
|
|
### 5.1 Dependency Rules
|
|
|
|
The dependencies must flow in one direction:
|
|
|
|
```text
|
|
TraceCad.App
|
|
-> TraceCad.Core
|
|
-> TraceCad.Dxf
|
|
-> TraceCad.Vision
|
|
|
|
TraceCad.Dxf
|
|
-> TraceCad.Core
|
|
|
|
TraceCad.Vision
|
|
-> TraceCad.Core where needed for coordinate data only
|
|
|
|
TraceCad.Core
|
|
-> no UI framework dependency
|
|
-> no Avalonia dependency
|
|
-> no OpenCV dependency
|
|
-> no DXF library dependency
|
|
```
|
|
|
|
The `TraceCad.Core` project must remain UI-independent and testable.
|
|
|
|
---
|
|
|
|
## 6. Core Design Principles
|
|
|
|
### 6.1 Millimetres as Internal Units
|
|
|
|
All model-space geometry must be stored in millimetres.
|
|
|
|
Pixels may only be used in the view/rendering layer.
|
|
|
|
Required coordinate spaces:
|
|
|
|
```text
|
|
Model Space real geometry in mm
|
|
View Space screen pixels
|
|
Reference Space calibrated image/background
|
|
Export Space DXF coordinate output in mm
|
|
```
|
|
|
|
Never store final CAD geometry in pixels.
|
|
|
|
### 6.2 Deterministic Geometry
|
|
|
|
Final geometry must consist of explicit CAD entities:
|
|
|
|
- Lines
|
|
- Circles
|
|
- Arcs
|
|
- Polylines where appropriate
|
|
- Optional dimensions later
|
|
- Optional construction entities
|
|
|
|
Do not export raw traced raster contours as the main workflow.
|
|
|
|
### 6.3 Reference Image Is Not Geometry
|
|
|
|
The imported photo or scan is a locked background/reference layer.
|
|
|
|
It provides:
|
|
|
|
- visual guidance
|
|
- scale
|
|
- orientation
|
|
- real-world coordinate alignment
|
|
|
|
It does not directly define final CAD geometry unless the user explicitly creates geometry from it.
|
|
|
|
### 6.4 Optional Precision, Low Friction by Default
|
|
|
|
The default workflow should require no manual bemaßung/dimensioning.
|
|
|
|
Advanced users may later add:
|
|
|
|
- exact length
|
|
- exact radius/diameter
|
|
- exact angle
|
|
- horizontal/vertical constraints
|
|
- parallel/perpendicular constraints
|
|
- tangency
|
|
- equality constraints
|
|
|
|
But the primary workflow is visual tracing over a scale-accurate reference.
|
|
|
|
---
|
|
|
|
## 7. User Workflow
|
|
|
|
### 7.1 Standard Workflow
|
|
|
|
1. Start new project.
|
|
2. Import a photo/scan of a traced calibration sheet.
|
|
3. The application detects the printed sheet and sets the document scale.
|
|
4. The reference image is displayed on the canvas as a locked, semi-transparent layer.
|
|
5. The user manually traces the outline with CAD tools.
|
|
6. The application displays endpoint snaps, grid, and geometry previews.
|
|
7. The user validates the sketch.
|
|
8. The application exports a clean DXF.
|
|
|
|
### 7.2 Early MVP Workflow Before Marker Detection
|
|
|
|
For MVP staging, marker detection may be delayed.
|
|
|
|
Initial workflow:
|
|
|
|
1. Start app.
|
|
2. Work on an empty millimetre canvas.
|
|
3. Draw lines, circles, and arcs.
|
|
4. Export DXF.
|
|
|
|
Then add:
|
|
|
|
1. Import reference image.
|
|
2. Manually scale/position the reference image.
|
|
3. Trace over it.
|
|
|
|
Then add:
|
|
|
|
1. Marker sheet detection.
|
|
2. Automatic calibration.
|
|
|
|
---
|
|
|
|
## 8. MVP Phases
|
|
|
|
### 8.1 Version 0.1 — Editor Core
|
|
|
|
Goal: prove that the application can create clean 2D CAD geometry and export valid DXF.
|
|
|
|
Required features:
|
|
|
|
- Avalonia desktop app starts reliably.
|
|
- Custom drawing canvas.
|
|
- Model-space coordinate system in mm.
|
|
- Pan and zoom.
|
|
- Grid display.
|
|
- Basic snapping to existing endpoints.
|
|
- Draw line.
|
|
- Draw circle through 3 points.
|
|
- Draw arc through 3 points.
|
|
- Select entity.
|
|
- Delete selected entity.
|
|
- Undo/redo.
|
|
- Save/load custom JSON project file.
|
|
- Export DXF containing LINE, CIRCLE, and ARC entities.
|
|
|
|
Not required in 0.1:
|
|
|
|
- OpenCV
|
|
- marker detection
|
|
- camera input
|
|
- real-time calibration
|
|
- constraints
|
|
- automatic image tracing
|
|
- dimensions
|
|
|
|
### 8.2 Version 0.2 — Reference Image Layer
|
|
|
|
Goal: allow manual tracing over an imported background image.
|
|
|
|
Required features:
|
|
|
|
- Import image as reference.
|
|
- Display reference below CAD entities.
|
|
- Adjust image opacity.
|
|
- Lock/unlock reference image.
|
|
- Move/scale/rotate reference image manually if needed.
|
|
- Continue drawing geometry over image.
|
|
|
|
### 8.3 Version 0.3 — Calibration Sheet
|
|
|
|
Goal: automatically convert a photographed sheet into a scale-accurate reference layer.
|
|
|
|
Required features:
|
|
|
|
- Generate printable A4 calibration sheet.
|
|
- Sheet contains machine-readable markers and known geometry.
|
|
- Detect markers in imported photo.
|
|
- Compute perspective transform/homography.
|
|
- Warp image into orthographic top-down view.
|
|
- Place image into model space using millimetres.
|
|
- Show calibration status.
|
|
|
|
Preferred marker types:
|
|
|
|
- ArUco
|
|
- ChArUco
|
|
- AprilTag if practical
|
|
|
|
### 8.4 Version 0.4 — Assisted Tracing
|
|
|
|
Goal: make manual tracing faster and cleaner without automatic black-box vectorisation.
|
|
|
|
Required features:
|
|
|
|
- Fit line from multiple user-selected points.
|
|
- Fit circle from multiple user-selected points.
|
|
- Fit arc from multiple user-selected points.
|
|
- Snap endpoints together.
|
|
- Close contour command.
|
|
- Highlight open endpoints.
|
|
- Detect duplicate or near-duplicate segments.
|
|
- Detect very short unwanted segments.
|
|
|
|
### 8.5 Version 0.5 — Optional Precision and Export Profiles
|
|
|
|
Goal: add CAD-like refinement and production checks.
|
|
|
|
Required features:
|
|
|
|
- Optional length correction.
|
|
- Optional radius/diameter correction.
|
|
- Optional angle correction.
|
|
- Horizontal/vertical constraints.
|
|
- Parallel/perpendicular constraints.
|
|
- Simple layer system UI.
|
|
- Export profiles for CAD and laser/CAM.
|
|
- Export validation report.
|
|
|
|
---
|
|
|
|
## 9. Calibration Sheet Requirements
|
|
|
|
The printed sheet should be designed for reliable detection and practical tracing.
|
|
|
|
### 9.1 Initial Sheet Size
|
|
|
|
Start with:
|
|
|
|
- A4 portrait
|
|
- Units: millimetres
|
|
- Printed at 100 percent scale
|
|
|
|
Future options:
|
|
|
|
- A3
|
|
- Letter
|
|
- custom sheet sizes
|
|
|
|
### 9.2 Sheet Elements
|
|
|
|
The sheet should include:
|
|
|
|
- Four corner markers outside the main drawing area.
|
|
- Known marker positions in millimetres.
|
|
- A visible outer reference frame.
|
|
- A light drawing grid, e.g. 5 mm or 10 mm.
|
|
- A 100 mm printed control line.
|
|
- Template ID/version.
|
|
- Instruction text: print at 100 percent / actual size / no scaling.
|
|
|
|
### 9.3 Drawing Area
|
|
|
|
Markers must not overlap with the main tracing area.
|
|
|
|
The drawing area should be visually clean and not interfere with pencil lines.
|
|
|
|
Recommended:
|
|
|
|
- light grey grid
|
|
- high contrast markers
|
|
- dark outer frame
|
|
- reserved margins for markers
|
|
|
|
---
|
|
|
|
## 10. Geometry Model
|
|
|
|
### 10.1 Required Primitive Types
|
|
|
|
The core model must support at least:
|
|
|
|
- Point2
|
|
- Vector2
|
|
- LineEntity
|
|
- CircleEntity
|
|
- ArcEntity
|
|
- PolylineEntity later
|
|
- Layer
|
|
- SketchDocument
|
|
- ReferenceImage
|
|
|
|
Example conceptual model:
|
|
|
|
```csharp
|
|
public readonly record struct Point2(double X, double Y);
|
|
|
|
public abstract record Entity(Guid Id, string Layer);
|
|
|
|
public record LineEntity(
|
|
Guid Id,
|
|
string Layer,
|
|
Point2 Start,
|
|
Point2 End
|
|
) : Entity(Id, Layer);
|
|
|
|
public record CircleEntity(
|
|
Guid Id,
|
|
string Layer,
|
|
Point2 Center,
|
|
double Radius
|
|
) : Entity(Id, Layer);
|
|
|
|
public record ArcEntity(
|
|
Guid Id,
|
|
string Layer,
|
|
Point2 Center,
|
|
double Radius,
|
|
double StartAngleDeg,
|
|
double EndAngleDeg
|
|
) : Entity(Id, Layer);
|
|
```
|
|
|
|
### 10.2 Three-Point Circle
|
|
|
|
The application must allow a circle to be defined by three user-selected points on its circumference.
|
|
|
|
Implementation must compute:
|
|
|
|
- centre point
|
|
- radius
|
|
- validity check for collinear or near-collinear points
|
|
|
|
### 10.3 Three-Point Arc
|
|
|
|
The application must allow an arc to be defined by:
|
|
|
|
- start point
|
|
- point on arc
|
|
- end point
|
|
|
|
Implementation must compute:
|
|
|
|
- centre point
|
|
- radius
|
|
- start angle
|
|
- end angle
|
|
- direction/orientation
|
|
- validity check for collinear or near-collinear points
|
|
|
|
### 10.4 Entity Editing
|
|
|
|
At minimum:
|
|
|
|
- select
|
|
- delete
|
|
- move later
|
|
- edit via properties later
|
|
|
|
Do not overbuild editing in the first iteration.
|
|
|
|
---
|
|
|
|
## 11. Tool System
|
|
|
|
The canvas must use a tool-state model. Do not hard-code all interactions into the canvas control.
|
|
|
|
Recommended interface concept:
|
|
|
|
```csharp
|
|
public interface ISketchTool
|
|
{
|
|
string Name { get; }
|
|
void PointerDown(ToolContext context, Point2 modelPoint);
|
|
void PointerMove(ToolContext context, Point2 modelPoint);
|
|
void PointerUp(ToolContext context, Point2 modelPoint);
|
|
void KeyDown(ToolContext context, Key key);
|
|
void RenderOverlay(DrawingContext context, ToolRenderContext renderContext);
|
|
}
|
|
```
|
|
|
|
Initial tools:
|
|
|
|
- SelectTool
|
|
- LineTool
|
|
- Circle3PointTool
|
|
- Arc3PointTool
|
|
- PanTool or integrated middle-mouse pan
|
|
- Delete command
|
|
|
|
Later tools:
|
|
|
|
- CircleCenterRadiusTool
|
|
- PolylineTool
|
|
- FitLineTool
|
|
- FitCircleTool
|
|
- FitArcTool
|
|
- TrimTool
|
|
- OffsetTool
|
|
- FilletTool
|
|
- DimensionTool
|
|
|
|
---
|
|
|
|
## 12. Snapping
|
|
|
|
### 12.1 MVP Snaps
|
|
|
|
Required initially:
|
|
|
|
- snap to entity endpoints
|
|
- snap to grid optionally
|
|
|
|
### 12.2 Later Snaps
|
|
|
|
Add later:
|
|
|
|
- midpoint
|
|
- circle centre
|
|
- arc centre
|
|
- intersection
|
|
- tangent
|
|
- perpendicular foot
|
|
- nearest point on entity
|
|
- reference-image assisted snap, if implemented
|
|
|
|
### 12.3 Snap Behaviour
|
|
|
|
Snapping must happen in model space.
|
|
|
|
The view may display snap indicators in screen space, but the resulting point must be stored in millimetres.
|
|
|
|
---
|
|
|
|
## 13. Rendering Requirements
|
|
|
|
The custom canvas should render:
|
|
|
|
- background
|
|
- grid
|
|
- reference image
|
|
- geometry entities
|
|
- selected entities
|
|
- hover highlights
|
|
- snap indicators
|
|
- active tool preview
|
|
- optional axes/origin
|
|
|
|
The canvas must support:
|
|
|
|
- zoom around cursor
|
|
- pan by middle mouse button or equivalent
|
|
- smooth redraw
|
|
- precise hit testing
|
|
|
|
Rendering must not mutate the document model.
|
|
|
|
---
|
|
|
|
## 14. Project File Format
|
|
|
|
Use a custom JSON format as the native document format.
|
|
|
|
DXF is an export format, not the internal source of truth.
|
|
|
|
Example conceptual structure:
|
|
|
|
```json
|
|
{
|
|
"version": 1,
|
|
"units": "mm",
|
|
"document": {
|
|
"width": 210.0,
|
|
"height": 297.0
|
|
},
|
|
"reference": {
|
|
"imagePath": "reference.png",
|
|
"opacity": 0.55,
|
|
"locked": true,
|
|
"transform": {
|
|
"originX": 0.0,
|
|
"originY": 0.0,
|
|
"scaleX": 1.0,
|
|
"scaleY": 1.0,
|
|
"rotationDeg": 0.0
|
|
}
|
|
},
|
|
"layers": [
|
|
{ "name": "CUT", "visible": true, "locked": false },
|
|
{ "name": "CONSTRUCTION", "visible": true, "locked": false },
|
|
{ "name": "DIMENSIONS", "visible": true, "locked": false }
|
|
],
|
|
"entities": [
|
|
{
|
|
"type": "line",
|
|
"id": "00000000-0000-0000-0000-000000000001",
|
|
"layer": "CUT",
|
|
"start": [10.0, 20.0],
|
|
"end": [80.0, 20.0]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 15. Layer Model
|
|
|
|
Initial layers:
|
|
|
|
- CUT
|
|
- CONSTRUCTION
|
|
- REFERENCE
|
|
- DIMENSIONS
|
|
- DEBUG
|
|
|
|
### 15.1 CUT
|
|
|
|
Final production geometry intended for DXF export.
|
|
|
|
### 15.2 CONSTRUCTION
|
|
|
|
Helper geometry. Should not be exported by default.
|
|
|
|
### 15.3 REFERENCE
|
|
|
|
Imported or calibrated reference information.
|
|
|
|
### 15.4 DIMENSIONS
|
|
|
|
Optional dimension annotations later.
|
|
|
|
### 15.5 DEBUG
|
|
|
|
Internal generated geometry or diagnostics. Hidden by default in production builds unless debug mode is enabled.
|
|
|
|
---
|
|
|
|
## 16. DXF Export Requirements
|
|
|
|
### 16.1 General
|
|
|
|
The DXF export must use millimetres.
|
|
|
|
Final entities should export as native CAD geometry where possible:
|
|
|
|
| Internal Entity | DXF Entity |
|
|
|---|---|
|
|
| LineEntity | LINE |
|
|
| CircleEntity | CIRCLE |
|
|
| ArcEntity | ARC |
|
|
| PolylineEntity | LWPOLYLINE |
|
|
|
|
### 16.2 Export Profiles
|
|
|
|
Support at least two conceptual profiles eventually.
|
|
|
|
#### CAD Profile
|
|
|
|
- Preserve LINE, CIRCLE, ARC.
|
|
- Use real geometry.
|
|
- Keep layers.
|
|
- Suitable for FreeCAD, Fusion, AutoCAD-like systems.
|
|
|
|
#### Laser/CAM Profile
|
|
|
|
- Prefer closed contours.
|
|
- Optionally preserve arcs.
|
|
- Optionally flatten arcs/circles to polylines.
|
|
- Configurable tolerance, e.g. 0.05 mm.
|
|
- Avoid duplicate line cuts.
|
|
|
|
### 16.3 Validation Before Export
|
|
|
|
The app should eventually report:
|
|
|
|
- open endpoints
|
|
- duplicate segments
|
|
- very short segments
|
|
- self-intersections
|
|
- invalid arcs
|
|
- zero-length lines
|
|
- non-mm units
|
|
|
|
For MVP 0.1, basic DXF export without full validation is acceptable, but the architecture must leave room for validation.
|
|
|
|
---
|
|
|
|
## 17. Validation and Quality Checks
|
|
|
|
The application should later include a “drawing health” check.
|
|
|
|
Important checks:
|
|
|
|
- outer contour closed
|
|
- inner contours closed
|
|
- no duplicate segments
|
|
- no tiny accidental segments below tolerance
|
|
- no self-intersections
|
|
- arcs have valid radius
|
|
- circles have positive radius
|
|
- all exportable geometry is on exportable layers
|
|
|
|
Validation results should be user-facing but not block saving.
|
|
|
|
Export may warn before writing problematic DXF files.
|
|
|
|
---
|
|
|
|
## 18. Computer Vision Scope
|
|
|
|
### 18.1 Responsibility
|
|
|
|
The vision module is responsible for:
|
|
|
|
- marker detection
|
|
- perspective correction
|
|
- coordinate calibration
|
|
- optional lens/camera calibration later
|
|
- generating a corrected reference image
|
|
|
|
The vision module is not responsible for producing final CAD entities.
|
|
|
|
### 18.2 Initial Marker Workflow
|
|
|
|
1. Load image.
|
|
2. Detect marker corners.
|
|
3. Match detected marker IDs to template definition.
|
|
4. Compute homography from image points to sheet mm points.
|
|
5. Warp image to orthographic top-down sheet view.
|
|
6. Store corrected image as reference.
|
|
7. Attach image to document at known mm dimensions.
|
|
|
|
### 18.3 Calibration Result
|
|
|
|
The result should include:
|
|
|
|
- success/failure
|
|
- detected marker count
|
|
- template ID
|
|
- sheet size in mm
|
|
- homography matrix
|
|
- warped image
|
|
- quality score later
|
|
|
|
### 18.4 Quality Feedback Later
|
|
|
|
The UI should later show:
|
|
|
|
- sheet detected: yes/no
|
|
- marker count
|
|
- blur/sharpness estimate
|
|
- perspective severity
|
|
- estimated calibration quality
|
|
- warning if image is too skewed or low resolution
|
|
|
|
---
|
|
|
|
## 19. User Interface Requirements
|
|
|
|
### 19.1 Main Window Layout
|
|
|
|
Recommended layout:
|
|
|
|
```text
|
|
┌──────────────────────────────────────────────┐
|
|
│ Menu / Toolbar │
|
|
├────────────┬───────────────────────┬─────────┤
|
|
│ Tools │ Canvas │ Props │
|
|
│ │ │ Panel │
|
|
├────────────┴───────────────────────┴─────────┤
|
|
│ Status bar / command hints │
|
|
└──────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 19.2 Main Toolbar
|
|
|
|
Initial buttons:
|
|
|
|
- New
|
|
- Open
|
|
- Save
|
|
- Import Reference
|
|
- Export DXF
|
|
- Select
|
|
- Line
|
|
- Circle 3P
|
|
- Arc 3P
|
|
- Undo
|
|
- Redo
|
|
|
|
### 19.3 Canvas UX
|
|
|
|
The canvas should feel closer to a lightweight CAD/sketch tool than a paint program.
|
|
|
|
Required controls:
|
|
|
|
- left click for tool actions
|
|
- mouse wheel zoom
|
|
- middle mouse drag pan
|
|
- Esc cancels current operation
|
|
- Delete deletes selection
|
|
- Ctrl+Z undo
|
|
- Ctrl+Y or Ctrl+Shift+Z redo
|
|
- Ctrl+S save
|
|
|
|
### 19.4 Status Bar
|
|
|
|
Show context-specific prompts, e.g.:
|
|
|
|
```text
|
|
Line Tool: choose start point
|
|
Line Tool: choose end point
|
|
Circle 3P: choose first point on circle
|
|
Arc 3P: choose point on arc
|
|
```
|
|
|
|
This reduces the need for documentation.
|
|
|
|
---
|
|
|
|
## 20. Undo/Redo
|
|
|
|
Implement undo/redo early.
|
|
|
|
Preferred model:
|
|
|
|
- command pattern
|
|
- each document change is a command
|
|
- commands can apply and revert
|
|
|
|
Initial commands:
|
|
|
|
- AddEntityCommand
|
|
- DeleteEntityCommand
|
|
- AddLayerCommand later
|
|
- SetReferenceImageCommand later
|
|
|
|
Avoid editing the document directly from tools without command tracking.
|
|
|
|
---
|
|
|
|
## 21. Testing Requirements
|
|
|
|
### 21.1 Geometry Tests
|
|
|
|
Test:
|
|
|
|
- line length
|
|
- circle from three points
|
|
- arc from three points
|
|
- collinear failure cases
|
|
- angle normalization
|
|
- coordinate transforms
|
|
|
|
### 21.2 DXF Tests
|
|
|
|
Test:
|
|
|
|
- export line
|
|
- export circle
|
|
- export arc
|
|
- units are mm
|
|
- layer names preserved
|
|
|
|
### 21.3 Document Tests
|
|
|
|
Test:
|
|
|
|
- save/load JSON roundtrip
|
|
- entity IDs preserved
|
|
- layers preserved
|
|
- document version handled
|
|
|
|
### 21.4 Vision Tests Later
|
|
|
|
Use sample images for:
|
|
|
|
- marker detection
|
|
- homography
|
|
- failed detection
|
|
- distorted/skewed sheet
|
|
|
|
---
|
|
|
|
## 22. Implementation Priorities
|
|
|
|
### Highest Priority
|
|
|
|
1. Clean Core model.
|
|
2. Custom canvas with model/view transform.
|
|
3. Tool system.
|
|
4. Line/Circle/Arc creation.
|
|
5. DXF export.
|
|
6. JSON project file.
|
|
7. Undo/redo.
|
|
|
|
### Medium Priority
|
|
|
|
1. Reference image layer.
|
|
2. Manual scaling/rotation of reference image.
|
|
3. Layers UI.
|
|
4. Basic validation.
|
|
5. Export profiles.
|
|
|
|
### Later Priority
|
|
|
|
1. Marker sheet generation.
|
|
2. OpenCV marker detection.
|
|
3. Homography correction.
|
|
4. Fit tools.
|
|
5. Optional dimensions.
|
|
6. Optional constraints.
|
|
7. Camera live mode.
|
|
|
|
---
|
|
|
|
## 23. Development Rules for the Agent
|
|
|
|
When implementing, follow these rules:
|
|
|
|
1. Do not implement automatic AI tracing as a core feature.
|
|
2. Do not store geometry in pixels.
|
|
3. Do not put CAD logic inside Avalonia UI controls.
|
|
4. Do not make DXF the internal document format.
|
|
5. Do not build a monolithic canvas class containing all tools.
|
|
6. Do not add OpenCV before the basic editor and DXF export work.
|
|
7. Keep `TraceCad.Core` independent from Avalonia and OpenCV.
|
|
8. Prefer small testable geometry functions.
|
|
9. Use explicit entity classes instead of generic loosely typed objects.
|
|
10. Keep the first MVP narrow and working.
|
|
11. Implement robust error handling for invalid circle/arc definitions.
|
|
12. Maintain millimetre units across the model and export layers.
|
|
13. Every tool should have clear interaction state.
|
|
14. Every document mutation should eventually go through undoable commands.
|
|
|
|
---
|
|
|
|
## 24. First Development Task
|
|
|
|
Create the initial .NET solution with this structure:
|
|
|
|
```text
|
|
TraceCad/
|
|
src/
|
|
TraceCad.App/
|
|
TraceCad.Core/
|
|
TraceCad.Dxf/
|
|
TraceCad.Vision/
|
|
tests/
|
|
TraceCad.Tests/
|
|
```
|
|
|
|
Then implement MVP 0.1 skeleton:
|
|
|
|
1. `TraceCad.Core`
|
|
- `Point2`
|
|
- `Vector2`
|
|
- `Entity`
|
|
- `LineEntity`
|
|
- `CircleEntity`
|
|
- `ArcEntity`
|
|
- `SketchDocument`
|
|
- `Layer`
|
|
- basic geometry helpers
|
|
|
|
2. `TraceCad.App`
|
|
- Avalonia main window
|
|
- custom canvas control
|
|
- pan/zoom view transform
|
|
- grid rendering
|
|
- render lines/circles/arcs from document
|
|
- toolbar for select/line/circle3p/arc3p
|
|
|
|
3. `TraceCad.Dxf`
|
|
- exporter interface
|
|
- initial netDxf-based exporter
|
|
- export LINE/CIRCLE/ARC in mm
|
|
|
|
4. `TraceCad.Tests`
|
|
- circle from 3 points tests
|
|
- arc from 3 points tests
|
|
- JSON document roundtrip test
|
|
- basic DXF export smoke test
|
|
|
|
Do not implement marker detection yet.
|
|
|
|
---
|
|
|
|
## 25. Acceptance Criteria for MVP 0.1
|
|
|
|
MVP 0.1 is acceptable when:
|
|
|
|
1. The app launches as a Windows desktop application.
|
|
2. The user can pan and zoom the canvas.
|
|
3. The user can draw a line by clicking two points.
|
|
4. The user can create a circle from three clicked points.
|
|
5. The user can create an arc from three clicked points.
|
|
6. The user can select and delete entities.
|
|
7. The user can save and reload a project file.
|
|
8. The user can export a DXF.
|
|
9. The exported DXF opens in at least one external CAD/CAM program with correct millimetre scale.
|
|
10. The core geometry calculations are covered by unit tests.
|
|
|
|
---
|
|
|
|
## 26. Product Positioning Summary
|
|
|
|
The application should be developed as:
|
|
|
|
> A calibrated 2D tracing CAD tool that helps users turn real-world traced outlines into clean, scale-accurate DXF geometry without forcing them into traditional CAD dimensioning workflows.
|
|
|
|
Primary value:
|
|
|
|
- approachable workflow
|
|
- real-world scale from printed sheet
|
|
- deterministic geometry
|
|
- clean CAD export
|
|
- no AI/autotrace slop
|
|
- optional precision tools for advanced users
|
|
|