Drawing modifiers — ortho, polar tracking, dynamic input
These apply across all draw tools (rect, polygon, path, circle, arc) and the Move/Stretch translation modes.
| Modifier | Default | Toggle | What it does |
|---|---|---|---|
| Ortho mode | off | F8 or status-bar ORTHO |
Constrains the next vertex / drag offset to horizontal or vertical. Hold Shift to invert (Shift always means "the opposite of current ortho"). |
| Polar tracking | off | F10 or status-bar POLAR n° |
Locks the cursor onto the nearest n-degree ray from the previous vertex when within tolerance. The default step is 45°; change it in Edit → Settings (1–180°). |
| Dynamic input HUD | always on during drafts | n/a | A small floating panel shows the live distance and angle from the previous vertex while drawing. See §10.1 for the typed-input grammar. |
Shift / Alt while drawing. Each draw tool reads the modifier keys the same way:
| Tool | Shift |
Alt |
|---|---|---|
| Rect | Constrain to a square | Grow from the center (the click point is the rect's middle, not a corner) |
| Circle | Polar-lock the radius cursor to a 45° ray (purely a cue — the circle itself is radially symmetric) | — |
| Arc | Lock the start angle (click 2) and the sweep (click 3) to 45° increments | — |
| Polygon / Path | Toggle ortho-lock — Shift always means "the opposite of the current ortho mode" for that one click |
— |
Shift+Alt on Rect combines: a square centered on the click. Modifier behavior is consistent with the surrounding ortho/polar settings — F8 (ortho) flips Shift's meaning for Poly/Path/Circle/Arc the same way it always has.
Cancel an in-progress draft any time with Esc, which works mid-drag (Rect / Circle), between vertex clicks (Poly / Path), or between arc phase clicks. Right-click also cancels — except while drawing a polygon, where a right-click instead closes the shape (commits the boundary as drawn, exactly like Enter). Right-clicking with nothing in flight opens the normal context menu.
OSNAP-style helpers (intersection, perpendicular foot, circle center) are always on while drafting — and, since c59, while measuring — and override polar/ortho when within tolerance — they're the most precise hit, so they win.
Draw boolean mode — merge / subtract while drawing
The Properties panel shows a Draw mode picker (Normal / Merge / Subtract) whenever the Box, Polygon, Path, Circle, or Arc tool is active — a live, at-commit boolean, CleWin-style, not a separate command (the Connector, Text, Measure, Select, Stretch, Match properties, and Slice tools don't show it). It's session-sticky: it stays set across tool switches, but it's never saved with the document, never on the undo stack, and resets on reload — the same session-state class as ortho/polar mode above.
- Normal (default) — draws add a new shape, exactly as everywhere else in this manual.
- Merge — on commit, unions the new shape with every shape it overlaps on the same (layer, datatype) pair. A shape that overlaps nothing there is just added, same as Normal.
- Subtract — on commit, cuts the new shape's area out of every overlapping same-pair shape, then discards the shape you drew — it is never itself added. Consuming everything underneath is legal and leaves nothing behind. If it overlaps nothing, nothing changes; if the drawn shape can't cut at all (a zero-width path, for example), Glyph says so instead of silently doing nothing.
Same-(layer, datatype)-pair only — for a cross-layer merge or subtract, use Arrange → Layer operations… (§8) instead. Whichever mode is active, one commit is one undo step, and a large merge/subtract runs on the same cancellable background worker as the selection-based booleans (§8) — if the drawing changes while it's running, the result is discarded rather than applied to geometry that has moved.
10.1 Coordinate input grammar (Dynamic Input HUD)
The HUD has two fields: distance (left) and angle (right). Enter commits, Esc cancels. Tab/Shift+Tab move focus forward/backward between the two fields like any ordinary input pair — Tab from Distance goes to Angle and Shift+Tab from Angle goes back to Distance, but Shift+Tab on Distance and Tab on Angle leave the HUD entirely (there's nothing before the first field or after the last one) rather than bouncing back and forth. By default the distance field accepts a plain number and uses the live cursor angle, but it ALSO accepts AutoCAD-style coordinate strings — just type them into the distance field:
| Syntax | Meaning | Example | Resolves to |
|---|---|---|---|
x,y |
Absolute world point in the active display unit | 5,3 (in µm mode) |
(5000, 3000) nm |
@dx,dy |
Relative offset from the reference point (the previous vertex of the in-progress polyline / drag origin) | @5,3 after a vertex at (10,10) |
(15, 13) |
@d<θ |
Polar — distance d at angle θ (degrees CCW from +x) from the reference point |
@5<45 |
reference + (5cos45°, 5sin45°) |
Whitespace is ignored. Decimals are accepted (@2.5,1.5). Negative numbers work (@-5,0 for "5 units to the left"). Distances honour the active display unit (nm / µm / mm — Edit → Settings); angles are unitless degrees regardless.
The HUD picks the parser path automatically: if the string contains any of @, ,, or <, it's treated as a coord. Otherwise it's a plain numeric distance combined with the live cursor angle.
When does the parser run? While drafting any of:
- Polygon / Path: each click activates the HUD with the new vertex as the reference point. Type the next vertex's coord and press
Enterinstead of clicking. - Box / Circle: HUD activates on the first click; the second corner / radius point is what you type.
- Arc: HUD activates after the first two clicks (centre, then radius/start) — type the next point instead of clicking; the sweep-end entry completes the arc and closes the HUD. A typed radius/start or sweep point is never ortho-locked to 45° the way a
Shift-held click is (typing an exact point already states your intent precisely, so there's nothing to snap); holdShifton the click itself for ortho-locking. - Stretch translate & Move drags: the current cursor anchor is the reference; type a delta to translate the marked vertices by an exact offset.
Keyboard-only start (no click at all). With Box, Circle, Polygon, Path, or Arc armed and nothing drawn yet, press Enter instead of clicking: it opens the HUD to type the FIRST anchor as an absolute point (plain x,y — the reference point is meaningless before anything exists to measure from), auto-focused so you can start typing immediately, and submitting it starts the draft exactly as if you'd clicked there. Every later vertex/corner works the same as the click-started flow above (including Arc's ortho limitation just above). This is the only way to draw a shape with no pointing device at all; Esc from this first-anchor HUD closes it with nothing drawn (there's no in-progress gesture yet to fall back to).
Typed points here are literal. Every typed draw/arc anchor lands at exactly the value you typed — no grid-snap, no object-snap — because typing already states the point precisely (the same reasoning behind Arc's ortho limitation above). This is a deliberate difference from Measure's typed points (§14), which instead replay the same grid/object-snap pipeline a click would. Documented, not unified: see §14's matching note.
Examples:
- Drawing a 10 µm × 5 µm rectangle from the origin: click
(0,0), then in the HUD type@10,5and pressEnter. - A 30° offset of 12 µm from the previous vertex: type
@12<30and pressEnter. - Place a polygon vertex at the absolute point
(100, 200)µm: type100,200and pressEnter.
Parser source: src/canvas/coordParse.ts. Returns { kind: 'absolute' | 'relative' | 'polar' | 'invalid' }; the HUD's resolveCoord step converts to a world-nm point using the active display unit and the reference. Invalid input falls through to the live-angle numeric interpretation, so a typo doesn't cancel your draft — it just commits at the cursor.