Quick start
- Orbit: RMB-drag • Pan: LMB-drag empty space • Zoom: wheel (Ctrl = finer)
- Select: LMB click vertex/edge (toggle). LMB click empty space = clear.
- Lasso (additive): hold Ctrl=verts / Alt=edges / Ctrl+Alt=both, then LMB-drag → release LMB.
- Move selection: start LMB-drag on selected geometry (moves on the dominant plane).
- Tools: Line C • Rotate R • Scale V • Revolve L • Bend S • Circle/Arc O • Bevel B
- Undo: Backspace • Redo: Shift+Backspace
Cancel / revert: RMB cancels an active drag/pan/tool interaction and restores the previous state. (Tools also usually cancel with Esc.)
Ortho “peek orbit”: in ortho, RMB-drag orbits temporarily; releasing RMB snaps back to the ortho-aligned view.
Controls
Mouse
- Orbit: RMB-drag
- Pan: LMB-drag empty space
- Zoom: wheel (Ctrl = finer; perspective changes distance, ortho changes zoom size)
- Select: LMB click toggles vertex/edge; empty click clears
- Move: LMB-drag starting on selected geometry (after a few pixels)
- Lasso: Ctrl/Alt/Ctrl+Alt + LMB-drag, release to finish; RMB cancels
Core keys
- V: Scale tool (when a selection exists) • otherwise overlay cycle: Off → Thin → Thick → Off
- 9/0 grid spacing −/+ (min 0.1)
- D duplicate exact selection (selected vertices + selected edges; selected edges duplicate their endpoints)
- Delete delete selection • if nothing selected: clear all
- Space toggle ground clamp (blocks downward moves below
y = 0)
MMB select-all variants
- MMB all vertices + all edges
- Ctrl+MMB vertices only
- Shift+MMB edges only
Move & snapping
Dominant plane
- Moves (drag + nudges) are constrained to a plane chosen from camera direction:
- XY if view is mostly along ±Z • XZ if mostly along ±Y • YZ if mostly along ±X
- HUD shows the dominant plane label and highlights its axes.
Drag snapping
- No modifiers: fine stable micro-step
- Shift: snap to 1.0 units
- Ctrl+Shift: snap to current grid spacing
Vertex snap & weld
- While dragging: near a non-selected vertex, movement can snap so the dragged anchor aligns.
- If you move a single vertex and release exactly onto another vertex position, it auto-welds (merges).
Nudging
- Arrows: nudge on dominant plane
- Shift+Arrows: nudge by 1.0
- Ctrl+Shift+Arrows: nudge by grid spacing
- Ctrl+Arrows: fine nudge
Tools
Line tool — create & divide (C)
- Anchors: selected vertices become anchors; else uses hovered vertex; else
(0,0,0)in current object. - Preview endpoint: computed on dominant plane; snaps to vertices / axes / grid.
- Commit: LMB click (press+release without dragging).
- Single-anchor chain: after a click, anchor moves to last endpoint (polyline drawing).
- Segments (creation): 1/2 −/+ segments; Shift = ±5; Shift+Ctrl = ±10.
- Multi-line mode (multi-anchor): press C again to toggle Star ↔ Parallel.
- Mirror (single-anchor): M toggle mirrored line creation.
- Snapping modifiers inside Line: none=fine • Ctrl=1.0 steps • Shift=grid spacing.
- Edit vertices while active: LMB-drag a nearby vertex to move on dominant plane (mirrors if counterpart exists at exact mirrored position). Release to commit; Esc cancels.
- Divide selected edges: select edges → 1/2 enters divide preview with
n ≥ 2→ Enter or LMB click empty space applies → Esc/RMB cancels. - Esc exits Line tool (also reverts vertex-edit preview).
Rotate tool (R)
- Requires a valid selection (typically ≥2 vertices, or any selected edges). Pivot starts at selected-vertex centroid.
- Stage 1 (pivot): LMB-drag pivot on dominant plane; snaps to nearby vertices; RMB cancels pivot drag; O snaps pivot to world origin; press R again for Stage 2.
- Stage 2 (axis + angle): X/Y/Z choose world axis. Type degrees (supports
/and*, e.g.360/8). Backspace edits typed angle (not undo). Enter apply; Esc cancel.
While Rotate is active (Stage 2), Backspace edits the angle input, so undo/redo resumes normally only after apply/cancel.
Scale tool — scale around a pivot (V)
- Requires: a valid selection (≥1 vertex). Pivot starts at the selected-vertex centroid in world space.
- Stage 1 (pivot): LMB-drag the pivot gizmo on the dominant plane. Pivot snaps to nearby vertices (within a few pixels); hold Shift to snap pivot to the world grid on the dominant plane. O snaps pivot to world origin. Press V again to enter Stage 2. Esc / RMB click (no drag) cancels.
- RMB while pivot-dragging cancels the pivot drag and restores the pivot to where the drag started (without exiting the tool).
- Stage 2 (scale %): type a percentage (e.g.
50= half size,200= double). Backspace edits the typed number. R resets preview to100%. - Interactive scaling: LMB-drag horizontally to scale. Hold Ctrl for fine control. Hold Shift to snap to 5% steps.
- Apply / exit: Enter or release LMB. Cancel: Esc / RMB click (no drag) / V (in Stage 2).
- Scaling is computed in world space around the pivot, then each vertex is transformed back into its owning object’s local space.
Revolve / lathe (L)
- Requires ≥1 selected vertex and selection must be within a single object.
- Defaults: pivot = selection centroid; axis = perpendicular to dominant plane (XY→Z, XZ→Y, YZ→X).
- [/] steps −/+ (Shift=±5, Shift+Ctrl=±10)
- -/= angle −/+ (1° default; Ctrl=5°; Shift=15°)
- X/Y/Z snap axis to world X/Y/Z
- N seam closed/open (wrap only for full 360°; partial turns add an end ring and don’t wrap)
- H toggle ring edges (connect rings along sweep)
- P toggle profile edge copying (edges among selected vertices; uses loose edges whose endpoints are selected)
- K snap pivot to vertex under cursor • E snap pivot to closest point on edge under cursor + set axis from that edge
- Enter apply (selects newly created vertices) • Esc cancel
Bend tool (S)
- Bends a single loose edge into a curved chain (replaces it with multiple segments).
- Edge selection: select exactly one loose edge (recommended). Endpoints must be in the same object.
- Start / cycle modes: press S to start; press S again to cycle: Quad-handle → Quad-mid → Cubic → Arc → exit.
- Shape: move the mouse to position the control/bulge point on the dominant plane; it can snap to vertices or closest points on edges (same object).
- Segments: type digits to set segments (
0–1024); Backspace edits. (0effectively cancels on apply.) - Apply: LMB click (press+release without dragging) • Cancel: RMB click or Esc
- Modifiers:
- Shift: constrain control point to the perpendicular bisector line of the chord
- Ctrl: angle-lock in 45° steps (in-plane)
- Cubic: Alt selects handle (H2) when editing handles; Shift switches to midpoint-bulge cubic
- Arc: D toggle diameter entry (digits +
.), M toggle major arc, Alt flips side
- While Bend is active, normal left-click selection is suppressed (mouse is for shaping/committing).
Circle / Arc tool — create circles & arcs (O)
- Cycle: press O to cycle Circle → Oval → Off.
- Anchor:
- If you have selected vertices: anchor = their centroid (and the new geometry is created in that object).
- If exactly one vertex is selected: anchor = that vertex position (also used to choose the object).
- If nothing is selected: anchor = point under the cursor on the ground plane (
y = 0) when available, otherwise camera target fallback; current object is used.
- Preview target (where the mouse points): snaps to vertices/edges of the same object (within a few pixels). If nothing is close, it falls back to a point on the view plane through the anchor.
- Base radius from mouse: derived from distance anchor→target, with snapping:
- No modifiers: fine steps
- Ctrl: 1.0 steps
- Shift: snap to current grid spacing
- Typed diameter: type digits and
.to set a fixed diameter while the tool is active; Backspace edits the typed value. - Circle vs oval:
- Circle mode: major and minor radii stay equal.
- Oval mode: major and minor radii can differ.
- Editing with the mouse:
- LMB-drag an axis line to scale that axis.
- LMB-drag an axis end to rotate the frame.
- LMB-drag empty space to pan the camera (after a small threshold).
- RMB-drag orbits; in ortho it becomes the momentary “peek orbit” and snaps back on release.
- Keyboard size adjustment:
- ArrowUp/ArrowDown: adjust major radius
- ArrowLeft/ArrowRight: adjust minor radius in Oval mode
- Displayed diameter change per arrow press: none = 0.001, Ctrl = 0.01, Shift = 0.1, Ctrl+Shift = 1.0
- Segments: press S to toggle segment editing; type digits (3–4096). While segment-edit is active, Backspace edits the segment input.
- Arc modes: press A to cycle
OFF → Normal → Inverse → Centerline → OFF.
- When arc mode is ON: type degrees (0–360) to set arc angle; Backspace edits the arc input.
- Normal: sweeps forward from the start direction.
- Inverse: sweeps backward (negative sweep).
- Centerline: arc is centered around the start direction (symmetric).
- 360° behaves like a full closed circle.
- Roll axis (orientation): X/Y/Z toggles the roll reference axis; pressing the same key again returns to Auto. This stabilizes “which way is up” around the radius direction.
- Ground clamp interaction: if Space ground clamp is enabled, circles/arcs are constrained to stay above
y = 0. - Commit: Enter.
- Cancel: RMB click (no drag), Esc, or continue cycling with O until the tool turns off.
- HUD label shows: current mode (CIRCLE/OVAL), diameters, arc degrees + mode (N/I/C), segment count, and roll axis (A/X/Y/Z).
Bevel / chamfer vertices (B)
- Purpose: chamfers selected vertices by cutting back along each connected loose edge (same object), then connecting the cut points around the corner (a closed loop for 3+ incident edges; a single segment for 2-edge corners).
- Start: select one or more vertices, then press B to enter Bevel preview.
- Adjust amount: move the mouse — the bevel distance
tincreases with cursor distance from where you started the tool. - Snapping while adjusting:
- No modifiers: very fine steps
- Alt: snap to
0.001units - Ctrl: snap to
0.1units
- Limits:
tis clamped so cuts don’t pass a neighboring vertex; if two selected corners share an edge, their cuts can meet at the midpoint. - Apply: LMB click or Enter
- Cancel: RMB, Esc, or press B again
- Notes: corners with fewer than 2 same-object edge neighbors are ignored. A small numeric label near the first corner shows the current
t.
Orthographic views & reference pictures
- Shift+O toggle Perspective ↔ Ortho Front
- In ortho: X=Right • Shift+X=Left • Y=Top • Z=Front • Shift+Z=Back
- Drop an image file onto the window/canvas (while in ortho) to load a semi-transparent reference picture for the current ortho view.
- Ctrl+B lock/unlock picture to world space:
- Unlocked: screen-space quad (by default, newly loaded images are reset to fill the viewport)
- Locked: corners pinned in world space (stays anchored as you pan/zoom)
- Unlocking after being locked keeps the current on-screen quad shape/placement (it doesn’t automatically re-fill the viewport).
- Key sharing: if Rotate/Revolve/Circle is active, X/Y/Z control the tool (axis/roll) instead of view switching.
- Tip: Circle uses O (no Shift). Ortho toggle uses Shift+O.
Undo/redo & macros
- Most edits (move/delete/duplicate/create line/rotate/revolve/bend/circle/import/etc.) are recorded as commands.
- Backspace undo • Redo: Shift+Backspace
Macro recorder
- F8 start/stop recording
- F9 play last macro
- Shift+F8 clear last macro + stop recording
OBJ import/export
Web build (wasm32)
- Export: click
⬇(top-right) to downloadwire.obj - Import: click
⬆to upload an OBJ
Parsing rules
- Reads
vas vertices - Reads
las polyline edges - Reads
ffaces and converts them into boundary edges (including closing edge) - Duplicate edges are deduplicated
Tips & troubleshooting
If moving feels wrong
- Moves are constrained to the dominant plane (camera-dependent).
- Orbit a bit (RMB) to change which plane becomes dominant (XY/XZ/YZ).
- Use snapping modifiers: Shift (1.0) / Ctrl+Shift (grid).
If the app feels stuck
- RMB cancels an active drag/pan/preview immediately.
- Esc cancels most tool modes (Line/Rotate/Revolve/Bend/Circle/Divide).
When keys do the “wrong thing”
- X/Y/Z are shared by tools and Ortho switching.
- V is context-sensitive: with a selection it starts Scale; with no selection it can be used for overlay cycling. Rule of thumb: the currently active tool (or active selection tool-mode) wins.
- Rule of thumb: the currently active tool wins.
Performance
- Thick overlays can be expensive — use V to cycle to Thin/Off (when Scale isn’t active / no selection, depending on context).
- Very large meshes may auto-switch to thin overlay during camera movement.
HUD contents
- Grid spacing (9/0) • vertex count • last clicked vertex position
- Ground clamp state (Space) • dominant plane axes
- Tool-specific text while a tool is active (including Circle’s mode/diameter/arc/seg/axis label)