feat(ui): offer a cube navigator alongside signed axes (#664)
Adds a View navigator preference (Navigation page) with an optional cube navigator alongside the signed axes, which stay the default (#165).
This commit is contained in:
1 parent
aa24d9f071
commit
7b34d57b25
15 files changed
+1344
-93
No files matched your search
@@ -64,7 +64,7 @@ unit regardless of the design, pass an expression with one: `"value": "50 mm"` o
|
||||
| `ui.sketchToScreen` | `points`: `[[x, y]…]` in active-sketch coordinates | their screen points (null when behind the camera) |
|
||||
| `ui.dialogInput` | `index` | what clicking an input's Select chip does: picks go to that input |
|
||||
| `ui.at` | `world: [x,y,z]` \| `sketch: [x,y]` \| `plane: "XY"` \| `axis: "Z"` \| `dimension: "d1"` (its value text) \| `handle: "arrow"` (a manipulator handle, see `scenario::publish_handle`) | the screen point (a scenario step's target; see `crates/ui-egui/src/scenario.rs`) |
|
||||
| `ui.handles` | `prefix?` | the handles drawn last frame, `[{name, x, y}]`: toolbar buttons and drop-down items `toolbar:<command id>` (the button alone: `button:<command id>`; a drop-down row: `dropdown:<command id>`, highlighted `dropdown_hot:<command id>`, its pin `dropdown_pin:<command id>`; Customize Toolbar's check boxes `customize:<command id>`), panel labels `panel:<tab>:<panel>`, browser rows `row:<label>` and fold arrows `fold:<label>`, manipulator handles; orientation tips `axis_view:x`, `axis_view:-x` (and y/z) |
|
||||
| `ui.handles` | `prefix?` | the handles drawn last frame, `[{name, x, y}]`: toolbar buttons and drop-down items `toolbar:<command id>` (the button alone: `button:<command id>`; a drop-down row: `dropdown:<command id>`, highlighted `dropdown_hot:<command id>`, its pin `dropdown_pin:<command id>`; Customize Toolbar's check boxes `customize:<command id>`), panel labels `panel:<tab>:<panel>`, browser rows `row:<label>` and fold arrows `fold:<label>`, manipulator handles; signed-axis tips `axis_view:z`, `axis_view:-y`; optional cube facets `navigation_cube:top`, `navigation_cube:top_front_right`, controls `navigation_cube:control:home` (and other actions), plus signed-axis aliases for visible cube faces; Preferences navigator picker `prefs:navigator`, options `prefs:navigator:Signed axes` and `prefs:navigator:Cube` |
|
||||
| `ui.editFeature` | `feature` (id or name) | what double-clicking a timeline item does: rolls back to it and opens its dialog filled in (sketches open in sketch mode) |
|
||||
| `ui.scroll` | `x`, `y`, `delta?` | wheel zoom at the cursor |
|
||||
| `ui.key` | `key` (egui key name, `Enter`, `Escape`…), `cmd?`, `shift?` | |
|
||||
@@ -99,10 +99,39 @@ channel; see [mcp.md](mcp.md).
|
||||
{"id":5,"method":"ui.screenshot","params":{"path":"/tmp/part.png"}}
|
||||
```
|
||||
|
||||
Preferences → Navigation → View navigator offers **Signed axes** (the original default) and
|
||||
**Cube**. This choice is saved independently of the mouse preset. The control channel selects it
|
||||
with `ui.prefs {"navigator_style":"axes"}` or `ui.prefs {"navigator_style":"cube"}`.
|
||||
Existing settings without this field keep signed axes. Signed-axis tips choose principal views;
|
||||
clicking an aligned tip again reverses the view.
|
||||
|
||||
Hold Shift during an orbit gesture to snap to the nearest standard or diagonal view. This applies to
|
||||
right-drag, the Orbit navigation tool, and dragging the axis view. Under the default preset,
|
||||
Shift+middle also orbits with snapping; middle alone pans. Axis-view tips use world coordinates,
|
||||
regardless of the up-axis preference. Clicking an aligned tip again flips to its opposite.
|
||||
right-drag, the Orbit navigation tool, and dragging either view navigator. Under the default preset,
|
||||
Shift+middle also orbits with snapping; middle alone pans. Cube faces choose principal views,
|
||||
and corners choose isometric views. The middle of each cube edge belongs to its face. Face names
|
||||
follow the up-axis preference; the small X/Y/Z triad shows world axes. Clicking the same face keeps that view.
|
||||
The inward-pointing arrows orbit by 90 degrees; the curved arrows at the upper right roll the
|
||||
view by 90 degrees. The Home button at the upper left returns to isometric and the lower-right circle
|
||||
fits the model.
|
||||
|
||||
The cube is subdued while idle. Hovering its area brightens the cube and navigation bar and
|
||||
reveals the surrounding controls; the picked face or corner gets a pale blue fill and
|
||||
blue outline. Moving away restores the subdued state. Navigation-bar controls also brighten
|
||||
when hovered or when a navigation tool is active.
|
||||
|
||||
The cube has six face targets and eight corner targets, with no edge targets. Corner picking
|
||||
regions lie on the six flat faces, preserving sharp corners with no permanent subdivision
|
||||
lines. Hovering a corner highlights its parts on the adjacent visible faces together.
|
||||
|
||||
The cube widget occupies a compact 112-point square in the viewport corner. A straight-on
|
||||
cube face is approximately 55 points wide; painting and picking scale together. Face labels
|
||||
are stretched vertically. View clicks ease through intermediate orientations when Navigation
|
||||
animated view changes is enabled (the default), at the configured animation speed.
|
||||
|
||||
The cube runs `view.navigate` through the command engine. Programmatic callers pass `camera`
|
||||
and either `direction: [x,y,z]` in the camera's up-axis frame or `action` (`left`, `right`, `up`,
|
||||
`down`, `clockwise`, `counterclockwise`, `home`, `fit`). The result contains `camera` and `fit`;
|
||||
UI callers apply the camera with their animation preference, without editing the design.
|
||||
|
||||
Shift-orbit snapping includes 45-degree edge views and isometric corner views, with a
|
||||
lightly damped spring transition and a small boundary margin to prevent flicker.
|
||||
+8
-3
@@ -1,6 +1,6 @@
|
||||
# Features
|
||||
|
||||
SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solidcraft-cli commands`). **322 commands.** Every command runs the same way from the toolbar, a script, `solidcraft-cli exec <id> '<json>'`, the control channel and MCP; parameters are in the [command reference](book/src/reference/commands.md) (`cargo xtask book`). Status and plans: [ROADMAP](../ROADMAP.md).
|
||||
SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solidcraft-cli commands`). **328 commands.** Every command runs the same way from the toolbar, a script, `solidcraft-cli exec <id> '<json>'`, the control channel and MCP; parameters are in the [command reference](book/src/reference/commands.md) (`cargo xtask book`). Status and plans: [ROADMAP](../ROADMAP.md).
|
||||
|
||||
## Sketch (98)
|
||||
|
||||
@@ -207,7 +207,7 @@ SolidCraft's commands by area, generated by `cargo xtask features` from the comm
|
||||
| Assign Plastic Rule | `plastic.assign_rule` | PLASTIC › SETUP |
|
||||
| List Plastic Rules | `plastic.rules` | – |
|
||||
|
||||
## Components (12)
|
||||
## Components (16)
|
||||
|
||||
| Command | Id | Toolbar |
|
||||
|---|---|---|
|
||||
@@ -223,6 +223,10 @@ SolidCraft's commands by area, generated by `cargo xtask features` from the comm
|
||||
| Paste New | `component.paste_new` | – |
|
||||
| Capture Position | `component.capture_position` | SOLID › POSITION |
|
||||
| Revert Position | `component.revert_position` | SOLID › POSITION |
|
||||
| Insert Design | `component.insert_design` | – |
|
||||
| Update Links | `component.update_links` | – |
|
||||
| Break Link | `component.break_link` | – |
|
||||
| List Links | `component.links` | – |
|
||||
|
||||
## Assembly joints (11)
|
||||
|
||||
@@ -490,7 +494,7 @@ SolidCraft's commands by area, generated by `cargo xtask features` from the comm
|
||||
|---|---|---|
|
||||
| Delete | `selection.delete` | – |
|
||||
|
||||
## `view.*` (5)
|
||||
## `view.*` (6)
|
||||
|
||||
| Command | Id | Toolbar |
|
||||
|---|---|---|
|
||||
@@ -499,3 +503,4 @@ SolidCraft's commands by area, generated by `cargo xtask features` from the comm
|
||||
| Delete Named View | `view.delete` | – |
|
||||
| List Named Views | `view.list` | – |
|
||||
| Restore Named View | `view.apply` | – |
|
||||
| Navigate View | `view.navigate` | – |
|
||||
Reference in new issue
Block a user