Files
cadcraft/docs/ui-parity.md
T
vangel76andClaude Haiku 5.5 ef167c3140 Merge upstream/main into docs/gaps-audit-2026-10-12
Resolve the parity-doc conflicts: take upstream's header lines and newer
catalog rows, and keep this branch's re-audit history rows and the
re-audit line in each header.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-30 23:39:55 +01:00

22 KiB
Raw Blame History

UI parity

Last reviewed: 2026-10-10 · Last updated: 2026-10-27 · Change: minor (WIPEOUT closure-aware grips; previously: re-audit of the evidence text against main 41d9b5e95: point entry, tracking, Dynamic Input, grips, scripts, views; percentages not re-measured; previously: distinct polyline midpoint grips) · 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 (FROM, M2P, TK, point filters, typed snap overrides), the common running snaps, polar/ortho, PolarSnap, object snap tracking, Dynamic Input (pointer boxes, grip dimensional input, DYNPROMPT), hot-grip options with several hot grips, shortcut menus and the palettes are real, and so are the Extension, Parallel and Apparent Intersection snaps (#379). Selection cycling landed (#1143). Missing: lasso selection, grip hover menus, multifunctional grips on dimensions and text, workspaces and the navigation bar. The 48% and the area percentages below are from 2026-10-11 and were not re-measured. 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 yes (TK, or TRACKING from three letters; TT is the temporary track point) pointmod.rs
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 yes, see Point entry above (pointmod.rs)
Shift/Ctrl+right-click snap menu yes yes: From, Mid Between 2 Points, Point Filters, Temporary track point, the snap modes, None, Osnap Settings (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, Shift overrides it while held yes; holding Shift turns it on or off while held (Session::snap_cursor, snap/tracking.rs)
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); relative to the last segment with POLARMODE bit 4 (snap/tracking.rs, #450)
Polar distance snap (PolarSnap) yes yes: SNAPTYPE 1 steps along the tracking paths by POLARDIST (#450; also over the isometric snap, #633) (snap/tracking.rs polar_snap)
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)
Hatch and Gradient / Hatch Edit dialogs yes yes (hatchdlg.rs): pattern swatches, gradient colours and shapes, origin, pick points or objects, associative, separate, island detection; Hatch Edit adds boundaries from points or closed objects and removes selected loops; opened by HATCH, GRADIENT (HPDLGMODE), HATCHEDIT, right-click or double-clicking a hatch; no Preview or Inherit Properties

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. Since then: grip dimensional input (length and angle fields while a grip is stretched, DYNDIVIS, DYNDIGRIP), lock indicators on locked values, and DYNPROMPT (the prompt beside the cursor, Down Arrow for its options); distances show in the drawing's UNITS (#867). Missing: DYNDIM (dimension display while dimensions are edited).

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 (one grip per logical corner, including coincident corners; an explicit closing marker follows the first vertex), spline (grips.rs)
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 yes (cmd/griphot.rs, #425)
Several hot grips at once (Shift-click) yes yes; STRETCH moves them together (cmd/griphot.rs)
Multifunctional grip hover menus (Add Vertex, Remove Vertex, Convert to Arc, Lengthen …) yes on right-click only, not on hover (grips.rs, #425); none on dimensions, MLEADER, hatches or text
Grip dimensional input (length/angle fields) yes yes while one grip is stretched: DYNDIVIS and DYNDIGRIP choose the fields (grip_dims.rs)
Dynamic block grips yes yes: arrows, squares and list triangles per visibility state, dragged to change the parameter (#883)
Grip appearance (GRIPSIZE, colours, hover) yes GRIPSIZE, GRIPS and GRIPOBJLIMIT honoured (Options ▸ Selection); polyline segment midpoints use rectangles, vertices use squares; no grip colours

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), filled as SELECTIONAREA, WINDOWAREACOLOR, CROSSINGAREACOLOR and SELECTIONAREAOPACITY say (Visual Effect Settings)
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 clicks or drag (2, default), or two clicks only (0); Options ▸ Selection ▸ Select using two clicks only, saved in the profile; drag-only mode (1) is unavailable
Lasso yes no
Selection cycling (SELECTIONCYCLING) yes yes (#1143): SELECTIONCYCLING 2 lists the objects under a click (type, layer; the row under the pointer highlights its object), 1 the badge; Shift+Space steps the highlight through them (#1145); no Ctrl+W
Selection preview, hover highlight yes selected and hovered objects redrawn in the selection colour, fills half see-through (SELECTIONEFFECT 1; 0 dashed), selection effect color; HIGHLIGHT (not saved), SELECTIONPREVIEW, PREVIEWEFFECT, PREVIEWFILTER (Visual Effect Settings)
PICKADD, PICKFIRST, PICKAUTO yes PICKADD (Shift), PICKFIRST
Stability of outlined fill highlights yes closed contours keep the same start, direction and ordering on repaints and GPU rebuilds; dashed filled glyphs, hatch/solid regions, arrowheads and wipeout outlines no longer shift with pointer movement
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 yes (PICKSTYLE 1, #417), Object grouping on Options ▸ Selection; associative hatch selection (bit 2) is stored, not used

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, counted 2026-10-10); gaps.md U10 counts about 150 with the dimension variables; not recounted
Scripts (SCRIPT, .scr) yes the SCRIPT command runs a .scr file (#693); script text via CLI/MCP/control too
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); once a menu is open, pointing at another title opens that menu (#1567)
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; numeric fields take feet and inches and show lengths in the drawing's units (#870)
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
Browser panel layout storage not applicable Versioned, validated panel placement and visibility saved through the browser host; floating palettes remain embedded. Requires available browser storage and a completed host save; named workspaces and drawing persistence are separate.
Options / Preferences dialog many tabs no (issue #23)
Customisation (CUI, aliases editor, tool palettes) yes Command Aliases dialog (ALIASEDIT, #1381); no CUI or tool palettes
Themes Dark, Light Dark, Light, System (#179)
Accessibility VoiceOver basics AccessKit through eframe; screen-reader coverage untested; magnifier issue #39; animation effects follow the OS setting (View ▸ Accessibility ▸ Animation Effects: System, On, Off)

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 yes (zoom.realtime, zoom.dynamic, cmd/view.rs)
Wheel zoom about cursor, ZOOMFACTOR, ZOOMWHEEL yes ZOOMFACTOR is a setting (Session::zoomfactor, 3–100, default 60); ZOOMWHEEL not checked
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 yes (cmd/view/named_views.rs; the VIEW table is read and written); Orthographic views print "not available yet"
Tiled model-space viewports (VPORTS) yes yes, with saved configurations and the DXF VPORT table (#504); MVIEW Restore puts one into a layout (#633)
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-27 minor WIPEOUT grips treat implicit and explicit closure alike; moving the first vertex carries the closing marker, and moving endpoints together keeps both corners editable. Open/closed polyline flags and coincident polyline vertices remain independent (#2256)
2026-10-26 minor Browser host stores bounded, validated panel layout separately from drawing state; malformed or unsupported records retain defaults. Native workspace storage is unchanged.
2026-10-24 minor Re-audit against main 41d9b5e95: evidence text for TK and typed snap overrides, PolarSnap, Dynamic Input, hot-grip options, dynamic block grips, SCRIPT, ZOOM Realtime/Dynamic, named views and VPORTS; headline no longer lists selection cycling as missing; the 48% and the area percentages are not re-measured
2026-10-22 minor Polyline segment midpoint grips use rectangles, distinct from square vertex grips, with matching hover and pick bounds (#1950)
2026-10-13 minor Filled-region highlight boundaries are traversed in deterministic coordinate order, fixing dash-phase jumps on CPU hover/selection redraws and GPU highlight rebuilds; CPU dash-position, pixel and GPU mesh regressions
2026-10-14 minor Selection cycling (#1143): the list and badge of SELECTIONCYCLING, Shift+Space through overlapping objects (#1145)
2026-10-14 minor Hatch Edit dialog adds boundaries from picked points or closed objects and removes selected loops
2026-10-14 minor Holding Shift overrides ortho while it is held (on when ORTHOMODE is off, off when it is on), as in AutoCAD
2026-10-16 minor ALIASEDIT opens the Command Aliases dialog (#1381)
2026-10-18 minor In-window menu bar: once a menu is open, pointing at another title closes it and opens that one (#1567)
2026-10-13 minor Options ▸ Selection adds Select using two clicks only; PICKDRAG 0 disables drag-window creation/completion, 2 preserves clicks or drag, and the preference survives restart; UI pointer and profile regressions
2026-10-12 minor Selected and hovered objects redrawn in the selection colour (text and arrowheads included); Options ▸ Selection laid out as AutoCAD's: Object grouping, Show grips, grip object limit, selection preview, Visual Effect Settings (selection area, preview filter)
2026-10-12 minor Animation effects (dialog and menu fades, smoothed wheel scrolling and ⌘/Ctrl+wheel zoom) follow the operating system's setting; View ▸ Accessibility ▸ Animation Effects chooses System, On or Off
2026-10-12 minor Hatch and Gradient / Hatch Edit dialogs (HATCH, GRADIENT, HATCHEDIT, double-click a hatch; HPDLGMODE)
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