Files
OrcaSlicer/docs/ux/offer_atlas.html
T
Tommaso Bianchi eb2fc986a4 docs/ux: the offer atlas — every tool, every state, drawn
The charter fixed the slot-constancy invariant but carried one hand-written
eight-cell table as an illustration, and nothing of the offer exists in the
product. Before any GUI code, the group needs the map itself: what verbs there
are, what each one needs before it can be offered, and what the ring actually
looks like in every situation a user can put it in.

tool_atlas.json is the source of truth and it was extracted from the code, not
from memory: verbs, shortcuts and the exact refusal strings from DesignPanel's
six feat_dropdown call sites and the sk_key table, kernel coverage checked
against CadFeatureType, headless coverage against McpControl's dispatch, and
the selection kinds taken from the callbacks DesignCanvas actually exposes. It
carries each verb's preconditions, so "why is that slot empty" has an answer
already written in the product's own words. The eventual C++ table generates
from this file too — the map exists once.

gen_offer_mockups.py renders it: 20 selection kinds x 2 document states = 40
primary rings, plus 73 sub-rings, plus comparison sheets. 113 states, none of
them hand-drawn, because a human drawing 113 rings is exactly how an address
quietly changes. Everything is framed at 1366x768, the charter's own reach
target, so L11 is tested in the mockups before it is tested in code.

Three things the drawing found that the prose had not:

- MEAN FILL IS 3.45 OF 8. The empty-slot rule is cheap in argument and
  expensive on screen; on a fresh document exactly two slots are live. That
  picture is the anti-clutter thesis made literal and it is the strongest image
  in the set.
- SUB-RINGS MUST ANCHOR ON THEIR PARENT. Fanning them from north put Extrude at
  N, which is Create's address in the primary map, so the second level
  contradicted the first. Anchored, an address is two consistent strokes: Add
  material is NE and its first verb is NE again.
- ONE FAMILY OVERFLOWS, AND ONLY ONE. Sketch-mode Create needs nine addresses
  on an eight-slot ring. That is the ninth-position pressure the charter
  predicted, arriving on schedule and measured rather than argued: either Point
  moves family, or the tail goes to a third level, or the ring is not eight.
  Every model-mode family fits. The generator refuses to wrap a tenth verb onto
  a first — silent collision is the one outcome worse than an ugly ring — and
  reports the overflow instead.

Also fixed while looking at renders: the selection pill sat on top of the north
slot's shortcut chip and hid it, and the scrim at 0.55 swallowed the very face
the ring had been opened on, which is 4.1 failing inside its own mockup.

Fork-neutral: the generator and everything it emits name no product, so both
forks carry byte-identical copies.

snaporca-2is.
2026-07-31 11:40:45 +02:00

69 lines
33 KiB
HTML

<!doctype html><meta charset="utf-8"><title>Design tab — offer atlas</title>
<style>
:root{color-scheme:dark;--bg:#15181c;--panel:#1c2026;--line:#2c323a;--tx:#e7ecf1;--mu:#93a0ad;--ac:#4f9bd9}
body{margin:0;background:var(--bg);color:var(--tx);font:15px/1.55 Inter,system-ui,sans-serif}
header{padding:38px 40px 22px;border-bottom:1px solid var(--line)}
h1{margin:0 0 6px;font-size:26px;letter-spacing:-.02em}
h2{margin:38px 0 12px;font-size:18px} p{color:var(--mu);max-width:78ch}
main{padding:0 40px 60px}
.stats{display:flex;gap:14px;flex-wrap:wrap;margin:18px 0 6px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 16px;min-width:130px}
.stat b{display:block;font-size:24px} .stat span{color:var(--mu);font-size:12px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(430px,1fr));gap:18px}
figure{margin:0;background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden}
figure img{width:100%;display:block}
figcaption{padding:9px 13px;font-size:13px;color:var(--mu);border-top:1px solid var(--line)}
table{border-collapse:collapse;width:100%;font-size:13px;margin-top:10px}
th,td{border-bottom:1px solid var(--line);padding:7px 10px;text-align:left;vertical-align:top}
th{color:var(--mu);font-weight:500} td.n{text-align:right;font-variant-numeric:tabular-nums}
td.d{color:var(--mu);font-size:12px}
.wrap{overflow-x:auto}
</style>
<header>
<h1>The offer — atlas of every state</h1>
<p>Every state of the object-driven tool offer, generated from
<code>docs/ux/tool_atlas.json</code>. The invariant under test: a verb has one address, that
address is the same in every selection where it appears, and slots that do not apply are drawn
empty rather than compacted.</p>
<div class="stats">
<div class="stat"><b>60</b><span>verbs mapped</span></div>
<div class="stat"><b>20</b><span>selection kinds</span></div>
<div class="stat"><b>40</b><span>primary rings</span></div>
<div class="stat"><b>73</b><span>secondary rings</span></div>
<div class="stat"><b>113</b><span>states total</span></div>
<div class="stat"><b>3.5/8</b><span>mean slots filled</span></div>
<div class="stat"><b>6</b><span>verbs with no GUI yet</span></div>
</div>
</header>
<main>
<h2>Decision 1 — ring capacity</h2>
<p>The same three selections at eight and at twelve. Eight keeps 45° between neighbours, which is
the reliable eyes-free pointing threshold and maps 1:1 to the numpad; twelve buys direct addresses
for more verbs at 30° spacing and positions that stop being nameable.</p>
<div class="grid"><figure><img src="mockups/cmp_8__face_planar.svg" loading="lazy"><figcaption>8 slots — face_planar</figcaption></figure><figure><img src="mockups/cmp_8__edge_str.svg" loading="lazy"><figcaption>8 slots — edge_str</figcaption></figure><figure><img src="mockups/cmp_8__sk_line.svg" loading="lazy"><figcaption>8 slots — sk_line</figcaption></figure></div>
<div class="grid" style="margin-top:18px"><figure><img src="mockups/cmp_12__face_planar.svg" loading="lazy"><figcaption>12 slots — face_planar</figcaption></figure><figure><img src="mockups/cmp_12__edge_str.svg" loading="lazy"><figcaption>12 slots — edge_str</figcaption></figure><figure><img src="mockups/cmp_12__sk_line.svg" loading="lazy"><figcaption>12 slots — sk_line</figcaption></figure></div>
<h2>Decision 2 — one map or one per mode</h2>
<p>These renders use ONE shared map: sketch verbs occupy the same eight families as model verbs,
so dress-up is south-east whether you picked a solid edge or a sketch line. Compare the sketch-mode
states below against the model-mode ones — if a verb that exists in both modes ever appears at two
addresses, the shared map has failed and the split map is the answer.</p>
<h2>The matrix — every selection, every document state</h2>
<div class="wrap"><table>
<tr><th>Selection</th><th>Document</th><th>Verbs</th><th>Slots</th><th>2nd rings</th><th>What lands where</th></tr>
<tr><td>Nothing selected</td><td>Working document</td><td class="n">5</td><td class="n">2/8</td><td class="n">1</td><td class="d">create: Sketch · reference: Plane, Axis, Coord Sys, Helix</td></tr><tr><td>Planar face</td><td>Working document</td><td class="n">18</td><td class="n">8/8</td><td class="n">6</td><td class="d">create: Sketch · add: Extrude, Thicken · remove: Hole, Shell · dressup: Fillet, Chamfer, Draft · repeat: Pattern · transform: Mate, Align to · reference: Plane, Axis, Coord Sys, Project, Measure · modify: Edit, Delete Face</td></tr><tr><td>Cylindrical face</td><td>Working document</td><td class="n">6</td><td class="n">3/8</td><td class="n">2</td><td class="d">remove: Thread · reference: Axis, Helix, Measure · modify: Edit, Delete Face</td></tr><tr><td>Curved face</td><td>Working document</td><td class="n">5</td><td class="n">4/8</td><td class="n">1</td><td class="d">add: Thicken · dressup: Draft · reference: Measure · modify: Edit, Delete Face</td></tr><tr><td>Straight edge</td><td>Working document</td><td class="n">6</td><td class="n">3/8</td><td class="n">2</td><td class="d">dressup: Fillet, Chamfer · repeat: Pattern on Curve · reference: Plane, Axis, Measure</td></tr><tr><td>Circular edge</td><td>Working document</td><td class="n">4</td><td class="n">3/8</td><td class="n">1</td><td class="d">remove: Thread · dressup: Fillet, Chamfer · reference: Measure</td></tr><tr><td>Vertex</td><td>Working document</td><td class="n">4</td><td class="n">1/8</td><td class="n">1</td><td class="d">reference: Plane, Axis, Coord Sys, Measure</td></tr><tr><td>Solid body</td><td>Working document</td><td class="n">15</td><td class="n">6/8</td><td class="n">5</td><td class="d">remove: Shell, Cut, Split · dressup: Fillet, Chamfer · repeat: Pattern, Mirror, Pattern on Curve · transform: Move · reference: Project, Measure, Mass · modify: Edit, Colour, Delete</td></tr><tr><td>Sheet body</td><td>Working document</td><td class="n">7</td><td class="n">5/8</td><td class="n">1</td><td class="d">add: Thicken Surface · dressup: Surface Offset · transform: Move · reference: Measure · modify: Edit, Colour, Delete</td></tr><tr><td>Two bodies</td><td>Working document</td><td class="n">5</td><td class="n">4/8</td><td class="n">1</td><td class="d">add: Combine · transform: Mate · reference: Measure, Interference · modify: Delete</td></tr><tr><td>Datum plane</td><td>Working document</td><td class="n">9</td><td class="n">5/8</td><td class="n">3</td><td class="d">create: Sketch · remove: Hole, Cut · repeat: Mirror · reference: Plane, Helix, Project · modify: Edit, Delete</td></tr><tr><td>Datum axis</td><td>Working document</td><td class="n">2</td><td class="n">1/8</td><td class="n">1</td><td class="d">modify: Edit, Delete</td></tr><tr><td>Coordinate system</td><td>Working document</td><td class="n">3</td><td class="n">2/8</td><td class="n">1</td><td class="d">transform: Mate · modify: Edit, Delete</td></tr><tr><td>Text / imported art</td><td>Working document</td><td class="n">4</td><td class="n">3/8</td><td class="n">1</td><td class="d">repeat: Pattern · transform: Move · modify: Edit, Delete</td></tr><tr><td>Closed sketch loop</td><td>Working document</td><td class="n">11</td><td class="n">3/8</td><td class="n">2</td><td class="d">add: Extrude, Revolve, Sweep, Loft, Surface Extrude, Surface Revolve, Surface Loft, Surface Fill · repeat: Pattern · modify: Edit, Delete</td></tr><tr><td>Sketch, nothing picked</td><td>Working document</td><td class="n">11</td><td class="n">2/8</td><td class="n">2</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · reference: Dimension, Construction</td></tr><tr><td>Sketch line</td><td>Working document</td><td class="n">20</td><td class="n">8/8</td><td class="n">4</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete</td></tr><tr><td>Sketch arc or circle</td><td>Working document</td><td class="n">18</td><td class="n">7/8</td><td class="n">3</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete</td></tr><tr><td>Sketch point</td><td>Working document</td><td class="n">13</td><td class="n">4/8</td><td class="n">2</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · transform: Move · reference: Dimension, Constrain · modify: Delete</td></tr><tr><td>Two sketch entities</td><td>Working document</td><td class="n">20</td><td class="n">8/8</td><td class="n">4</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete</td></tr><tr><td>Nothing selected</td><td>Fresh document</td><td class="n">5</td><td class="n">2/8</td><td class="n">1</td><td class="d">create: Sketch · reference: Plane, Axis, Coord Sys, Helix</td></tr><tr><td>Planar face</td><td>Fresh document</td><td class="n">7</td><td class="n">4/8</td><td class="n">1</td><td class="d">create: Sketch · add: Extrude · reference: Plane, Axis, Coord Sys, Measure · modify: Edit</td></tr><tr><td>Cylindrical face</td><td>Fresh document</td><td class="n">4</td><td class="n">2/8</td><td class="n">1</td><td class="d">reference: Axis, Helix, Measure · modify: Edit</td></tr><tr><td>Curved face</td><td>Fresh document</td><td class="n">2</td><td class="n">2/8</td><td class="n">0</td><td class="d">reference: Measure · modify: Edit</td></tr><tr><td>Straight edge</td><td>Fresh document</td><td class="n">3</td><td class="n">1/8</td><td class="n">1</td><td class="d">reference: Plane, Axis, Measure</td></tr><tr><td>Circular edge</td><td>Fresh document</td><td class="n">1</td><td class="n">1/8</td><td class="n">0</td><td class="d">reference: Measure</td></tr><tr><td>Vertex</td><td>Fresh document</td><td class="n">4</td><td class="n">1/8</td><td class="n">1</td><td class="d">reference: Plane, Axis, Coord Sys, Measure</td></tr><tr><td>Solid body</td><td>Fresh document</td><td class="n">3</td><td class="n">2/8</td><td class="n">1</td><td class="d">reference: Measure · modify: Edit, Delete</td></tr><tr><td>Sheet body</td><td>Fresh document</td><td class="n">3</td><td class="n">2/8</td><td class="n">1</td><td class="d">reference: Measure · modify: Edit, Delete</td></tr><tr><td>Two bodies</td><td>Fresh document</td><td class="n">2</td><td class="n">2/8</td><td class="n">0</td><td class="d">reference: Measure · modify: Delete</td></tr><tr><td>Datum plane</td><td>Fresh document</td><td class="n">5</td><td class="n">3/8</td><td class="n">2</td><td class="d">create: Sketch · reference: Plane, Helix · modify: Edit, Delete</td></tr><tr><td>Datum axis</td><td>Fresh document</td><td class="n">2</td><td class="n">1/8</td><td class="n">1</td><td class="d">modify: Edit, Delete</td></tr><tr><td>Coordinate system</td><td>Fresh document</td><td class="n">2</td><td class="n">1/8</td><td class="n">1</td><td class="d">modify: Edit, Delete</td></tr><tr><td>Text / imported art</td><td>Fresh document</td><td class="n">2</td><td class="n">1/8</td><td class="n">1</td><td class="d">modify: Edit, Delete</td></tr><tr><td>Closed sketch loop</td><td>Fresh document</td><td class="n">7</td><td class="n">2/8</td><td class="n">2</td><td class="d">add: Extrude, Revolve, Surface Extrude, Surface Revolve, Surface Fill · modify: Edit, Delete</td></tr><tr><td>Sketch, nothing picked</td><td>Fresh document</td><td class="n">11</td><td class="n">2/8</td><td class="n">2</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · reference: Dimension, Construction</td></tr><tr><td>Sketch line</td><td>Fresh document</td><td class="n">20</td><td class="n">8/8</td><td class="n">4</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete</td></tr><tr><td>Sketch arc or circle</td><td>Fresh document</td><td class="n">18</td><td class="n">7/8</td><td class="n">3</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete</td></tr><tr><td>Sketch point</td><td>Fresh document</td><td class="n">13</td><td class="n">4/8</td><td class="n">2</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · transform: Move · reference: Dimension, Constrain · modify: Delete</td></tr><tr><td>Two sketch entities</td><td>Fresh document</td><td class="n">20</td><td class="n">8/8</td><td class="n">4</td><td class="d">create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete</td></tr>
</table></div>
<h2>Overflow — the one place eight slots is not enough</h2>
<p>Measured, not predicted: the <b>create</b> sub-ring needs 10 addresses, so Polygon, Point are pushed behind a “More” slot. This is the decision the ring size actually turns on — either a verb moves to another family, or the tail goes to a third level, or the ring is not eight. It affects sketch mode only; every model-mode family fits.</p>
<h2>Not in the offer</h2>
<p>Import STEP, Import mesh, Text, SVG, Export STEP, Commit to Plate, Undo, Redo, Variables, Section view, Origin planes, World axes — these act on the document, not on a selection,
so they stay in chrome. Verbs with kernel support but no GUI today, which still hold an address:
Split, Pattern on Curve, Align to, Measure, Mass, Interference.</p>
<h2>All states</h2>
<div class="grid"><figure><img src="mockups/rich__none.svg" alt="Nothing selected — Working document" loading="lazy"><figcaption>Nothing selected — Working document</figcaption></figure><figure><img src="mockups/rich__none__reference.svg" alt="Nothing selected — Reference ring" loading="lazy"><figcaption>Nothing selected — Reference ring</figcaption></figure><figure><img src="mockups/rich__face_planar.svg" alt="Planar face — Working document" loading="lazy"><figcaption>Planar face — Working document</figcaption></figure><figure><img src="mockups/rich__face_planar__add.svg" alt="Planar face — Add material ring" loading="lazy"><figcaption>Planar face — Add material ring</figcaption></figure><figure><img src="mockups/rich__face_planar__remove.svg" alt="Planar face — Remove ring" loading="lazy"><figcaption>Planar face — Remove ring</figcaption></figure><figure><img src="mockups/rich__face_planar__dressup.svg" alt="Planar face — Dress-up ring" loading="lazy"><figcaption>Planar face — Dress-up ring</figcaption></figure><figure><img src="mockups/rich__face_planar__transform.svg" alt="Planar face — Transform ring" loading="lazy"><figcaption>Planar face — Transform ring</figcaption></figure><figure><img src="mockups/rich__face_planar__reference.svg" alt="Planar face — Reference ring" loading="lazy"><figcaption>Planar face — Reference ring</figcaption></figure><figure><img src="mockups/rich__face_planar__modify.svg" alt="Planar face — Modify ring" loading="lazy"><figcaption>Planar face — Modify ring</figcaption></figure><figure><img src="mockups/rich__face_cyl.svg" alt="Cylindrical face — Working document" loading="lazy"><figcaption>Cylindrical face — Working document</figcaption></figure><figure><img src="mockups/rich__face_cyl__reference.svg" alt="Cylindrical face — Reference ring" loading="lazy"><figcaption>Cylindrical face — Reference ring</figcaption></figure><figure><img src="mockups/rich__face_cyl__modify.svg" alt="Cylindrical face — Modify ring" loading="lazy"><figcaption>Cylindrical face — Modify ring</figcaption></figure><figure><img src="mockups/rich__face_other.svg" alt="Curved face — Working document" loading="lazy"><figcaption>Curved face — Working document</figcaption></figure><figure><img src="mockups/rich__face_other__modify.svg" alt="Curved face — Modify ring" loading="lazy"><figcaption>Curved face — Modify ring</figcaption></figure><figure><img src="mockups/rich__edge_str.svg" alt="Straight edge — Working document" loading="lazy"><figcaption>Straight edge — Working document</figcaption></figure><figure><img src="mockups/rich__edge_str__dressup.svg" alt="Straight edge — Dress-up ring" loading="lazy"><figcaption>Straight edge — Dress-up ring</figcaption></figure><figure><img src="mockups/rich__edge_str__reference.svg" alt="Straight edge — Reference ring" loading="lazy"><figcaption>Straight edge — Reference ring</figcaption></figure><figure><img src="mockups/rich__edge_circ.svg" alt="Circular edge — Working document" loading="lazy"><figcaption>Circular edge — Working document</figcaption></figure><figure><img src="mockups/rich__edge_circ__dressup.svg" alt="Circular edge — Dress-up ring" loading="lazy"><figcaption>Circular edge — Dress-up ring</figcaption></figure><figure><img src="mockups/rich__vertex.svg" alt="Vertex — Working document" loading="lazy"><figcaption>Vertex — Working document</figcaption></figure><figure><img src="mockups/rich__vertex__reference.svg" alt="Vertex — Reference ring" loading="lazy"><figcaption>Vertex — Reference ring</figcaption></figure><figure><img src="mockups/rich__body_solid.svg" alt="Solid body — Working document" loading="lazy"><figcaption>Solid body — Working document</figcaption></figure><figure><img src="mockups/rich__body_solid__remove.svg" alt="Solid body — Remove ring" loading="lazy"><figcaption>Solid body — Remove ring</figcaption></figure><figure><img src="mockups/rich__body_solid__dressup.svg" alt="Solid body — Dress-up ring" loading="lazy"><figcaption>Solid body — Dress-up ring</figcaption></figure><figure><img src="mockups/rich__body_solid__repeat.svg" alt="Solid body — Repeat ring" loading="lazy"><figcaption>Solid body — Repeat ring</figcaption></figure><figure><img src="mockups/rich__body_solid__reference.svg" alt="Solid body — Reference ring" loading="lazy"><figcaption>Solid body — Reference ring</figcaption></figure><figure><img src="mockups/rich__body_solid__modify.svg" alt="Solid body — Modify ring" loading="lazy"><figcaption>Solid body — Modify ring</figcaption></figure><figure><img src="mockups/rich__body_sheet.svg" alt="Sheet body — Working document" loading="lazy"><figcaption>Sheet body — Working document</figcaption></figure><figure><img src="mockups/rich__body_sheet__modify.svg" alt="Sheet body — Modify ring" loading="lazy"><figcaption>Sheet body — Modify ring</figcaption></figure><figure><img src="mockups/rich__bodies_2.svg" alt="Two bodies — Working document" loading="lazy"><figcaption>Two bodies — Working document</figcaption></figure><figure><img src="mockups/rich__bodies_2__reference.svg" alt="Two bodies — Reference ring" loading="lazy"><figcaption>Two bodies — Reference ring</figcaption></figure><figure><img src="mockups/rich__datum_plane.svg" alt="Datum plane — Working document" loading="lazy"><figcaption>Datum plane — Working document</figcaption></figure><figure><img src="mockups/rich__datum_plane__remove.svg" alt="Datum plane — Remove ring" loading="lazy"><figcaption>Datum plane — Remove ring</figcaption></figure><figure><img src="mockups/rich__datum_plane__reference.svg" alt="Datum plane — Reference ring" loading="lazy"><figcaption>Datum plane — Reference ring</figcaption></figure><figure><img src="mockups/rich__datum_plane__modify.svg" alt="Datum plane — Modify ring" loading="lazy"><figcaption>Datum plane — Modify ring</figcaption></figure><figure><img src="mockups/rich__datum_axis.svg" alt="Datum axis — Working document" loading="lazy"><figcaption>Datum axis — Working document</figcaption></figure><figure><img src="mockups/rich__datum_axis__modify.svg" alt="Datum axis — Modify ring" loading="lazy"><figcaption>Datum axis — Modify ring</figcaption></figure><figure><img src="mockups/rich__coordsys.svg" alt="Coordinate system — Working document" loading="lazy"><figcaption>Coordinate system — Working document</figcaption></figure><figure><img src="mockups/rich__coordsys__modify.svg" alt="Coordinate system — Modify ring" loading="lazy"><figcaption>Coordinate system — Modify ring</figcaption></figure><figure><img src="mockups/rich__art.svg" alt="Text / imported art — Working document" loading="lazy"><figcaption>Text / imported art — Working document</figcaption></figure><figure><img src="mockups/rich__art__modify.svg" alt="Text / imported art — Modify ring" loading="lazy"><figcaption>Text / imported art — Modify ring</figcaption></figure><figure><img src="mockups/rich__sk_loop.svg" alt="Closed sketch loop — Working document" loading="lazy"><figcaption>Closed sketch loop — Working document</figcaption></figure><figure><img src="mockups/rich__sk_loop__add.svg" alt="Closed sketch loop — Add material ring" loading="lazy"><figcaption>Closed sketch loop — Add material ring</figcaption></figure><figure><img src="mockups/rich__sk_loop__modify.svg" alt="Closed sketch loop — Modify ring" loading="lazy"><figcaption>Closed sketch loop — Modify ring</figcaption></figure><figure><img src="mockups/rich__sk_none.svg" alt="Sketch, nothing picked — Working document" loading="lazy"><figcaption>Sketch, nothing picked — Working document</figcaption></figure><figure><img src="mockups/rich__sk_none__create.svg" alt="Sketch, nothing picked — Create ring" loading="lazy"><figcaption>Sketch, nothing picked — Create ring</figcaption></figure><figure><img src="mockups/rich__sk_none__reference.svg" alt="Sketch, nothing picked — Reference ring" loading="lazy"><figcaption>Sketch, nothing picked — Reference ring</figcaption></figure><figure><img src="mockups/rich__sk_line.svg" alt="Sketch line — Working document" loading="lazy"><figcaption>Sketch line — Working document</figcaption></figure><figure><img src="mockups/rich__sk_line__create.svg" alt="Sketch line — Create ring" loading="lazy"><figcaption>Sketch line — Create ring</figcaption></figure><figure><img src="mockups/rich__sk_line__dressup.svg" alt="Sketch line — Dress-up ring" loading="lazy"><figcaption>Sketch line — Dress-up ring</figcaption></figure><figure><img src="mockups/rich__sk_line__reference.svg" alt="Sketch line — Reference ring" loading="lazy"><figcaption>Sketch line — Reference ring</figcaption></figure><figure><img src="mockups/rich__sk_line__modify.svg" alt="Sketch line — Modify ring" loading="lazy"><figcaption>Sketch line — Modify ring</figcaption></figure><figure><img src="mockups/rich__sk_arc.svg" alt="Sketch arc or circle — Working document" loading="lazy"><figcaption>Sketch arc or circle — Working document</figcaption></figure><figure><img src="mockups/rich__sk_arc__create.svg" alt="Sketch arc or circle — Create ring" loading="lazy"><figcaption>Sketch arc or circle — Create ring</figcaption></figure><figure><img src="mockups/rich__sk_arc__reference.svg" alt="Sketch arc or circle — Reference ring" loading="lazy"><figcaption>Sketch arc or circle — Reference ring</figcaption></figure><figure><img src="mockups/rich__sk_arc__modify.svg" alt="Sketch arc or circle — Modify ring" loading="lazy"><figcaption>Sketch arc or circle — Modify ring</figcaption></figure><figure><img src="mockups/rich__sk_point.svg" alt="Sketch point — Working document" loading="lazy"><figcaption>Sketch point — Working document</figcaption></figure><figure><img src="mockups/rich__sk_point__create.svg" alt="Sketch point — Create ring" loading="lazy"><figcaption>Sketch point — Create ring</figcaption></figure><figure><img src="mockups/rich__sk_point__reference.svg" alt="Sketch point — Reference ring" loading="lazy"><figcaption>Sketch point — Reference ring</figcaption></figure><figure><img src="mockups/rich__sk_2ent.svg" alt="Two sketch entities — Working document" loading="lazy"><figcaption>Two sketch entities — Working document</figcaption></figure><figure><img src="mockups/rich__sk_2ent__create.svg" alt="Two sketch entities — Create ring" loading="lazy"><figcaption>Two sketch entities — Create ring</figcaption></figure><figure><img src="mockups/rich__sk_2ent__dressup.svg" alt="Two sketch entities — Dress-up ring" loading="lazy"><figcaption>Two sketch entities — Dress-up ring</figcaption></figure><figure><img src="mockups/rich__sk_2ent__reference.svg" alt="Two sketch entities — Reference ring" loading="lazy"><figcaption>Two sketch entities — Reference ring</figcaption></figure><figure><img src="mockups/rich__sk_2ent__modify.svg" alt="Two sketch entities — Modify ring" loading="lazy"><figcaption>Two sketch entities — Modify ring</figcaption></figure><figure><img src="mockups/fresh__none.svg" alt="Nothing selected — Fresh document" loading="lazy"><figcaption>Nothing selected — Fresh document</figcaption></figure><figure><img src="mockups/fresh__none__reference.svg" alt="Nothing selected — Reference ring" loading="lazy"><figcaption>Nothing selected — Reference ring</figcaption></figure><figure><img src="mockups/fresh__face_planar.svg" alt="Planar face — Fresh document" loading="lazy"><figcaption>Planar face — Fresh document</figcaption></figure><figure><img src="mockups/fresh__face_planar__reference.svg" alt="Planar face — Reference ring" loading="lazy"><figcaption>Planar face — Reference ring</figcaption></figure><figure><img src="mockups/fresh__face_cyl.svg" alt="Cylindrical face — Fresh document" loading="lazy"><figcaption>Cylindrical face — Fresh document</figcaption></figure><figure><img src="mockups/fresh__face_cyl__reference.svg" alt="Cylindrical face — Reference ring" loading="lazy"><figcaption>Cylindrical face — Reference ring</figcaption></figure><figure><img src="mockups/fresh__face_other.svg" alt="Curved face — Fresh document" loading="lazy"><figcaption>Curved face — Fresh document</figcaption></figure><figure><img src="mockups/fresh__edge_str.svg" alt="Straight edge — Fresh document" loading="lazy"><figcaption>Straight edge — Fresh document</figcaption></figure><figure><img src="mockups/fresh__edge_str__reference.svg" alt="Straight edge — Reference ring" loading="lazy"><figcaption>Straight edge — Reference ring</figcaption></figure><figure><img src="mockups/fresh__edge_circ.svg" alt="Circular edge — Fresh document" loading="lazy"><figcaption>Circular edge — Fresh document</figcaption></figure><figure><img src="mockups/fresh__vertex.svg" alt="Vertex — Fresh document" loading="lazy"><figcaption>Vertex — Fresh document</figcaption></figure><figure><img src="mockups/fresh__vertex__reference.svg" alt="Vertex — Reference ring" loading="lazy"><figcaption>Vertex — Reference ring</figcaption></figure><figure><img src="mockups/fresh__body_solid.svg" alt="Solid body — Fresh document" loading="lazy"><figcaption>Solid body — Fresh document</figcaption></figure><figure><img src="mockups/fresh__body_solid__modify.svg" alt="Solid body — Modify ring" loading="lazy"><figcaption>Solid body — Modify ring</figcaption></figure><figure><img src="mockups/fresh__body_sheet.svg" alt="Sheet body — Fresh document" loading="lazy"><figcaption>Sheet body — Fresh document</figcaption></figure><figure><img src="mockups/fresh__body_sheet__modify.svg" alt="Sheet body — Modify ring" loading="lazy"><figcaption>Sheet body — Modify ring</figcaption></figure><figure><img src="mockups/fresh__bodies_2.svg" alt="Two bodies — Fresh document" loading="lazy"><figcaption>Two bodies — Fresh document</figcaption></figure><figure><img src="mockups/fresh__datum_plane.svg" alt="Datum plane — Fresh document" loading="lazy"><figcaption>Datum plane — Fresh document</figcaption></figure><figure><img src="mockups/fresh__datum_plane__reference.svg" alt="Datum plane — Reference ring" loading="lazy"><figcaption>Datum plane — Reference ring</figcaption></figure><figure><img src="mockups/fresh__datum_plane__modify.svg" alt="Datum plane — Modify ring" loading="lazy"><figcaption>Datum plane — Modify ring</figcaption></figure><figure><img src="mockups/fresh__datum_axis.svg" alt="Datum axis — Fresh document" loading="lazy"><figcaption>Datum axis — Fresh document</figcaption></figure><figure><img src="mockups/fresh__datum_axis__modify.svg" alt="Datum axis — Modify ring" loading="lazy"><figcaption>Datum axis — Modify ring</figcaption></figure><figure><img src="mockups/fresh__coordsys.svg" alt="Coordinate system — Fresh document" loading="lazy"><figcaption>Coordinate system — Fresh document</figcaption></figure><figure><img src="mockups/fresh__coordsys__modify.svg" alt="Coordinate system — Modify ring" loading="lazy"><figcaption>Coordinate system — Modify ring</figcaption></figure><figure><img src="mockups/fresh__art.svg" alt="Text / imported art — Fresh document" loading="lazy"><figcaption>Text / imported art — Fresh document</figcaption></figure><figure><img src="mockups/fresh__art__modify.svg" alt="Text / imported art — Modify ring" loading="lazy"><figcaption>Text / imported art — Modify ring</figcaption></figure><figure><img src="mockups/fresh__sk_loop.svg" alt="Closed sketch loop — Fresh document" loading="lazy"><figcaption>Closed sketch loop — Fresh document</figcaption></figure><figure><img src="mockups/fresh__sk_loop__add.svg" alt="Closed sketch loop — Add material ring" loading="lazy"><figcaption>Closed sketch loop — Add material ring</figcaption></figure><figure><img src="mockups/fresh__sk_loop__modify.svg" alt="Closed sketch loop — Modify ring" loading="lazy"><figcaption>Closed sketch loop — Modify ring</figcaption></figure><figure><img src="mockups/fresh__sk_none.svg" alt="Sketch, nothing picked — Fresh document" loading="lazy"><figcaption>Sketch, nothing picked — Fresh document</figcaption></figure><figure><img src="mockups/fresh__sk_none__create.svg" alt="Sketch, nothing picked — Create ring" loading="lazy"><figcaption>Sketch, nothing picked — Create ring</figcaption></figure><figure><img src="mockups/fresh__sk_none__reference.svg" alt="Sketch, nothing picked — Reference ring" loading="lazy"><figcaption>Sketch, nothing picked — Reference ring</figcaption></figure><figure><img src="mockups/fresh__sk_line.svg" alt="Sketch line — Fresh document" loading="lazy"><figcaption>Sketch line — Fresh document</figcaption></figure><figure><img src="mockups/fresh__sk_line__create.svg" alt="Sketch line — Create ring" loading="lazy"><figcaption>Sketch line — Create ring</figcaption></figure><figure><img src="mockups/fresh__sk_line__dressup.svg" alt="Sketch line — Dress-up ring" loading="lazy"><figcaption>Sketch line — Dress-up ring</figcaption></figure><figure><img src="mockups/fresh__sk_line__reference.svg" alt="Sketch line — Reference ring" loading="lazy"><figcaption>Sketch line — Reference ring</figcaption></figure><figure><img src="mockups/fresh__sk_line__modify.svg" alt="Sketch line — Modify ring" loading="lazy"><figcaption>Sketch line — Modify ring</figcaption></figure><figure><img src="mockups/fresh__sk_arc.svg" alt="Sketch arc or circle — Fresh document" loading="lazy"><figcaption>Sketch arc or circle — Fresh document</figcaption></figure><figure><img src="mockups/fresh__sk_arc__create.svg" alt="Sketch arc or circle — Create ring" loading="lazy"><figcaption>Sketch arc or circle — Create ring</figcaption></figure><figure><img src="mockups/fresh__sk_arc__reference.svg" alt="Sketch arc or circle — Reference ring" loading="lazy"><figcaption>Sketch arc or circle — Reference ring</figcaption></figure><figure><img src="mockups/fresh__sk_arc__modify.svg" alt="Sketch arc or circle — Modify ring" loading="lazy"><figcaption>Sketch arc or circle — Modify ring</figcaption></figure><figure><img src="mockups/fresh__sk_point.svg" alt="Sketch point — Fresh document" loading="lazy"><figcaption>Sketch point — Fresh document</figcaption></figure><figure><img src="mockups/fresh__sk_point__create.svg" alt="Sketch point — Create ring" loading="lazy"><figcaption>Sketch point — Create ring</figcaption></figure><figure><img src="mockups/fresh__sk_point__reference.svg" alt="Sketch point — Reference ring" loading="lazy"><figcaption>Sketch point — Reference ring</figcaption></figure><figure><img src="mockups/fresh__sk_2ent.svg" alt="Two sketch entities — Fresh document" loading="lazy"><figcaption>Two sketch entities — Fresh document</figcaption></figure><figure><img src="mockups/fresh__sk_2ent__create.svg" alt="Two sketch entities — Create ring" loading="lazy"><figcaption>Two sketch entities — Create ring</figcaption></figure><figure><img src="mockups/fresh__sk_2ent__dressup.svg" alt="Two sketch entities — Dress-up ring" loading="lazy"><figcaption>Two sketch entities — Dress-up ring</figcaption></figure><figure><img src="mockups/fresh__sk_2ent__reference.svg" alt="Two sketch entities — Reference ring" loading="lazy"><figcaption>Two sketch entities — Reference ring</figcaption></figure><figure><img src="mockups/fresh__sk_2ent__modify.svg" alt="Two sketch entities — Modify ring" loading="lazy"><figcaption>Two sketch entities — Modify ring</figcaption></figure></div>
</main>