Skip to content

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

Open the UI mockup

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