From 3b8028a040f89a41584303ae4f691304306ee538 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Mon, 12 Oct 2026 11:19:15 -0400 Subject: [PATCH] Retire legacy reference data and the external command catalog (#302) - Remove xtask/data/fusion-catalog.tsv and xtask/data/fusion-ids.tsv. - Remove the legacy command-id table (crates/engine/src/legacy_ids.rs) and its use in find_command and in the shortcut, recents and pinned-command loaders. Only SolidCraft's dotted ids name commands; any other id is an unknown command. - Boundary Fill's id becomes solid.boundary_fill. - Replace the parity report with SolidCraft's own feature checklist: `cargo xtask features` writes docs/features.md from the command registry. - docs/oracle.md, docs/step-import.md (corpus section) and docs/iges-import.md: reference results are being rebuilt on analytic and open-source (FreeCAD) values; see #292. `cargo xtask oracle` and `cargo xtask step-corpus [--iges]` write these placeholders. - AGENTS.md, CLAUDE.md, CONTRIBUTING.md, README.md, ROADMAP.md and the book describe SolidCraft as independent, with reference tests on analytic values and open-source tools, and agents do not drive or extract data from commercial CAD products. Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT Co-authored-by: Claude Opus 5.5 --- AGENTS.md | 37 +- CLAUDE.md | 37 +- CONTRIBUTING.md | 13 +- README.md | 7 +- ROADMAP.md | 17 +- crates/engine/src/cmd/features_more.rs | 4 +- crates/engine/src/cmd/mod.rs | 4 +- crates/engine/src/fuzz.rs | 4 +- crates/engine/src/legacy_ids.rs | 236 ----- crates/engine/src/lib.rs | 1 - crates/engine/src/tests.rs | 19 +- crates/ui-egui/src/dialogs.rs | 6 +- crates/ui-egui/src/keymap.rs | 7 +- crates/ui-egui/src/menu_tests.rs | 4 +- crates/ui-egui/src/preselect_tests.rs | 2 +- crates/ui-egui/src/shortcut_box.rs | 5 +- docs/book/src/SUMMARY.md | 2 +- docs/book/src/dev/architecture.md | 2 +- docs/book/src/dev/commands.md | 4 +- docs/book/src/dev/features.md | 1 + docs/book/src/dev/parity.md | 1 - docs/book/src/guide/plastic.md | 2 +- docs/book/src/guide/sheet-metal.md | 4 +- docs/book/src/introduction.md | 10 +- docs/features.md | 487 ++++++++++ docs/parity.md | 406 -------- docs/wip-reconciliation.md | 4 +- xtask/data/fusion-catalog.tsv | 1177 ------------------------ xtask/data/fusion-ids.tsv | 184 ---- xtask/src/features.rs | 104 +++ xtask/src/main.rs | 8 +- xtask/src/parity.rs | 220 ----- 32 files changed, 695 insertions(+), 2324 deletions(-) delete mode 100644 crates/engine/src/legacy_ids.rs create mode 100644 docs/book/src/dev/features.md delete mode 100644 docs/book/src/dev/parity.md create mode 100644 docs/features.md delete mode 100644 docs/parity.md delete mode 100644 xtask/data/fusion-catalog.tsv delete mode 100644 xtask/data/fusion-ids.tsv create mode 100644 xtask/src/features.rs delete mode 100644 xtask/src/parity.rs diff --git a/AGENTS.md b/AGENTS.md index a7f9951c..d3a84cdd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -16,8 +16,7 @@ compatibility notes. ## Start every session here 1. Read `plan/STATUS.md` (current milestone, next task), then the task in `plan/execution-plan.md` - and the relevant `plan/architecture.md` section. Behaviour reference: `plan/fusion/` - (`menu-tree.json` is Fusion's toolbar dump). + and the relevant `plan/architecture.md` section. 2. Kernel and library decisions: `plan/adr/0001-geometry-kernel.md` (what we may depend on, what is rejected for licence reasons). 3. Follow the autonomous operation protocol (`plan/execution-plan.md` §6). Don't stop to ask @@ -42,20 +41,22 @@ People trust SolidCraft with their designs; a crash loses their work. **This out `#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]`. ## Non-negotiables -- **Clean-room.** Fusion may be *observed* black-box (its UI, its toolbar dump, parts built in it - and their measurements, kept under `plan/fusion/`, never committed). Never copy Autodesk icons, - artwork, help text, tooltips, templates or materials, and never commit files produced by - Fusion. Command ids and command names are used as identifiers only (`xtask/data/fusion-catalog.tsv` - holds ids and names, nothing else). File formats come from public specifications. **Never read, - copy or link GPL/LGPL/AGPL code**: OpenCASCADE, FreeCAD (incl. planegcs), SolveSpace, - CadQuery/OCP, LibreCAD, QCAD — don't even read their sources. (`tools/freecad-oracle/` runs - FreeCAD as a separate program through its public scripting API to compute reference values; +- **Independent.** SolidCraft is independent. Behaviour is designed from public documentation, + general CAD conventions and user feedback. Reference tests use analytic values and open-source + tools. Never copy another product's code, icons, artwork, help text, tooltips, templates or + materials. File formats come from public specifications. +- **No commercial CAD products.** Agents must not drive, script, automate or extract data from + commercial CAD products (Fusion, SolidWorks, Onshape, …) for this project: no test data, + measurements, command lists, ids or files produced with them. +- **Never read, copy or link GPL/LGPL/AGPL code**: OpenCASCADE, FreeCAD (incl. planegcs), + SolveSpace, CadQuery/OCP, LibreCAD, QCAD — don't even read their sources. (`tools/freecad-oracle/` + runs FreeCAD as a separate program through its public scripting API to compute reference values; nothing from FreeCAD is linked, vendored or shipped.) The sketch solver and the blend operations are our own. -- **Assets — absolutely essential.** SolidCraft contains **no Autodesk iconography, images, - fonts or artwork — ever.** Every icon is drawn in code (`crates/ui-egui/src/icons.rs`). Any - file asset must be original or openly licensed and **must have a row in ATTRIBUTION.md** - (`cargo xtask assets` enforces it). Screenshots of Autodesk software are never committed. +- **Assets — absolutely essential.** SolidCraft contains **no iconography, images, fonts or + artwork from commercial CAD products — ever.** Every icon is drawn in code + (`crates/ui-egui/src/icons.rs`). Any file asset must be original or openly licensed and **must have a row in ATTRIBUTION.md** + (`cargo xtask assets` enforces it). Screenshots of commercial CAD software are never committed. Breaking this rule is the most serious mistake you can make in this repo. - **Everything is a command.** User-visible behaviour = a command in `crates/engine/src/cmd/*` (`CommandSpec`: id = our own dotted, lower-case id `.[.]` such as @@ -126,10 +127,10 @@ before the draft is verified. `solvecraft-cli snapshot script.json --out shot.png`, `solvecraft-cli commands`. - Reference tests: `cargo xtask oracle` replays `tests/oracle/*/recipe.json` and compares with each case's `expected.json` (analytic or FreeCAD values; writes `docs/oracle.md`). Expected - values never come from Fusion or any other commercial CAD product. + values never come from a commercial CAD product. - Build with `CARGO_TARGET_DIR=/target`. Windows: `cargo xwin build --release --target x86_64-pc-windows-msvc -p solvecraft`. ## Roadmap -`ROADMAP.md` (committed) tracks status, milestones, parity and estimates. Update it whenever a -milestone task lands. `cargo xtask parity` recomputes command parity in `docs/parity.md`; -`cargo xtask oracle` recomputes `docs/oracle.md`. +`ROADMAP.md` (committed) tracks status, milestones and estimates. Update it whenever a +milestone task lands. `cargo xtask features` regenerates `docs/features.md` (SolidCraft's +commands by area, from the registry) when commands are added or renamed. diff --git a/CLAUDE.md b/CLAUDE.md index 102d885e..f4f88494 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,8 +16,7 @@ compatibility notes. ## Start every session here 1. Read `plan/STATUS.md` (current milestone, next task), then the task in `plan/execution-plan.md` - and the relevant `plan/architecture.md` section. Behaviour reference: `plan/fusion/` - (`menu-tree.json` is Fusion's toolbar dump). + and the relevant `plan/architecture.md` section. 2. Kernel and library decisions: `plan/adr/0001-geometry-kernel.md` (what we may depend on, what is rejected for licence reasons). 3. Follow the autonomous operation protocol (`plan/execution-plan.md` §6). Don't stop to ask @@ -42,20 +41,22 @@ People trust SolidCraft with their designs; a crash loses their work. **This out `#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]`. ## Non-negotiables -- **Clean-room.** Fusion may be *observed* black-box (its UI, its toolbar dump, parts built in it - and their measurements, kept under `plan/fusion/`, never committed). Never copy Autodesk icons, - artwork, help text, tooltips, templates or materials, and never commit files produced by - Fusion. Command ids and command names are used as identifiers only (`xtask/data/fusion-catalog.tsv` - holds ids and names, nothing else). File formats come from public specifications. **Never read, - copy or link GPL/LGPL/AGPL code**: OpenCASCADE, FreeCAD (incl. planegcs), SolveSpace, - CadQuery/OCP, LibreCAD, QCAD — don't even read their sources. (`tools/freecad-oracle/` runs - FreeCAD as a separate program through its public scripting API to compute reference values; +- **Independent.** SolidCraft is independent. Behaviour is designed from public documentation, + general CAD conventions and user feedback. Reference tests use analytic values and open-source + tools. Never copy another product's code, icons, artwork, help text, tooltips, templates or + materials. File formats come from public specifications. +- **No commercial CAD products.** Agents must not drive, script, automate or extract data from + commercial CAD products (Fusion, SolidWorks, Onshape, …) for this project: no test data, + measurements, command lists, ids or files produced with them. +- **Never read, copy or link GPL/LGPL/AGPL code**: OpenCASCADE, FreeCAD (incl. planegcs), + SolveSpace, CadQuery/OCP, LibreCAD, QCAD — don't even read their sources. (`tools/freecad-oracle/` + runs FreeCAD as a separate program through its public scripting API to compute reference values; nothing from FreeCAD is linked, vendored or shipped.) The sketch solver and the blend operations are our own. -- **Assets — absolutely essential.** SolidCraft contains **no Autodesk iconography, images, - fonts or artwork — ever.** Every icon is drawn in code (`crates/ui-egui/src/icons.rs`). Any - file asset must be original or openly licensed and **must have a row in ATTRIBUTION.md** - (`cargo xtask assets` enforces it). Screenshots of Autodesk software are never committed. +- **Assets — absolutely essential.** SolidCraft contains **no iconography, images, fonts or + artwork from commercial CAD products — ever.** Every icon is drawn in code + (`crates/ui-egui/src/icons.rs`). Any file asset must be original or openly licensed and **must have a row in ATTRIBUTION.md** + (`cargo xtask assets` enforces it). Screenshots of commercial CAD software are never committed. Breaking this rule is the most serious mistake you can make in this repo. - **Everything is a command.** User-visible behaviour = a command in `crates/engine/src/cmd/*` (`CommandSpec`: id = our own dotted, lower-case id `.[.]` such as @@ -103,10 +104,10 @@ before the draft is verified. `solvecraft-cli snapshot script.json --out shot.png`, `solvecraft-cli commands`. - Reference tests: `cargo xtask oracle` replays `tests/oracle/*/recipe.json` and compares with each case's `expected.json` (analytic or FreeCAD values; writes `docs/oracle.md`). Expected - values never come from Fusion or any other commercial CAD product. + values never come from a commercial CAD product. - Build with `CARGO_TARGET_DIR=/target`. Windows: `cargo xwin build --release --target x86_64-pc-windows-msvc -p solvecraft`. ## Roadmap -`ROADMAP.md` (committed) tracks status, milestones, parity and estimates. Update it whenever a -milestone task lands. `cargo xtask parity` recomputes command parity in `docs/parity.md`; -`cargo xtask oracle` recomputes `docs/oracle.md`. +`ROADMAP.md` (committed) tracks status, milestones and estimates. Update it whenever a +milestone task lands. `cargo xtask features` regenerates `docs/features.md` (SolidCraft's +commands by area, from the registry) when commands are added or renamed. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 72595b8b..e4e15972 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,13 +88,16 @@ The [README](README.md#architecture) has the layer table. The short version: ## Rules that aren't negotiable -1. **Clean-room.** We observe Fusion as a black box: its UI, how parts it builds measure, and - what it does with a given input. We never copy Autodesk code, icons, artwork, help text, - tooltips, templates or materials, and we never commit files Fusion produced. Command ids are - our own (`solid.fillet`, not Fusion's internal names). +1. **Independent.** SolidCraft is independent. Behaviour is designed from public + documentation, general CAD conventions and user feedback. Reference tests use analytic values + and open-source tools. We don't drive, script, automate or extract data from commercial CAD + products, and we never copy another product's code, icons, artwork, help text, tooltips, + templates or materials. Command ids are our own (`solid.fillet`). 2. **No GPL/LGPL/AGPL code, not even reading it.** That rules out OpenCASCADE, FreeCAD (including planegcs), SolveSpace, CadQuery/OCP, LibreCAD and QCAD. SolidCraft is - MIT OR Apache-2.0, and its solver and blends are written from the maths. Permissive + MIT OR Apache-2.0, and its solver and blends are written from the maths. (Running an + open-source application to get reference values for a test is fine; reading its source is + not.) Permissive dependencies are fine. Note which one you're adding and why in the PR, and run `cargo xtask licences` so THIRD-PARTY-LICENSES.txt lists it (CI checks that it is current). 3. **Every asset is original or openly licensed and has a row in diff --git a/README.md b/README.md index cb585e3f..2789a9cb 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ SolidCraft application feed. See [install and launch commands](https://bherbruck **Status: early but usable for simple parts.** 75 of 76 public reference parts match their analytic or FreeCAD-computed volume, area, centre of mass and bounding box ([docs/oracle.md](docs/oracle.md)); the other is a tracked bug. -These checks do not establish complete geometric or workflow equivalence. Feature coverage -is tracked in [docs/parity.md](docs/parity.md) and [ROADMAP.md](ROADMAP.md). +These checks do not establish complete geometric or workflow equivalence. The commands SolidCraft has +are listed by area in [docs/features.md](docs/features.md); status and plans are in [ROADMAP.md](ROADMAP.md). Open work and known bugs are in [GitHub issues](https://github.com/bherbruck/solidcraft/issues), and help is welcome: see [CONTRIBUTING.md](CONTRIBUTING.md). @@ -168,6 +168,7 @@ MIT OR Apache-2.0, at your option. Developed under the [clean-room contribution rules](CLAUDE.md); third-party code and assets retain their documented licences and attribution. -References to other products describe workflow comparisons and benchmark provenance. +SolidCraft is independent. Behaviour is designed from public documentation, general CAD +conventions and user feedback. Reference tests use analytic values and open-source tools. SolidCraft is not affiliated with, sponsored by or endorsed by Autodesk. Autodesk and Fusion are trademarks of Autodesk, Inc. diff --git a/ROADMAP.md b/ROADMAP.md index e505cc5a..f9518ddd 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -7,8 +7,8 @@ features → parametric timeline) as an open, pure-Rust, agent-drivable applicat | Question | Answer | |---|---| -| Where are we? | **M0 and M13 done; M1, M2, M5–M7, M9, M10, M14 in progress.** Sketch with solver and the full SKETCH create/modify set; extrude, revolve (two sides, symmetric, to object), fillet/chamfer (variable radius, chord length, a radius per edge, corner patches), holes, threads (cosmetic and modelled), patterns, mirror, shell (inside/outside/both), draft, loft, sweep, coil, split body and split face, delete face, construction planes, axes and points; persistent naming of faces and edges; parameters and configurations; components, joints, motion studies, exploded views; sheet metal and a plastic enclosure subset; STEP/IGES/3MF/STL/OBJ/DXF; autosave and crash recovery; desktop and browser (wasm) app, CLI, MCP server, oracle harness. | -| Command parity (in scope) | **335 / 541 (62%)** in-scope commands; SOLID + SKETCH **188 / 291 (65%)** — [docs/parity.md](docs/parity.md); registry breadth does not establish workflow or geometric parity | +| Where are we? | **M0 and M13 done; M1, M2, M5–M7, M9, M10, M14 in progress.** Sketch with solver and the full SKETCH create/modify set; extrude, revolve (two sides, symmetric, to object), fillet/chamfer (variable radius, chord length, a radius per edge, corner patches), holes, threads (cosmetic and modelled), patterns, mirror, shell (inside/outside/both), draft, loft, sweep, coil, split body and split face, delete face, construction planes, axes and points; persistent naming of faces and edges; parameters and configurations; components, joints, motion studies, exploded views; sheet metal and a plastic enclosure subset; STEP/IGES/3MF/STL/OBJ/DXF; autosave and crash recovery; desktop and browser (wasm) app, CLI, MCP server. | +| Features | Every registered command by area — [docs/features.md](docs/features.md) (`cargo xtask features`); registry breadth does not establish workflow or geometric depth | | Reference tests | **75 / 76 parts match** — [docs/oracle.md](docs/oracle.md): public cases in `tests/oracle/` with analytic (55) or FreeCAD-computed (21) expected values, run by CI on every PR; 75-sm-bracket-holes fails (#296). | | Tests | Solver, profiles, kernel booleans/blends/measures, expressions, timeline, persistent naming, file formats and migrations, assemblies, sheet metal, engine end-to-end, hostile-input fuzz over every command and headless UI scenarios. `cargo xtask ci` reports the current passing counts. | | Gates | `cargo xtask ci`: fmt, clippy -D warnings, tests, asset attribution, layering, wasm32 build — green | @@ -20,8 +20,7 @@ The issue batch adds preservation of blind pockets in through cuts, associative offsets and plastic face placements, XZ (+Y normal) with a v6 migration preserving older designs, interactive angle placement, file-picker sketch imports, Home/recent controls, toolbar overflow, and the remaining component-frame and assembly WIP work. The enclosure -acceptance scenarios now include board resizes; STEP reopening is automated. Inspection in -Fusion remains an external acceptance step. See [WIP reconciliation](docs/wip-reconciliation.md). +acceptance scenarios now include board resizes; STEP reopening is automated. See [WIP reconciliation](docs/wip-reconciliation.md). In scope, in priority order: 1. SOLID and SKETCH (now). @@ -38,8 +37,7 @@ In scope, in priority order: 5. A small PLASTIC subset for enclosures, after sheet metal: Boss, Rib, Web, Lip/Groove, Snap Fit. Deferred until further notice: MESH, FORM (T-splines), SURFACE beyond what solids need, PCB / 3D -PCB / Package, Render, Animation, Simulation, Manufacture/CAM, Drawings. The parity report's -headline counts in-scope tabs only and lists the deferred ones separately. +PCB / Package, Render, Animation, Simulation, Manufacture/CAM, Drawings. ## Milestones @@ -49,14 +47,13 @@ headline counts in-scope tabs only and lists the deferred ones separately. | M1 | Sketch depth: command coverage implemented — projection/intersect/include as linked geometry (auto-project on faces, lost-reference warnings, break link), full SKETCH create/modify set (slots, polygons, tangent arcs/circles, ellipse, fit/control splines, conic, text, trim/extend/break, fillet/chamfer, offset, mirror, patterns, move/scale, blend curve, centerline), constraints incl. curvature and polygon with over-constraint refusal, driven/arc-length/linear-diameter dimensions, AutoConstrain, DXF/SVG insert, 3D sketch curves (Project To Surface, Intersection Curve, Isoparametric Curve, Spun Profile), exact free-form profiles (B-spline/NURBS edges, any spline degree, curves cut by crossings), sweeps and pipes along 3D sketch curves, canvases and decals, curvature combs. Exact free-form Extend and certified associative offsets now preserve geometry and IDs through edits, deletion and reopen. Occurrence-frame 3D wires now store explicit coordinate spaces and retain points and analytic fits through moves, refresh, undo and reopen. Remaining workflow repairs: mixed offset junctions, legacy natural-spline seams, and damaged legacy wire links lacking frame provenance | in progress | 4 | | M2 | Robust modelling: coplanar booleans in the kernel, holes (placed on faces and on sketch points), threads (cosmetic, then modelled), patterns, mirror, shell, draft, split, construction geometry | in progress | 16 | | M3 | General fillets and chamfers (curved edges, chains, vertex blends); saddle rolling-ball surfaces now use continuous seam sections and arc-length fitting with shared contact boundaries and bounded accuracy checks | in progress | 30 | -| M4 | Files: STEP import (done: all 29 Fusion STEP files — [docs/step-import.md](docs/step-import.md)), 3MF export and 3MF/STL import as mesh bodies (done), constant-section parametric mesh reconstruction, DXF sketches, OBJ import | in progress | 6 | -| M4 | Files: STEP import (done — [docs/step-import.md](docs/step-import.md)), 3MF export and 3MF/STL import as mesh bodies (done), DXF sketches, OBJ import | in progress | 6 | +| M4 | Files: STEP import (done — [docs/step-import.md](docs/step-import.md)), 3MF export and 3MF/STL import as mesh bodies (done), constant-section parametric mesh reconstruction, DXF sketches, OBJ import | in progress | 6 | | M5 | Persistent naming of faces and edges (plan/adr/0002): faces named from their history (sketch curve sides, caps, revolve sections, primitive sides, blends, pattern/mirror copies; split pieces numbered), edges by their faces; fillets/chamfers, sketches on faces, shell/draft/offset/replace faces, hole placements, joint origins and face appearances resolve by name first and warn when the entity split or vanished: done. sheet metal edges by base sketch line and flange side, shell inner faces, sweep and loft roles: done. Left: kernel-reported face history (exact through coincident surfaces) | in progress | 20 | | M6 | UI depth: selection feedback and origin (done), timeline editing (done: hover and selection highlight modifier faces, including fillets and chamfers; edit feature, history marker drag, reorder with dependency checks, suppress, rename, delete with dependents, re-resolved references; redefining selections refreshes persistent edge/face references while retaining feature identity and dimension names), right-docked dialogs (done), live previews for every feature dialog (done), keyboard-first commands with on-canvas value boxes and sketch inline dimensions (done), drag manipulators with automatic join/cut (done: extrude incl. two sides, fillet, shell, hole depth, move, pattern spacing, revolve rotator; taper handle open), dark theme (done), right-click menu with Repeat (done), measure tool (done), section analysis (done), selection filter (done), drag-solve of sketch points (done); appearance controls now preserve body/face/component targeting, named transparent looks, reuse/search and override removal; preferences | in progress | 6 | | M7 | Sweep, loft (incl. to a point), rib and web (to next / depth), emboss (planar faces and exact radial emboss/deboss of bounded orthogonal profiles on complete exterior cylinders/sleeves), thread (cosmetic, and modelled M3–M20 outside and inside: the ISO profile screwed in as a faceted cut), coil (smooth B-spline helical walls), pipe, pattern on path, patterns of bodies and components, replace face (parallel), align, remove, feature copy/paste: done. Unique eligible cylindrical targets are inferred for new Emboss features. Left: general curved-face emboss and exact (unfaceted) modelled threads | in progress | 12 | | M8 | Surface workspace | deferred | — | | M9 | Components and assemblies: New Component / Create Components from Bodies, active component, per-component origin/bodies/sketches/timeline entries, occurrences with transforms, Copy/Paste vs Paste New, nested Browser tree with visibility and isolate; Ground, Move/Copy of occurrences, joints (rigid, revolute, slider, cylindrical, pin-slot, planar, ball) by joint origins with limits and Drive Joints, As-built Joint, Rigid Group, Contact Sets (driving and motion studies stop where bodies in a set would pass through each other), Motion Study (joint values keyed along a timeline, playback, export of occurrence positions as JSON/CSV), Exploded views (automatic or by hand, shown without changing placements); interference, per-component physical properties; STEP with assembly structure. Physical properties now measure material-aware component/occurrence placements, descendants and repeated instances, including pending moves and body reassignment offsets; contact geometry and automatic exploded centres respect those offsets. Groundwork done: component tree, occurrences with transforms (instances, Paste New), world placement, active component as authoring frame, ground, Capture/Revert Position, moving bodies and sketches. UI: ASSEMBLE panel dialogs for New Component, Joint (snaps on faces, edges, circles and vertices; animated motion preview; offsets, flip, limits), As-built Joint, Joint Origin, Rigid Group, Drive Joints (live slider), Motion Link and Interference (overlaps shown red); joints in the timeline and the Browser | in progress | 32 | -| M10 | Sheet metal: flange (base, edge, contour), hem, unfold/refold, convert, flat pattern + DXF, rules: done (oracle 67-76). PLASTIC enclosure subset: Boss, Rib, Web, Lip/Groove, Snap Fit, Rest, Plastic Rules (library, edit, assign; rule draft and clearance as feature defaults): done, no Fusion oracle (licence), tested against hand-computed geometry. UI: SHEET METAL and PLASTIC tabs in Fusion's layout with dialogs (live preview, Edit Feature, pre-selection) for Flange, Hem, Unfold/Refold, Convert, Sheet Metal Rules, Create Flat Pattern (flat view with bend lines, bend table CSV/JSON and DXF export with exact circle/arc/line cutouts), Boss, Lip/Groove, Snap Fit, Rest, Manage and Assign Plastic Rules; Fold (bend along a sketch line) | in progress | 36 | +| M10 | Sheet metal: flange (base, edge, contour), hem, unfold/refold, convert, flat pattern + DXF, rules: done. PLASTIC enclosure subset: Boss, Rib, Web, Lip/Groove, Snap Fit, Rest, Plastic Rules (library, edit, assign; rule draft and clearance as feature defaults): done, tested against hand-computed geometry. UI: SHEET METAL and PLASTIC tabs in Fusion's layout with dialogs (live preview, Edit Feature, pre-selection) for Flange, Hem, Unfold/Refold, Convert, Sheet Metal Rules, Create Flat Pattern (flat view with bend lines, bend table CSV/JSON and DXF export with exact circle/arc/line cutouts), Boss, Lip/Groove, Snap Fit, Rest, Manage and Assign Plastic Rules; Fold (bend along a sketch line) | in progress | 36 | | M11 | 2D drawings | deferred | — | | M12 | Release: cross-platform packages, verification and deliberate publication implemented; original current-UI demo refreshed. Trusted distribution signing and broader performance work remain | in progress | 16 | | M14 | Configurations: a table of rows (parameter expressions and feature suppressions per row) switched with config.activate (undoable, all or nothing), kept through parameter renames and feature deletes (config.configure, config.table, config.column/row/activate). Per-row body materials and appearances (library looks, custom colour/opacity and clearing overrides), undoable activation and save/reopen: done. Ordered typed configuration rules, atomic validation and structured rule editing: done. Component appearance and certified semantic face style columns, atomic preview/apply and independent-copy remapping: done. Exact constructed sketch-side and immutable imported-face lineage now preserve legacy names and reject retargeting. Left: ambiguous shifted/two-sided caps | in progress | 4 | @@ -311,7 +308,7 @@ headline counts in-scope tabs only and lists the deferred ones separately. - Rolling-ball fillet accuracy: independent offset-cylinder tee references check surface distance, actual trimmed tessellation, supporting-cylinder contacts and tangency at two scales. The measured trimmed-part error is below 0.0001 mm; this is an analytic geometry - check, not a new Fusion oracle result. Under-resolved fits return an error. + check. Under-resolved fits return an error. - Contact driving checks the trajectory between clear endpoints, including linked joints, playback and sparse motion exports. Checks use bounded tessellation samples, not exact continuous collision detection; local thin walls and small details remain limitations. diff --git a/crates/engine/src/cmd/features_more.rs b/crates/engine/src/cmd/features_more.rs index f512296c..b7971ab3 100644 --- a/crates/engine/src/cmd/features_more.rs +++ b/crates/engine/src/cmd/features_more.rs @@ -11,7 +11,7 @@ use crate::params::{bad, bool_, expr, req_expr, str_, string_list, vec3}; use crate::{Result, Session}; pub static COMMANDS: &[CommandSpec] = &[ - CommandSpec::new("SurfaceSculpt", "Boundary Fill", boundary_fill).at("SOLID", "CREATE").icon("boundary_fill").params( + CommandSpec::new("solid.boundary_fill", "Boundary Fill", boundary_fill).at("SOLID", "CREATE").icon("boundary_fill").params( "tools: [bodies]; cells: [[x,y,z] a point inside each cell to fill (a cell: inside some tools, outside the rest)]; operation?: new|join|cut|intersect; remove_tools?: bool", ), CommandSpec::new("solid.coil", "Coil", coil).at("SOLID", "CREATE").icon("coil").params( @@ -422,7 +422,7 @@ pub(super) fn snap_point(s: &Session, kind: &str, at: Vec3) -> Option { } fn boundary_fill(s: &mut Session, p: &Value) -> Result { - let cmd = "SurfaceSculpt"; + let cmd = "solid.boundary_fill"; let tools = string_list(p, "tools"); let st = s.model.state(); if tools.is_empty() || tools.len() > 64 || tools.iter().any(|t| st.body(t).is_none()) { diff --git a/crates/engine/src/cmd/mod.rs b/crates/engine/src/cmd/mod.rs index f825d095..e51ed6a9 100644 --- a/crates/engine/src/cmd/mod.rs +++ b/crates/engine/src/cmd/mod.rs @@ -1,6 +1,6 @@ //! The command registry. Ids are SolveCraft's own dotted ids (`solid.extrude`, //! `sketch.rectangle.two_point`); the toolbar placement (`tab`, `panel`) follows the familiar -//! Design workspace layout. Ids used before the rename still resolve (`legacy_ids`). +//! Design workspace layout. /// The params-doc note of every command that adds sketch geometry (see `sketch::created`). macro_rules! created_doc { @@ -180,7 +180,5 @@ pub fn command_specs() -> Vec<&'static CommandSpec> { pub fn find_command(id: &str) -> Option<&'static CommandSpec> { let all = command_specs(); - // Ids from before the rename still find their command. - let id = crate::legacy_ids::current_id(id); all.iter().find(|c| c.id == id).or_else(|| all.iter().find(|c| c.id.eq_ignore_ascii_case(id))).copied() } diff --git a/crates/engine/src/fuzz.rs b/crates/engine/src/fuzz.rs index 1e76388f..73f5a279 100644 --- a/crates/engine/src/fuzz.rs +++ b/crates/engine/src/fuzz.rs @@ -184,7 +184,7 @@ fn base(r: &mut Rng) -> Step { ("sketch.line", json!({"points": pts})), ("sketch.arc.three_point", json!({"start": [0, h], "end": [0, 0], "through": [-bulge, h / 2.0]})), ("sketch.finish", json!({})), - ("Extrude", json!({"distance": d})), + ("solid.extrude", json!({"distance": d})), ], ) } @@ -198,7 +198,7 @@ fn base(r: &mut Rng) -> Step { ("sketch.create", json!({"plane": "XZ"})), ("sketch.rectangle.two_point", json!({"p0": [r0, 0], "p1": [r1, h]})), ("sketch.finish", json!({})), - ("Revolve", json!({"axis": "Z", "angle": angle})), + ("solid.revolve", json!({"axis": "Z", "angle": angle})), ], ) } diff --git a/crates/engine/src/legacy_ids.rs b/crates/engine/src/legacy_ids.rs deleted file mode 100644 index 3351f9b0..00000000 --- a/crates/engine/src/legacy_ids.rs +++ /dev/null @@ -1,236 +0,0 @@ -//! Legacy migration: the command ids SolveCraft used before 2026-10-09, when many commands -//! carried the id of the matching command in another CAD program, and the dotted ids that -//! replaced them. This is the one place the old ids live. Old scripts, recipes, control-channel -//! calls, saved shortcuts and toolbar layouts keep working: `find_command` and the preference -//! loaders map an old id through `current_id`. `solvecraft-tools/rename_ids.sh` converts a -//! worktree with this same table. - -/// (old id, current id). -pub const LEGACY_IDS: &[(&str, &str)] = &[ - ("AsBuiltPositionsCmd", "component.revert_position"), - ("FusionCreateComponentsFromBodiesCommand", "component.from_bodies"), - ("FusionCreateNewComponentCommand", "component.create"), - ("SnapshotCmd", "component.capture_position"), - ("FusionShowDesignConfigPanelCmd", "config.table"), - ("FusionStartDesignConfigModeCmd", "config.configure"), - ("FusionComputeAllCommand", "timeline.compute_all"), - ("FusionDeleteCommand", "timeline.delete"), - ("FusionRenameTimelineEntryCommand", "timeline.rename"), - ("RedoCommand", "edit.redo"), - ("UndoCommand", "edit.undo"), - ("timeline.rollTo", "timeline.roll_to"), - ("AlignCmd", "solid.align"), - ("EmbossCmd", "solid.emboss"), - ("FusionReplaceFaceCommand", "solid.replace_face"), - ("FusionRibCommand", "solid.rib"), - ("FusionWebCommand", "solid.web"), - ("PrimitiveCoil", "solid.coil"), - ("SoftDeleteCommand", "solid.remove"), - ("ConstructionPlaneAtAngleCommand", "construct.plane.at_angle"), - ("ConstructionPlaneOffsetFromPlaneCommand", "construct.plane.offset"), - ("Extrude", "solid.extrude"), - ("FusionChamferCommand", "solid.chamfer"), - ("FusionCombineCommand", "solid.combine"), - ("FusionDraftCommand", "solid.draft"), - ("FusionFilletEdgesCommand", "solid.fillet"), - ("FusionHoleCommand", "solid.hole"), - ("FusionMoveCommand", "solid.move"), - ("FusionOffsetFacesCommand", "solid.offset_face"), - ("FusionPressPullCommand", "solid.press_pull"), - ("FusionShellBodyCommand", "solid.shell"), - ("FusionSplitBodyCommand", "solid.split_body"), - ("FusionThreadCommand", "solid.thread"), - ("MirrorCommand", "solid.mirror"), - ("ModifyScale", "solid.scale"), - ("PatternCircular", "solid.pattern.circular"), - ("PatternOnPath", "solid.pattern.path"), - ("PatternRectangular", "solid.pattern.rectangular"), - ("PrimitiveBox", "solid.box"), - ("PrimitiveCylinder", "solid.cylinder"), - ("PrimitivePipe", "solid.pipe"), - ("PrimitiveSphere", "solid.sphere"), - ("PrimitiveTorus", "solid.torus"), - ("Revolve", "solid.revolve"), - ("SolidLoft", "solid.loft"), - ("StockModelCommand", "solid.bounding_solid"), - ("Sweep", "solid.sweep"), - ("ExportCommand", "file.export"), - ("FusionImportCommandFromToolbar", "file.insert_step"), - ("FusionSaveAsSTLCommand", "file.save_mesh"), - ("NewDocumentCommand", "file.new"), - ("ParaMeshInsertAlignCommand", "file.insert_mesh"), - ("SaveDocumentAsCommand", "file.save_as"), - ("SaveDocumentCommand", "file.save"), - ("AppearanceCommand", "appearance.assign"), - ("MeasureCommand", "inspect.measure"), - ("PhysicalMaterialCommand", "material.assign"), - ("FusionMotionRelationshipCommand", "joint.motion_link"), - ("FusionMoveJointsCommand", "joint.drive"), - ("InterferenceCheckCommand", "inspect.interference"), - ("JointAsBuiltCmd", "joint.as_built"), - ("JointAssembleCmdNew", "joint.create"), - ("JointOrigin", "joint.origin"), - ("RigidGroupCmd", "joint.rigid_group"), - ("ContactSetCmd", "contact.create"), - ("DisableAllContactCmd", "contact.disable_all"), - ("EnableAllContactCmd", "contact.enable_all"), - ("EnableContactSetsCmd", "contact.enable_sets"), - ("FusionMotionStudyCommand", "motion.study"), - ("ChangeParameterCommand", "parameters.change"), - ("FusionFastenersCommand", "parts.fastener"), - ("FusionAssignPlasticRuleCommand", "plastic.assign_rule"), - ("FusionBossCommand", "plastic.boss"), - ("FusionLipCommand", "plastic.lip"), - ("FusionManagePlasticRuleCommand", "plastic.manage_rules"), - ("FusionRestCommand", "plastic.rest"), - ("FusionSnapFitCommand", "plastic.snap_fit"), - ("FusionHalfSectionViewCommand", "inspect.section"), - ("ConvertToSheetMetalCmd", "sheet.convert"), - ("FusionSheetMetalFlangeCommand", "sheet.flange"), - ("FusionSheetMetalFlatPatternCmd", "sheet.flat_pattern"), - ("FusionSheetMetalHemFlangeCommand", "sheet.hem"), - ("FusionSheetMetalRulesCommand", "sheet.manage_rules"), - ("FusionSheetmetalUnfoldCommand", "sheet.unfold"), - ("SheetMetalFoldCmd", "sheet.fold"), - ("FusionAddCanvasCommand", "canvas.insert"), - ("FusionAddEditDecalCommand", "canvas.decal"), - ("ConstraintSmooth", "sketch.constraint.curvature"), - ("SketchAutoConstrainAndFinish", "sketch.finish_auto_constrain"), - ("SketchAutoConstraintAndDimCmd", "sketch.auto_constrain"), - ("SketchAutoConstraintAndDimFromDatumCmd", "sketch.auto_constrain_from_datum"), - ("SketchConstrainer", "sketch.constrainer"), - ("SketchPolygonConstraintCmd", "sketch.constraint.polygon"), - ("ArcTangent", "sketch.arc.tangent"), - ("BlendG1CurveSketchCmd", "sketch.blend_curve"), - ("CircleElipse", "sketch.ellipse"), - ("CircleTanTanRadius", "sketch.circle.two_tangent"), - ("CircleThreeTangent", "sketch.circle.three_tangent"), - ("ConicCurveCmd", "sketch.conic"), - ("DrawCVMSpline3D", "sketch.spline.control_point"), - ("DrawCVMSpline5D", "sketch.spline.control_point_5"), - ("DrawSpline", "sketch.spline.fit_point"), - ("MTextCmd", "sketch.text"), - ("ShapeArcSlotCenterTwoPoint", "sketch.slot.arc_center"), - ("ShapeArcSlotThreePoint", "sketch.slot.arc_three_point"), - ("ShapeSlotCenterPoint", "sketch.slot.center_point"), - ("SketchMidpointLine", "sketch.line.midpoint"), - ("ImportDxfFileCommand", "sketch.insert_dxf"), - ("SketchImportSVG", "sketch.insert_svg"), - ("FusionCenterOfMassCommand", "inspect.center_of_mass"), - ("FusionCurvatureCombAnalysisCommand", "inspect.curvature_comb"), - ("FusionIsoCurveAnalysisCommand", "inspect.isocurve"), - ("FusionMinimumRadiusAnalysisCommand", "inspect.minimum_radius"), - ("BreakSketchCmd", "sketch.break"), - ("ChamferSketchDistanceAngle", "sketch.chamfer.distance_angle"), - ("ChamferSketchDistanceDistance", "sketch.chamfer.two_distance"), - ("ChamferSketchEqualDistance", "sketch.chamfer.equal_distance"), - ("CircularSketchPatternCommand", "sketch.pattern.circular"), - ("ExtendSketchCmd", "sketch.extend"), - ("FilletSketchCmd", "sketch.fillet"), - ("MirrorSketchCommand", "sketch.mirror"), - ("Offset", "sketch.offset"), - ("RectangularSketchPatternCommand", "sketch.pattern.rectangular"), - ("SketchScaleCmd", "sketch.scale"), - ("TrimSketchCmd", "sketch.trim"), - ("FitCurvesToSectionCommand", "sketch.fit_curves_to_section"), - ("Include3DGeometry", "sketch.include_3d"), - ("IntersectCmd", "sketch.intersect"), - ("IntersectionCurve", "sketch.intersection_curve"), - ("ProjectNewCmd", "sketch.project"), - ("ProjectToSurface", "sketch.project_to_surface"), - ("SketchIsoparametricCurve", "sketch.isoparametric_curve"), - ("SpunProfileCmd", "sketch.spun_profile"), - ("ArcCenterTwoPoint", "sketch.arc.center_point"), - ("ArcThreePoint", "sketch.arc.three_point"), - ("CircleCenterRadius", "sketch.circle.center"), - ("CircleThreePoint", "sketch.circle.three_point"), - ("CircleTwoPoint", "sketch.circle.two_point"), - ("ConstraintCoincident", "sketch.constraint.coincident"), - ("ConstraintCollinear", "sketch.constraint.collinear"), - ("ConstraintConcentric", "sketch.constraint.concentric"), - ("ConstraintEqual", "sketch.constraint.equal"), - ("ConstraintFix", "sketch.constraint.fix"), - ("ConstraintHorizontalVertical", "sketch.constraint.horizontal_vertical"), - ("ConstraintMidPoint", "sketch.constraint.midpoint"), - ("ConstraintParallel", "sketch.constraint.parallel"), - ("ConstraintPerpendicular", "sketch.constraint.perpendicular"), - ("ConstraintSymmetry", "sketch.constraint.symmetry"), - ("ConstraintTangent", "sketch.constraint.tangent"), - ("DrawPoint", "sketch.point"), - ("DrawPolyline", "sketch.line"), - ("ShapePolygonCircumscribed", "sketch.polygon.circumscribed"), - ("ShapePolygonEdge", "sketch.polygon.edge"), - ("ShapePolygonInscribed", "sketch.polygon.inscribed"), - ("ShapeRectangleCenter", "sketch.rectangle.center"), - ("ShapeRectangleThreePoint", "sketch.rectangle.three_point"), - ("ShapeRectangleTwoPoint", "sketch.rectangle.two_point"), - ("ShapeSlotCenterToCenter", "sketch.slot.center_to_center"), - ("ShapeSlotOverall", "sketch.slot.overall"), - ("SketchActivate", "sketch.edit"), - ("SketchCreate", "sketch.create"), - ("SketchDimension", "sketch.dimension"), - ("SketchStop", "sketch.finish"), - ("FusionAccessibilityAnalysisCommand", "inspect.accessibility"), - ("FusionCurvatureMapAnalysisCommand", "inspect.curvature_map"), - ("FusionDraftAnalysisCommand", "inspect.draft"), - ("FusionEnvironmentMapAnalysisCommand", "inspect.environment_map"), - ("FusionZebraAnalysisCommand", "inspect.zebra"), - ("FusionExtendCommand", "surface.extend"), - ("FusionSurfacePatchCommand", "surface.patch"), - ("FusionSurfaceStitchCommand", "surface.stitch"), - ("FusionSurfaceThickenCommand", "surface.thicken"), - ("FusionSurfaceTrimCommand", "surface.trim"), - ("FusionSplitFaceCommand", "solid.split_face"), - ("ConstructionAxisThroughCylinderCommand", "construct.axis.through_cylinder"), - ("ConstructionAxisNormalToFaceCommand", "construct.axis.normal_to_face"), - ("ConstructionAxisFromTwoPlanesCommand", "construct.axis.two_planes"), - ("ConstructionAxisThroughTwoPointsCommand", "construct.axis.two_points"), - ("ConstructionAxisThroughEdgeCommand", "construct.axis.edge"), - ("ConstructionPointFromPointCommand", "construct.point.vertex"), - ("ConstructionPointThroughTwoEdgesCommand", "construct.point.two_edges"), - ("ConstructionPointFromThreePlanesCommand", "construct.point.three_planes"), - ("ConstructionPointFromCircleOrSphereCommand", "construct.point.center"), - ("ConstructionPointAtEdgeAndPlaneCommand", "construct.point.edge_plane"), - ("ConstructionPointAlongPathCommand", "construct.point.along_path"), - ("ConstructionMidPlaneCommand", "construct.plane.midplane"), - ("ConstructionPlaneFromTwoEdgesCommand", "construct.plane.two_edges"), - ("ConstructionPlaneFromThreePointsCommand", "construct.plane.three_points"), - ("ConstructionTangentPlaneCommand", "construct.plane.tangent"), - ("ConstructionPlaneAlongPathCommand", "construct.plane.along_path"), -]; - -/// The current id for a command id that may be a legacy one (unchanged otherwise). -pub fn current_id(id: &str) -> &str { - LEGACY_IDS.iter().find(|(old, _)| old.eq_ignore_ascii_case(id)).map(|(_, new)| *new).unwrap_or(id) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn every_legacy_id_names_a_command() { - let unknown: Vec<&str> = - LEGACY_IDS.iter().filter(|(_, new)| crate::find_command(new).is_none_or(|c| c.id != *new)).map(|(_, new)| *new).collect(); - // The construction set and Split Face are on a branch not yet merged when the table was made. - let pending = ["solid.split_face"]; - let unknown: Vec<&str> = unknown - .into_iter() - .filter(|n| { - !pending.contains(n) - && !n.starts_with("construct.axis") - && !n.starts_with("construct.point") - && ![ - "construct.plane.midplane", - "construct.plane.two_edges", - "construct.plane.three_points", - "construct.plane.tangent", - "construct.plane.along_path", - ] - .contains(n) - }) - .collect(); - assert!(unknown.is_empty(), "{unknown:?}"); - assert_eq!(crate::find_command("SketchCreate").map(|c| c.id), Some("sketch.create")); - } -} diff --git a/crates/engine/src/lib.rs b/crates/engine/src/lib.rs index 7a75cdf6..593c933f 100644 --- a/crates/engine/src/lib.rs +++ b/crates/engine/src/lib.rs @@ -10,7 +10,6 @@ pub mod cmd; pub mod frames; pub mod fuzz; -pub mod legacy_ids; pub mod licences; pub mod occurrences; pub mod params; diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 4cdcc6f6..fe121b45 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -512,11 +512,22 @@ fn registry_is_consistent() { let n = ids.len(); ids.dedup(); assert_eq!(ids.len(), n, "duplicate command ids"); - assert!(find_command("extrude").is_some(), "case-insensitive lookup"); + assert_eq!(find_command("Solid.Extrude").map(|c| c.id), Some("solid.extrude"), "case-insensitive lookup"); let s = Session::default(); assert!(!find_command("sketch.line").unwrap().info(&s).enabled); } +/// Only SolidCraft's own dotted ids name commands; other ids are unknown commands. +#[test] +fn only_own_ids_name_commands() { + for old in ["Extrude", "SketchCreate", "FusionFilletEdgesCommand"] { + assert!(find_command(old).is_none(), "{old}"); + let mut s = Session::default(); + let err = s.execute(old, &serde_json::json!({})).unwrap_err(); + assert!(matches!(err, crate::EngineError::UnknownCommand(_)), "{old}: {err}"); + } +} + #[test] fn sample_design_builds() { let mut s = Session::default(); @@ -2336,15 +2347,15 @@ fn boundary_fill_cells() { let mut s = Session::default(); run(&mut s, "solid.box", json!({"length": 20, "width": 20, "height": 20, "body_name": "A"})); run(&mut s, "solid.box", json!({"corner": [10, 0, 0], "length": 20, "width": 20, "height": 20, "body_name": "B"})); - let r = run(&mut s, "SurfaceSculpt", json!({"tools": ["A", "B"], "cells": [[15, 10, 10]], "remove_tools": true})); + let r = run(&mut s, "solid.boundary_fill", json!({"tools": ["A", "B"], "cells": [[15, 10, 10]], "remove_tools": true})); let m = run(&mut s, "inspect.measure", json!({})); assert_eq!(m["body_count"], 1, "{r} {m}"); assert!(rel(m["total"]["volume_mm3"].as_f64().unwrap_or(0.0), 10.0 * 20.0 * 20.0) < 1e-9); run(&mut s, "edit.undo", json!({})); - run(&mut s, "SurfaceSculpt", json!({"tools": ["A", "B"], "cells": [[5, 10, 10], [25, 10, 10]], "remove_tools": true})); + run(&mut s, "solid.boundary_fill", json!({"tools": ["A", "B"], "cells": [[5, 10, 10], [25, 10, 10]], "remove_tools": true})); let m = run(&mut s, "inspect.measure", json!({})); assert!(rel(m["total"]["volume_mm3"].as_f64().unwrap_or(0.0), 2.0 * 10.0 * 20.0 * 20.0) < 1e-9, "{m}"); - assert!(s.execute("SurfaceSculpt", &json!({"tools": ["A"], "cells": [[100, 100, 100]]})).is_err()); + assert!(s.execute("solid.boundary_fill", &json!({"tools": ["A"], "cells": [[100, 100, 100]]})).is_err()); } /// Rectangles name their sides and corners, so they can be dimensioned without inspecting the diff --git a/crates/ui-egui/src/dialogs.rs b/crates/ui-egui/src/dialogs.rs index 27739eaa..8f336a01 100644 --- a/crates/ui-egui/src/dialogs.rs +++ b/crates/ui-egui/src/dialogs.rs @@ -366,7 +366,7 @@ impl Dialog { Kind::ReplaceFace, vec![SelInput::new("Faces", PLANAR_FACES, true), SelInput::new("Target", PLANES | PLANAR_FACES, false)], ), - "SurfaceSculpt" => { + "solid.boundary_fill" => { Dialog::new(Kind::BoundaryFill { operation: 0, cells: Vec::new(), of: Vec::new() }, vec![SelInput::new("Tools", BODIES, true)]) } "solid.align" => Dialog::new( @@ -2848,7 +2848,7 @@ fn dialog_commands(app: &SolveApp, d: &Dialog) -> Result, S if picked.is_empty() { return Err("tick the cells to fill".into()); } - ("SurfaceSculpt", json!({"tools": body_names(0), "cells": picked, "operation": OPS.get(*operation).copied().unwrap_or("new")})) + ("solid.boundary_fill", json!({"tools": body_names(0), "cells": picked, "operation": OPS.get(*operation).copied().unwrap_or("new")})) } Kind::Combine { operation, keep_tools } => { need(0, "the target body")?; @@ -3383,7 +3383,7 @@ pub fn for_feature(app: &SolveApp, id: u64, marker: Option) -> Option { - let mut d = start("SurfaceSculpt")?; + let mut d = start("solid.boundary_fill")?; // The cells again, ticked where a stored cell point lies in the same cell. let before = s.model.state_before(f.id); let found = fill_cells(&before, tools); diff --git a/crates/ui-egui/src/keymap.rs b/crates/ui-egui/src/keymap.rs index 0aa4fb93..afb84559 100644 --- a/crates/ui-egui/src/keymap.rs +++ b/crates/ui-egui/src/keymap.rs @@ -38,15 +38,10 @@ impl Keymap { } pub fn load(&mut self, v: &Value) { self.custom = - v.as_object().map(|o| o.iter().take(2000).filter_map(|(k, v)| Some((current(k), v.as_str()?.to_string()))).collect()).unwrap_or_default(); + v.as_object().map(|o| o.iter().take(2000).filter_map(|(k, v)| Some((k.clone(), v.as_str()?.to_string()))).collect()).unwrap_or_default(); } } -/// Saved before the command ids were renamed: the current id. -fn current(id: &str) -> String { - solvecraft_engine::legacy_ids::current_id(id).to_string() -} - /// A key press as a shortcut name: `E`, `Shift+E`, `Ctrl+Alt+K`, `F5`, `Delete`. pub fn key_name(key: egui::Key, mods: egui::Modifiers) -> String { let mut s = String::new(); diff --git a/crates/ui-egui/src/menu_tests.rs b/crates/ui-egui/src/menu_tests.rs index 5657882c..3f8b2f33 100644 --- a/crates/ui-egui/src/menu_tests.rs +++ b/crates/ui-egui/src/menu_tests.rs @@ -594,8 +594,8 @@ fn toolbar_pins_removes_reorders_and_keeps_its_layout() { tc::reorder(&mut app, "SOLID", extra, "MODIFY", None); assert!(!ids(&app, "CREATE").contains(&extra) && ids(&app, "MODIFY").last() == Some(&extra)); // Pin to Shortcuts goes to the S box's favourites. - act(&mut app, &Target::ToolbarCommand { id: "Extrude".into() }, "Pin to Shortcuts"); - assert!(app.sbox.pinned.iter().any(|p| p == "Extrude")); + act(&mut app, &Target::ToolbarCommand { id: "solid.extrude".into() }, "Pin to Shortcuts"); + assert!(app.sbox.pinned.iter().any(|p| p == "solid.extrude")); // Kept between runs, and exported and imported with the shortcuts. let mut other = sample_app(); other.load_prefs(&app.prefs()); diff --git a/crates/ui-egui/src/preselect_tests.rs b/crates/ui-egui/src/preselect_tests.rs index 05a81df7..0c67046d 100644 --- a/crates/ui-egui/src/preselect_tests.rs +++ b/crates/ui-egui/src/preselect_tests.rs @@ -543,7 +543,7 @@ fn boundary_fill_finds_the_cells_and_fills_the_ticked_ones() { {"command": "solid.box", "params": {"length": 20, "width": 20, "height": 20}}, {"command": "solid.box", "params": {"length": 20, "width": 20, "height": 20, "corner": [10, 10, 0], "operation": "new"}} ])); - let mut d = start(&mut app, vec![], "SurfaceSculpt"); + let mut d = start(&mut app, vec![], "solid.boundary_fill"); d.inputs[0].items = vec![Sel::Body { name: "Body1".into() }, Sel::Body { name: "Body2".into() }]; app.dialog = Some(d); // The dialog finds the cells on its next frame. diff --git a/crates/ui-egui/src/shortcut_box.rs b/crates/ui-egui/src/shortcut_box.rs index 5d690cac..5d3561c8 100644 --- a/crates/ui-egui/src/shortcut_box.rs +++ b/crates/ui-egui/src/shortcut_box.rs @@ -34,10 +34,7 @@ impl ShortcutBox { } pub fn load(&mut self, v: &Value) { let list = |k: &str| -> Vec { - v.get(k) - .and_then(Value::as_array) - .map(|a| a.iter().take(64).filter_map(|x| x.as_str().map(|id| solvecraft_engine::legacy_ids::current_id(id).to_string())).collect()) - .unwrap_or_default() + v.get(k).and_then(Value::as_array).map(|a| a.iter().take(64).filter_map(|x| x.as_str().map(str::to_string)).collect()).unwrap_or_default() }; self.recent = list("recent"); self.pinned = list("pinned"); diff --git a/docs/book/src/SUMMARY.md b/docs/book/src/SUMMARY.md index 1f319341..cee25bdc 100644 --- a/docs/book/src/SUMMARY.md +++ b/docs/book/src/SUMMARY.md @@ -26,7 +26,7 @@ - [Test harnesses](dev/testing.md) - [Control protocol](dev/control-protocol.md) - [Reference tests](dev/oracle.md) -- [Command parity](dev/parity.md) +- [Features](dev/features.md) - [STEP import](dev/step-import.md) # Reference diff --git a/docs/book/src/dev/architecture.md b/docs/book/src/dev/architecture.md index cd06991d..eef50f71 100644 --- a/docs/book/src/dev/architecture.md +++ b/docs/book/src/dev/architecture.md @@ -7,7 +7,7 @@ SolidCraft is a Cargo workspace in layers. A crate only depends on crates in low The web app, `apps/solvecraft-web`, is the desktop front end compiled to wasm with [trunk](https://trunkrs.dev). `xtask` holds the repository's own tooling: `cargo xtask ci`, -`layers`, `assets`, `oracle`, `parity` and `book`. +`layers`, `assets`, `features`, `oracle` and `book`. A few rules follow from the layering: diff --git a/docs/book/src/dev/commands.md b/docs/book/src/dev/commands.md index 798cad16..16a5202b 100644 --- a/docs/book/src/dev/commands.md +++ b/docs/book/src/dev/commands.md @@ -24,8 +24,8 @@ before it runs, and a failing command leaves the document unchanged. Feature com feature to the timeline and let the document evaluate it; they validate their inputs first (units, ranges, references) and return `BadParams` instead of building a broken feature. -Ids used before the 2026-10 rename still resolve through `crates/engine/src/legacy_ids.rs`, so -old scripts, recipes, saved shortcuts and toolbar layouts keep working. +Only the registry's own dotted ids name commands (matched ignoring case); any other id fails +with `unknown command`. ## Adding a command diff --git a/docs/book/src/dev/features.md b/docs/book/src/dev/features.md new file mode 100644 index 00000000..126e2604 --- /dev/null +++ b/docs/book/src/dev/features.md @@ -0,0 +1 @@ +{{#include ../../../features.md}} diff --git a/docs/book/src/dev/parity.md b/docs/book/src/dev/parity.md deleted file mode 100644 index a15eb493..00000000 --- a/docs/book/src/dev/parity.md +++ /dev/null @@ -1 +0,0 @@ -{{#include ../../../parity.md}} diff --git a/docs/book/src/guide/plastic.md b/docs/book/src/guide/plastic.md index 50389c84..65cf88ca 100644 --- a/docs/book/src/guide/plastic.md +++ b/docs/book/src/guide/plastic.md @@ -10,4 +10,4 @@ The PLASTIC tab has a small enclosure subset: clearance per material, used as the features' defaults. Rib and web (on the SOLID tab) complete the set. These features are checked against -hand-computed geometry rather than a Fusion oracle. +hand-computed geometry. diff --git a/docs/book/src/guide/sheet-metal.md b/docs/book/src/guide/sheet-metal.md index fd98984c..631e04ba 100644 --- a/docs/book/src/guide/sheet-metal.md +++ b/docs/book/src/guide/sheet-metal.md @@ -11,8 +11,8 @@ The SHEET METAL tab builds parts from a sheet of constant thickness under a **sh - **Create Flat Pattern** (`sheet.flat_pattern`) shows the flat part with its bend lines and a bend table, and exports it as DXF or a bend-table CSV through the save picker. -Bends follow the rule's K-factor, so flat lengths match what a press brake will make. The -oracle checks these against parts built in Fusion. +Bends follow the rule's K-factor, so flat lengths match what a press brake will make. Tests +check flat lengths against hand-computed bend allowances. For a shop drawing or spreadsheet, `sheet.export_bend_table` returns CSV by default; choose `format: "json"` for structured data. It includes the sheet rule, thickness, bend angles, diff --git a/docs/book/src/introduction.md b/docs/book/src/introduction.md index ce6462d0..595c031a 100644 --- a/docs/book/src/introduction.md +++ b/docs/book/src/introduction.md @@ -21,8 +21,8 @@ also script, test or hand to an agent. SolidCraft is early. Sketching, solid modelling, parameters, components with joints, sheet metal and a plastic-enclosure subset work; surfaces, drawings, CAM and simulation are deferred. The [roadmap](https://github.com/bherbruck/solidcraft/blob/main/ROADMAP.md) has the details, and -[command parity](dev/parity.md) and the [reference tests](dev/oracle.md) measure how far along it -is. +the [feature list](dev/features.md) lists every command by area, and the +[reference tests](dev/oracle.md) check modelling results against analytic and FreeCAD values. Existing `.solvecraft` designs and `solvecraft-cli` commands keep their names and behavior. @@ -30,5 +30,7 @@ This book has two halves: the **user guide** for people modelling with SolidCraf **developer guide** for people working on it. The [command reference](reference/commands.md) is generated from the code on every build. -SolidCraft is licensed MIT OR Apache-2.0. It is a clean-room implementation and is not affiliated -with Autodesk; Fusion is a trademark of Autodesk, Inc. +SolidCraft is licensed MIT OR Apache-2.0. It is independent: behaviour is designed from public +documentation, general CAD conventions and user feedback, and reference tests use analytic +values and open-source tools. SolidCraft is not affiliated with Autodesk; Fusion is a trademark +of Autodesk, Inc. diff --git a/docs/features.md b/docs/features.md new file mode 100644 index 00000000..91ad8e93 --- /dev/null +++ b/docs/features.md @@ -0,0 +1,487 @@ +# Features + +SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solvecraft-cli commands`). **314 commands.** Every command runs the same way from the toolbar, a script, `solvecraft-cli exec ''`, 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 (97) + +| Command | Id | Toolbar | +|---|---|---| +| Create Sketch | `sketch.create` | SOLID › CREATE | +| Edit Sketch | `sketch.edit` | – | +| Finish Sketch | `sketch.finish` | SKETCH › FINISH SKETCH | +| Line (L) | `sketch.line` | SKETCH › CREATE | +| Draw Dimensioned Sketch Geometry | `sketch.draw.dimensioned` | – | +| 2-Point Rectangle (R) | `sketch.rectangle.two_point` | SKETCH › CREATE | +| 3-Point Rectangle | `sketch.rectangle.three_point` | SKETCH › CREATE | +| Center Rectangle | `sketch.rectangle.center` | SKETCH › CREATE | +| Center Diameter Circle (C) | `sketch.circle.center` | SKETCH › CREATE | +| 2-Point Circle | `sketch.circle.two_point` | SKETCH › CREATE | +| 3-Point Circle | `sketch.circle.three_point` | SKETCH › CREATE | +| 3-Point Arc | `sketch.arc.three_point` | SKETCH › CREATE | +| Center Point Arc | `sketch.arc.center_point` | SKETCH › CREATE | +| Inscribed Polygon | `sketch.polygon.inscribed` | SKETCH › CREATE | +| Circumscribed Polygon | `sketch.polygon.circumscribed` | SKETCH › CREATE | +| Edge Polygon | `sketch.polygon.edge` | SKETCH › CREATE | +| Center to Center Slot | `sketch.slot.center_to_center` | SKETCH › CREATE | +| Overall Slot | `sketch.slot.overall` | SKETCH › CREATE | +| Point | `sketch.point` | SKETCH › CREATE | +| Sketch Dimension (D) | `sketch.dimension` | SKETCH › CREATE | +| Horizontal/Vertical | `sketch.constraint.horizontal_vertical` | SKETCH › CONSTRAINTS | +| Coincident | `sketch.constraint.coincident` | SKETCH › CONSTRAINTS | +| Tangent | `sketch.constraint.tangent` | SKETCH › CONSTRAINTS | +| Equal | `sketch.constraint.equal` | SKETCH › CONSTRAINTS | +| Parallel | `sketch.constraint.parallel` | SKETCH › CONSTRAINTS | +| Perpendicular | `sketch.constraint.perpendicular` | SKETCH › CONSTRAINTS | +| Fix/UnFix | `sketch.constraint.fix` | SKETCH › CONSTRAINTS | +| MidPoint | `sketch.constraint.midpoint` | SKETCH › CONSTRAINTS | +| Concentric | `sketch.constraint.concentric` | SKETCH › CONSTRAINTS | +| Collinear | `sketch.constraint.collinear` | SKETCH › CONSTRAINTS | +| Symmetry | `sketch.constraint.symmetry` | SKETCH › CONSTRAINTS | +| Normal/Construction (X) | `sketch.construction` | SKETCH › CREATE | +| Delete Sketch Entities | `sketch.delete` | – | +| Drag Sketch Point | `sketch.move_point` | – | +| Drag Sketch Geometry | `sketch.drag` | – | +| Move Dimension Text | `sketch.dimension_text` | – | +| Sketch Palette Options | `sketch.options` | – | +| Chain | `sketch.chain` | – | +| Solve Sketch | `sketch.solve` | – | +| Midpoint Line | `sketch.line.midpoint` | SKETCH › CREATE | +| Tangent Arc | `sketch.arc.tangent` | SKETCH › CREATE | +| 2-Tangent Circle | `sketch.circle.two_tangent` | SKETCH › CREATE | +| 3-Tangent Circle | `sketch.circle.three_tangent` | SKETCH › CREATE | +| Center Point Slot | `sketch.slot.center_point` | SKETCH › CREATE | +| Three Point Arc Slot | `sketch.slot.arc_three_point` | SKETCH › CREATE | +| Center Point Arc Slot | `sketch.slot.arc_center` | SKETCH › CREATE | +| Ellipse | `sketch.ellipse` | SKETCH › CREATE | +| Fit Point Spline | `sketch.spline.fit_point` | SKETCH › CREATE | +| Control Point Spline | `sketch.spline.control_point` | SKETCH › CREATE | +| Control Point Spline (Degree 5) | `sketch.spline.control_point_5` | SKETCH › CREATE | +| Conic Curve | `sketch.conic` | SKETCH › CREATE | +| Blend Curve | `sketch.blend_curve` | SKETCH › MODIFY | +| Centerline | `sketch.centerline` | – | +| Text | `sketch.text` | SKETCH › CREATE | +| Edit Text | `sketch.edit_text` | – | +| Curvature | `sketch.constraint.curvature` | SKETCH › CONSTRAINTS | +| Polygon | `sketch.constraint.polygon` | SKETCH › CONSTRAINTS | +| AutoConstrain | `sketch.auto_constrain` | SKETCH › CONSTRAINTS | +| AutoConstrain from datum | `sketch.auto_constrain_from_datum` | SKETCH › CONSTRAINTS | +| Finish with AutoConstrain | `sketch.finish_auto_constrain` | SKETCH › FINISH SKETCH | +| Sketch Constrainer | `sketch.constrainer` | SKETCH › CREATE | +| Toggle Driven Dimension | `sketch.toggle_driven` | – | +| Constraint Glyphs | `sketch.glyphs` | – | +| Snap Inference | `sketch.snap` | – | +| Insert DXF | `sketch.insert_dxf` | SKETCH › INSERT | +| Insert SVG | `sketch.insert_svg` | SKETCH › INSERT | +| Save As DXF | `sketch.export_dxf` | – | +| 3D Line | `sketch.line3d` | – | +| 3D Spline | `sketch.spline3d` | – | +| 3D Point | `sketch.point3d` | – | +| Move 3D Point | `sketch.move3d` | – | +| Fillet | `sketch.fillet` | SKETCH › MODIFY | +| Equal Distance Chamfer | `sketch.chamfer.equal_distance` | SKETCH › MODIFY | +| Distance and Angle Chamfer | `sketch.chamfer.distance_angle` | SKETCH › MODIFY | +| Two Distance Chamfer | `sketch.chamfer.two_distance` | SKETCH › MODIFY | +| Offset (O) | `sketch.offset` | SKETCH › MODIFY | +| Break Offset Association | `sketch.offset.break` | – | +| Trim (T) | `sketch.trim` | SKETCH › MODIFY | +| Extend | `sketch.extend` | SKETCH › MODIFY | +| Break | `sketch.break` | SKETCH › MODIFY | +| Sketch Scale | `sketch.scale` | SKETCH › MODIFY | +| Move/Copy Sketch Entities | `sketch.move` | – | +| Mirror | `sketch.mirror` | SKETCH › CREATE | +| Circular Pattern | `sketch.pattern.circular` | SKETCH › CREATE | +| Rectangular Pattern | `sketch.pattern.rectangular` | SKETCH › CREATE | +| Project (P) | `sketch.project` | SKETCH › CREATE | +| Intersect | `sketch.intersect` | SKETCH › CREATE | +| Include 3D Geometry | `sketch.include_3d` | SKETCH › CREATE | +| Project To Surface | `sketch.project_to_surface` | SKETCH › CREATE | +| Intersection Curve | `sketch.intersection_curve` | SKETCH › CREATE | +| Spun Profile | `sketch.spun_profile` | SKETCH › CREATE | +| Isoparametric Curve | `sketch.isoparametric_curve` | SKETCH › CREATE | +| Fit Curves to Mesh Section | `sketch.fit_curves_to_section` | SKETCH › CREATE | +| Break Link | `sketch.break_link` | – | +| Auto-Project Edges on Reference | `sketch.auto_project` | – | +| Redefine Sketch Plane | `sketch.redefine` | – | +| Inspect Sketch | `sketch.inspect` | – | + +## Solid modelling (35) + +| Command | Id | Toolbar | +|---|---|---| +| Extrude (E) | `solid.extrude` | SOLID › CREATE | +| Revolve | `solid.revolve` | SOLID › CREATE | +| Sweep | `solid.sweep` | SOLID › CREATE | +| Loft | `solid.loft` | SOLID › CREATE | +| Box | `solid.box` | SOLID › CREATE | +| Cylinder | `solid.cylinder` | SOLID › CREATE | +| Sphere | `solid.sphere` | SOLID › CREATE | +| Torus | `solid.torus` | SOLID › CREATE | +| Fillet (F) | `solid.fillet` | SOLID › MODIFY | +| Chamfer | `solid.chamfer` | SOLID › MODIFY | +| Combine | `solid.combine` | SOLID › MODIFY | +| Rectangular Pattern | `solid.pattern.rectangular` | SOLID › CREATE | +| Circular Pattern | `solid.pattern.circular` | SOLID › CREATE | +| Pattern on Path | `solid.pattern.path` | SOLID › CREATE | +| Mirror | `solid.mirror` | SOLID › CREATE | +| Hole (H) | `solid.hole` | SOLID › CREATE | +| Pipe | `solid.pipe` | SOLID › CREATE | +| Bounding Solid | `solid.bounding_solid` | SOLID › CREATE | +| Scale | `solid.scale` | SOLID › MODIFY | +| Offset Face | `solid.offset_face` | SOLID › MODIFY | +| Thread | `solid.thread` | SOLID › CREATE | +| Shell | `solid.shell` | SOLID › MODIFY | +| Draft | `solid.draft` | SOLID › MODIFY | +| Split Face | `solid.split_face` | SOLID › MODIFY | +| Split Body | `solid.split_body` | SOLID › MODIFY | +| Press Pull (Q) | `solid.press_pull` | SOLID › MODIFY | +| Move/Copy (M) | `solid.move` | SOLID › MODIFY | +| Boundary Fill | `solid.boundary_fill` | SOLID › CREATE | +| Coil | `solid.coil` | SOLID › CREATE | +| Rib | `solid.rib` | SOLID › CREATE | +| Web | `solid.web` | SOLID › CREATE | +| Emboss | `solid.emboss` | SOLID › CREATE | +| Replace Face | `solid.replace_face` | SOLID › MODIFY | +| Align | `solid.align` | SOLID › MODIFY | +| Remove | `solid.remove` | SOLID › MODIFY | + +## Surfaces (5) + +| Command | Id | Toolbar | +|---|---|---| +| Patch | `surface.patch` | SURFACE › CREATE | +| Stitch | `surface.stitch` | SURFACE › MODIFY | +| Thicken | `surface.thicken` | SURFACE › CREATE | +| Extend | `surface.extend` | SURFACE › MODIFY | +| Trim | `surface.trim` | SURFACE › MODIFY | + +## Construction geometry (19) + +| Command | Id | Toolbar | +|---|---|---| +| Offset Plane | `construct.plane.offset` | SOLID › CONSTRUCT | +| Plane at Angle | `construct.plane.at_angle` | SOLID › CONSTRUCT | +| Axis Through Cylinder/Cone/Torus | `construct.axis.through_cylinder` | SOLID › CONSTRUCT | +| Axis Perpendicular To Face | `construct.axis.normal_to_face` | SOLID › CONSTRUCT | +| Axis Through Two Planes | `construct.axis.two_planes` | SOLID › CONSTRUCT | +| Axis Through Two Points | `construct.axis.two_points` | SOLID › CONSTRUCT | +| Axis Through Edge | `construct.axis.edge` | SOLID › CONSTRUCT | +| Point At Vertex | `construct.point.vertex` | SOLID › CONSTRUCT | +| Point Through Two Edges | `construct.point.two_edges` | SOLID › CONSTRUCT | +| Point Through Three Planes | `construct.point.three_planes` | SOLID › CONSTRUCT | +| Point At Center Of Circle/Sphere/Torus | `construct.point.center` | SOLID › CONSTRUCT | +| Point At Edge And Plane | `construct.point.edge_plane` | SOLID › CONSTRUCT | +| Point Along Path | `construct.point.along_path` | SOLID › CONSTRUCT | +| Midplane | `construct.plane.midplane` | SOLID › CONSTRUCT | +| Plane Through Two Edges | `construct.plane.two_edges` | SOLID › CONSTRUCT | +| Plane Through Three Points | `construct.plane.three_points` | SOLID › CONSTRUCT | +| Tangent Plane | `construct.plane.tangent` | SOLID › CONSTRUCT | +| Plane Along Path | `construct.plane.along_path` | SOLID › CONSTRUCT | +| Perpendicular Plane | `construct.plane.perpendicular` | SOLID › CONSTRUCT | + +## Sheet metal (11) + +| Command | Id | Toolbar | +|---|---|---| +| Flange | `sheet.flange` | SHEET METAL › CREATE | +| Hem | `sheet.hem` | SHEET METAL › CREATE | +| Fold | `sheet.fold` | SHEET METAL › CREATE | +| Unfold | `sheet.unfold` | SHEET METAL › MODIFY | +| Refold | `sheet.refold` | SHEET METAL › MODIFY | +| Convert to Sheet Metal | `sheet.convert` | SHEET METAL › CREATE | +| Sheet Metal Rules | `sheet.manage_rules` | SHEET METAL › MODIFY | +| List Sheet Metal Rules | `sheet.rules` | – | +| Create Flat Pattern | `sheet.flat_pattern` | SHEET METAL › CREATE | +| Export Flat Pattern as DXF | `sheet.export_dxf` | – | +| Export Bend Table | `sheet.export_bend_table` | – | + +## Plastic parts (7) + +| Command | Id | Toolbar | +|---|---|---| +| Boss | `plastic.boss` | PLASTIC › CREATE | +| Lip | `plastic.lip` | PLASTIC › CREATE | +| Snap Fit | `plastic.snap_fit` | PLASTIC › CREATE | +| Rest | `plastic.rest` | PLASTIC › CREATE | +| Manage Plastic Rules | `plastic.manage_rules` | PLASTIC › SETUP | +| Assign Plastic Rule | `plastic.assign_rule` | PLASTIC › SETUP | +| List Plastic Rules | `plastic.rules` | – | + +## Components (12) + +| Command | Id | Toolbar | +|---|---|---| +| New Component | `component.create` | SOLID › ASSEMBLE | +| Create Components from Bodies | `component.from_bodies` | – | +| Activate Component | `component.activate` | – | +| List Components | `component.list` | – | +| Component Physical Properties | `component.properties` | – | +| Rename Component | `component.rename` | – | +| Delete Component | `component.delete` | – | +| Move Bodies to Component | `component.move_bodies` | – | +| Move Sketches to Component | `component.move_sketches` | – | +| Paste New | `component.paste_new` | – | +| Capture Position | `component.capture_position` | SOLID › POSITION | +| Revert Position | `component.revert_position` | SOLID › POSITION | + +## Assembly joints (11) + +| Command | Id | Toolbar | +|---|---|---| +| Joint Origin | `joint.origin` | SOLID › CREATE | +| Joint (J) | `joint.create` | SOLID › ASSEMBLE | +| As-Built Joint | `joint.as_built` | SOLID › ASSEMBLE | +| Rigid Group | `joint.rigid_group` | SOLID › ASSEMBLE | +| Drive Joints | `joint.drive` | SOLID › ASSEMBLE | +| Motion Link | `joint.motion_link` | SOLID › ASSEMBLE | +| Joint Limits | `joint.limits` | – | +| Edit Joint | `joint.edit` | – | +| Delete Joint | `joint.delete` | – | +| List Joints | `joint.list` | – | +| Solve Joints | `joint.solve` | – | + +## Configurations (8) + +| Command | Id | Toolbar | +|---|---|---| +| Configure | `config.configure` | SOLID › CONFIGURE | +| Display Configuration Table | `config.table` | SOLID › CONFIGURE | +| Configuration Column | `config.column` | – | +| Configuration Row | `config.row` | – | +| Activate Configuration | `config.activate` | – | +| Preview Configuration | `config.preview` | – | +| Configuration Rule | `config.rule` | – | +| Configuration Rules | `config.rules` | – | + +## Timeline (13) + +| Command | Id | Toolbar | +|---|---|---| +| Compute All | `timeline.compute_all` | SOLID › MODIFY | +| Delete (Delete) | `timeline.delete` | SOLID › MODIFY | +| Rename | `timeline.rename` | – | +| Move Timeline Marker | `timeline.rollback` | – | +| Roll History Marker | `timeline.roll_to` | – | +| Reorder Feature | `timeline.reorder` | – | +| Edit Feature | `timeline.redefine` | – | +| Feature Dependents | `timeline.dependents` | – | +| Suppress Feature | `timeline.suppress` | – | +| Edit Feature | `timeline.edit` | – | +| Inspect Feature | `timeline.inspect` | – | +| Copy Features | `timeline.copy` | – | +| Paste Features | `timeline.paste` | – | + +## Inspect (12) + +| Command | Id | Toolbar | +|---|---|---| +| Curvature Comb Analysis | `inspect.curvature_comb` | SKETCH › INSPECT | +| Minimum Radius Analysis | `inspect.minimum_radius` | SKETCH › INSPECT | +| Isocurve Analysis | `inspect.isocurve` | SKETCH › INSPECT | +| Center of Mass | `inspect.center_of_mass` | SKETCH › INSPECT | +| Zebra Analysis | `inspect.zebra` | SKETCH › INSPECT | +| Draft Analysis | `inspect.draft` | SKETCH › INSPECT | +| Environment Map Analysis | `inspect.environment_map` | SKETCH › INSPECT | +| Accessibility Analysis | `inspect.accessibility` | SKETCH › INSPECT | +| Curvature Map Analysis | `inspect.curvature_map` | SKETCH › INSPECT | +| Interference | `inspect.interference` | SOLID › INSPECT | +| Measure (I) | `inspect.measure` | SOLID › INSPECT | +| Section Analysis | `inspect.section` | SOLID › INSPECT | + +## Files (7) + +| Command | Id | Toolbar | +|---|---|---| +| New Design (Ctrl+N) | `file.new` | – | +| Insert STEP | `file.insert_step` | SOLID › INSERT | +| Insert Mesh | `file.insert_mesh` | SOLID › INSERT | +| Save (Ctrl+S) | `file.save` | – | +| Save As | `file.save_as` | – | +| Export | `file.export` | – | +| Save As Mesh | `file.save_mesh` | – | + +## Documents (4) + +| Command | Id | Toolbar | +|---|---|---| +| Open (Ctrl+O) | `doc.open` | – | +| Recoverable Designs | `doc.recovery_list` | – | +| Recover Design | `doc.recover` | – | +| Discard Recovered Design | `doc.recovery_discard` | – | + +## Edit (4) + +| Command | Id | Toolbar | +|---|---|---| +| Undo (Ctrl+Z) | `edit.undo` | – | +| Redo (Ctrl+Y) | `edit.redo` | – | +| Checkpoint | `edit.checkpoint` | – | +| Restore Checkpoint | `edit.restore_checkpoint` | – | + +## `appearance.*` (3) + +| Command | Id | Toolbar | +|---|---|---| +| Appearance (A) | `appearance.assign` | SOLID › MODIFY | +| Appearance Library | `appearance.library` | – | +| List Appearances | `appearance.list` | – | + +## `body.*` (1) + +| Command | Id | Toolbar | +|---|---|---| +| Rename Body | `body.rename` | – | + +## `browser.*` (6) + +| Command | Id | Toolbar | +|---|---|---| +| New Group | `browser.group` | – | +| Ungroup | `browser.ungroup` | – | +| Rename Group | `browser.rename_group` | – | +| Move Browser Items | `browser.move` | – | +| Order Browser Items | `browser.order` | – | +| Show/Hide | `browser.visibility` | – | + +## `canvas.*` (5) + +| Command | Id | Toolbar | +|---|---|---| +| Canvas | `canvas.insert` | SKETCH › INSERT | +| Decal | `canvas.decal` | SKETCH › INSERT | +| Edit Canvas | `canvas.edit` | SKETCH › INSERT | +| Calibrate Canvas | `canvas.calibrate` | – | +| Delete Canvas | `canvas.delete` | – | + +## `contact.*` (7) + +| Command | Id | Toolbar | +|---|---|---| +| Enable Contact Sets | `contact.enable_sets` | SOLID › ASSEMBLE | +| Enable All Contact | `contact.enable_all` | SOLID › ASSEMBLE | +| Disable Contact | `contact.disable_all` | SOLID › ASSEMBLE | +| New Contact Set | `contact.create` | SOLID › ASSEMBLE | +| Edit Contact Set | `contact.edit` | – | +| List Contact Sets | `contact.list` | – | +| Check Contact | `contact.check` | – | + +## `document.*` (2) + +| Command | Id | Toolbar | +|---|---|---| +| Change Design Units | `document.units` | – | +| Inspect Design | `document.inspect` | – | + +## `engine.*` (1) + +| Command | Id | Toolbar | +|---|---|---| +| List Commands | `engine.commands` | – | + +## `explode.*` (4) + +| Command | Id | Toolbar | +|---|---|---| +| Exploded View | `explode.create` | SOLID › ASSEMBLE | +| Show Exploded View | `explode.show` | – | +| List Exploded Views | `explode.list` | – | +| Delete Exploded View | `explode.delete` | – | + +## `expr.*` (1) + +| Command | Id | Toolbar | +|---|---|---| +| Evaluate Expression | `expr.evaluate` | – | + +## `face.*` (1) + +| Command | Id | Toolbar | +|---|---|---| +| Delete Face | `face.delete` | SOLID › MODIFY | + +## `material.*` (2) + +| Command | Id | Toolbar | +|---|---|---| +| Physical Material | `material.assign` | SOLID › MODIFY | +| List Materials | `material.list` | – | + +## `mesh.*` (1) + +| Command | Id | Toolbar | +|---|---|---| +| Convert Mesh | `mesh.convert` | MESH › MODIFY | + +## `model.*` (3) + +| Command | Id | Toolbar | +|---|---|---| +| List Edges | `model.edges` | – | +| List Faces | `model.faces` | – | +| List Threads | `model.threads` | – | + +## `motion.*` (5) + +| Command | Id | Toolbar | +|---|---|---| +| Motion Study | `motion.study` | SOLID › ASSEMBLE | +| Play Motion Study | `motion.play` | – | +| Export Motion Study | `motion.export` | – | +| List Motion Studies | `motion.list` | – | +| Delete Motion Study | `motion.delete` | – | + +## `occurrence.*` (4) + +| Command | Id | Toolbar | +|---|---|---| +| Occurrence Physical Properties | `occurrence.properties` | – | +| Paste (Instance) | `occurrence.copy` | – | +| Move Occurrence | `occurrence.move` | – | +| Ground | `occurrence.ground` | – | + +## `parameters.*` (12) + +| Command | Id | Toolbar | +|---|---|---| +| Change Parameters | `parameters.change` | SOLID › MODIFY | +| List Parameters | `parameters.list` | – | +| Add User Parameter | `parameters.add` | – | +| Rename Parameter | `parameters.rename` | – | +| Delete Parameter | `parameters.delete` | – | +| Favourite Parameter | `parameters.favorite` | – | +| Comment Parameter | `parameters.comment` | – | +| Parameter Users | `parameters.users` | – | +| Parameter Graph | `parameters.graph` | – | +| Export Parameters | `parameters.export` | – | +| Import Parameters | `parameters.import` | – | +| Complete Expression | `parameters.complete` | – | + +## `parts.*` (4) + +| Command | Id | Toolbar | +|---|---|---| +| Standard Parts | `parts.library` | – | +| Insert Fastener | `parts.fastener` | SOLID › INSERT | +| Insert Part | `parts.insert` | – | +| Change Part Size | `parts.resize` | – | + +## `select.*` (2) + +| Command | Id | Toolbar | +|---|---|---| +| Select | `select.set` | – | +| Clear Selection | `select.clear` | – | + +## `selection.*` (1) + +| Command | Id | Toolbar | +|---|---|---| +| Delete | `selection.delete` | – | + +## `view.*` (4) + +| Command | Id | Toolbar | +|---|---|---| +| New Named View | `view.save` | – | +| Rename Named View | `view.rename` | – | +| Delete Named View | `view.delete` | – | +| List Named Views | `view.list` | – | diff --git a/docs/parity.md b/docs/parity.md deleted file mode 100644 index 5fcbd494..00000000 --- a/docs/parity.md +++ /dev/null @@ -1,406 +0,0 @@ -# Fusion command parity - -Generated by `cargo xtask parity` from `xtask/data/fusion-catalog.tsv` (the toolbar commands of Fusion's Design workspace, ids and names only) and the live command registry (`solvecraft-cli commands`). A command counts as live when SolidCraft registers the same command id. This measures breadth, not depth; see ROADMAP.md and docs/oracle.md for depth. - -**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 335 / 541 commands live (62%).** SOLID + SKETCH: 188 / 291 (65%). Registered commands: 314. - -Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 631 / 1175 (54%). - -| Tab | Panel | Live | Total | % | -|---|---|---:|---:|---:| -| SOLID | CREATE | 23 | 35 | 66% | -| SOLID | MODIFY | 19 | 32 | 59% | -| SOLID | ASSEMBLE | 12 | 21 | 57% | -| SOLID | CONFIGURE | 3 | 3 | 100% | -| SOLID | CONSTRUCT | 19 | 20 | 95% | -| SOLID | INSPECT | 12 | 25 | 48% | -| SOLID | INSERT | 6 | 11 | 55% | -| SOLID | SELECT | 0 | 15 | 0% | -| SOLID | POSITION | 2 | 2 | 100% | -| SKETCH | CREATE | 41 | 41 | 100% | -| SKETCH | MODIFY | 12 | 12 | 100% | -| SKETCH | CONSTRAINTS | 15 | 15 | 100% | -| SKETCH | CONFIGURE | 3 | 3 | 100% | -| SKETCH | INSPECT | 12 | 25 | 48% | -| SKETCH | INSERT | 7 | 13 | 54% | -| SKETCH | ASSEMBLE | 0 | 1 | 0% | -| SKETCH | SELECT | 0 | 15 | 0% | -| SKETCH | FINISH SKETCH | 2 | 2 | 100% | -| SHEET METAL | CREATE | 15 | 19 | 79% | -| SHEET METAL | MODIFY | 12 | 21 | 57% | -| SHEET METAL | ASSEMBLE | 11 | 20 | 55% | -| SHEET METAL | CONFIGURE | 3 | 3 | 100% | -| SHEET METAL | CONSTRUCT | 19 | 20 | 95% | -| SHEET METAL | INSPECT | 12 | 25 | 48% | -| SHEET METAL | INSERT | 6 | 11 | 55% | -| SHEET METAL | SELECT | 0 | 15 | 0% | -| SHEET METAL | REFOLD | 0 | 1 | 0% | -| SHEET METAL | POSITION | 2 | 2 | 100% | -| ASSEMBLY | INSERT | 4 | 8 | 50% | -| ASSEMBLY | CREATE | 5 | 8 | 62% | -| ASSEMBLY | RELATIONSHIPS | 4 | 11 | 36% | -| ASSEMBLY | MOTION | 3 | 3 | 100% | -| ASSEMBLY | MODIFY | 8 | 11 | 73% | -| ASSEMBLY | CONTACT | 2 | 2 | 100% | -| ASSEMBLY | CONFIGURE | 3 | 3 | 100% | -| ASSEMBLY | CONSTRUCT | 19 | 20 | 95% | -| ASSEMBLY | INSPECT | 12 | 25 | 48% | -| ASSEMBLY | SELECT | 0 | 15 | 0% | -| ASSEMBLY | POSITION | 2 | 2 | 100% | -| PLASTIC | enclosure subset | 5 | 5 | 100% | - -### Deferred tabs - -| Tab | Panel | Live | Total | % | -|---|---|---:|---:|---:| -| SURFACE | CREATE | 9 | 25 | 36% | -| SURFACE | MODIFY | 17 | 26 | 65% | -| SURFACE | ASSEMBLE | 11 | 20 | 55% | -| SURFACE | CONFIGURE | 3 | 3 | 100% | -| SURFACE | CONSTRUCT | 19 | 20 | 95% | -| SURFACE | INSPECT | 12 | 25 | 48% | -| SURFACE | INSERT | 6 | 11 | 55% | -| SURFACE | SELECT | 0 | 15 | 0% | -| SURFACE | POSITION | 2 | 2 | 100% | -| MESH | CREATE | 2 | 5 | 40% | -| MESH | PREPARE | 0 | 4 | 0% | -| MESH | MODIFY | 7 | 30 | 23% | -| MESH | ASSEMBLE | 12 | 21 | 57% | -| MESH | CONFIGURE | 3 | 3 | 100% | -| MESH | CONSTRUCT | 19 | 20 | 95% | -| MESH | INSPECT | 12 | 25 | 48% | -| MESH | INSERT | 5 | 10 | 50% | -| MESH | SELECT | 0 | 10 | 0% | -| MESH | EXPORT | 0 | 1 | 0% | -| MESH | POSITION | 2 | 2 | 100% | -| FORM | CREATE | 2 | 14 | 14% | -| FORM | MODIFY | 5 | 31 | 16% | -| FORM | SYMMETRY | 0 | 6 | 0% | -| FORM | UTILITIES | 0 | 5 | 0% | -| FORM | CONSTRUCT | 19 | 20 | 95% | -| FORM | INSPECT | 12 | 25 | 48% | -| FORM | INSERT | 7 | 13 | 54% | -| FORM | ASSEMBLE | 0 | 1 | 0% | -| FORM | SELECT | 0 | 15 | 0% | -| FORM | FINISH FORM | 0 | 1 | 0% | -| PLASTIC | SETUP | 2 | 2 | 100% | -| PLASTIC | CREATE | 27 | 35 | 77% | -| PLASTIC | MODIFY | 19 | 32 | 59% | -| PLASTIC | ASSEMBLE | 11 | 20 | 55% | -| PLASTIC | CONFIGURE | 3 | 3 | 100% | -| PLASTIC | CONSTRUCT | 19 | 20 | 95% | -| PLASTIC | INSPECT | 12 | 26 | 46% | -| PLASTIC | INSERT | 6 | 11 | 55% | -| PLASTIC | SELECT | 0 | 15 | 0% | -| PLASTIC | POSITION | 2 | 2 | 100% | -| MANAGE | ASSIGN | 0 | 1 | 0% | -| MANAGE | RELEASE | 0 | 2 | 0% | -| MANAGE | BOM | 0 | 2 | 0% | -| MANAGE | PROCESS MANAGEMENT | 0 | 3 | 0% | -| MANAGE | TASK MANAGEMENT | 0 | 3 | 0% | -| UTILITIES | MODELING TOOLS | 0 | 1 | 0% | -| UTILITIES | MAKE | 0 | 1 | 0% | -| UTILITIES | NEST | 0 | 1 | 0% | -| UTILITIES | ADD-INS | 0 | 2 | 0% | -| UTILITIES | UTILITY | 1 | 3 | 33% | -| UTILITIES | INSPECT | 11 | 24 | 46% | -| UTILITIES | CREATE PMI | 0 | 4 | 0% | -| UTILITIES | SELECT | 0 | 15 | 0% | -| UTILITIES | POSITION | 2 | 2 | 100% | - -## Live (SOLID, SKETCH) - -- SOLID › CREATE › Create Sketch -- SOLID › CREATE › Extrude -- SOLID › CREATE › Revolve -- SOLID › CREATE › Sweep -- SOLID › CREATE › Loft -- SOLID › CREATE › Rib -- SOLID › CREATE › Web -- SOLID › CREATE › Emboss -- SOLID › CREATE › Hole -- SOLID › CREATE › Thread -- SOLID › CREATE › Box -- SOLID › CREATE › Cylinder -- SOLID › CREATE › Sphere -- SOLID › CREATE › Torus -- SOLID › CREATE › Coil -- SOLID › CREATE › Pipe -- SOLID › CREATE › Bounding Solid -- SOLID › CREATE › Rectangular Pattern -- SOLID › CREATE › Circular Pattern -- SOLID › CREATE › Pattern on Path -- SOLID › CREATE › Mirror -- SOLID › CREATE › Thicken -- SOLID › CREATE › Joint Origin -- SOLID › MODIFY › Press Pull -- SOLID › MODIFY › Fillet -- SOLID › MODIFY › Chamfer -- SOLID › MODIFY › Shell -- SOLID › MODIFY › Draft -- SOLID › MODIFY › Scale -- SOLID › MODIFY › Combine -- SOLID › MODIFY › Offset Face -- SOLID › MODIFY › Replace Face -- SOLID › MODIFY › Split Face -- SOLID › MODIFY › Split Body -- SOLID › MODIFY › Move/Copy -- SOLID › MODIFY › Align -- SOLID › MODIFY › Delete -- SOLID › MODIFY › Remove -- SOLID › MODIFY › Physical Material -- SOLID › MODIFY › Appearance -- SOLID › MODIFY › Change Parameters -- SOLID › MODIFY › Compute All -- SOLID › ASSEMBLE › Insert Component -- SOLID › ASSEMBLE › New Component -- SOLID › ASSEMBLE › Joint -- SOLID › ASSEMBLE › As-Built Joint -- SOLID › ASSEMBLE › Rigid Group -- SOLID › ASSEMBLE › Drive Joints -- SOLID › ASSEMBLE › Motion Link -- SOLID › ASSEMBLE › Motion Study -- SOLID › ASSEMBLE › Enable Contact Sets -- SOLID › ASSEMBLE › Enable All Contact -- SOLID › ASSEMBLE › Disable Contact -- SOLID › ASSEMBLE › New Contact Set -- SOLID › CONFIGURE › Configure -- SOLID › CONFIGURE › Display Configuration Table -- SOLID › CONFIGURE › Create Configuration Rules -- SOLID › CONSTRUCT › Offset Plane -- SOLID › CONSTRUCT › Plane at Angle -- SOLID › CONSTRUCT › Tangent Plane -- SOLID › CONSTRUCT › Midplane -- SOLID › CONSTRUCT › Perpendicular Plane -- SOLID › CONSTRUCT › Plane Through Two Edges -- SOLID › CONSTRUCT › Plane Through Three Points -- SOLID › CONSTRUCT › Plane Along Path -- SOLID › CONSTRUCT › Axis Through Cylinder/Cone/Torus -- SOLID › CONSTRUCT › Axis Perpendicular To Face -- SOLID › CONSTRUCT › Axis Through Two Planes -- SOLID › CONSTRUCT › Axis Through Two Points -- SOLID › CONSTRUCT › Axis Through Edge -- SOLID › CONSTRUCT › Point At Vertex -- SOLID › CONSTRUCT › Point Through Two Edges -- SOLID › CONSTRUCT › Point Through Three Planes -- SOLID › CONSTRUCT › Point At Center Of Circle/Sphere/Torus -- SOLID › CONSTRUCT › Point At Edge And Plane -- SOLID › CONSTRUCT › Point Along Path -- SOLID › INSPECT › Measure -- SOLID › INSPECT › Interference -- SOLID › INSPECT › Section Analysis -- SOLID › INSPECT › Curvature Comb Analysis -- SOLID › INSPECT › Curvature Map Analysis -- SOLID › INSPECT › Draft Analysis -- SOLID › INSPECT › Environment Map Analysis -- SOLID › INSPECT › Isocurve Analysis -- SOLID › INSPECT › Zebra Analysis -- SOLID › INSPECT › Accessibility Analysis -- SOLID › INSPECT › Center of Mass -- SOLID › INSPECT › Minimum Radius Analysis -- SOLID › INSERT › Decal -- SOLID › INSERT › Canvas -- SOLID › INSERT › Insert SVG -- SOLID › INSERT › Insert DXF -- SOLID › INSERT › Insert Mesh -- SOLID › INSERT › Insert Fastener -- SOLID › POSITION › Capture Position -- SOLID › POSITION › Revert Position -- SKETCH › CREATE › Line -- SKETCH › CREATE › Midpoint Line -- SKETCH › CREATE › SketchConstrainer -- SKETCH › CREATE › 2-Point Rectangle -- SKETCH › CREATE › 3-Point Rectangle -- SKETCH › CREATE › Center Rectangle -- SKETCH › CREATE › Center Diameter Circle -- SKETCH › CREATE › 2-Point Circle -- SKETCH › CREATE › 3-Point Circle -- SKETCH › CREATE › 2-Tangent Circle -- SKETCH › CREATE › 3-Tangent Circle -- SKETCH › CREATE › 3-Point Arc -- SKETCH › CREATE › Center Point Arc -- SKETCH › CREATE › Tangent Arc -- SKETCH › CREATE › Circumscribed Polygon -- SKETCH › CREATE › Inscribed Polygon -- SKETCH › CREATE › Edge Polygon -- SKETCH › CREATE › Ellipse -- SKETCH › CREATE › Center to Center Slot -- SKETCH › CREATE › Overall Slot -- SKETCH › CREATE › Center Point Slot -- SKETCH › CREATE › Three Point Arc Slot -- SKETCH › CREATE › Center Point Arc Slot -- SKETCH › CREATE › Fit Point Spline -- SKETCH › CREATE › Control Point Spline -- SKETCH › CREATE › Control Point Spline -- SKETCH › CREATE › Conic Curve -- SKETCH › CREATE › Point -- SKETCH › CREATE › Text -- SKETCH › CREATE › Fit Curves to Mesh Section -- SKETCH › CREATE › Mirror -- SKETCH › CREATE › Circular Pattern -- SKETCH › CREATE › Rectangular Pattern -- SKETCH › CREATE › Project -- SKETCH › CREATE › Intersect -- SKETCH › CREATE › Spun Profile -- SKETCH › CREATE › Include 3D Geometry -- SKETCH › CREATE › Project To Surface -- SKETCH › CREATE › Intersection Curve -- SKETCH › CREATE › Isoparametric Curve -- SKETCH › CREATE › Sketch Dimension -- SKETCH › MODIFY › Fillet -- SKETCH › MODIFY › Equal Distance Chamfer -- SKETCH › MODIFY › Distance and Angle Chamfer -- SKETCH › MODIFY › Two Distance Chamfer -- SKETCH › MODIFY › Blend Curve -- SKETCH › MODIFY › Offset -- SKETCH › MODIFY › Trim -- SKETCH › MODIFY › Extend -- SKETCH › MODIFY › Break -- SKETCH › MODIFY › Sketch Scale -- SKETCH › MODIFY › Move/Copy -- SKETCH › MODIFY › Change Parameters -- SKETCH › CONSTRAINTS › AutoConstrain -- SKETCH › CONSTRAINTS › AutoConstrain from datum -- SKETCH › CONSTRAINTS › Horizontal/Vertical -- SKETCH › CONSTRAINTS › Coincident -- SKETCH › CONSTRAINTS › Tangent -- SKETCH › CONSTRAINTS › Equal -- SKETCH › CONSTRAINTS › Parallel -- SKETCH › CONSTRAINTS › Perpendicular -- SKETCH › CONSTRAINTS › Fix/UnFix -- SKETCH › CONSTRAINTS › MidPoint -- SKETCH › CONSTRAINTS › Concentric -- SKETCH › CONSTRAINTS › Collinear -- SKETCH › CONSTRAINTS › Symmetry -- SKETCH › CONSTRAINTS › Curvature -- SKETCH › CONSTRAINTS › Polygon -- SKETCH › CONFIGURE › Configure -- SKETCH › CONFIGURE › Display Configuration Table -- SKETCH › CONFIGURE › Create Configuration Rules -- SKETCH › INSPECT › Measure -- SKETCH › INSPECT › Interference -- SKETCH › INSPECT › Section Analysis -- SKETCH › INSPECT › Curvature Comb Analysis -- SKETCH › INSPECT › Curvature Map Analysis -- SKETCH › INSPECT › Draft Analysis -- SKETCH › INSPECT › Environment Map Analysis -- SKETCH › INSPECT › Isocurve Analysis -- SKETCH › INSPECT › Zebra Analysis -- SKETCH › INSPECT › Accessibility Analysis -- SKETCH › INSPECT › Center of Mass -- SKETCH › INSPECT › Minimum Radius Analysis -- SKETCH › INSERT › Decal -- SKETCH › INSERT › Canvas -- SKETCH › INSERT › Insert SVG -- SKETCH › INSERT › Insert DXF -- SKETCH › INSERT › Insert Mesh -- SKETCH › INSERT › Insert Component -- SKETCH › INSERT › Insert Fastener -- SKETCH › FINISH SKETCH › Finish Sketch -- SKETCH › FINISH SKETCH › Finish with AutoConstrain - -## Not yet (SOLID, SKETCH) - -- SOLID › CREATE › Create Form -- SOLID › CREATE › Derive -- SOLID › CREATE › Automated Modeling -- SOLID › CREATE › Geometric Pattern -- SOLID › CREATE › Boundary Fill -- SOLID › CREATE › Find Features -- SOLID › CREATE › Fluid Volume -- SOLID › CREATE › Create Base Feature -- SOLID › CREATE › Create Linked PCB -- SOLID › CREATE › Derive PCB -- SOLID › CREATE › Create Unlinked PCB -- SOLID › CREATE › Generate Timeline -- SOLID › MODIFY › Edit Face -- SOLID › MODIFY › Silhouette Split -- SOLID › MODIFY › Arrange -- SOLID › MODIFY › Remove Features -- SOLID › MODIFY › Remove Faces -- SOLID › MODIFY › Replace with Primitives -- SOLID › MODIFY › Volumetric Lattice -- SOLID › MODIFY › Volumetric Texture -- SOLID › MODIFY › VolFieldModifyModelCommand -- SOLID › MODIFY › Manage Materials -- SOLID › MODIFY › Compute Unresolved -- SOLID › MODIFY › Convert -- SOLID › MODIFY › Bill of Materials -- SOLID › ASSEMBLE › Duplicate With Joints -- SOLID › ASSEMBLE › Constrain Components -- SOLID › ASSEMBLE › Align Constraint -- SOLID › ASSEMBLE › Angle Constraint -- SOLID › ASSEMBLE › Center Constraint -- SOLID › ASSEMBLE › Tangent Constraint -- SOLID › ASSEMBLE › Joint Constraint -- SOLID › ASSEMBLE › As-Built Constraint -- SOLID › CONSTRUCT › User Coordinate System (UCS) -- SOLID › INSPECT › Validate -- SOLID › INSPECT › Component Connection Analysis -- SOLID › INSPECT › DOF Analysis -- SOLID › INSPECT › Edit Component Connection Analysis -- SOLID › INSPECT › Fastener Stack Analysis -- SOLID › INSPECT › Find Similar Components -- SOLID › INSPECT › Navigator -- SOLID › INSPECT › Display Component Colors -- SOLID › INSPECT › Display Mesh Face Groups -- SOLID › INSPECT › Assembly Statistics -- SOLID › INSPECT › Change Summary -- SOLID › INSPECT › History -- SOLID › INSPECT › Sustainability Insights -- SOLID › INSERT › Insert T-Spline -- SOLID › INSERT › Insert Derive -- SOLID › INSERT › Insert McMaster-Carr Component -- SOLID › INSERT › Insert a manufacturer part -- SOLID › INSERT › Insert TraceParts Supplier Components -- SOLID › ASSEMBLE › Add To Assembly -- SOLID › SELECT › Select -- SOLID › SELECT › Window Selection -- SOLID › SELECT › Freeform Selection -- SOLID › SELECT › Paint Selection -- SOLID › SELECT › Select By Name -- SOLID › SELECT › Select By Boundary -- SOLID › SELECT › Select By Size -- SOLID › SELECT › Invert Selection -- SOLID › SELECT › Seed And Boundary -- SOLID › SELECT › Component Drag -- SOLID › SELECT › Select Body Priority -- SOLID › SELECT › Select Face Priority -- SOLID › SELECT › Select Edge Priority -- SOLID › SELECT › Select Component Priority -- SOLID › SELECT › Selection Filters -- SKETCH › INSPECT › Validate -- SKETCH › INSPECT › Component Connection Analysis -- SKETCH › INSPECT › DOF Analysis -- SKETCH › INSPECT › Edit Component Connection Analysis -- SKETCH › INSPECT › Fastener Stack Analysis -- SKETCH › INSPECT › Find Similar Components -- SKETCH › INSPECT › Navigator -- SKETCH › INSPECT › Display Component Colors -- SKETCH › INSPECT › Display Mesh Face Groups -- SKETCH › INSPECT › Assembly Statistics -- SKETCH › INSPECT › Change Summary -- SKETCH › INSPECT › History -- SKETCH › INSPECT › Sustainability Insights -- SKETCH › INSERT › Insert T-Spline -- SKETCH › INSERT › Duplicate With Joints -- SKETCH › INSERT › Insert Derive -- SKETCH › INSERT › Insert McMaster-Carr Component -- SKETCH › INSERT › Insert a manufacturer part -- SKETCH › INSERT › Insert TraceParts Supplier Components -- SKETCH › ASSEMBLE › Add To Assembly -- SKETCH › SELECT › Select -- SKETCH › SELECT › Window Selection -- SKETCH › SELECT › Freeform Selection -- SKETCH › SELECT › Paint Selection -- SKETCH › SELECT › Select By Name -- SKETCH › SELECT › Select By Boundary -- SKETCH › SELECT › Select By Size -- SKETCH › SELECT › Invert Selection -- SKETCH › SELECT › Seed And Boundary -- SKETCH › SELECT › Component Drag -- SKETCH › SELECT › Select Body Priority -- SKETCH › SELECT › Select Face Priority -- SKETCH › SELECT › Select Edge Priority -- SKETCH › SELECT › Select Component Priority -- SKETCH › SELECT › Selection Filters diff --git a/docs/wip-reconciliation.md b/docs/wip-reconciliation.md index 40559e11..7078f30d 100644 --- a/docs/wip-reconciliation.md +++ b/docs/wip-reconciliation.md @@ -1,7 +1,7 @@ # WIP branch reconciliation (#6) -The branches predate the dotted command IDs. Their remaining changes were ported through -`crates/engine/src/legacy_ids.rs` and reconciled with the current implementation. +The branches predate the dotted command IDs. Their remaining changes were ported to the +dotted ids and reconciled with the current implementation. | Branches | Result | |---|---| diff --git a/xtask/data/fusion-catalog.tsv b/xtask/data/fusion-catalog.tsv deleted file mode 100644 index 6e1aea4b..00000000 --- a/xtask/data/fusion-catalog.tsv +++ /dev/null @@ -1,1177 +0,0 @@ -# Fusion Design workspace toolbar: tab, panel, command id, command name (ids and names only). -# Regenerate with `cargo xtask parity --refresh` (needs the local plan/fusion/menu-tree.json). -SOLID CREATE SketchCreate Create Sketch -SOLID CREATE TSplineBaseFeatureCreationCommand Create Form -SOLID CREATE PushDeriveCommand Derive -SOLID CREATE AutomatedModelingCommand Automated Modeling -SOLID CREATE Extrude Extrude -SOLID CREATE Revolve Revolve -SOLID CREATE Sweep Sweep -SOLID CREATE SolidLoft Loft -SOLID CREATE FusionRibCommand Rib -SOLID CREATE FusionWebCommand Web -SOLID CREATE EmbossCmd Emboss -SOLID CREATE FusionHoleCommand Hole -SOLID CREATE FusionThreadCommand Thread -SOLID CREATE PrimitiveBox Box -SOLID CREATE PrimitiveCylinder Cylinder -SOLID CREATE PrimitiveSphere Sphere -SOLID CREATE PrimitiveTorus Torus -SOLID CREATE PrimitiveCoil Coil -SOLID CREATE PrimitivePipe Pipe -SOLID CREATE StockModelCommand Bounding Solid -SOLID CREATE PatternRectangular Rectangular Pattern -SOLID CREATE PatternCircular Circular Pattern -SOLID CREATE PatternOnPath Pattern on Path -SOLID CREATE FusionPatternGeometricCommand Geometric Pattern -SOLID CREATE MirrorCommand Mirror -SOLID CREATE FusionSurfaceThickenCommand Thicken -SOLID CREATE SurfaceSculpt Boundary Fill -SOLID CREATE FusionFindFeaturesCommand Find Features -SOLID CREATE EnclosureCommand Fluid Volume -SOLID CREATE BaseFeatureCreationCommand Create Base Feature -SOLID CREATE PCBExternalComponentCreationCmd Create Linked PCB -SOLID CREATE PCBDeriveCmd Derive PCB -SOLID CREATE PCBCreateCmd Create Unlinked PCB -SOLID CREATE JointOrigin Joint Origin -SOLID CREATE TimelineBuilderCommand Generate Timeline -SOLID MODIFY FusionPressPullCommand Press Pull -SOLID MODIFY EditFaceCommand Edit Face -SOLID MODIFY FusionFilletEdgesCommand Fillet -SOLID MODIFY FusionChamferCommand Chamfer -SOLID MODIFY FusionShellBodyCommand Shell -SOLID MODIFY FusionDraftCommand Draft -SOLID MODIFY ModifyScale Scale -SOLID MODIFY FusionCombineCommand Combine -SOLID MODIFY FusionOffsetFacesCommand Offset Face -SOLID MODIFY FusionReplaceFaceCommand Replace Face -SOLID MODIFY FusionSplitFaceCommand Split Face -SOLID MODIFY FusionSplitBodyCommand Split Body -SOLID MODIFY FusionPartingLineSplitCmd Silhouette Split -SOLID MODIFY FusionMoveCommand Move/Copy -SOLID MODIFY AlignCmd Align -SOLID MODIFY FusionDeleteCommand Delete -SOLID MODIFY SoftDeleteCommand Remove -SOLID MODIFY ArrangeCommand Arrange -SOLID MODIFY FusionRemoveFeaturesCommand Remove Features -SOLID MODIFY FusionRemoveFacesCommand Remove Faces -SOLID MODIFY ReplaceWithPrimitivesCommand Replace with Primitives -SOLID MODIFY VolFieldCreateLatticeCommand Volumetric Lattice -SOLID MODIFY VolFieldTextureCommand Volumetric Texture -SOLID MODIFY VolFieldModifyModelCommand VolFieldModifyModelCommand -SOLID MODIFY PhysicalMaterialCommand Physical Material -SOLID MODIFY AppearanceCommand Appearance -SOLID MODIFY MaterialCommand Manage Materials -SOLID MODIFY ChangeParameterCommand Change Parameters -SOLID MODIFY FusionComputeAllCommand Compute All -SOLID MODIFY FusionComputeUnresolvedCommand Compute Unresolved -SOLID MODIFY TSpline2BRepCommand Convert -SOLID MODIFY MaterializedBomHybridCmd Bill of Materials -SOLID ASSEMBLE FusionImportCommandFromToolbar Insert Component -SOLID ASSEMBLE FusionCreateNewComponentCommand New Component -SOLID ASSEMBLE FusionDuplicateWithJointsCommand Duplicate With Joints -SOLID ASSEMBLE AssemblyMateCommand Constrain Components -SOLID ASSEMBLE AlignConstraintCmd Align Constraint -SOLID ASSEMBLE AngleConstraintCmd Angle Constraint -SOLID ASSEMBLE MidplaneConstraintCmd Center Constraint -SOLID ASSEMBLE TangentConstraintCmd Tangent Constraint -SOLID ASSEMBLE JointConstraintCmd Joint Constraint -SOLID ASSEMBLE JointAssembleCmdNew Joint -SOLID ASSEMBLE JointAsBuiltCmd As-Built Joint -SOLID ASSEMBLE AsBuiltConstraintCmd As-Built Constraint -SOLID ASSEMBLE RigidGroupCmd Rigid Group -SOLID ASSEMBLE FusionMoveJointsCommand Drive Joints -SOLID ASSEMBLE FusionMotionRelationshipCommand Motion Link -SOLID ASSEMBLE FusionMotionStudyCommand Motion Study -SOLID ASSEMBLE EnableContactSetsCmd Enable Contact Sets -SOLID ASSEMBLE EnableAllContactCmd Enable All Contact -SOLID ASSEMBLE DisableAllContactCmd Disable Contact -SOLID ASSEMBLE ContactSetCmd New Contact Set -SOLID CONFIGURE FusionStartDesignConfigModeCmd Configure -SOLID CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -SOLID CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -SOLID CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -SOLID CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -SOLID CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -SOLID CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -SOLID CONSTRUCT ConstructionMidPlaneCommand Midplane -SOLID CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -SOLID CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -SOLID CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -SOLID CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -SOLID CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -SOLID CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -SOLID CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -SOLID CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -SOLID CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -SOLID CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -SOLID CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -SOLID CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -SOLID CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -SOLID CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -SOLID CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -SOLID INSPECT MeasureCommand Measure -SOLID INSPECT InterferenceCheckCommand Interference -SOLID INSPECT FusionHalfSectionViewCommand Section Analysis -SOLID INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -SOLID INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -SOLID INSPECT FusionDraftAnalysisCommand Draft Analysis -SOLID INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -SOLID INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -SOLID INSPECT FusionSurfaceValidateCommand Validate -SOLID INSPECT FusionZebraAnalysisCommand Zebra Analysis -SOLID INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -SOLID INSPECT FusionCenterOfMassCommand Center of Mass -SOLID INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -SOLID INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -SOLID INSPECT FusionDOFAnalysisCommand DOF Analysis -SOLID INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -SOLID INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -SOLID INSPECT SimilarPartsCommand Find Similar Components -SOLID INSPECT GraphViewCmd Navigator -SOLID INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -SOLID INSPECT FacegroupsToggleCmd Display Mesh Face Groups -SOLID INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -SOLID INSPECT ShowChangeAwarenessToolbarCmd Change Summary -SOLID INSPECT ShowHistoryToolbarCmd History -SOLID INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -SOLID INSERT FusionAddEditDecalCommand Decal -SOLID INSERT FusionAddCanvasCommand Canvas -SOLID INSERT TSplineImportCommand Insert T-Spline -SOLID INSERT SketchImportSVG Insert SVG -SOLID INSERT ImportDxfFileCommand Insert DXF -SOLID INSERT ParaMeshInsertAlignCommand Insert Mesh -SOLID INSERT FusionFastenersCommand Insert Fastener -SOLID INSERT PullDeriveCommand Insert Derive -SOLID INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -SOLID INSERT cadenasparts4cad Insert a manufacturer part -SOLID INSERT traceparts_insert Insert TraceParts Supplier Components -SOLID ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -SOLID SELECT SelectCommand Select -SOLID SELECT selectWindow Window Selection -SOLID SELECT selectFreeForm Freeform Selection -SOLID SELECT selectPaint Paint Selection -SOLID SELECT SelectByNameCommand Select By Name -SOLID SELECT SelectByBoundaryCommand Select By Boundary -SOLID SELECT FusionSelectBodiesBySizeCommand Select By Size -SOLID SELECT SelectByInvertCommand Invert Selection -SOLID SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -SOLID SELECT FusionDragCompControlsCmd Component Drag -SOLID SELECT SelectBodyPriorityCommand Select Body Priority -SOLID SELECT SelectFacePriorityCommand Select Face Priority -SOLID SELECT SelectEdgePriorityCommand Select Edge Priority -SOLID SELECT SelectComponentPriorityCommand Select Component Priority -SOLID SELECT SelectionFilterCommand Selection Filters -SOLID POSITION SnapshotCmd Capture Position -SOLID POSITION AsBuiltPositionsCmd Revert Position -SKETCH CREATE DrawPolyline Line -SKETCH CREATE SketchMidpointLine Midpoint Line -SKETCH CREATE SketchConstrainer SketchConstrainer -SKETCH CREATE ShapeRectangleTwoPoint 2-Point Rectangle -SKETCH CREATE ShapeRectangleThreePoint 3-Point Rectangle -SKETCH CREATE ShapeRectangleCenter Center Rectangle -SKETCH CREATE CircleCenterRadius Center Diameter Circle -SKETCH CREATE CircleTwoPoint 2-Point Circle -SKETCH CREATE CircleThreePoint 3-Point Circle -SKETCH CREATE CircleTanTanRadius 2-Tangent Circle -SKETCH CREATE CircleThreeTangent 3-Tangent Circle -SKETCH CREATE ArcThreePoint 3-Point Arc -SKETCH CREATE ArcCenterTwoPoint Center Point Arc -SKETCH CREATE ArcTangent Tangent Arc -SKETCH CREATE ShapePolygonCircumscribed Circumscribed Polygon -SKETCH CREATE ShapePolygonInscribed Inscribed Polygon -SKETCH CREATE ShapePolygonEdge Edge Polygon -SKETCH CREATE CircleElipse Ellipse -SKETCH CREATE ShapeSlotCenterToCenter Center to Center Slot -SKETCH CREATE ShapeSlotOverall Overall Slot -SKETCH CREATE ShapeSlotCenterPoint Center Point Slot -SKETCH CREATE ShapeArcSlotThreePoint Three Point Arc Slot -SKETCH CREATE ShapeArcSlotCenterTwoPoint Center Point Arc Slot -SKETCH CREATE DrawSpline Fit Point Spline -SKETCH CREATE DrawCVMSpline3D Control Point Spline -SKETCH CREATE DrawCVMSpline5D Control Point Spline -SKETCH CREATE ConicCurveCmd Conic Curve -SKETCH CREATE DrawPoint Point -SKETCH CREATE MTextCmd Text -SKETCH CREATE FitCurvesToSectionCommand Fit Curves to Mesh Section -SKETCH CREATE MirrorSketchCommand Mirror -SKETCH CREATE CircularSketchPatternCommand Circular Pattern -SKETCH CREATE RectangularSketchPatternCommand Rectangular Pattern -SKETCH CREATE ProjectNewCmd Project -SKETCH CREATE IntersectCmd Intersect -SKETCH CREATE SpunProfileCmd Spun Profile -SKETCH CREATE Include3DGeometry Include 3D Geometry -SKETCH CREATE ProjectToSurface Project To Surface -SKETCH CREATE IntersectionCurve Intersection Curve -SKETCH CREATE SketchIsoparametricCurve Isoparametric Curve -SKETCH CREATE SketchDimension Sketch Dimension -SKETCH MODIFY FilletSketchCmd Fillet -SKETCH MODIFY ChamferSketchEqualDistance Equal Distance Chamfer -SKETCH MODIFY ChamferSketchDistanceAngle Distance and Angle Chamfer -SKETCH MODIFY ChamferSketchDistanceDistance Two Distance Chamfer -SKETCH MODIFY BlendG1CurveSketchCmd Blend Curve -SKETCH MODIFY Offset Offset -SKETCH MODIFY TrimSketchCmd Trim -SKETCH MODIFY ExtendSketchCmd Extend -SKETCH MODIFY BreakSketchCmd Break -SKETCH MODIFY SketchScaleCmd Sketch Scale -SKETCH MODIFY FusionMoveCommand Move/Copy -SKETCH MODIFY ChangeParameterCommand Change Parameters -SKETCH CONSTRAINTS SketchAutoConstraintAndDimCmd AutoConstrain -SKETCH CONSTRAINTS SketchAutoConstraintAndDimFromDatumCmd AutoConstrain from datum -SKETCH CONSTRAINTS ConstraintHorizontalVertical Horizontal/Vertical -SKETCH CONSTRAINTS ConstraintCoincident Coincident -SKETCH CONSTRAINTS ConstraintTangent Tangent -SKETCH CONSTRAINTS ConstraintEqual Equal -SKETCH CONSTRAINTS ConstraintParallel Parallel -SKETCH CONSTRAINTS ConstraintPerpendicular Perpendicular -SKETCH CONSTRAINTS ConstraintFix Fix/UnFix -SKETCH CONSTRAINTS ConstraintMidPoint MidPoint -SKETCH CONSTRAINTS ConstraintConcentric Concentric -SKETCH CONSTRAINTS ConstraintCollinear Collinear -SKETCH CONSTRAINTS ConstraintSymmetry Symmetry -SKETCH CONSTRAINTS ConstraintSmooth Curvature -SKETCH CONSTRAINTS SketchPolygonConstraintCmd Polygon -SKETCH CONFIGURE FusionStartDesignConfigModeCmd Configure -SKETCH CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -SKETCH CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -SKETCH INSPECT MeasureCommand Measure -SKETCH INSPECT InterferenceCheckCommand Interference -SKETCH INSPECT FusionHalfSectionViewCommand Section Analysis -SKETCH INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -SKETCH INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -SKETCH INSPECT FusionDraftAnalysisCommand Draft Analysis -SKETCH INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -SKETCH INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -SKETCH INSPECT FusionSurfaceValidateCommand Validate -SKETCH INSPECT FusionZebraAnalysisCommand Zebra Analysis -SKETCH INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -SKETCH INSPECT FusionCenterOfMassCommand Center of Mass -SKETCH INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -SKETCH INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -SKETCH INSPECT FusionDOFAnalysisCommand DOF Analysis -SKETCH INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -SKETCH INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -SKETCH INSPECT SimilarPartsCommand Find Similar Components -SKETCH INSPECT GraphViewCmd Navigator -SKETCH INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -SKETCH INSPECT FacegroupsToggleCmd Display Mesh Face Groups -SKETCH INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -SKETCH INSPECT ShowChangeAwarenessToolbarCmd Change Summary -SKETCH INSPECT ShowHistoryToolbarCmd History -SKETCH INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -SKETCH INSERT FusionAddEditDecalCommand Decal -SKETCH INSERT FusionAddCanvasCommand Canvas -SKETCH INSERT TSplineImportCommand Insert T-Spline -SKETCH INSERT SketchImportSVG Insert SVG -SKETCH INSERT ImportDxfFileCommand Insert DXF -SKETCH INSERT ParaMeshInsertAlignCommand Insert Mesh -SKETCH INSERT FusionImportCommandFromToolbar Insert Component -SKETCH INSERT FusionFastenersCommand Insert Fastener -SKETCH INSERT FusionDuplicateWithJointsCommand Duplicate With Joints -SKETCH INSERT PullDeriveCommand Insert Derive -SKETCH INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -SKETCH INSERT cadenasparts4cad Insert a manufacturer part -SKETCH INSERT traceparts_insert Insert TraceParts Supplier Components -SKETCH ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -SKETCH SELECT SelectCommand Select -SKETCH SELECT selectWindow Window Selection -SKETCH SELECT selectFreeForm Freeform Selection -SKETCH SELECT selectPaint Paint Selection -SKETCH SELECT SelectByNameCommand Select By Name -SKETCH SELECT SelectByBoundaryCommand Select By Boundary -SKETCH SELECT FusionSelectBodiesBySizeCommand Select By Size -SKETCH SELECT SelectByInvertCommand Invert Selection -SKETCH SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -SKETCH SELECT FusionDragCompControlsCmd Component Drag -SKETCH SELECT SelectBodyPriorityCommand Select Body Priority -SKETCH SELECT SelectFacePriorityCommand Select Face Priority -SKETCH SELECT SelectEdgePriorityCommand Select Edge Priority -SKETCH SELECT SelectComponentPriorityCommand Select Component Priority -SKETCH SELECT SelectionFilterCommand Selection Filters -SKETCH FINISH SKETCH SketchStop Finish Sketch -SKETCH FINISH SKETCH SketchAutoConstrainAndFinish Finish with AutoConstrain -SURFACE CREATE FusionCreateNewComponentCommand New Component -SURFACE CREATE SketchCreate Create Sketch -SURFACE CREATE TSplineBaseFeatureCreationCommand Create Form -SURFACE CREATE PushDeriveCommand Derive -SURFACE CREATE SurfaceExtrude Extrude -SURFACE CREATE SurfaceRevolve Revolve -SURFACE CREATE SurfaceSweep Sweep -SURFACE CREATE SurfaceLoft Loft -SURFACE CREATE FusionSurfacePatchCommand Patch -SURFACE CREATE FusionSurfaceRuledCommand Ruled -SURFACE CREATE FusionSurfaceOffsetCommand Offset -SURFACE CREATE SurfPrimitiveBox Box -SURFACE CREATE SurfPrimitiveCylinder Cylinder -SURFACE CREATE SurfPrimitiveSphere Sphere -SURFACE CREATE SurfPrimitiveTorus Torus -SURFACE CREATE SurfPrimitiveCoil Coil -SURFACE CREATE SurfPrimitivePipe Pipe -SURFACE CREATE PatternRectangular Rectangular Pattern -SURFACE CREATE PatternCircular Circular Pattern -SURFACE CREATE PatternOnPath Pattern on Path -SURFACE CREATE FusionPatternGeometricCommand Geometric Pattern -SURFACE CREATE MirrorCommand Mirror -SURFACE CREATE FusionSurfaceThickenCommand Thicken -SURFACE CREATE SurfaceSculpt Boundary Fill -SURFACE CREATE JointOrigin Joint Origin -SURFACE MODIFY FusionPressPullCommand Press Pull -SURFACE MODIFY EditFaceCommand Edit Face -SURFACE MODIFY FusionFilletEdgesCommand Fillet -SURFACE MODIFY FusionChamferCommand Chamfer -SURFACE MODIFY FusionSurfaceTrimCommand Trim -SURFACE MODIFY FusionSurfaceUntrimCommand Untrim -SURFACE MODIFY FusionExtendCommand Extend -SURFACE MODIFY FusionSurfaceStitchCommand Stitch -SURFACE MODIFY FusionSurfaceUnStitchCommand Unstitch -SURFACE MODIFY FusionSurfaceMergeCommand Merge -SURFACE MODIFY FusionSurfaceReverseNormalCommand Reverse Normal -SURFACE MODIFY ModifyScale Scale -SURFACE MODIFY FusionSplitFaceCommand Split Face -SURFACE MODIFY FusionSplitBodyCommand Split Body -SURFACE MODIFY FusionMoveCommand Move/Copy -SURFACE MODIFY AlignCmd Align -SURFACE MODIFY FusionDeleteCommand Delete -SURFACE MODIFY SoftDeleteCommand Remove -SURFACE MODIFY TSpline2BRepCommand Convert -SURFACE MODIFY PhysicalMaterialCommand Physical Material -SURFACE MODIFY AppearanceCommand Appearance -SURFACE MODIFY MaterialCommand Manage Materials -SURFACE MODIFY ChangeParameterCommand Change Parameters -SURFACE MODIFY FusionComputeAllCommand Compute All -SURFACE MODIFY FusionComputeUnresolvedCommand Compute Unresolved -SURFACE MODIFY MaterializedBomHybridCmd Bill of Materials -SURFACE ASSEMBLE FusionImportCommandFromToolbar Insert Component -SURFACE ASSEMBLE FusionDuplicateWithJointsCommand Duplicate With Joints -SURFACE ASSEMBLE AssemblyMateCommand Constrain Components -SURFACE ASSEMBLE AlignConstraintCmd Align Constraint -SURFACE ASSEMBLE AngleConstraintCmd Angle Constraint -SURFACE ASSEMBLE MidplaneConstraintCmd Center Constraint -SURFACE ASSEMBLE TangentConstraintCmd Tangent Constraint -SURFACE ASSEMBLE JointConstraintCmd Joint Constraint -SURFACE ASSEMBLE JointAssembleCmdNew Joint -SURFACE ASSEMBLE JointAsBuiltCmd As-Built Joint -SURFACE ASSEMBLE AsBuiltConstraintCmd As-Built Constraint -SURFACE ASSEMBLE RigidGroupCmd Rigid Group -SURFACE ASSEMBLE FusionMoveJointsCommand Drive Joints -SURFACE ASSEMBLE FusionMotionRelationshipCommand Motion Link -SURFACE ASSEMBLE FusionMotionStudyCommand Motion Study -SURFACE ASSEMBLE EnableContactSetsCmd Enable Contact Sets -SURFACE ASSEMBLE EnableAllContactCmd Enable All Contact -SURFACE ASSEMBLE DisableAllContactCmd Disable Contact -SURFACE ASSEMBLE ContactSetCmd New Contact Set -SURFACE CONFIGURE FusionStartDesignConfigModeCmd Configure -SURFACE CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -SURFACE CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -SURFACE CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -SURFACE CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -SURFACE CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -SURFACE CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -SURFACE CONSTRUCT ConstructionMidPlaneCommand Midplane -SURFACE CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -SURFACE CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -SURFACE CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -SURFACE CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -SURFACE CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -SURFACE CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -SURFACE CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -SURFACE CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -SURFACE CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -SURFACE CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -SURFACE CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -SURFACE CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -SURFACE CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -SURFACE CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -SURFACE CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -SURFACE INSPECT MeasureCommand Measure -SURFACE INSPECT InterferenceCheckCommand Interference -SURFACE INSPECT FusionHalfSectionViewCommand Section Analysis -SURFACE INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -SURFACE INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -SURFACE INSPECT FusionDraftAnalysisCommand Draft Analysis -SURFACE INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -SURFACE INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -SURFACE INSPECT FusionSurfaceValidateCommand Validate -SURFACE INSPECT FusionZebraAnalysisCommand Zebra Analysis -SURFACE INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -SURFACE INSPECT FusionCenterOfMassCommand Center of Mass -SURFACE INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -SURFACE INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -SURFACE INSPECT FusionDOFAnalysisCommand DOF Analysis -SURFACE INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -SURFACE INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -SURFACE INSPECT SimilarPartsCommand Find Similar Components -SURFACE INSPECT GraphViewCmd Navigator -SURFACE INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -SURFACE INSPECT FacegroupsToggleCmd Display Mesh Face Groups -SURFACE INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -SURFACE INSPECT ShowChangeAwarenessToolbarCmd Change Summary -SURFACE INSPECT ShowHistoryToolbarCmd History -SURFACE INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -SURFACE INSERT FusionAddEditDecalCommand Decal -SURFACE INSERT FusionAddCanvasCommand Canvas -SURFACE INSERT TSplineImportCommand Insert T-Spline -SURFACE INSERT SketchImportSVG Insert SVG -SURFACE INSERT ImportDxfFileCommand Insert DXF -SURFACE INSERT ParaMeshInsertAlignCommand Insert Mesh -SURFACE INSERT FusionFastenersCommand Insert Fastener -SURFACE INSERT PullDeriveCommand Insert Derive -SURFACE INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -SURFACE INSERT cadenasparts4cad Insert a manufacturer part -SURFACE INSERT traceparts_insert Insert TraceParts Supplier Components -SURFACE ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -SURFACE SELECT SelectCommand Select -SURFACE SELECT selectWindow Window Selection -SURFACE SELECT selectFreeForm Freeform Selection -SURFACE SELECT selectPaint Paint Selection -SURFACE SELECT SelectByNameCommand Select By Name -SURFACE SELECT SelectByBoundaryCommand Select By Boundary -SURFACE SELECT FusionSelectBodiesBySizeCommand Select By Size -SURFACE SELECT SelectByInvertCommand Invert Selection -SURFACE SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -SURFACE SELECT FusionDragCompControlsCmd Component Drag -SURFACE SELECT SelectBodyPriorityCommand Select Body Priority -SURFACE SELECT SelectFacePriorityCommand Select Face Priority -SURFACE SELECT SelectEdgePriorityCommand Select Edge Priority -SURFACE SELECT SelectComponentPriorityCommand Select Component Priority -SURFACE SELECT SelectionFilterCommand Selection Filters -SURFACE POSITION SnapshotCmd Capture Position -SURFACE POSITION AsBuiltPositionsCmd Revert Position -MESH CREATE FusionCreateNewComponentCommand New Component -MESH CREATE ParaMeshInsertAlignCommand Insert Mesh -MESH CREATE ParaMeshTessellateCommand Tessellate -MESH CREATE ParaMeshPlanarSectionCommand Create Mesh Section Sketch -MESH CREATE ParaMeshEmptyBaseFeatureCommand Create Base Mesh Feature -MESH PREPARE ParaMeshRepairCommand Repair -MESH PREPARE ParaMeshCalculateFaceGroupsCommand Generate Face Groups -MESH PREPARE ParaMeshMergeFaceGroupsCommand Combine Face Groups -MESH PREPARE ParaMeshCreateFaceGroupCommand Create Face Group -MESH MODIFY ParaMeshBaseFeatureCreateCommand Direct Edit -MESH MODIFY ParaMeshRemeshCommand Remesh -MESH MODIFY ParaMeshReduceCommand Reduce -MESH MODIFY ParaMeshPlaneCutCommand Plane Cut -MESH MODIFY ParaMeshHollowCommand Shell -MESH MODIFY ParaMeshCombineCommand Combine -MESH MODIFY ParaMeshSmoothCommand Smooth -MESH MODIFY ParaMeshSmoothBoundaryCommand Smooth Boundary -MESH MODIFY ParaMeshReverseNormalsCommand Reverse Normal -MESH MODIFY ParaMeshCloseCracksCommand Close Cracks -MESH MODIFY ParaMeshEraseAndFillCommand Erase And Fill -MESH MODIFY ParaMeshBridgeCommand Bridge -MESH MODIFY ParaMeshAlignCommand Mesh Align -MESH MODIFY ParaMeshAttractToReferenceCommand Attract to Reference -MESH MODIFY ParaMeshTextureCommand Texture Extrude -MESH MODIFY ParaMeshExtractCommand Separate -MESH MODIFY FusionMoveCommand Move/Copy -MESH MODIFY ParaMeshScaleCommand Scale Mesh -MESH MODIFY FusionDeleteCommand Delete -MESH MODIFY ParaMeshRemoveCommand Remove -MESH MODIFY ParaMeshConvertCommand Convert Mesh -MESH MODIFY ParaMeshToQuadMeshCommand Convert To Quad Mesh -MESH MODIFY VolFieldCreateLatticeCommand Volumetric Lattice -MESH MODIFY VolFieldTextureCommand Volumetric Texture -MESH MODIFY VolFieldModifyModelCommand VolFieldModifyModelCommand -MESH MODIFY PhysicalMaterialCommand Physical Material -MESH MODIFY AppearanceCommand Appearance -MESH MODIFY ChangeParameterCommand Change Parameters -MESH MODIFY FusionComputeAllCommand Compute All -MESH MODIFY MaterializedBomHybridCmd Bill of Materials -MESH ASSEMBLE FusionImportCommandFromToolbar Insert Component -MESH ASSEMBLE FusionDuplicateWithJointsCommand Duplicate With Joints -MESH ASSEMBLE AssemblyMateCommand Constrain Components -MESH ASSEMBLE AlignConstraintCmd Align Constraint -MESH ASSEMBLE AngleConstraintCmd Angle Constraint -MESH ASSEMBLE MidplaneConstraintCmd Center Constraint -MESH ASSEMBLE TangentConstraintCmd Tangent Constraint -MESH ASSEMBLE JointConstraintCmd Joint Constraint -MESH ASSEMBLE JointAssembleCmdNew Joint -MESH ASSEMBLE JointAsBuiltCmd As-Built Joint -MESH ASSEMBLE AsBuiltConstraintCmd As-Built Constraint -MESH ASSEMBLE JointOrigin Joint Origin -MESH ASSEMBLE RigidGroupCmd Rigid Group -MESH ASSEMBLE FusionMoveJointsCommand Drive Joints -MESH ASSEMBLE FusionMotionRelationshipCommand Motion Link -MESH ASSEMBLE FusionMotionStudyCommand Motion Study -MESH ASSEMBLE EnableContactSetsCmd Enable Contact Sets -MESH ASSEMBLE EnableAllContactCmd Enable All Contact -MESH ASSEMBLE DisableAllContactCmd Disable Contact -MESH ASSEMBLE ContactSetCmd New Contact Set -MESH CONFIGURE FusionStartDesignConfigModeCmd Configure -MESH CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -MESH CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -MESH CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -MESH CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -MESH CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -MESH CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -MESH CONSTRUCT ConstructionMidPlaneCommand Midplane -MESH CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -MESH CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -MESH CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -MESH CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -MESH CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -MESH CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -MESH CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -MESH CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -MESH CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -MESH CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -MESH CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -MESH CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -MESH CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -MESH CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -MESH CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -MESH INSPECT MeasureCommand Measure -MESH INSPECT InterferenceCheckCommand Interference -MESH INSPECT FusionHalfSectionViewCommand Section Analysis -MESH INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -MESH INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -MESH INSPECT FusionDraftAnalysisCommand Draft Analysis -MESH INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -MESH INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -MESH INSPECT FusionSurfaceValidateCommand Validate -MESH INSPECT FusionZebraAnalysisCommand Zebra Analysis -MESH INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -MESH INSPECT FusionCenterOfMassCommand Center of Mass -MESH INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -MESH INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -MESH INSPECT FusionDOFAnalysisCommand DOF Analysis -MESH INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -MESH INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -MESH INSPECT SimilarPartsCommand Find Similar Components -MESH INSPECT GraphViewCmd Navigator -MESH INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -MESH INSPECT FacegroupsToggleCmd Display Mesh Face Groups -MESH INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -MESH INSPECT ShowChangeAwarenessToolbarCmd Change Summary -MESH INSPECT ShowHistoryToolbarCmd History -MESH INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -MESH INSERT FusionAddEditDecalCommand Decal -MESH INSERT FusionAddCanvasCommand Canvas -MESH INSERT TSplineImportCommand Insert T-Spline -MESH INSERT SketchImportSVG Insert SVG -MESH INSERT ImportDxfFileCommand Insert DXF -MESH INSERT FusionFastenersCommand Insert Fastener -MESH INSERT PullDeriveCommand Insert Derive -MESH INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -MESH INSERT cadenasparts4cad Insert a manufacturer part -MESH INSERT traceparts_insert Insert TraceParts Supplier Components -MESH ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -MESH SELECT SelectCommand Select -MESH SELECT selectWindow Window Selection -MESH SELECT selectFreeForm Freeform Selection -MESH SELECT selectPaint Paint Selection -MESH SELECT ParaMeshShowSelectionPanelCmd Mesh Palette -MESH SELECT SelectBodyPriorityCommand Select Body Priority -MESH SELECT SelectFacePriorityCommand Select Face Priority -MESH SELECT SelectEdgePriorityCommand Select Edge Priority -MESH SELECT SelectComponentPriorityCommand Select Component Priority -MESH SELECT SelectionFilterCommand Selection Filters -MESH EXPORT ThreeDprintCmdDef 3D Print -MESH POSITION SnapshotCmd Capture Position -MESH POSITION AsBuiltPositionsCmd Revert Position -FORM CREATE FusionCreateNewComponentCommand New Component -FORM CREATE SketchCreate Create Sketch -FORM CREATE TSplinePrimitiveBoxCommand Box -FORM CREATE TSplinePrimitivePlaneCommand Plane -FORM CREATE TSplinePrimitiveCylinderCommand Cylinder -FORM CREATE TSplinePrimitiveSphereCommand Sphere -FORM CREATE TSplinePrimitiveTorusCommand Torus -FORM CREATE TSplinePrimitiveQuadBallCommand Quadball -FORM CREATE TSplinePrimitivePipe Pipe -FORM CREATE TSplineAppendFaceCommand Face -FORM CREATE TSplineExtrudeCommand Extrude -FORM CREATE TSplineRevolveCommand Revolve -FORM CREATE TSplineSweepCommand Sweep -FORM CREATE TSplineLoft Loft -FORM MODIFY TSplineEditCommand Edit Form -FORM MODIFY TSplineEditByCurveCmd Edit By Curve -FORM MODIFY TSplineInsertEdgeCommand Insert Edge -FORM MODIFY TSplineSubsetCmd Subdivide -FORM MODIFY TSplineInsertPointCommand Insert Point -FORM MODIFY TSplineMergeEdgeCmd Merge Edge -FORM MODIFY TSplineBridgeSubDCmd Bridge -FORM MODIFY TSplineFillHoleCmd Fill Hole -FORM MODIFY TSplineEraseAndFillCmd Erase And Fill -FORM MODIFY TSplineWeldCommand Weld Vertices -FORM MODIFY TSplineUnWeldCommand UnWeld Edges -FORM MODIFY TSplineCreasedEdgeCommand Crease -FORM MODIFY TSplineUnCreaseEdgeCmd UnCrease -FORM MODIFY TSplineBevelEdgeCommand Bevel Edge -FORM MODIFY TSplineSlideEdgeCommand Slide Edge -FORM MODIFY TSplineSmoothCmd Smooth -FORM MODIFY TSplineCylindrifyCmd Cylindrify -FORM MODIFY TSplinePullSubDCmd Pull -FORM MODIFY TSplineFlattenSubDCmd Flatten -FORM MODIFY TSplineStraightenCmd Straighten -FORM MODIFY TSplineMatchCmd Match -FORM MODIFY TSplineInterpolateSubDCmd Interpolate -FORM MODIFY TSplineThickenCommand Thicken -FORM MODIFY TSplineFreezeCmd Freeze -FORM MODIFY TSplineUnFreezeCmd UnFreeze -FORM MODIFY FusionMoveCommand Move/Copy -FORM MODIFY AlignCmd Align -FORM MODIFY FusionDeleteCommand Delete -FORM MODIFY PhysicalMaterialCommand Physical Material -FORM MODIFY AppearanceCommand Appearance -FORM MODIFY MaterialCommand Manage Materials -FORM SYMMETRY TSplineInternalMirrorSymmetryCmd Mirror - Internal -FORM SYMMETRY TSplineInternalCircularSymmetryCmd Circular - Internal -FORM SYMMETRY TSplineReflectionMirrorSymmetryCmd Mirror - Duplicate -FORM SYMMETRY TSplineReflectionCircularSymmetryCmd Circular - Duplicate -FORM SYMMETRY TSplineClearSymmetryCommand Clear Symmetry -FORM SYMMETRY TSplineIsolateSymmetryCmd Isolate Symmetry -FORM UTILITIES TSplineToggleTessModeCmd Display Mode -FORM UTILITIES TSplineRepairBodyCmd Repair Body -FORM UTILITIES TSplineMakeUniformCmd Make Uniform -FORM UTILITIES TSpline2BRepCommand Convert -FORM UTILITIES TSplineCapSettingCommand Enable Better Performance -FORM CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -FORM CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -FORM CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -FORM CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -FORM CONSTRUCT ConstructionMidPlaneCommand Midplane -FORM CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -FORM CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -FORM CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -FORM CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -FORM CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -FORM CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -FORM CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -FORM CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -FORM CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -FORM CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -FORM CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -FORM CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -FORM CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -FORM CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -FORM CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -FORM INSPECT MeasureCommand Measure -FORM INSPECT InterferenceCheckCommand Interference -FORM INSPECT FusionHalfSectionViewCommand Section Analysis -FORM INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -FORM INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -FORM INSPECT FusionDraftAnalysisCommand Draft Analysis -FORM INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -FORM INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -FORM INSPECT FusionSurfaceValidateCommand Validate -FORM INSPECT FusionZebraAnalysisCommand Zebra Analysis -FORM INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -FORM INSPECT FusionCenterOfMassCommand Center of Mass -FORM INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -FORM INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -FORM INSPECT FusionDOFAnalysisCommand DOF Analysis -FORM INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -FORM INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -FORM INSPECT SimilarPartsCommand Find Similar Components -FORM INSPECT GraphViewCmd Navigator -FORM INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -FORM INSPECT FacegroupsToggleCmd Display Mesh Face Groups -FORM INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -FORM INSPECT ShowChangeAwarenessToolbarCmd Change Summary -FORM INSPECT ShowHistoryToolbarCmd History -FORM INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -FORM INSERT FusionAddEditDecalCommand Decal -FORM INSERT FusionAddCanvasCommand Canvas -FORM INSERT TSplineImportCommand Insert T-Spline -FORM INSERT SketchImportSVG Insert SVG -FORM INSERT ImportDxfFileCommand Insert DXF -FORM INSERT ParaMeshInsertAlignCommand Insert Mesh -FORM INSERT FusionImportCommandFromToolbar Insert Component -FORM INSERT FusionFastenersCommand Insert Fastener -FORM INSERT FusionDuplicateWithJointsCommand Duplicate With Joints -FORM INSERT PullDeriveCommand Insert Derive -FORM INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -FORM INSERT cadenasparts4cad Insert a manufacturer part -FORM INSERT traceparts_insert Insert TraceParts Supplier Components -FORM ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -FORM SELECT SelectCommand Select -FORM SELECT selectWindow Window Selection -FORM SELECT selectFreeForm Freeform Selection -FORM SELECT selectPaint Paint Selection -FORM SELECT SelectByNameCommand Select By Name -FORM SELECT SelectByBoundaryCommand Select By Boundary -FORM SELECT FusionSelectBodiesBySizeCommand Select By Size -FORM SELECT SelectByInvertCommand Invert Selection -FORM SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -FORM SELECT FusionDragCompControlsCmd Component Drag -FORM SELECT SelectBodyPriorityCommand Select Body Priority -FORM SELECT SelectFacePriorityCommand Select Face Priority -FORM SELECT SelectEdgePriorityCommand Select Edge Priority -FORM SELECT SelectComponentPriorityCommand Select Component Priority -FORM SELECT SelectionFilterCommand Selection Filters -FORM FINISH FORM TSplineBaseFeatureStop Finish Form -SHEET METAL CREATE FusionCreateNewComponentCommand New Component -SHEET METAL CREATE SketchCreate Create Sketch -SHEET METAL CREATE FusionSheetMetalFlangeCommand Flange (Base/Edge/Contour) -SHEET METAL CREATE FusionSheetMetalHemFlangeCommand Hem -SHEET METAL CREATE FusionSheetMetalLoftCommand Lofted Flange -SHEET METAL CREATE SheetMetalFoldCmd Fold -SHEET METAL CREATE ConvertToSheetMetalCmd Convert to Sheet Metal -SHEET METAL CREATE DMConvertToSheetMetalCmd Convert to Sheet Metal -SHEET METAL CREATE PushDeriveCommand Derive -SHEET METAL CREATE Extrude Extrude -SHEET METAL CREATE FusionHoleCommand Hole -SHEET METAL CREATE FusionThreadCommand Thread -SHEET METAL CREATE PatternRectangular Rectangular Pattern -SHEET METAL CREATE PatternCircular Circular Pattern -SHEET METAL CREATE PatternOnPath Pattern on Path -SHEET METAL CREATE FusionPatternGeometricCommand Geometric Pattern -SHEET METAL CREATE MirrorCommand Mirror -SHEET METAL CREATE FusionSheetMetalFlatPatternCmd Create Flat Pattern -SHEET METAL CREATE JointOrigin Joint Origin -SHEET METAL MODIFY FusionSheetmetalUnfoldCommand Unfold -SHEET METAL MODIFY FusionSheetMetalRulesCommand Sheet Metal Rules -SHEET METAL MODIFY FusionSheetMetalRulesLibraryCommand Sheet Metal Rules Library -SHEET METAL MODIFY FusionSheetMetalCornerCommand Corner Closure -SHEET METAL MODIFY FusionJoinByBendCommand Join by bend -SHEET METAL MODIFY FusionSheetMetalRipCommand Rip -SHEET METAL MODIFY FusionSheetMetalFilletCommand Sheet Metal Fillet -SHEET METAL MODIFY FusionSheetMetalChamferCommand Sheet Metal Chamfer -SHEET METAL MODIFY FusionFilletEdgesCommand Fillet -SHEET METAL MODIFY FusionChamferCommand Chamfer -SHEET METAL MODIFY FusionMoveCommand Move/Copy -SHEET METAL MODIFY AlignCmd Align -SHEET METAL MODIFY FusionDeleteCommand Delete -SHEET METAL MODIFY SoftDeleteCommand Remove -SHEET METAL MODIFY PhysicalMaterialCommand Physical Material -SHEET METAL MODIFY AppearanceCommand Appearance -SHEET METAL MODIFY MaterialCommand Manage Materials -SHEET METAL MODIFY ChangeParameterCommand Change Parameters -SHEET METAL MODIFY FusionComputeAllCommand Compute All -SHEET METAL MODIFY FusionComputeUnresolvedCommand Compute Unresolved -SHEET METAL MODIFY MaterializedBomHybridCmd Bill of Materials -SHEET METAL ASSEMBLE FusionImportCommandFromToolbar Insert Component -SHEET METAL ASSEMBLE FusionDuplicateWithJointsCommand Duplicate With Joints -SHEET METAL ASSEMBLE AssemblyMateCommand Constrain Components -SHEET METAL ASSEMBLE AlignConstraintCmd Align Constraint -SHEET METAL ASSEMBLE AngleConstraintCmd Angle Constraint -SHEET METAL ASSEMBLE MidplaneConstraintCmd Center Constraint -SHEET METAL ASSEMBLE TangentConstraintCmd Tangent Constraint -SHEET METAL ASSEMBLE JointConstraintCmd Joint Constraint -SHEET METAL ASSEMBLE JointAssembleCmdNew Joint -SHEET METAL ASSEMBLE JointAsBuiltCmd As-Built Joint -SHEET METAL ASSEMBLE AsBuiltConstraintCmd As-Built Constraint -SHEET METAL ASSEMBLE RigidGroupCmd Rigid Group -SHEET METAL ASSEMBLE FusionMoveJointsCommand Drive Joints -SHEET METAL ASSEMBLE FusionMotionRelationshipCommand Motion Link -SHEET METAL ASSEMBLE FusionMotionStudyCommand Motion Study -SHEET METAL ASSEMBLE EnableContactSetsCmd Enable Contact Sets -SHEET METAL ASSEMBLE EnableAllContactCmd Enable All Contact -SHEET METAL ASSEMBLE DisableAllContactCmd Disable Contact -SHEET METAL ASSEMBLE ContactSetCmd New Contact Set -SHEET METAL CONFIGURE FusionStartDesignConfigModeCmd Configure -SHEET METAL CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -SHEET METAL CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -SHEET METAL CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -SHEET METAL CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -SHEET METAL CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -SHEET METAL CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -SHEET METAL CONSTRUCT ConstructionMidPlaneCommand Midplane -SHEET METAL CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -SHEET METAL CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -SHEET METAL CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -SHEET METAL CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -SHEET METAL CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -SHEET METAL CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -SHEET METAL CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -SHEET METAL CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -SHEET METAL CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -SHEET METAL CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -SHEET METAL CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -SHEET METAL CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -SHEET METAL CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -SHEET METAL CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -SHEET METAL CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -SHEET METAL INSPECT MeasureCommand Measure -SHEET METAL INSPECT InterferenceCheckCommand Interference -SHEET METAL INSPECT FusionHalfSectionViewCommand Section Analysis -SHEET METAL INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -SHEET METAL INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -SHEET METAL INSPECT FusionDraftAnalysisCommand Draft Analysis -SHEET METAL INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -SHEET METAL INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -SHEET METAL INSPECT FusionSurfaceValidateCommand Validate -SHEET METAL INSPECT FusionZebraAnalysisCommand Zebra Analysis -SHEET METAL INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -SHEET METAL INSPECT FusionCenterOfMassCommand Center of Mass -SHEET METAL INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -SHEET METAL INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -SHEET METAL INSPECT FusionDOFAnalysisCommand DOF Analysis -SHEET METAL INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -SHEET METAL INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -SHEET METAL INSPECT SimilarPartsCommand Find Similar Components -SHEET METAL INSPECT GraphViewCmd Navigator -SHEET METAL INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -SHEET METAL INSPECT FacegroupsToggleCmd Display Mesh Face Groups -SHEET METAL INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -SHEET METAL INSPECT ShowChangeAwarenessToolbarCmd Change Summary -SHEET METAL INSPECT ShowHistoryToolbarCmd History -SHEET METAL INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -SHEET METAL INSERT FusionAddEditDecalCommand Decal -SHEET METAL INSERT FusionAddCanvasCommand Canvas -SHEET METAL INSERT TSplineImportCommand Insert T-Spline -SHEET METAL INSERT SketchImportSVG Insert SVG -SHEET METAL INSERT ImportDxfFileCommand Insert DXF -SHEET METAL INSERT ParaMeshInsertAlignCommand Insert Mesh -SHEET METAL INSERT FusionFastenersCommand Insert Fastener -SHEET METAL INSERT PullDeriveCommand Insert Derive -SHEET METAL INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -SHEET METAL INSERT cadenasparts4cad Insert a manufacturer part -SHEET METAL INSERT traceparts_insert Insert TraceParts Supplier Components -SHEET METAL ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -SHEET METAL SELECT SelectCommand Select -SHEET METAL SELECT selectWindow Window Selection -SHEET METAL SELECT selectFreeForm Freeform Selection -SHEET METAL SELECT selectPaint Paint Selection -SHEET METAL SELECT SelectByNameCommand Select By Name -SHEET METAL SELECT SelectByBoundaryCommand Select By Boundary -SHEET METAL SELECT FusionSelectBodiesBySizeCommand Select By Size -SHEET METAL SELECT SelectByInvertCommand Invert Selection -SHEET METAL SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -SHEET METAL SELECT FusionDragCompControlsCmd Component Drag -SHEET METAL SELECT SelectBodyPriorityCommand Select Body Priority -SHEET METAL SELECT SelectFacePriorityCommand Select Face Priority -SHEET METAL SELECT SelectEdgePriorityCommand Select Edge Priority -SHEET METAL SELECT SelectComponentPriorityCommand Select Component Priority -SHEET METAL SELECT SelectionFilterCommand Selection Filters -SHEET METAL REFOLD FusionSheetmetalRefoldCommand Refold -SHEET METAL POSITION SnapshotCmd Capture Position -SHEET METAL POSITION AsBuiltPositionsCmd Revert Position -PLASTIC SETUP FusionAssignPlasticRuleCommand Assign Plastic Rule -PLASTIC SETUP FusionManagePlasticRuleCommand Manage Plastic Rules -PLASTIC CREATE FusionCreateNewComponentCommand New Component -PLASTIC CREATE SketchCreate Create Sketch -PLASTIC CREATE TSplineBaseFeatureCreationCommand Create Form -PLASTIC CREATE PushDeriveCommand Derive -PLASTIC CREATE Extrude Extrude -PLASTIC CREATE Revolve Revolve -PLASTIC CREATE Sweep Sweep -PLASTIC CREATE SolidLoft Loft -PLASTIC CREATE FusionRibCommand Rib -PLASTIC CREATE FusionWebCommand Web -PLASTIC CREATE EmbossCmd Emboss -PLASTIC CREATE FusionBossCommand Boss -PLASTIC CREATE FusionSnapFitCommand Snap Fit -PLASTIC CREATE FusionLipCommand Lip -PLASTIC CREATE FusionRestCommand Rest -PLASTIC CREATE FusionHoleCommand Hole -PLASTIC CREATE FusionThreadCommand Thread -PLASTIC CREATE PrimitiveBox Box -PLASTIC CREATE PrimitiveCylinder Cylinder -PLASTIC CREATE PrimitiveSphere Sphere -PLASTIC CREATE PrimitiveTorus Torus -PLASTIC CREATE PrimitiveCoil Coil -PLASTIC CREATE PrimitivePipe Pipe -PLASTIC CREATE PatternRectangular Rectangular Pattern -PLASTIC CREATE PatternCircular Circular Pattern -PLASTIC CREATE PatternOnPath Pattern on Path -PLASTIC CREATE FusionPatternGeometricCommand Geometric Pattern -PLASTIC CREATE MirrorCommand Mirror -PLASTIC CREATE FusionSurfaceThickenCommand Thicken -PLASTIC CREATE SurfaceSculpt Boundary Fill -PLASTIC CREATE BaseFeatureCreationCommand Create Base Feature -PLASTIC CREATE PCBExternalComponentCreationCmd Create Linked PCB -PLASTIC CREATE PCBDeriveCmd Derive PCB -PLASTIC CREATE PCBCreateCmd Create Unlinked PCB -PLASTIC CREATE JointOrigin Joint Origin -PLASTIC MODIFY FusionPressPullCommand Press Pull -PLASTIC MODIFY EditFaceCommand Edit Face -PLASTIC MODIFY FusionFilletEdgesCommand Fillet -PLASTIC MODIFY FusionChamferCommand Chamfer -PLASTIC MODIFY FusionShellBodyCommand Shell -PLASTIC MODIFY FusionDraftCommand Draft -PLASTIC MODIFY ModifyScale Scale -PLASTIC MODIFY FusionCombineCommand Combine -PLASTIC MODIFY FusionOffsetFacesCommand Offset Face -PLASTIC MODIFY FusionReplaceFaceCommand Replace Face -PLASTIC MODIFY FusionSplitFaceCommand Split Face -PLASTIC MODIFY FusionSplitBodyCommand Split Body -PLASTIC MODIFY FusionPartingLineSplitCmd Silhouette Split -PLASTIC MODIFY FusionMoveCommand Move/Copy -PLASTIC MODIFY AlignCmd Align -PLASTIC MODIFY FusionDeleteCommand Delete -PLASTIC MODIFY SoftDeleteCommand Remove -PLASTIC MODIFY ArrangeCommand Arrange -PLASTIC MODIFY FusionRemoveFeaturesCommand Remove Features -PLASTIC MODIFY FusionRemoveFacesCommand Remove Faces -PLASTIC MODIFY ReplaceWithPrimitivesCommand Replace with Primitives -PLASTIC MODIFY VolFieldCreateLatticeCommand Volumetric Lattice -PLASTIC MODIFY VolFieldTextureCommand Volumetric Texture -PLASTIC MODIFY VolFieldModifyModelCommand VolFieldModifyModelCommand -PLASTIC MODIFY PhysicalMaterialCommand Physical Material -PLASTIC MODIFY AppearanceCommand Appearance -PLASTIC MODIFY MaterialCommand Manage Materials -PLASTIC MODIFY ChangeParameterCommand Change Parameters -PLASTIC MODIFY FusionComputeAllCommand Compute All -PLASTIC MODIFY FusionComputeUnresolvedCommand Compute Unresolved -PLASTIC MODIFY TSpline2BRepCommand Convert -PLASTIC MODIFY MaterializedBomHybridCmd Bill of Materials -PLASTIC ASSEMBLE FusionImportCommandFromToolbar Insert Component -PLASTIC ASSEMBLE FusionDuplicateWithJointsCommand Duplicate With Joints -PLASTIC ASSEMBLE AssemblyMateCommand Constrain Components -PLASTIC ASSEMBLE AlignConstraintCmd Align Constraint -PLASTIC ASSEMBLE AngleConstraintCmd Angle Constraint -PLASTIC ASSEMBLE MidplaneConstraintCmd Center Constraint -PLASTIC ASSEMBLE TangentConstraintCmd Tangent Constraint -PLASTIC ASSEMBLE JointConstraintCmd Joint Constraint -PLASTIC ASSEMBLE JointAssembleCmdNew Joint -PLASTIC ASSEMBLE JointAsBuiltCmd As-Built Joint -PLASTIC ASSEMBLE AsBuiltConstraintCmd As-Built Constraint -PLASTIC ASSEMBLE RigidGroupCmd Rigid Group -PLASTIC ASSEMBLE FusionMoveJointsCommand Drive Joints -PLASTIC ASSEMBLE FusionMotionRelationshipCommand Motion Link -PLASTIC ASSEMBLE FusionMotionStudyCommand Motion Study -PLASTIC ASSEMBLE EnableContactSetsCmd Enable Contact Sets -PLASTIC ASSEMBLE EnableAllContactCmd Enable All Contact -PLASTIC ASSEMBLE DisableAllContactCmd Disable Contact -PLASTIC ASSEMBLE ContactSetCmd New Contact Set -PLASTIC CONFIGURE FusionStartDesignConfigModeCmd Configure -PLASTIC CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -PLASTIC CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -PLASTIC CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -PLASTIC CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -PLASTIC CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -PLASTIC CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -PLASTIC CONSTRUCT ConstructionMidPlaneCommand Midplane -PLASTIC CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -PLASTIC CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -PLASTIC CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -PLASTIC CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -PLASTIC CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -PLASTIC CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -PLASTIC CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -PLASTIC CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -PLASTIC CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -PLASTIC CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -PLASTIC CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -PLASTIC CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -PLASTIC CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -PLASTIC CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -PLASTIC CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -PLASTIC INSPECT MeasureCommand Measure -PLASTIC INSPECT InterferenceCheckCommand Interference -PLASTIC INSPECT FusionHalfSectionViewCommand Section Analysis -PLASTIC INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -PLASTIC INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -PLASTIC INSPECT FusionDraftAnalysisCommand Draft Analysis -PLASTIC INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -PLASTIC INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -PLASTIC INSPECT FusionSurfaceValidateCommand Validate -PLASTIC INSPECT FusionZebraAnalysisCommand Zebra Analysis -PLASTIC INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -PLASTIC INSPECT FusionCenterOfMassCommand Center of Mass -PLASTIC INSPECT DesignAdviceCmd Design Advice -PLASTIC INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -PLASTIC INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -PLASTIC INSPECT FusionDOFAnalysisCommand DOF Analysis -PLASTIC INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -PLASTIC INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -PLASTIC INSPECT SimilarPartsCommand Find Similar Components -PLASTIC INSPECT GraphViewCmd Navigator -PLASTIC INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -PLASTIC INSPECT FacegroupsToggleCmd Display Mesh Face Groups -PLASTIC INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -PLASTIC INSPECT ShowChangeAwarenessToolbarCmd Change Summary -PLASTIC INSPECT ShowHistoryToolbarCmd History -PLASTIC INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -PLASTIC INSERT FusionAddEditDecalCommand Decal -PLASTIC INSERT FusionAddCanvasCommand Canvas -PLASTIC INSERT TSplineImportCommand Insert T-Spline -PLASTIC INSERT SketchImportSVG Insert SVG -PLASTIC INSERT ImportDxfFileCommand Insert DXF -PLASTIC INSERT ParaMeshInsertAlignCommand Insert Mesh -PLASTIC INSERT FusionFastenersCommand Insert Fastener -PLASTIC INSERT PullDeriveCommand Insert Derive -PLASTIC INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -PLASTIC INSERT cadenasparts4cad Insert a manufacturer part -PLASTIC INSERT traceparts_insert Insert TraceParts Supplier Components -PLASTIC ASSEMBLE NewAssemblyFromPartCommand Add To Assembly -PLASTIC SELECT SelectCommand Select -PLASTIC SELECT selectWindow Window Selection -PLASTIC SELECT selectFreeForm Freeform Selection -PLASTIC SELECT selectPaint Paint Selection -PLASTIC SELECT SelectByNameCommand Select By Name -PLASTIC SELECT SelectByBoundaryCommand Select By Boundary -PLASTIC SELECT FusionSelectBodiesBySizeCommand Select By Size -PLASTIC SELECT SelectByInvertCommand Invert Selection -PLASTIC SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -PLASTIC SELECT FusionDragCompControlsCmd Component Drag -PLASTIC SELECT SelectBodyPriorityCommand Select Body Priority -PLASTIC SELECT SelectFacePriorityCommand Select Face Priority -PLASTIC SELECT SelectEdgePriorityCommand Select Edge Priority -PLASTIC SELECT SelectComponentPriorityCommand Select Component Priority -PLASTIC SELECT SelectionFilterCommand Selection Filters -PLASTIC POSITION SnapshotCmd Capture Position -PLASTIC POSITION AsBuiltPositionsCmd Revert Position -ASSEMBLY INSERT FusionImportCommandFromToolbar Insert Component -ASSEMBLY INSERT FusionFastenersCommand Insert Fastener -ASSEMBLY INSERT FusionDuplicateWithJointsCommand Duplicate With Joints -ASSEMBLY INSERT PullDeriveCommand Insert Derive -ASSEMBLY INSERT FusionAddEditDecalCommand Decal -ASSEMBLY INSERT FusionAddCanvasCommand Canvas -ASSEMBLY INSERT NewAssemblyFromPartCommand Add To Assembly -ASSEMBLY INSERT InsertMcMasterCarrComponentCommand Insert McMaster-Carr Component -ASSEMBLY CREATE FusionCreateNewComponentCommand New Component -ASSEMBLY CREATE SketchCreate Create Sketch -ASSEMBLY CREATE PatternRectangular Rectangular Pattern -ASSEMBLY CREATE PatternCircular Circular Pattern -ASSEMBLY CREATE PatternOnPath Pattern on Path -ASSEMBLY CREATE FusionPatternGeometricCommand Geometric Pattern -ASSEMBLY CREATE PCBExternalComponentCreationCmd Create Linked PCB -ASSEMBLY CREATE PushDeriveCommand Derive -ASSEMBLY RELATIONSHIPS AssemblyMateCommand Constrain Components -ASSEMBLY RELATIONSHIPS AlignConstraintCmd Align Constraint -ASSEMBLY RELATIONSHIPS AngleConstraintCmd Angle Constraint -ASSEMBLY RELATIONSHIPS MidplaneConstraintCmd Center Constraint -ASSEMBLY RELATIONSHIPS TangentConstraintCmd Tangent Constraint -ASSEMBLY RELATIONSHIPS JointConstraintCmd Joint Constraint -ASSEMBLY RELATIONSHIPS JointAssembleCmdNew Joint -ASSEMBLY RELATIONSHIPS JointAsBuiltCmd As-Built Joint -ASSEMBLY RELATIONSHIPS AsBuiltConstraintCmd As-Built Constraint -ASSEMBLY RELATIONSHIPS JointOrigin Joint Origin -ASSEMBLY RELATIONSHIPS RigidGroupCmd Rigid Group -ASSEMBLY MOTION FusionMoveJointsCommand Drive Joints -ASSEMBLY MOTION FusionMotionRelationshipCommand Motion Link -ASSEMBLY MOTION FusionMotionStudyCommand Motion Study -ASSEMBLY MODIFY FusionMoveCommand Move/Copy -ASSEMBLY MODIFY AlignCmd Align -ASSEMBLY MODIFY FusionDeleteCommand Delete -ASSEMBLY MODIFY SoftDeleteCommand Remove -ASSEMBLY MODIFY ArrangeCommand Arrange -ASSEMBLY MODIFY MaterializedBomCmd Bill of Materials -ASSEMBLY MODIFY ChangeParameterCommand Change Parameters -ASSEMBLY MODIFY PhysicalMaterialCommand Physical Material -ASSEMBLY MODIFY AppearanceCommand Appearance -ASSEMBLY MODIFY MaterialCommand Manage Materials -ASSEMBLY MODIFY FusionComputeAllCommand Compute All -ASSEMBLY CONTACT EnableContactSetsCmd Enable Contact Sets -ASSEMBLY CONTACT EnableAllContactCmd Enable All Contact -ASSEMBLY CONFIGURE FusionStartDesignConfigModeCmd Configure -ASSEMBLY CONFIGURE FusionShowDesignConfigPanelCmd Display Configuration Table -ASSEMBLY CONFIGURE FusionConfigurationRulesCmd Create Configuration Rules -ASSEMBLY CONSTRUCT CoordinateSystemCommand User Coordinate System (UCS) -ASSEMBLY CONSTRUCT ConstructionPlaneOffsetFromPlaneCommand Offset Plane -ASSEMBLY CONSTRUCT ConstructionPlaneAtAngleCommand Plane at Angle -ASSEMBLY CONSTRUCT ConstructionTangentPlaneCommand Tangent Plane -ASSEMBLY CONSTRUCT ConstructionMidPlaneCommand Midplane -ASSEMBLY CONSTRUCT ConstructionPlanePerpendicularToPlaneCommand Perpendicular Plane -ASSEMBLY CONSTRUCT ConstructionPlaneFromTwoEdgesCommand Plane Through Two Edges -ASSEMBLY CONSTRUCT ConstructionPlaneFromThreePointsCommand Plane Through Three Points -ASSEMBLY CONSTRUCT ConstructionPlaneAlongPathCommand Plane Along Path -ASSEMBLY CONSTRUCT ConstructionAxisThroughCylinderCommand Axis Through Cylinder/Cone/Torus -ASSEMBLY CONSTRUCT ConstructionAxisNormalToFaceCommand Axis Perpendicular To Face -ASSEMBLY CONSTRUCT ConstructionAxisFromTwoPlanesCommand Axis Through Two Planes -ASSEMBLY CONSTRUCT ConstructionAxisThroughTwoPointsCommand Axis Through Two Points -ASSEMBLY CONSTRUCT ConstructionAxisThroughEdgeCommand Axis Through Edge -ASSEMBLY CONSTRUCT ConstructionPointFromPointCommand Point At Vertex -ASSEMBLY CONSTRUCT ConstructionPointThroughTwoEdgesCommand Point Through Two Edges -ASSEMBLY CONSTRUCT ConstructionPointFromThreePlanesCommand Point Through Three Planes -ASSEMBLY CONSTRUCT ConstructionPointFromCircleOrSphereCommand Point At Center Of Circle/Sphere/Torus -ASSEMBLY CONSTRUCT ConstructionPointAtEdgeAndPlaneCommand Point At Edge And Plane -ASSEMBLY CONSTRUCT ConstructionPointAlongPathCommand Point Along Path -ASSEMBLY INSPECT MeasureCommand Measure -ASSEMBLY INSPECT InterferenceCheckCommand Interference -ASSEMBLY INSPECT FusionHalfSectionViewCommand Section Analysis -ASSEMBLY INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -ASSEMBLY INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -ASSEMBLY INSPECT FusionDraftAnalysisCommand Draft Analysis -ASSEMBLY INSPECT FusionEnvironmentMapAnalysisCommand Environment Map Analysis -ASSEMBLY INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -ASSEMBLY INSPECT FusionSurfaceValidateCommand Validate -ASSEMBLY INSPECT FusionZebraAnalysisCommand Zebra Analysis -ASSEMBLY INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -ASSEMBLY INSPECT FusionCenterOfMassCommand Center of Mass -ASSEMBLY INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -ASSEMBLY INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -ASSEMBLY INSPECT FusionDOFAnalysisCommand DOF Analysis -ASSEMBLY INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -ASSEMBLY INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -ASSEMBLY INSPECT SimilarPartsCommand Find Similar Components -ASSEMBLY INSPECT GraphViewCmd Navigator -ASSEMBLY INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -ASSEMBLY INSPECT FacegroupsToggleCmd Display Mesh Face Groups -ASSEMBLY INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -ASSEMBLY INSPECT ShowChangeAwarenessToolbarCmd Change Summary -ASSEMBLY INSPECT ShowHistoryToolbarCmd History -ASSEMBLY INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -ASSEMBLY SELECT SelectCommand Select -ASSEMBLY SELECT selectWindow Window Selection -ASSEMBLY SELECT selectFreeForm Freeform Selection -ASSEMBLY SELECT selectPaint Paint Selection -ASSEMBLY SELECT SelectByNameCommand Select By Name -ASSEMBLY SELECT SelectByBoundaryCommand Select By Boundary -ASSEMBLY SELECT FusionSelectBodiesBySizeCommand Select By Size -ASSEMBLY SELECT SelectByInvertCommand Invert Selection -ASSEMBLY SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -ASSEMBLY SELECT FusionDragCompControlsCmd Component Drag -ASSEMBLY SELECT SelectBodyPriorityCommand Select Body Priority -ASSEMBLY SELECT SelectFacePriorityCommand Select Face Priority -ASSEMBLY SELECT SelectEdgePriorityCommand Select Edge Priority -ASSEMBLY SELECT SelectComponentPriorityCommand Select Component Priority -ASSEMBLY SELECT SelectionFilterCommand Selection Filters -ASSEMBLY POSITION SnapshotCmd Capture Position -ASSEMBLY POSITION AsBuiltPositionsCmd Revert Position -MANAGE ASSIGN PIMAssignItemNumberCmd Assign Item Number -MANAGE RELEASE PIMQuickReleaseCmd Quick Release -MANAGE RELEASE PIMECOReleaseCmd Release with Change Order -MANAGE BOM MaterializedBomCmd Bill of Materials -MANAGE BOM MaterializedBomHybridCmd Bill of Materials -MANAGE PROCESS MANAGEMENT PIMGoToDashboardCmd Dashboard -MANAGE PROCESS MANAGEMENT PIMGoToItemDetailsCmd Details -MANAGE PROCESS MANAGEMENT PIMGoToChangeOrderCmd Change Orders -MANAGE TASK MANAGEMENT TaskManagementOpenTasksCmd Open tasks in web -MANAGE TASK MANAGEMENT TaskManagementCreateTaskCmd Create new task -MANAGE TASK MANAGEMENT TaskManagementRelatedTasksCmd Related tasks -UTILITIES MODELING TOOLS ModelingToggleCmdDef Modeling Tools -UTILITIES MAKE ThreeDprintCmdDef 3D Print -UTILITIES NEST MSFNestAuthoringCmd Nest Preparation -UTILITIES ADD-INS ScriptsManagerCommand Scripts and Add-Ins... -UTILITIES ADD-INS ExchangeAppStoreCommand Design and Make Marketplace -UTILITIES UTILITY MaterialCommand Manage Materials -UTILITIES UTILITY FusionManageThreadsLibraryCommand Manage Threads Library -UTILITIES UTILITY FusionComputeAllCommand Compute All -UTILITIES INSPECT MeasureCommand Measure -UTILITIES INSPECT InterferenceCheckCommand Interference -UTILITIES INSPECT FusionHalfSectionViewCommand Section Analysis -UTILITIES INSPECT FusionCurvatureCombAnalysisCommand Curvature Comb Analysis -UTILITIES INSPECT FusionCurvatureMapAnalysisCommand Curvature Map Analysis -UTILITIES INSPECT FusionDraftAnalysisCommand Draft Analysis -UTILITIES INSPECT FusionIsoCurveAnalysisCommand Isocurve Analysis -UTILITIES INSPECT FusionSurfaceValidateCommand Validate -UTILITIES INSPECT FusionZebraAnalysisCommand Zebra Analysis -UTILITIES INSPECT FusionAccessibilityAnalysisCommand Accessibility Analysis -UTILITIES INSPECT FusionCenterOfMassCommand Center of Mass -UTILITIES INSPECT FusionMinimumRadiusAnalysisCommand Minimum Radius Analysis -UTILITIES INSPECT FusionComponentConnectionAnalysisCommand Component Connection Analysis -UTILITIES INSPECT FusionDOFAnalysisCommand DOF Analysis -UTILITIES INSPECT FusionEditComponentConnectionAnalysisCommand Edit Component Connection Analysis -UTILITIES INSPECT FusionFastenerStackAnalysisCommand Fastener Stack Analysis -UTILITIES INSPECT SimilarPartsCommand Find Similar Components -UTILITIES INSPECT GraphViewCmd Navigator -UTILITIES INSPECT FusionViewColorCyclingToggleCmd Display Component Colors -UTILITIES INSPECT FacegroupsToggleCmd Display Mesh Face Groups -UTILITIES INSPECT FusionAssemblyStatisticsCommand Assembly Statistics -UTILITIES INSPECT ShowChangeAwarenessToolbarCmd Change Summary -UTILITIES INSPECT ShowHistoryToolbarCmd History -UTILITIES INSPECT GravityClimate_ManufacturingSustainabilityInsights_MainDialog Sustainability Insights -UTILITIES CREATE PMI HoleThreadNoteCommand Hole/Thread Note -UTILITIES CREATE PMI LeaderLineNoteCommand Note -UTILITIES CREATE PMI DimensionNoteCommand Sizes and Dimensions -UTILITIES CREATE PMI GeometricToleranceNoteCommand Geometric Tolerancing -UTILITIES SELECT SelectCommand Select -UTILITIES SELECT selectWindow Window Selection -UTILITIES SELECT selectFreeForm Freeform Selection -UTILITIES SELECT selectPaint Paint Selection -UTILITIES SELECT SelectByNameCommand Select By Name -UTILITIES SELECT SelectByBoundaryCommand Select By Boundary -UTILITIES SELECT FusionSelectBodiesBySizeCommand Select By Size -UTILITIES SELECT SelectByInvertCommand Invert Selection -UTILITIES SELECT FusionSelectSeedAndBoundaryFacesCommand Seed And Boundary -UTILITIES SELECT FusionDragCompControlsCmd Component Drag -UTILITIES SELECT SelectBodyPriorityCommand Select Body Priority -UTILITIES SELECT SelectFacePriorityCommand Select Face Priority -UTILITIES SELECT SelectEdgePriorityCommand Select Edge Priority -UTILITIES SELECT SelectComponentPriorityCommand Select Component Priority -UTILITIES SELECT SelectionFilterCommand Selection Filters -UTILITIES POSITION SnapshotCmd Capture Position -UTILITIES POSITION AsBuiltPositionsCmd Revert Position diff --git a/xtask/data/fusion-ids.tsv b/xtask/data/fusion-ids.tsv deleted file mode 100644 index 965acc44..00000000 --- a/xtask/data/fusion-ids.tsv +++ /dev/null @@ -1,184 +0,0 @@ -# Fusion catalog command id -> SolveCraft command id, for `cargo xtask parity` only (observation data). -# A catalog command is live when its SolveCraft command is registered. -SketchCreate sketch.create -Extrude solid.extrude -Revolve solid.revolve -Sweep solid.sweep -SolidLoft solid.loft -FusionRibCommand solid.rib -FusionWebCommand solid.web -EmbossCmd solid.emboss -FusionHoleCommand solid.hole -FusionThreadCommand solid.thread -PrimitiveBox solid.box -PrimitiveCylinder solid.cylinder -PrimitiveSphere solid.sphere -PrimitiveTorus solid.torus -PrimitiveCoil solid.coil -PrimitivePipe solid.pipe -StockModelCommand solid.bounding_solid -PatternRectangular solid.pattern.rectangular -PatternCircular solid.pattern.circular -PatternOnPath solid.pattern.path -MirrorCommand solid.mirror -FusionSurfaceThickenCommand surface.thicken -JointOrigin joint.origin -FusionPressPullCommand solid.press_pull -FusionFilletEdgesCommand solid.fillet -FusionChamferCommand solid.chamfer -FusionShellBodyCommand solid.shell -FusionDraftCommand solid.draft -ModifyScale solid.scale -FusionCombineCommand solid.combine -FusionOffsetFacesCommand solid.offset_face -FusionReplaceFaceCommand solid.replace_face -FusionSplitFaceCommand solid.split_face -FusionSplitBodyCommand solid.split_body -FusionMoveCommand solid.move -AlignCmd solid.align -FusionDeleteCommand timeline.delete -SoftDeleteCommand solid.remove -PhysicalMaterialCommand material.assign -AppearanceCommand appearance.assign -ChangeParameterCommand parameters.change -FusionComputeAllCommand timeline.compute_all -FusionImportCommandFromToolbar file.insert_step -FusionCreateNewComponentCommand component.create -JointAssembleCmdNew joint.create -JointAsBuiltCmd joint.as_built -RigidGroupCmd joint.rigid_group -FusionMoveJointsCommand joint.drive -FusionMotionRelationshipCommand joint.motion_link -FusionMotionStudyCommand motion.study -EnableContactSetsCmd contact.enable_sets -EnableAllContactCmd contact.enable_all -DisableAllContactCmd contact.disable_all -ContactSetCmd contact.create -FusionStartDesignConfigModeCmd config.configure -FusionShowDesignConfigPanelCmd config.table -FusionConfigurationRulesCmd config.rules -ConstructionPlaneOffsetFromPlaneCommand construct.plane.offset -ConstructionPlaneAtAngleCommand construct.plane.at_angle -ConstructionTangentPlaneCommand construct.plane.tangent -ConstructionMidPlaneCommand construct.plane.midplane -ConstructionPlaneFromTwoEdgesCommand construct.plane.two_edges -ConstructionPlaneFromThreePointsCommand construct.plane.three_points -ConstructionPlaneAlongPathCommand construct.plane.along_path -ConstructionAxisThroughCylinderCommand construct.axis.through_cylinder -ConstructionAxisNormalToFaceCommand construct.axis.normal_to_face -ConstructionAxisFromTwoPlanesCommand construct.axis.two_planes -ConstructionAxisThroughTwoPointsCommand construct.axis.two_points -ConstructionAxisThroughEdgeCommand construct.axis.edge -ConstructionPointFromPointCommand construct.point.vertex -ConstructionPointThroughTwoEdgesCommand construct.point.two_edges -ConstructionPointFromThreePlanesCommand construct.point.three_planes -ConstructionPointFromCircleOrSphereCommand construct.point.center -ConstructionPointAtEdgeAndPlaneCommand construct.point.edge_plane -ConstructionPointAlongPathCommand construct.point.along_path -MeasureCommand inspect.measure -InterferenceCheckCommand inspect.interference -FusionHalfSectionViewCommand inspect.section -FusionCurvatureCombAnalysisCommand inspect.curvature_comb -FusionCurvatureMapAnalysisCommand inspect.curvature_map -FusionDraftAnalysisCommand inspect.draft -FusionEnvironmentMapAnalysisCommand inspect.environment_map -FusionIsoCurveAnalysisCommand inspect.isocurve -FusionZebraAnalysisCommand inspect.zebra -FusionAccessibilityAnalysisCommand inspect.accessibility -FusionCenterOfMassCommand inspect.center_of_mass -FusionMinimumRadiusAnalysisCommand inspect.minimum_radius -FusionAddEditDecalCommand canvas.decal -FusionAddCanvasCommand canvas.insert -SketchImportSVG sketch.insert_svg -ImportDxfFileCommand sketch.insert_dxf -ParaMeshInsertAlignCommand file.insert_mesh -FusionFastenersCommand parts.fastener -SnapshotCmd component.capture_position -AsBuiltPositionsCmd component.revert_position -DrawPolyline sketch.line -SketchMidpointLine sketch.line.midpoint -SketchConstrainer sketch.constrainer -ShapeRectangleTwoPoint sketch.rectangle.two_point -ShapeRectangleThreePoint sketch.rectangle.three_point -ShapeRectangleCenter sketch.rectangle.center -CircleCenterRadius sketch.circle.center -CircleTwoPoint sketch.circle.two_point -CircleThreePoint sketch.circle.three_point -CircleTanTanRadius sketch.circle.two_tangent -CircleThreeTangent sketch.circle.three_tangent -ArcThreePoint sketch.arc.three_point -ArcCenterTwoPoint sketch.arc.center_point -ArcTangent sketch.arc.tangent -ShapePolygonCircumscribed sketch.polygon.circumscribed -ShapePolygonInscribed sketch.polygon.inscribed -ShapePolygonEdge sketch.polygon.edge -CircleElipse sketch.ellipse -ShapeSlotCenterToCenter sketch.slot.center_to_center -ShapeSlotOverall sketch.slot.overall -ShapeSlotCenterPoint sketch.slot.center_point -ShapeArcSlotThreePoint sketch.slot.arc_three_point -ShapeArcSlotCenterTwoPoint sketch.slot.arc_center -DrawSpline sketch.spline.fit_point -DrawCVMSpline3D sketch.spline.control_point -DrawCVMSpline5D sketch.spline.control_point_5 -ConicCurveCmd sketch.conic -DrawPoint sketch.point -MTextCmd sketch.text -FitCurvesToSectionCommand sketch.fit_curves_to_section -MirrorSketchCommand sketch.mirror -CircularSketchPatternCommand sketch.pattern.circular -RectangularSketchPatternCommand sketch.pattern.rectangular -ProjectNewCmd sketch.project -IntersectCmd sketch.intersect -SpunProfileCmd sketch.spun_profile -Include3DGeometry sketch.include_3d -ProjectToSurface sketch.project_to_surface -IntersectionCurve sketch.intersection_curve -SketchIsoparametricCurve sketch.isoparametric_curve -SketchDimension sketch.dimension -FilletSketchCmd sketch.fillet -ChamferSketchEqualDistance sketch.chamfer.equal_distance -ChamferSketchDistanceAngle sketch.chamfer.distance_angle -ChamferSketchDistanceDistance sketch.chamfer.two_distance -BlendG1CurveSketchCmd sketch.blend_curve -Offset sketch.offset -TrimSketchCmd sketch.trim -ExtendSketchCmd sketch.extend -BreakSketchCmd sketch.break -SketchScaleCmd sketch.scale -SketchAutoConstraintAndDimCmd sketch.auto_constrain -SketchAutoConstraintAndDimFromDatumCmd sketch.auto_constrain_from_datum -ConstraintHorizontalVertical sketch.constraint.horizontal_vertical -ConstraintCoincident sketch.constraint.coincident -ConstraintTangent sketch.constraint.tangent -ConstraintEqual sketch.constraint.equal -ConstraintParallel sketch.constraint.parallel -ConstraintPerpendicular sketch.constraint.perpendicular -ConstraintFix sketch.constraint.fix -ConstraintMidPoint sketch.constraint.midpoint -ConstraintConcentric sketch.constraint.concentric -ConstraintCollinear sketch.constraint.collinear -ConstraintSymmetry sketch.constraint.symmetry -ConstraintSmooth sketch.constraint.curvature -SketchPolygonConstraintCmd sketch.constraint.polygon -SketchStop sketch.finish -SketchAutoConstrainAndFinish sketch.finish_auto_constrain -FusionSurfacePatchCommand surface.patch -FusionSurfaceTrimCommand surface.trim -FusionExtendCommand surface.extend -FusionSurfaceStitchCommand surface.stitch -FusionSheetMetalFlangeCommand sheet.flange -FusionSheetMetalHemFlangeCommand sheet.hem -SheetMetalFoldCmd sheet.fold -ConvertToSheetMetalCmd sheet.convert -FusionSheetMetalFlatPatternCmd sheet.flat_pattern -FusionSheetmetalUnfoldCommand sheet.unfold -FusionSheetMetalRulesCommand sheet.manage_rules -FusionAssignPlasticRuleCommand plastic.assign_rule -FusionManagePlasticRuleCommand plastic.manage_rules -FusionBossCommand plastic.boss -FusionSnapFitCommand plastic.snap_fit -FusionLipCommand plastic.lip -FusionRestCommand plastic.rest -ConstructionPlanePerpendicularToPlaneCommand construct.plane.perpendicular -ParaMeshConvertCommand mesh.convert diff --git a/xtask/src/features.rs b/xtask/src/features.rs new file mode 100644 index 00000000..776f4a09 --- /dev/null +++ b/xtask/src/features.rs @@ -0,0 +1,104 @@ +//! `cargo xtask features`: SolidCraft's own feature checklist, `docs/features.md`. +//! +//! The page lists every registered command by area (the first part of its dotted id), with its +//! label, id and toolbar place. It comes only from SolidCraft's command registry +//! (`solvecraft-cli commands`), so it can't drift from what the program does; it compares with +//! nothing else. + +use std::path::Path; + +use serde_json::Value; + +/// Areas in the order the page lists them (id prefix, heading). Other prefixes follow, +/// alphabetically, under their prefix. +const AREAS: &[(&str, &str)] = &[ + ("sketch", "Sketch"), + ("solid", "Solid modelling"), + ("surface", "Surfaces"), + ("construct", "Construction geometry"), + ("sheet", "Sheet metal"), + ("plastic", "Plastic parts"), + ("component", "Components"), + ("joint", "Assembly joints"), + ("config", "Configurations"), + ("timeline", "Timeline"), + ("inspect", "Inspect"), + ("file", "Files"), + ("doc", "Documents"), + ("edit", "Edit"), +]; + +pub fn run(root: &Path) -> Result<(), String> { + let out = crate::cargo() + .args(["run", "-q", "--release", "-p", "solvecraft-cli", "--", "commands"]) + .output() + .map_err(|e| format!("solvecraft-cli: {e}"))?; + if !out.status.success() { + return Err(format!("solvecraft-cli commands failed:\n{}", String::from_utf8_lossy(&out.stderr))); + } + let cmds: Value = serde_json::from_slice(&out.stdout).map_err(|e| format!("commands JSON: {e}"))?; + let list = cmds.as_array().map(Vec::as_slice).unwrap_or_default(); + let md = page(list); + std::fs::write(root.join("docs/features.md"), md).map_err(|e| format!("docs/features.md: {e}"))?; + println!("features: {} commands → docs/features.md", list.len()); + Ok(()) +} + +fn area(id: &str) -> &str { + id.split('.').next().unwrap_or_default() +} + +/// The checklist page for the registry's commands. +pub fn page(cmds: &[Value]) -> String { + let s = |c: &Value, k: &str| c[k].as_str().unwrap_or_default().to_string(); + let mut prefixes: Vec = cmds.iter().map(|c| area(&s(c, "id")).to_string()).collect(); + prefixes.sort(); + prefixes.dedup(); + let mut order: Vec<(String, String)> = + AREAS.iter().filter(|(p, _)| prefixes.iter().any(|x| x == p)).map(|(p, h)| (p.to_string(), h.to_string())).collect(); + for p in prefixes.iter().filter(|p| !AREAS.iter().any(|(a, _)| a == p)) { + order.push((p.clone(), format!("`{p}.*`"))); + } + let mut md = format!( + "# Features\n\nSolidCraft's commands by area, generated by `cargo xtask features` from the command registry \ + (`solvecraft-cli commands`). **{} commands.** Every command runs the same way from the toolbar, a script, \ + `solvecraft-cli exec ''`, 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).\n", + cmds.len() + ); + for (prefix, heading) in &order { + let in_area: Vec<&Value> = cmds.iter().filter(|c| area(&s(c, "id")) == prefix).collect(); + md += &format!("\n## {heading} ({})\n\n| Command | Id | Toolbar |\n|---|---|---|\n", in_area.len()); + for c in in_area { + let place = match (s(c, "tab"), s(c, "panel")) { + (t, _) if t.is_empty() => "–".to_string(), + (t, p) if p.is_empty() => t, + (t, p) => format!("{t} › {p}"), + }; + let key = c["shortcut"].as_str().map(|k| format!(" ({k})")).unwrap_or_default(); + md += &format!("| {}{key} | `{}` | {place} |\n", s(c, "label").replace('|', "/"), s(c, "id")); + } + } + md +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn page_groups_by_area() { + let cmds: Value = serde_json::from_str( + r#"[{"id":"solid.extrude","label":"Extrude","tab":"SOLID","panel":"CREATE","shortcut":"E"}, + {"id":"sketch.line","label":"Line","tab":"SKETCH","panel":"CREATE"}, + {"id":"view.fit","label":"Fit","tab":"","panel":""}]"#, + ) + .unwrap(); + let md = page(cmds.as_array().unwrap()); + assert!(md.contains("**3 commands.**")); + let (sk, so, other) = (md.find("## Sketch (1)").unwrap(), md.find("## Solid modelling (1)").unwrap(), md.find("## `view.*` (1)").unwrap()); + assert!(sk < so && so < other); + assert!(md.contains("| Extrude (E) | `solid.extrude` | SOLID › CREATE |")); + assert!(md.contains("| Fit | `view.fit` | – |")); + } +} diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 358728e8..ce79525a 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -5,9 +5,9 @@ mod assets; mod book; +mod features; mod layers; mod licences; -mod parity; mod test; use std::path::{Path, PathBuf}; @@ -19,9 +19,7 @@ usage: cargo xtask commands: layers enforce the crate dependency layering (plan/architecture.md §3) assets check that every non-code asset file is attributed in ATTRIBUTION.md - parity [--refresh] - recompute Fusion command parity in docs/parity.md (--refresh rebuilds - xtask/data/fusion-catalog.tsv from plan/fusion/menu-tree.json) + features list SolidCraft's commands by area in docs/features.md (from the registry) oracle [--cli BIN] replay the reference tests (tests/oracle/*/recipe.json), compare with each case's expected.json and write docs/oracle.md (--cli: a solvecraft-cli @@ -46,7 +44,7 @@ fn main() -> ExitCode { let result = match args.first().map(String::as_str) { Some("layers") => cmd_layers(), Some("assets") => assets::run(&root()), - Some("parity") => parity::run(&root(), rest.contains(&"--refresh")), + Some("features") => features::run(&root()), Some("oracle") => cmd_oracle(rest.iter().position(|a| *a == "--cli").and_then(|i| rest.get(i + 1)).copied()), Some("book") => book::run(&root(), !rest.contains(&"--no-build")), Some("licences") => licences::run(&root(), rest.contains(&"--check")), diff --git a/xtask/src/parity.rs b/xtask/src/parity.rs deleted file mode 100644 index e6b68283..00000000 --- a/xtask/src/parity.rs +++ /dev/null @@ -1,220 +0,0 @@ -//! `cargo xtask parity`: Fusion Design-workspace command parity. -//! -//! `xtask/data/fusion-catalog.tsv` lists the toolbar commands of Fusion's Design workspace as -//! `tab \t panel \t command id \t command name` (ids and names only, nothing else). It is -//! derived from the local, uncommitted `plan/fusion/menu-tree.json` with `--refresh`. A catalog -//! entry is live when SolidCraft registers the command `xtask/data/fusion-ids.tsv` maps its id to -//! (SolidCraft uses its own ids). - -use std::path::Path; -use std::process::Command; - -use serde_json::Value; - -/// Design workspace tabs in the catalog (menu-tree tab id, display name). -const TABS: &[(&str, &str)] = &[ - ("SolidTab", "SOLID"), - ("SketchTab", "SKETCH"), - ("SurfaceTab", "SURFACE"), - ("ParaMeshOuterTab", "MESH"), - ("FormTab", "FORM"), - ("SheetMetalTab", "SHEET METAL"), - ("PlasticTab", "PLASTIC"), - ("AssemblyTab", "ASSEMBLY"), - ("ManageTab", "MANAGE"), - ("ToolsTab", "UTILITIES"), -]; - -/// The tabs the headline number counts (now: SOLID and SKETCH). -const HEADLINE: &[&str] = &["SOLID", "SKETCH"]; - -/// The owner's scope: these tabs (and the PLASTIC subset below) count toward the in-scope -/// figure; the rest of Fusion is deferred and listed separately. -const IN_SCOPE_TABS: &[&str] = &["SOLID", "SKETCH", "ASSEMBLY", "SHEET METAL"]; -/// The PLASTIC commands in scope (enclosure features). -/// (SolidCraft ids, matched through the catalog-id map.) -const PLASTIC_SUBSET: &[&str] = &["plastic.boss", "solid.rib", "solid.web", "plastic.lip", "plastic.snap_fit"]; - -/// Catalog id → SolidCraft id. -fn id_map(s: &str) -> std::collections::HashMap { - s.lines() - .filter(|l| !l.starts_with('#') && !l.trim().is_empty()) - .filter_map(|l| l.split_once('\t').map(|(a, b)| (a.trim().to_string(), b.trim().to_string()))) - .collect() -} - -fn in_plastic_subset(e: &Entry, map: &std::collections::HashMap) -> bool { - e.tab == "PLASTIC" && map.get(&e.id).is_some_and(|ours| PLASTIC_SUBSET.contains(&ours.as_str())) -} - -#[derive(Clone, Debug)] -pub struct Entry { - pub tab: String, - pub panel: String, - pub id: String, - pub name: String, -} - -fn clean(s: &str) -> String { - s.replace(['\t', '\n', '\r'], " ").trim().to_string() -} - -fn walk(controls: &[Value], defs: &[Value], tab: &str, panel: &str, out: &mut Vec) { - for c in controls { - match c["type"].as_str() { - Some("CommandControl") => { - let id = c["command"]["id"].as_str().or(c["id"].as_str()).unwrap_or(""); - if id.is_empty() { - continue; - } - let name = c["command"]["name"] - .as_str() - .filter(|n| !n.is_empty()) - .or_else(|| defs.iter().find(|d| d["id"].as_str() == Some(id)).and_then(|d| d["name"].as_str())) - .unwrap_or(id); - if !out.iter().any(|e| e.tab == tab && e.id == id) { - out.push(Entry { tab: tab.into(), panel: panel.into(), id: clean(id), name: clean(name) }); - } - } - Some("DropDownControl") => walk(c["controls"].as_array().map(Vec::as_slice).unwrap_or(&[]), defs, tab, panel, out), - _ => {} - } - } -} - -/// Catalog entries from Fusion's menu-tree JSON. -pub fn from_menu_tree(v: &Value) -> Vec { - let defs = v["commandDefinitions"].as_array().map(Vec::as_slice).unwrap_or(&[]); - let mut out = Vec::new(); - for (tid, tname) in TABS { - let tab = &v["tabs"][format!("DesignProductType/{tid}")]; - for p in tab["panels"].as_array().into_iter().flatten() { - let panel = clean(p["name"].as_str().unwrap_or("")).to_uppercase(); - walk(p["controls"].as_array().map(Vec::as_slice).unwrap_or(&[]), defs, tname, &panel, &mut out); - } - } - out -} - -pub fn parse_catalog(s: &str) -> Vec { - s.lines() - .filter(|l| !l.starts_with('#') && !l.trim().is_empty()) - .filter_map(|l| { - let mut it = l.split('\t'); - Some(Entry { tab: it.next()?.into(), panel: it.next()?.into(), id: it.next()?.into(), name: it.next().unwrap_or("").into() }) - }) - .collect() -} - -pub fn run(root: &Path, refresh: bool) -> Result<(), String> { - let cat_path = root.join("xtask/data/fusion-catalog.tsv"); - if refresh { - let mt = root.join("plan/fusion/menu-tree.json"); - let s = std::fs::read_to_string(&mt).map_err(|e| format!("{}: {e}", mt.display()))?; - let v: Value = serde_json::from_str(&s).map_err(|e| format!("menu-tree.json: {e}"))?; - let entries = from_menu_tree(&v); - let mut out = String::from( - "# Fusion Design workspace toolbar: tab, panel, command id, command name (ids and names only).\n# Regenerate with `cargo xtask parity --refresh` (needs the local plan/fusion/menu-tree.json).\n", - ); - for e in &entries { - out += &format!("{}\t{}\t{}\t{}\n", e.tab, e.panel, e.id, e.name); - } - std::fs::create_dir_all(root.join("xtask/data")).map_err(|e| e.to_string())?; - std::fs::write(&cat_path, out).map_err(|e| format!("{}: {e}", cat_path.display()))?; - println!("parity: catalog refreshed with {} entries", entries.len()); - } - let catalog = parse_catalog(&std::fs::read_to_string(&cat_path).map_err(|e| format!("{}: {e}", cat_path.display()))?); - let out = Command::new(std::env::var("CARGO").unwrap_or_else(|_| "cargo".into())) - .current_dir(root) - .args(["run", "-q", "--release", "-p", "solvecraft-cli", "--", "commands"]) - .output() - .map_err(|e| format!("solvecraft-cli: {e}"))?; - let cmds: Value = serde_json::from_slice(&out.stdout).map_err(|e| format!("commands JSON: {e}"))?; - let ids: Vec = cmds.as_array().into_iter().flatten().filter_map(|c| c["id"].as_str().map(str::to_string)).collect(); - let map_path = root.join("xtask/data/fusion-ids.tsv"); - let map = id_map(&std::fs::read_to_string(&map_path).map_err(|e| format!("{}: {e}", map_path.display()))?); - let live = |e: &Entry| map.get(&e.id).is_some_and(|ours| ids.contains(ours)); - let in_scope = |e: &Entry| IN_SCOPE_TABS.contains(&e.tab.as_str()) || in_plastic_subset(e, &map); - let pct = |a: usize, b: usize| if b == 0 { 0.0 } else { 100.0 * a as f64 / b as f64 }; - - let head: Vec<&Entry> = catalog.iter().filter(|e| HEADLINE.contains(&e.tab.as_str())).collect(); - let head_live = head.iter().filter(|e| live(e)).count(); - let all_live = catalog.iter().filter(|e| live(e)).count(); - let scope: Vec<&Entry> = catalog.iter().filter(|e| in_scope(e)).collect(); - let scope_live = scope.iter().filter(|e| live(e)).count(); - let mut md = format!( - "# Fusion command parity\n\nGenerated by `cargo xtask parity` from `xtask/data/fusion-catalog.tsv` (the toolbar commands of Fusion's Design workspace, ids and names only) and the live command registry (`solvecraft-cli commands`). A command counts as live when SolidCraft registers the same command id. This measures breadth, not depth; see ROADMAP.md and docs/oracle.md for depth.\n\n**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): {scope_live} / {} commands live ({:.0}%).** SOLID + SKETCH: {head_live} / {} ({:.0}%). Registered commands: {}.\n\nDeferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: {all_live} / {} ({:.0}%).\n\n| Tab | Panel | Live | Total | % |\n|---|---|---:|---:|---:|\n", - scope.len(), - pct(scope_live, scope.len()), - head.len(), - pct(head_live, head.len()), - ids.len(), - catalog.len(), - pct(all_live, catalog.len()), - ); - let mut groups: Vec<(String, String, usize, usize)> = Vec::new(); - for e in &catalog { - let l = usize::from(live(e)); - match groups.iter_mut().find(|g| g.0 == e.tab && g.1 == e.panel) { - Some(g) => { - g.2 += l; - g.3 += 1; - } - None => groups.push((e.tab.clone(), e.panel.clone(), l, 1)), - } - } - for (t, p, l, n) in groups.iter().filter(|g| IN_SCOPE_TABS.contains(&g.0.as_str())) { - md += &format!("| {t} | {p} | {l} | {n} | {:.0}% |\n", pct(*l, *n)); - } - let plastic: Vec<&Entry> = catalog.iter().filter(|e| in_plastic_subset(e, &map)).collect(); - md += &format!( - "| PLASTIC | enclosure subset | {} | {} | {:.0}% |\n", - plastic.iter().filter(|e| live(e)).count(), - plastic.len(), - pct(plastic.iter().filter(|e| live(e)).count(), plastic.len()) - ); - md += "\n### Deferred tabs\n\n| Tab | Panel | Live | Total | % |\n|---|---|---:|---:|---:|\n"; - for (t, p, l, n) in groups.iter().filter(|g| !IN_SCOPE_TABS.contains(&g.0.as_str())) { - md += &format!("| {t} | {p} | {l} | {n} | {:.0}% |\n", pct(*l, *n)); - } - md += "\n## Live (SOLID, SKETCH)\n\n"; - for e in head.iter().filter(|e| live(e)) { - md += &format!("- {} › {} › {}\n", e.tab, e.panel, e.name); - } - md += "\n## Not yet (SOLID, SKETCH)\n\n"; - for e in head.iter().filter(|e| !live(e)) { - md += &format!("- {} › {} › {}\n", e.tab, e.panel, e.name); - } - std::fs::write(root.join("docs/parity.md"), md).map_err(|e| format!("docs/parity.md: {e}"))?; - println!( - "parity: in scope {scope_live}/{} ({:.0}%), SOLID+SKETCH {head_live}/{} ({:.0}%), all tabs {all_live}/{} → docs/parity.md", - scope.len(), - pct(scope_live, scope.len()), - head.len(), - pct(head_live, head.len()), - catalog.len() - ); - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn catalog_from_menu_tree() { - let v: Value = serde_json::from_str( - r#"{"commandDefinitions":[{"id":"B","name":"Bee"}],"tabs":{"DesignProductType/SolidTab":{"panels":[{"name":"Create","controls":[ - {"type":"CommandControl","id":"A","command":{"id":"A","name":"Aye"}}, - {"type":"SeparatorControl","id":"s"}, - {"type":"DropDownControl","id":"d","controls":[{"type":"CommandControl","id":"B","command":{"id":"B"}}]}]}]}}}"#, - ) - .unwrap(); - let e = from_menu_tree(&v); - assert_eq!(e.len(), 2); - assert_eq!((e[0].tab.as_str(), e[0].panel.as_str(), e[0].id.as_str(), e[0].name.as_str()), ("SOLID", "CREATE", "A", "Aye")); - assert_eq!(e[1].name, "Bee"); - let tsv = "# c\nSOLID\tCREATE\tA\tAye\n"; - assert_eq!(parse_catalog(tsv).len(), 1); - } -}