UI Prototype — overview¶
Status: PROPOSED
This section documents the planned NPS UI contract in
docs/ui/ui-plan.md:18–350. Nothing described here is implemented unless it
is explicitly tagged HOW IT IS and carries a file:line citation.
Open the mockup locally¶
PROPOSED — the mockup lives at docs/ui/mockup/index.html in the repository.
Open that file locally in a browser. It is a design aid and is not deployed
with this guide.
Three stages¶
PROPOSED — the primary navigation is a titlebar stage switcher:
flowchart LR
P["Prepare<br/>model · profiles · non-planar setup"] --> V["Preview<br/>layers · color-by · compare"]
V --> S["Simulate<br/>playback · findings triage"]
S --> P
| Stage | Primary job | Default inspector | Main action |
|---|---|---|---|
| PROPOSED · Prepare | Load a model, select profiles, configure non-planar and demo process controls | Regions or Activity | Slice / Re-slice |
| PROPOSED · Preview | Inspect the resulting toolpath by layer, move, class, and scalar field | Overlays | Compare, inspect, export |
| PROPOSED · Simulate | Play the path, stop at findings, and verify fixes | Playback | Triage and step through findings |
Changing stage changes the left-sidebar stack, viewport painter set, and default inspector tab as one unit. It does not discard loaded model, toolpath, analysis, or camera state.
Stages are orthogonal to ProductMode¶
PROPOSED — stage answers what task am I doing? ProductMode answers which product launched? They are independent:
| ProductMode | Default stage | Prepare behavior | Preview | Simulate |
|---|---|---|---|---|
| Slicer | Prepare | Full profiles, plate, non-planar, and Process groups | Full | Full |
| Simulator | Simulate | Reduced loaders and read-only mesh information; Process collapsed with a “configure in Slicer mode” hint | Full for parsed G-code | Full |
HOW IT IS — there are still two executables. Slicer hides playback
(src/SlicerApp/MainWindow.axaml:20,93–94); Simulator mounts the playback
panel (src/SimulatorApp/MainWindow.axaml:62). The SLICER / SIMULATOR
ProductMode chip is a visible seam for a later IProductMode, not a claim that
one-binary mode switching exists.
Planned shell map¶
┌ titlebar: app + stage switcher + ProductMode + ABI + Slice + Export ┐
├──────────────┬───────────────────────────┬────┬─────────────────────┤
│ stage-aware │ viewport │bar │ inspector │
│ left sidebar│ toolbar + painters │ │ Overlays / Findings │
│ │ layer or move scrubber │ │ Playback / Regions │
│ │ HUD / toast / empty state │ │ Activity │
├──────────────┴───────────────────────────┴────┴─────────────────────┤
│ status + DEMO TOOLPATH + findings summary + estimates + engine/ABI │
└─────────────────────────────────────────────────────────────────────┘
HOW IT IS — the shared shell already supplies title, left region, viewport,
right activity bar/inspector, splitters, and status region
(src/Nps.Shell/Controls/MainWindowShell.axaml:12–33,35–113). The stage host,
extra tabs, badges, banners, and dialogs below are PROPOSED.
Element status legend¶
| Label | Meaning in this section |
|---|---|
| HOW IT IS · exists | The named surface exists now; the row cites code. |
| PROPOSED · extend | A current surface remains but changes role, placement, or behavior. |
| PROPOSED · new | A planned UI surface or additive engine/host hook. |
| PROPOSED · deferred | Intentionally withheld until its prerequisite design/export exists. |
Full element map¶
The numbers match the design contract’s element master list
(docs/ui/ui-plan.md:153–273). Follow the page links for behavior and honesty
labels.
Titlebar and Prepare¶
| # | Element | Status | Destination |
|---|---|---|---|
| 1 | App title with current stage | PROPOSED · extend | This page |
| 2 | Stage switcher | PROPOSED · new | This page |
| 3 | ProductMode chip | PROPOSED · new | This page |
| 4 | Engine / ABI status chip | PROPOSED · new | Honesty |
| 5 | Slice / Re-slice CTA | PROPOSED · extend | Prepare |
| 6 | Export G-code CTA | PROPOSED · new | Preview |
| 7 | Dirty-settings banner | PROPOSED · new | Preview |
| 8 | File menu | PROPOSED · new | Prepare |
| 9 | Printer profile chip | PROPOSED · new | Profiles |
| 10 | Filament profile chip | PROPOSED · new | Profiles |
| 11 | Process profile chip | PROPOSED · new | Profiles |
| 12 | Plate/object list | PROPOSED · new | Prepare |
| 13 | Mesh information label | HOW IT IS · exists (src/SlicerApp/MainWindow.axaml:69) |
Prepare |
| 14 | Palette chips | PROPOSED · new | Prepare |
| 15 | Non-Planar panel | PROPOSED · new | Non-Planar |
| 16 | Non-Planar Enable | PROPOSED · extend | Non-Planar |
| 17 | Maximum surface angle | PROPOSED · new | Non-Planar |
| 18 | Maximum amplitude | PROPOSED · new | Non-Planar |
| 19 | Thickness envelope | PROPOSED · new | Non-Planar |
| 20 | Collision radius / height | PROPOSED · new | Non-Planar |
| 21 | Detection mode | PROPOSED · new | Non-Planar |
| 22 | Seam policy | PROPOSED · new | Non-Planar |
| 23 | Detect regions | PROPOSED · new | Non-Planar |
| 24 | Paint regions | PROPOSED · new | Non-Planar |
| 25 | Per-region overrides | PROPOSED · new | Non-Planar |
| 26 | Process group | PROPOSED · extend | Prepare |
| 27 | Load model | PROPOSED · extend | Prepare |
| 28 | Load G-code | HOW IT IS · exists (src/SlicerApp/MainWindow.axaml:60–63) |
Prepare |
| 29 | Warp-grid label | HOW IT IS · exists (src/SlicerApp/MainWindow.axaml:70) |
Prepare |
Preview, Simulate, and viewport¶
| # | Element | Status | Destination |
|---|---|---|---|
| 30 | Dual-range layer slider | PROPOSED · extend | Preview |
| 31 | Layer label | HOW IT IS · exists (src/SlicerApp/MainWindow.axaml:27–28) |
Preview |
| 32 | Display toggles | PROPOSED · new | Preview |
| 33 | Interactive legend | PROPOSED · extend | Preview |
| 34 | Statistics HUD | PROPOSED · new | Preview |
| 35 | Time / move scrub slider | PROPOSED · extend | Preview |
| 36 | Mesh-underlay toggle | PROPOSED · new | Simulate |
| 37 | Warp-deform toggle | PROPOSED · new | Simulate |
| 38 | Findings summary bar | PROPOSED · new | Simulate |
| 39 | Viewport canvas | HOW IT IS · exists (src/SlicerApp/MainWindow.axaml:74–80) |
Stage pages |
| 40 | Orbit / pan gestures | HOW IT IS · exists (src/SlicerApp/MainWindow.axaml.cs:813–846) |
Keyboard |
| 41 | Wheel zoom | PROPOSED · new | Keyboard |
| 42 | Paint / erase brush gesture | PROPOSED · new | Non-Planar |
| 43 | Region-mask overlay | PROPOSED · new | Non-Planar |
| 44 | Non-planar amplitude heatmap | PROPOSED · new | Non-Planar |
| 45 | Collision-risk overlay | PROPOSED · new | Non-Planar |
| 46 | Ghost compare | PROPOSED · new | Preview |
| 47 | Finding markers | HOW IT IS · exists (src/Nps.Shell/Controls/GcodeToolpathPainter.cs:136–138,214) |
Simulate |
| 48 | Mesh underlay painter | PROPOSED · extend | Simulate |
| 49 | Keybinding cheat sheet | PROPOSED · new | Keyboard |
| 50 | Per-stage empty state | PROPOSED · new | Stage pages |
| 51 | Post-slice offer toast | PROPOSED · new | Preview |
Toolbar, inspector, status, and dialogs¶
| # | Element | Status | Destination |
|---|---|---|---|
| 52 | Existing ten-control viewport toolbar | HOW IT IS · exists (src/Nps.Shell/Controls/ViewportToolbar.cs:29–38,53–67) |
Preview |
| 53 | Color-by dropdown | PROPOSED · new | Preview |
| 54 | Paint toolbar toggle | PROPOSED · new | Non-Planar |
| 55 | Ghost toolbar toggle | PROPOSED · new | Preview |
| 56 | Clip-plane slider | PROPOSED · new | Preview |
| 57 | Object transform strip | PROPOSED · new | Prepare |
| 58 | Overlays tab extension | PROPOSED · extend | Preview |
| 59 | Findings tab extension | PROPOSED · extend | Simulate |
| 60 | Playback tab stage visibility | PROPOSED · extend | Simulate |
| 61 | Regions tab | PROPOSED · new | Non-Planar |
| 62 | Activity tab | PROPOSED · new | Honesty |
| 63 | Inferred metadata block | PROPOSED · new | Profiles |
| 64 | Status text | HOW IT IS · exists (src/Nps.Shell/Controls/MainWindowShell.axaml.cs:90–96) |
Honesty |
| 65 | DEMO TOOLPATH badge | PROPOSED · new | Honesty |
| 66 | Findings-summary chips | PROPOSED · new | Simulate |
| 67 | Engine / ABI readout | PROPOSED · new | Honesty |
| 68 | Time / filament estimates | PROPOSED · new | Preview |
| 69 | Profile picker | PROPOSED · new | Profiles |
| 70 | Export dialog | PROPOSED · new | Honesty |
| 71 | Model file picker | PROPOSED · extend | Prepare |
| 72 | Determinate slice-progress dialog | PROPOSED · deferred | No fake progress until async slice / poll / cancel and a threading decision exist. |
See also¶
- Prepare, Preview, and Simulate for the stage tours.
- Slicer — interaction map for the current Slicer UI.
- Simulator — interaction map for current playback and mesh behavior.