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 • Revolve L • Bend S
- 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 overlay cycle: Off → Thin → Thick → Off
- 9/0 grid spacing −/+ (min 0.1)
- D duplicate selection (selected vertices + selected edges)
- 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
Selection model
- You can select vertices and loose edges (toggle by clicking).
- Move operates on: all selected vertices + both endpoints of any selected edges.
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.
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 straight loose edge into a quadratic Bezier chain (replaces it with multiple segments).
- Use selected edge if exactly one is selected; otherwise uses the last edge clicked/hovered.
- After starting: move mouse to position control point on dominant plane; control point can snap to vertices / points on edges.
- 7/8 segments −/+ (Shift = larger steps).
- Commit: release LMB • Cancel: Esc or RMB
- While Bend is active, normal left-click selection is suppressed (mouse is for shaping/committing).
Orthographic views & reference pictures
- Shift+O toggle Perspective ↔ Ortho Front
- In ortho: X=Right • Y=Top • Z=Front
- 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: fills viewport (screen-space)
- Locked: corners pinned in world space (stays anchored as you pan/zoom)
- Key sharing: if Rotate/Revolve is active, X/Y/Z control the tool axis instead of view switching.
Undo/redo & macros
- Most edits (move/delete/duplicate/create line/rotate/revolve/bend/import/etc.) are recorded as commands.
- Backspace undo • Shift+Backspace redo
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/Divide).
When keys do the “wrong thing”
- X/Y/Z are shared by tools and Ortho switching.
- Rule of thumb: the currently active tool wins.
Performance
- Thick overlays can be expensive — use V to cycle to Thin/Off.
- 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