Squash of PR #682 by @markmonkey. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
16 KiB
UI parity
Last reviewed: 2026-10-10 · Last updated: 2026-10-12 · Change: minor (Properties Inspector shows block insertion X, Y and stored Z) · Target: Autodesk AutoCAD 2027 for Mac (26.0)
How CADCraft's interaction compares with AutoCAD's: point entry, object snaps, tracking, dynamic input, grips, selection, the command line, chrome and navigation. A drafter's speed in AutoCAD comes from these, so "the command exists" isn't enough: it has to accept the same input, snap to the same points and respond to the same keys. Work items: gaps.md.
Headline (estimated): UI/UX fidelity ≈ 48%. The command line, point syntax, the common running snaps, polar/ortho, object snap tracking and the palettes are real, and so are the Extension, Parallel and Apparent Intersection snaps (#379); dynamic input is a read-only tooltip; FROM, M2P, TK and point filters don't exist; hot-grip options are advertised but ignored; there are no context menus. Remaining: ≈ 110–170 Opus 5.5 hours.
How this was measured
- CADCraft: read from the source on 2026-10-10 (main at
bd2412f):crates/engine/src/{prompt, snap, select, grips, lib, units}.rs,cmd/*,crates/ui-egui/src/*. Not run in this pass. - AutoCAD: behaviour observed black-box in the running AutoCAD 2027 for Mac
(
plan/autocad/01-observed-ui.md, local only, with reference screenshots that are never committed), its menu tree (xtask/data/menu-catalog.txt) and Autodesk's documentation. - Weights (how often a drafter hits each area): point entry 15%, object snaps 15%, tracking and polar 10%, dynamic input 10%, grips 10%, selection 10%, command line 10%, chrome and palettes 10%, navigation 5%, keyboard and context menus 5%.
| Area | Weight | CADCraft | Weighted |
|---|---|---|---|
| Point entry | 15% | 45% | 6.8 |
| Object snaps | 15% | 45% | 6.8 |
| Tracking, polar, ortho, grid/snap | 10% | 70% | 7.0 |
| Dynamic input | 10% | 45% | 4.5 |
| Grips | 10% | 40% | 4.0 |
| Selection | 10% | 40% | 4.0 |
| Command line | 10% | 60% | 6.0 |
| Chrome and palettes | 10% | 45% | 4.5 |
| Navigation | 5% | 55% | 2.8 |
| Keyboard shortcuts, context menus | 5% | 25% | 1.3 |
| Total | 100% | ≈ 48% |
Point entry (≈ 45%)
| Input | AutoCAD | CADCraft | Evidence |
|---|---|---|---|
x,y[,z], @dx,dy, @d<a, d<a, #x,y, bare @ |
yes | yes; # equals absolute because there is no UCS; Z parsed then discarded |
prompt.rs:147-180 |
*x,y (WCS override) |
yes | yes (*x,y, *@dx,dy, @*dx,dy); the same as the plain forms because there is no UCS |
prompt.rs |
| Direct distance entry | yes, honours ortho, polar and tracking paths | yes, ortho; polar only through the UI's snapped cursor | lib.rs:782-793 |
Angle forms: 45d30', radians, grads, surveyor N45dE |
yes | yes | units.rs:141-197 |
Architectural/engineering distances 5'6-1/2" |
yes | yes | units.rs:93-140 |
FROM (base point + offset) |
yes | yes: "Base point:", ":" with @ measured from the base; nests with M2P and filters |
pointmod.rs |
M2P / MTP (midpoint between two points) |
yes | yes | pointmod.rs |
TK (tracking) |
yes | no | |
Point filters .x, .y, .xy, .z |
yes | yes (.x … .yz, "(need YZ):"); Z is asked for and dropped (no 3D) |
pointmod.rs |
Angle override <45 |
yes | yes: <a, <<a, <<<a; a typed distance or a pick follows the angle, typed coordinates win |
pointmod.rs |
Object snap overrides (END, MID, INT … NON) |
yes | yes, every mode and NON, with long names and _/' prefixes, for the next pick only; a typed point is snapped within the aperture; a command's own keyword wins (_cen always snaps); also from the snap menu |
pointmod.rs |
Typed calculator 'CAL |
yes | no |
Object snaps (≈ 45%)
| Mode | AutoCAD | CADCraft (snap.rs:135-334) |
|---|---|---|
| Endpoint | every curve, solid/3D vertices, dimension ends | lines, arcs, polyline segments, open ellipses and splines, ray base, solid/trace corners |
| Midpoint | every curve incl. ellipse/spline arcs, polyline segments | segments only; none on circles, ellipses, splines |
| Center | arcs, circles, ellipses, polyarcs | arcs, circles, ellipses |
| Geometric center | any closed polyline, spline | closed LWPOLYLINE only |
| Node | points, dimension definition points, text alignment points | POINT only |
| Quadrant | circles, arcs, ellipses | yes |
| Intersection | every pair, extended intersection | among up to 200 nearby primitives; ellipse/spline pairs approximate (geometry-parity.md) |
| Extension | yes, with dashed extension path | yes: rest on a line or arc end, then the line runs on (a ray) and the arc round its circle; dotted path and "Extension: d < a°" (snap/tracking.rs); not from ellipse, spline or polyline-arc ends |
| Insertion | text, mtext, blocks, attributes, attdefs | TEXT, MTEXT, INSERT; no ATTDEF or MLEADER |
| Perpendicular | every curve, deferred | lines, arcs, circles, xlines; deferred for the first point (#168) |
| Tangent | circles, arcs, ellipses, splines, deferred | arcs and circles; deferred for the first point; no ellipse or spline |
| Nearest | every curve | yes |
| Apparent intersection | projected intersection | yes in 2D: where objects near the cursor would meet if extended; an object rested on sends its whole extension, so its crossing with another object snaps too (snap.rs osnap_with, snap/tracking.rs) |
| Parallel | yes, with parallel path | yes: rest on a line, then a path parallel to it runs through the base point (snap/tracking.rs) |
Temporary overrides typed at a prompt (END, MID, INT …) |
yes | no: the text arrives as plain input |
| Shift/Ctrl+right-click snap menu | yes | yes: From, Mid Between 2 Points, Point Filters, the snap modes, None, Osnap Settings; no Temporary track point yet (context_menu.rs) |
| Tab to cycle candidate snaps | yes | yes, through the closest snap of each running mode under the cursor (pointmod::snap_candidates) |
| AutoSnap marker, tooltip, magnet, aperture box | yes | marker per mode and name label; aperture from APERTURE; no magnet, no aperture box |
| OSNAPZ, 3D object snaps | yes | no |
Tracking, polar, ortho, grid and snap (≈ 70%)
| Feature | AutoCAD | CADCraft |
|---|---|---|
| Ortho (F8) | yes | yes (snap.rs:503) |
| Polar tracking increment | yes | yes, measured from ANGBASE; dotted path and "Polar: d < a°" tooltip (snap/tracking.rs, canvas.rs draw_tracking) |
| Additional polar angles, relative to last segment | yes | additional angles yes (POLARADDANG with POLARMODE 4); relative to the last segment no |
| Polar distance snap (PolarSnap) | yes | no |
| Object snap tracking (acquire points, alignment paths, intersections of paths) | yes, F11 | yes (#379): resting on a snap point acquires it (+), resting again releases it, seven at most; horizontal/vertical paths, or every polar angle with POLARMODE 2; Shift to acquire with POLARMODE 8; crossings of two paths, a path and an object, and a path and a polar path snap; tooltip names each path; a typed distance (direct distance entry) runs along the path the cursor is on, measured from the point the path comes from. Engine: Session::snap_cursor, snap/tracking.rs; AUTOSNAP bits 8 and 16 |
| Grid (rectangular, major lines, adaptive, limits) | yes | rectangular and isometric (30°, 90° and 150° lines), major lines, adaptive display |
| Snap (rectangular, isometric, polar snap) | yes | rectangular and isometric (SNAPSTYL 1: the snap Y spacing along the isometric axes), from SNAPBASE turned by SNAPANG |
| Isometric drafting (ISODRAFT, isoplanes F5) | yes | yes (#556): ISODRAFT and the status-bar toggle set SNAPSTYL and the plane; ISOPLANE / F5 / Ctrl+E cycle Left, Top, Right (SNAPISOPAIR); ortho, direct distance entry and the crosshair follow the plane's axes; ELLIPSE Isocircle (radius or Diameter, also for elliptical arcs); Drafting Settings snap style radio. Engine: snap/iso.rs, cmd/settings/iso.rs |
| Drafting Settings dialog | yes | yes (dialogs.rs:36-80) |
Dynamic input (≈ 45%)
AutoCAD's heads-up input (F12) has editable pointer-input fields (x, y), dimensional input
fields (length and angle) with Tab between them and lock icons, relative-by-default second
points, dimensional input on grips, a prompt with clickable options and a down-arrow menu.
CADCraft has pointer input boxes since #60 (crates/ui-egui/src/dyninput.rs): value boxes
beside the cursor while a command asks for a point; second and later points default to polar
distance and angle (DYNPIFORMAT = 1 for Cartesian); , and < lock a value and move to the next
box; Tab types the separator; Enter sends a relative entry (DYNPICOORDS = 1 for absolute) and
fills an empty box from the cursor; a plain number stays direct distance entry. Missing:
dimensional input on grips (length/angle fields while stretching), lock icons, the prompt with a
down-arrow options menu (DYNPROMPT), and DYNDIM.
Grips (≈ 40%)
| Feature | AutoCAD | CADCraft |
|---|---|---|
| Stretch grips per object type | yes | lines (midpoint moves), arcs (start/mid/end), ellipses (axes), polylines (vertices; segment midpoints move or reshape the bulge), dimensions (text and definition points), MLEADER, viewport, wipeout, spline (grips.rs:79-270) |
| Text/MText grips | position, width, column grips | move the whole object |
| Hot-grip modes with Space/Enter cycling | Stretch, Move, Rotate, Scale, Mirror | yes (canvas.rs:58-67) |
| Hot-grip options: Base point, Copy, Undo, Reference, eXit | yes | advertised in the prompt but not parsed; the engine's JSON grip commands accept copy, the UI never passes it |
| Several hot grips at once (Shift-click) | yes | no (one handle) |
| Multifunctional grip hover menus (Add Vertex, Remove Vertex, Convert to Arc, Lengthen …) | yes | no |
| Grip dimensional input (length/angle fields) | yes | no |
| Dynamic block grips | yes | no (no dynamic blocks) |
| Grip appearance (GRIPSIZE, colours, hover) | yes | GRIPSIZE honoured |
Selection (≈ 40%)
| Feature | AutoCAD | CADCraft |
|---|---|---|
| Pick, implied window (left→right) and crossing (right→left) | yes | yes, coloured and dashed rectangles (lib.rs:576-589, canvas.rs:823-836) |
| Keywords W, C, WP, CP, F, BOX, AU, SI, M, G (group), CL (class) | yes | yes except CLass: W, C, F, WP, CP (#226); BOX, AUto, SIngle, Multiple, Group, Add, Remove, Undo (#428); ALL, Last, Previous |
| Press-drag selection windows (PICKDRAG) | yes | yes (#63, PICKDRAG = 2) |
| Lasso | yes | no |
| Selection cycling (SELECTIONCYCLING) | yes | toggle nothing reads |
| Selection preview, hover highlight | yes | hover highlight |
| PICKADD, PICKFIRST, PICKAUTO | yes | PICKADD (Shift), PICKFIRST |
| QSELECT, SELECTSIMILAR, FILTER | yes | QSELECT dialog; SELECTSIMILAR with SELECTSIMILARMODE (#428, SEttings asks for the bit code; no dialog); no FILTER |
| Object isolate/hide (ISOLATEOBJECTS, HIDEOBJECTS) | yes | yes, temporary (OBJECTISOLATIONMODE 0; #428): Tools > Isolate, UNISOLATEOBJECTS; no status-bar button |
| Groups selectable as one (PICKSTYLE) | yes | no |
Command line (≈ 60%)
| Feature | AutoCAD | CADCraft |
|---|---|---|
| AutoComplete (commands, sysvars, mid-string, synonyms) | yes | command list with Tab to accept (cmdline.rs:30,176,317); no sysvar or mid-string search confirmed |
| Aliases | about 250 in acad.pgp |
144 aliases across the commands (counted from source) |
| History (F2), Up/Down recall | yes | yes |
Transparent commands ('zoom, 'pan, 'osnap) |
yes | yes (lib.rs:496-503) |
| Enter/Space repeats last command | yes | yes |
| Clickable keywords in the prompt | yes | yes (cmdline.rs:253-267) |
| UNDO with Mark, Back, BEgin, End, Auto, Control | yes | count only, whole-document snapshots capped at 2,000 (lib.rs:477, edit.rs:56) |
| SETVAR for every system variable | ~1,000 sysvars | about 60 session/header variables by name (sysvars.rs) |
Scripts (SCRIPT, .scr) |
yes | script text via CLI/MCP/control; no .scr file command |
| Floating/docked command window, transparency, lines of history | yes | floating overlay, history lines setting |
Chrome and palettes (≈ 45%)
| Feature | AutoCAD for Mac | CADCraft |
|---|---|---|
| Menu bar | 11 menus, 491 leaf items | same 11 menus; 245/491 items covered (233 by cargo xtask parity, which counts engine commands only, plus 12 UI-only items: see parity-checklist.md) |
| Tool Bar, File tabs, Start tab, layout tabs | yes | yes |
| Tool Sets palette (Drafting, Modeling, … with flyouts) | yes | yes for 2D groups |
| Properties Inspector, Quick Properties | yes | yes (every control acts or is visibly unavailable, #182); block references show read-only Position X/Y/Z from their stored insertion point; coordinate editing is still missing |
| Layer Properties Manager (filters, states, VP overrides) | yes | yes |
| Blocks palette, Content | yes | Blocks window (click to insert, #28) |
| Status bar toggles | ~25 | most toggles; Annotation Visibility and Workspace do nothing |
| ViewCube | interactive 3D | clickable for 2D (Top/Home → extents); dragging does nothing (#7) |
| Navigation bar, SteeringWheels | yes | no |
| Workspaces | Drafting & Annotation, 3D Modeling | no |
| Options / Preferences dialog | many tabs | no (issue #23) |
| Customisation (CUI, aliases editor, tool palettes) | yes | no |
| Themes | Dark, Light | Dark, Light, System (#179) |
| Accessibility | VoiceOver basics | AccessKit through eframe; screen-reader coverage untested; magnifier issue #39 |
Navigation (≈ 55%)
| Feature | AutoCAD | CADCraft |
|---|---|---|
| ZOOM Extents, All, Window, Previous, In/Out, Center, Scale, Object | yes | yes, 50-entry history (cmd/view.rs:107-149) |
| ZOOM Realtime (drag), Dynamic | yes | no |
| Wheel zoom about cursor, ZOOMFACTOR, ZOOMWHEEL | yes | fixed factor (no ZOOMFACTOR) |
| Middle-drag pan, double-middle-click extents | yes | yes (canvas.rs:538-583) |
| Trackpad two-finger pan, pinch zoom (macOS) | yes | yes (#58) |
| Named views (VIEW) | yes | no (VIEW table not read or written) |
| Tiled model-space viewports (VPORTS) | yes | not confirmed: VPORTS maps to paper-space MVIEW |
| 3D orbit, ViewCube drag, SteeringWheels | yes | no (M11) |
Keyboard and context menus (≈ 25%)
- Shortcut table: 28 entries (Cmd shortcuts, F1, F2, F3, F5, F7–F12) plus 23 command
.key()shortcuts. AutoCAD for Mac's defaults are similar in number; F4 (3D osnap) and F6 (dynamic UCS) are missing. - Delete erases the selection on macOS (#64); Escape cancels.
- Right-click on the canvas is Enter while a command runs; holding it (250 ms, AutoCAD's time-sensitive right-click) opens the command menu: Enter, Cancel, Recent Input, the prompt's options, Snap Overrides, Pan/Zoom. Otherwise it opens a shortcut menu (Repeat, Recent Commands, Clipboard ▸, Isolate ▸, the selection's editing commands, Draw Order ▸, Group, the selected object type's edit commands, Select Similar, Deselect All, Undo/Redo, Pan/Zoom; #325, #512). The command line, drawing tabs, layout tabs, Layers palette rows and the Properties palette have menus too (#512). Still missing: in-place layout tab rename, Move or Copy, Select All Layouts.
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-12 | minor | Block references now show their stored insertion X/Y/Z in the Properties Inspector, including nonzero Z; fields are read-only |
| 2026-10-11 | minor | Isometric drafting (#556): isometric snap and grid, ISODRAFT, ISOPLANE (F5), ortho along isoplane axes, ELLIPSE Isocircle |
| 2026-10-11 | minor | Object snap tracking, Extension, Parallel, Apparent Intersection, additional polar angles (#379): tracking 30% → 70%, object snaps 40% → 45%; total 43% → 48% |
| 2026-10-10 | minor | Dynamic input 15% → 45% (pointer boxes, #60); press-drag windows (#63); total 40% → 43% |
| 2026-10-10 | major | First UI-parity audit: point entry, snaps, tracking, dynamic input, grips, selection, command line, chrome, navigation, keys |