mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-18 22:42:37 +00:00
Mirror of snaporca 3677937964 (DesignPanel.cpp applied as a patch; parity 30, shared files byte-identical). The card header read "Fillet 1" over a chamfer because the offer's Chamfer address opened the tool before setting the type, and open_tool() titles the card from that combo. Choose first, then open. "Dress-up" removed from the offer row (-> "Fillet / chamfer"), the card field (-> "Type", it was a label reading Dress-up whose value said Chamfer) and the toolbar tooltip. Verified on the rig: header "Chamfer 1", field "Type: Chamfer", row "Fillet / chamfer". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyRwbuq6fjn3VV9U9UvhBM
1841 lines
37 KiB
JSON
1841 lines
37 KiB
JSON
{
|
|
"_comment": [
|
|
"Source of truth for the object-driven tool offer (see docs/cad_ux_guidelines.md 4.1).",
|
|
"Every verb, the selections it accepts, the document state it needs, and its fixed",
|
|
"compass address. Extracted from the code, not from memory:",
|
|
" verbs + shortcuts + refusal messages -> src/slic3r/GUI/DesignPanel.cpp (feat_dropdown",
|
|
" call sites at 524/662/734/790/874/904, sk_key table at 369-400, m_keys_feature)",
|
|
" kernel coverage -> src/libslic3r/CadDocument.hpp (enum CadFeatureType)",
|
|
" headless coverage -> src/slic3r/GUI/McpControl.cpp (method == \"...\")",
|
|
" selection kinds -> src/slic3r/GUI/DesignCanvas.hpp (the on_*_selected callbacks)",
|
|
"gen_offer_mockups.py reads this file; the eventual C++ offer table is generated from it",
|
|
"too, so the map exists once."
|
|
],
|
|
"slots": [
|
|
{
|
|
"id": "create",
|
|
"pos": "N",
|
|
"angle": 270,
|
|
"label": "Create",
|
|
"why": "makes new geometry from nothing you have yet"
|
|
},
|
|
{
|
|
"id": "add",
|
|
"pos": "NE",
|
|
"angle": 315,
|
|
"label": "Add material",
|
|
"why": "grows solid or sheet material"
|
|
},
|
|
{
|
|
"id": "remove",
|
|
"pos": "E",
|
|
"angle": 0,
|
|
"label": "Remove",
|
|
"why": "takes material away"
|
|
},
|
|
{
|
|
"id": "dressup",
|
|
"pos": "SE",
|
|
"angle": 45,
|
|
"label": "Fillet / chamfer",
|
|
"why": "finishes faces and edges without changing the shape's intent; named for what it does, not for the trade word"
|
|
},
|
|
{
|
|
"id": "repeat",
|
|
"pos": "S",
|
|
"angle": 90,
|
|
"label": "Repeat",
|
|
"why": "copies what exists"
|
|
},
|
|
{
|
|
"id": "transform",
|
|
"pos": "SW",
|
|
"angle": 135,
|
|
"label": "Transform",
|
|
"why": "moves without changing shape"
|
|
},
|
|
{
|
|
"id": "reference",
|
|
"pos": "W",
|
|
"angle": 180,
|
|
"label": "Reference",
|
|
"why": "makes datums, curves and measurements"
|
|
},
|
|
{
|
|
"id": "modify",
|
|
"pos": "NW",
|
|
"angle": 225,
|
|
"label": "Modify",
|
|
"why": "edits or removes what is already there"
|
|
}
|
|
],
|
|
"selections": [
|
|
{
|
|
"id": "none",
|
|
"name": "Nothing selected",
|
|
"mode": "model",
|
|
"shape": "empty"
|
|
},
|
|
{
|
|
"id": "face_planar",
|
|
"name": "Planar face",
|
|
"mode": "model",
|
|
"shape": "box_top"
|
|
},
|
|
{
|
|
"id": "face_cyl",
|
|
"name": "Cylindrical face",
|
|
"mode": "model",
|
|
"shape": "box_bore"
|
|
},
|
|
{
|
|
"id": "face_other",
|
|
"name": "Curved face",
|
|
"mode": "model",
|
|
"shape": "box_fillet_face"
|
|
},
|
|
{
|
|
"id": "edge_str",
|
|
"name": "Straight edge",
|
|
"mode": "model",
|
|
"shape": "box_edge"
|
|
},
|
|
{
|
|
"id": "edge_circ",
|
|
"name": "Circular edge",
|
|
"mode": "model",
|
|
"shape": "box_bore_rim"
|
|
},
|
|
{
|
|
"id": "vertex",
|
|
"name": "Vertex",
|
|
"mode": "model",
|
|
"shape": "box_vertex"
|
|
},
|
|
{
|
|
"id": "body_solid",
|
|
"name": "Solid body",
|
|
"mode": "model",
|
|
"shape": "box_whole"
|
|
},
|
|
{
|
|
"id": "body_sheet",
|
|
"name": "Sheet body",
|
|
"mode": "model",
|
|
"shape": "sheet"
|
|
},
|
|
{
|
|
"id": "bodies_2",
|
|
"name": "Two bodies",
|
|
"mode": "model",
|
|
"shape": "two_boxes"
|
|
},
|
|
{
|
|
"id": "datum_plane",
|
|
"name": "Datum plane",
|
|
"mode": "model",
|
|
"shape": "datum"
|
|
},
|
|
{
|
|
"id": "datum_axis",
|
|
"name": "Datum axis",
|
|
"mode": "model",
|
|
"shape": "axis"
|
|
},
|
|
{
|
|
"id": "coordsys",
|
|
"name": "Coordinate system",
|
|
"mode": "model",
|
|
"shape": "csys"
|
|
},
|
|
{
|
|
"id": "art",
|
|
"name": "Text / imported art",
|
|
"mode": "model",
|
|
"shape": "art"
|
|
},
|
|
{
|
|
"id": "sk_loop",
|
|
"name": "Closed sketch loop",
|
|
"mode": "model",
|
|
"shape": "loop"
|
|
},
|
|
{
|
|
"id": "sk_none",
|
|
"name": "Sketch, nothing picked",
|
|
"mode": "sketch",
|
|
"shape": "sk_empty"
|
|
},
|
|
{
|
|
"id": "sk_line",
|
|
"name": "Sketch line",
|
|
"mode": "sketch",
|
|
"shape": "sk_line"
|
|
},
|
|
{
|
|
"id": "sk_arc",
|
|
"name": "Sketch arc or circle",
|
|
"mode": "sketch",
|
|
"shape": "sk_arc"
|
|
},
|
|
{
|
|
"id": "sk_point",
|
|
"name": "Sketch point",
|
|
"mode": "sketch",
|
|
"shape": "sk_point"
|
|
},
|
|
{
|
|
"id": "sk_2ent",
|
|
"name": "Two sketch entities",
|
|
"mode": "sketch",
|
|
"shape": "sk_two"
|
|
}
|
|
],
|
|
"doc_states": [
|
|
{
|
|
"id": "rich",
|
|
"name": "Working document",
|
|
"bodies": 2,
|
|
"sketches": 2,
|
|
"sheet": true,
|
|
"note": "two solids, two sketches, one sheet body — everything doc-gated is legal"
|
|
},
|
|
{
|
|
"id": "fresh",
|
|
"name": "Fresh document",
|
|
"bodies": 0,
|
|
"sketches": 0,
|
|
"sheet": false,
|
|
"note": "nothing built yet — shows how much of the ring is empty on first open"
|
|
}
|
|
],
|
|
"verbs": [
|
|
{
|
|
"id": "sketch",
|
|
"name": "Sketch",
|
|
"slot": "create",
|
|
"key": "Shift+S",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"face_planar",
|
|
"datum_plane",
|
|
"none"
|
|
],
|
|
"needs": {},
|
|
"refusal": "Click a face or a reference plane in the viewport, then a sketch tool",
|
|
"gui": true,
|
|
"action": "key:S+S"
|
|
},
|
|
{
|
|
"id": "extrude",
|
|
"name": "Extrude",
|
|
"slot": "add",
|
|
"key": "Shift+E",
|
|
"feature": "Extrude",
|
|
"mcp": "extrude",
|
|
"accepts": [
|
|
"sk_loop",
|
|
"face_planar"
|
|
],
|
|
"needs": {},
|
|
"refusal": "Create a sketch, or pick a solid face, first",
|
|
"gui": true,
|
|
"action": "key:S+E"
|
|
},
|
|
{
|
|
"id": "revolve",
|
|
"name": "Revolve",
|
|
"slot": "add",
|
|
"key": "Shift+R",
|
|
"feature": "Revolve",
|
|
"mcp": "revolve",
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {},
|
|
"refusal": "Create a sketch profile to revolve first",
|
|
"gui": true,
|
|
"action": "key:S+R"
|
|
},
|
|
{
|
|
"id": "sweep",
|
|
"name": "Sweep",
|
|
"slot": "add",
|
|
"key": "Shift+W",
|
|
"feature": "Sweep",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {
|
|
"sketches": 2
|
|
},
|
|
"refusal": "Create a profile sketch to sweep first",
|
|
"gui": true,
|
|
"action": "key:S+W"
|
|
},
|
|
{
|
|
"id": "loft",
|
|
"name": "Loft",
|
|
"slot": "add",
|
|
"key": "Shift+L",
|
|
"feature": "Loft",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {
|
|
"sketches": 2
|
|
},
|
|
"refusal": "Create at least two profile sketches to loft",
|
|
"gui": true,
|
|
"action": "key:S+L"
|
|
},
|
|
{
|
|
"id": "thicken",
|
|
"name": "Thicken",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "Thicken",
|
|
"mcp": "thicken",
|
|
"accepts": [
|
|
"face_planar",
|
|
"face_other"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Thicken needs a solid body — add or import one first",
|
|
"gui": true,
|
|
"action": "fly:material#4"
|
|
},
|
|
{
|
|
"id": "rib",
|
|
"name": "Rib",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "Rib",
|
|
"mcp": "rib",
|
|
"accepts": [
|
|
"sk_line"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Rib needs a solid body — add or import one first",
|
|
"gui": true,
|
|
"action": "fly:material#5"
|
|
},
|
|
{
|
|
"id": "boolean",
|
|
"name": "Union",
|
|
"slot": "add",
|
|
"key": "Shift+B",
|
|
"feature": "Boolean",
|
|
"mcp": "boolean",
|
|
"accepts": [
|
|
"bodies_2"
|
|
],
|
|
"needs": {
|
|
"bodies": 2
|
|
},
|
|
"refusal": "Boolean needs two bodies — create or import a second solid",
|
|
"gui": true,
|
|
"action": "btn:bool#0"
|
|
},
|
|
{
|
|
"id": "bool_subtract",
|
|
"name": "Subtract",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "Boolean",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"bodies_2"
|
|
],
|
|
"needs": {
|
|
"bodies": 2
|
|
},
|
|
"refusal": "Boolean needs two bodies — create or import a second solid",
|
|
"gui": true,
|
|
"action": "btn:bool#1",
|
|
"mode": null
|
|
},
|
|
{
|
|
"id": "bool_intersect",
|
|
"name": "Intersect",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "Boolean",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"bodies_2"
|
|
],
|
|
"needs": {
|
|
"bodies": 2
|
|
},
|
|
"refusal": "Boolean needs two bodies — create or import a second solid",
|
|
"gui": true,
|
|
"action": "btn:bool#2",
|
|
"mode": null
|
|
},
|
|
{
|
|
"id": "surf_extrude",
|
|
"name": "Surface Extrude",
|
|
"slot": "add",
|
|
"key": "Shift+G",
|
|
"feature": "SurfaceExtrude",
|
|
"mcp": "surface_extrude",
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {},
|
|
"refusal": "Create a sketch first",
|
|
"gui": true,
|
|
"action": "key:S+G"
|
|
},
|
|
{
|
|
"id": "surf_revolve",
|
|
"name": "Surface Revolve",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "SurfaceRevolve",
|
|
"mcp": "surface_revolve",
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {},
|
|
"refusal": "Create a sketch profile to revolve first",
|
|
"gui": true,
|
|
"action": "fly:surface#1"
|
|
},
|
|
{
|
|
"id": "surf_loft",
|
|
"name": "Surface Loft",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "SurfaceLoft",
|
|
"mcp": "surface_loft",
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {
|
|
"sketches": 2
|
|
},
|
|
"refusal": "Create at least two profile sketches to loft",
|
|
"gui": true,
|
|
"action": "fly:surface#2"
|
|
},
|
|
{
|
|
"id": "surf_fill",
|
|
"name": "Surface Fill",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "SurfaceFill",
|
|
"mcp": "surface_fill",
|
|
"accepts": [
|
|
"sk_loop"
|
|
],
|
|
"needs": {},
|
|
"refusal": "Create a closed sketch first",
|
|
"gui": true,
|
|
"action": "fly:surface#3"
|
|
},
|
|
{
|
|
"id": "thicken_surf",
|
|
"name": "Thicken Surface",
|
|
"slot": "add",
|
|
"key": null,
|
|
"feature": "ThickenSurface",
|
|
"mcp": "thicken_surface",
|
|
"accepts": [
|
|
"body_sheet"
|
|
],
|
|
"needs": {
|
|
"sheet": true
|
|
},
|
|
"refusal": "target is not a sheet body",
|
|
"gui": true,
|
|
"action": "fly:surface#5"
|
|
},
|
|
{
|
|
"id": "hole",
|
|
"name": "Hole",
|
|
"slot": "remove",
|
|
"key": "Shift+H",
|
|
"feature": "Hole",
|
|
"mcp": "hole",
|
|
"accepts": [
|
|
"face_planar",
|
|
"datum_plane"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Pick a face or a plane to drill into",
|
|
"gui": true,
|
|
"action": "key:S+H"
|
|
},
|
|
{
|
|
"id": "thread",
|
|
"name": "Thread",
|
|
"slot": "remove",
|
|
"key": "Shift+T",
|
|
"feature": "Thread",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"face_cyl",
|
|
"edge_circ"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Pick a cylindrical surface (bore / outer) or a circular edge for a thread",
|
|
"gui": true,
|
|
"action": "key:S+T"
|
|
},
|
|
{
|
|
"id": "shell",
|
|
"name": "Shell",
|
|
"slot": "remove",
|
|
"key": "Shift+K",
|
|
"feature": "Shell",
|
|
"mcp": "shell",
|
|
"accepts": [
|
|
"face_planar",
|
|
"body_solid"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Shell needs a solid body",
|
|
"gui": true,
|
|
"action": "key:S+K"
|
|
},
|
|
{
|
|
"id": "cut",
|
|
"name": "Cut",
|
|
"slot": "remove",
|
|
"key": "Shift+X",
|
|
"feature": "Cut",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"body_solid",
|
|
"datum_plane"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Create a solid body to cut first",
|
|
"gui": true,
|
|
"action": "key:S+X"
|
|
},
|
|
{
|
|
"id": "split",
|
|
"name": "Split",
|
|
"slot": "remove",
|
|
"key": null,
|
|
"feature": "Cut",
|
|
"mcp": "split",
|
|
"accepts": [
|
|
"body_solid"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Split needs a solid body",
|
|
"gui": false,
|
|
"action": null
|
|
},
|
|
{
|
|
"id": "fillet",
|
|
"name": "Fillet",
|
|
"slot": "dressup",
|
|
"key": "Shift+F",
|
|
"feature": "Fillet",
|
|
"mcp": "fillet",
|
|
"accepts": [
|
|
"edge_str",
|
|
"edge_circ",
|
|
"face_planar",
|
|
"body_solid"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Pick an edge to round",
|
|
"gui": true,
|
|
"action": "btn:dress#0"
|
|
},
|
|
{
|
|
"id": "chamfer",
|
|
"name": "Chamfer",
|
|
"slot": "dressup",
|
|
"key": null,
|
|
"feature": "Chamfer",
|
|
"mcp": "chamfer",
|
|
"accepts": [
|
|
"edge_str",
|
|
"edge_circ",
|
|
"face_planar",
|
|
"body_solid"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Pick an edge to bevel",
|
|
"gui": true,
|
|
"action": "btn:dress#1"
|
|
},
|
|
{
|
|
"id": "draft",
|
|
"name": "Draft",
|
|
"slot": "dressup",
|
|
"key": "Shift+D",
|
|
"feature": "Draft",
|
|
"mcp": "draft",
|
|
"accepts": [
|
|
"face_planar",
|
|
"face_other"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Pick a face to taper",
|
|
"gui": true,
|
|
"action": "key:S+D"
|
|
},
|
|
{
|
|
"id": "surf_offset",
|
|
"name": "Surface Offset",
|
|
"slot": "dressup",
|
|
"key": null,
|
|
"feature": "SurfaceOffset",
|
|
"mcp": "surface_offset",
|
|
"accepts": [
|
|
"body_sheet"
|
|
],
|
|
"needs": {
|
|
"sheet": true
|
|
},
|
|
"refusal": "target is not a sheet body",
|
|
"gui": true,
|
|
"action": "fly:surface#4"
|
|
},
|
|
{
|
|
"id": "pattern",
|
|
"name": "Linear pattern",
|
|
"slot": "repeat",
|
|
"key": "Shift+N",
|
|
"feature": "Pattern",
|
|
"mcp": "pattern",
|
|
"accepts": [
|
|
"body_solid",
|
|
"face_planar",
|
|
"sk_loop",
|
|
"art"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Create a solid body to pattern first",
|
|
"gui": true,
|
|
"action": "btn:pat#0"
|
|
},
|
|
{
|
|
"id": "pattern_circular",
|
|
"name": "Circular pattern",
|
|
"slot": "repeat",
|
|
"key": null,
|
|
"feature": "Pattern",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"body_solid",
|
|
"face_planar",
|
|
"sk_loop",
|
|
"art"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Create a solid body to pattern first",
|
|
"gui": true,
|
|
"action": "btn:pat#1",
|
|
"mode": null
|
|
},
|
|
{
|
|
"id": "mirror",
|
|
"name": "Mirror",
|
|
"slot": "repeat",
|
|
"key": "Shift+Z",
|
|
"feature": "Mirror",
|
|
"mcp": "mirror",
|
|
"accepts": [
|
|
"body_solid",
|
|
"datum_plane"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Mirror needs a body — add or import one first",
|
|
"gui": true,
|
|
"action": "key:S+Z"
|
|
},
|
|
{
|
|
"id": "pat_curve",
|
|
"name": "Pattern on Curve",
|
|
"slot": "repeat",
|
|
"key": null,
|
|
"feature": "Pattern",
|
|
"mcp": "pattern_on_curve",
|
|
"accepts": [
|
|
"body_solid",
|
|
"edge_str"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Pattern on curve needs a body and a curve",
|
|
"gui": false,
|
|
"action": null
|
|
},
|
|
{
|
|
"id": "transform",
|
|
"name": "Move",
|
|
"slot": "transform",
|
|
"key": "Shift+Y",
|
|
"feature": "Transform",
|
|
"mcp": "transform",
|
|
"accepts": [
|
|
"body_solid",
|
|
"body_sheet",
|
|
"art"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Transform needs a body — add or import one first",
|
|
"gui": true,
|
|
"action": "key:S+Y"
|
|
},
|
|
{
|
|
"id": "mate",
|
|
"name": "Mate",
|
|
"slot": "transform",
|
|
"key": null,
|
|
"feature": "Mate",
|
|
"mcp": "mate",
|
|
"accepts": [
|
|
"coordsys",
|
|
"bodies_2",
|
|
"face_planar"
|
|
],
|
|
"needs": {
|
|
"bodies": 2
|
|
},
|
|
"refusal": "A mate needs two coordinate systems",
|
|
"gui": true,
|
|
"action": "fly:placement#2"
|
|
},
|
|
{
|
|
"id": "align",
|
|
"name": "Align to",
|
|
"slot": "transform",
|
|
"key": null,
|
|
"feature": "Transform",
|
|
"mcp": "transform",
|
|
"accepts": [
|
|
"face_planar"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Align needs a body",
|
|
"gui": false,
|
|
"action": null
|
|
},
|
|
{
|
|
"id": "plane",
|
|
"name": "Plane",
|
|
"slot": "reference",
|
|
"key": "Shift+P",
|
|
"feature": "Plane",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"none",
|
|
"face_planar",
|
|
"edge_str",
|
|
"datum_plane",
|
|
"vertex"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:S+P"
|
|
},
|
|
{
|
|
"id": "axis",
|
|
"name": "Axis",
|
|
"slot": "reference",
|
|
"key": "Shift+A",
|
|
"feature": "Axis",
|
|
"mcp": "axis",
|
|
"accepts": [
|
|
"none",
|
|
"face_planar",
|
|
"face_cyl",
|
|
"edge_str",
|
|
"vertex"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:S+A"
|
|
},
|
|
{
|
|
"id": "coordsys_v",
|
|
"name": "Coord Sys",
|
|
"slot": "reference",
|
|
"key": "Shift+C",
|
|
"feature": "CoordSys",
|
|
"mcp": "coordsys",
|
|
"accepts": [
|
|
"none",
|
|
"face_planar",
|
|
"vertex"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:S+C"
|
|
},
|
|
{
|
|
"id": "helix",
|
|
"name": "Helix",
|
|
"slot": "reference",
|
|
"key": null,
|
|
"feature": "Helix",
|
|
"mcp": "helix",
|
|
"accepts": [
|
|
"none",
|
|
"datum_plane",
|
|
"face_cyl"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:plane#3"
|
|
},
|
|
{
|
|
"id": "project",
|
|
"name": "Project",
|
|
"slot": "reference",
|
|
"key": null,
|
|
"feature": "Project",
|
|
"mcp": "project",
|
|
"accepts": [
|
|
"body_solid",
|
|
"face_planar",
|
|
"datum_plane"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Project needs a body — add or import one first",
|
|
"gui": true,
|
|
"action": "fly:plane#4"
|
|
},
|
|
{
|
|
"id": "measure",
|
|
"name": "Measure",
|
|
"slot": "reference",
|
|
"key": null,
|
|
"feature": null,
|
|
"mcp": "measure",
|
|
"accepts": [
|
|
"face_planar",
|
|
"face_cyl",
|
|
"face_other",
|
|
"edge_str",
|
|
"edge_circ",
|
|
"vertex",
|
|
"body_solid",
|
|
"body_sheet",
|
|
"bodies_2",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": false,
|
|
"action": null
|
|
},
|
|
{
|
|
"id": "mass_props",
|
|
"name": "Mass",
|
|
"slot": "reference",
|
|
"key": null,
|
|
"feature": null,
|
|
"mcp": "mass_properties",
|
|
"accepts": [
|
|
"body_solid"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:mass"
|
|
},
|
|
{
|
|
"id": "interference",
|
|
"name": "Interference",
|
|
"slot": "reference",
|
|
"key": null,
|
|
"feature": null,
|
|
"mcp": "check_interference",
|
|
"accepts": [
|
|
"bodies_2"
|
|
],
|
|
"needs": {
|
|
"bodies": 2
|
|
},
|
|
"refusal": null,
|
|
"gui": false,
|
|
"action": null
|
|
},
|
|
{
|
|
"id": "edit_feature",
|
|
"name": "Edit",
|
|
"slot": "modify",
|
|
"key": null,
|
|
"feature": null,
|
|
"mcp": "set_feature_expr",
|
|
"accepts": [
|
|
"body_solid",
|
|
"face_planar",
|
|
"face_cyl",
|
|
"face_other",
|
|
"sk_loop",
|
|
"art",
|
|
"datum_plane",
|
|
"datum_axis",
|
|
"coordsys",
|
|
"body_sheet"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:edit"
|
|
},
|
|
{
|
|
"id": "delete_face",
|
|
"name": "Delete Face",
|
|
"slot": "modify",
|
|
"key": null,
|
|
"feature": "DeleteFace",
|
|
"mcp": "delete_face",
|
|
"accepts": [
|
|
"face_planar",
|
|
"face_cyl",
|
|
"face_other"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": "Delete Face needs a body — add or import one first",
|
|
"gui": true,
|
|
"action": "fly:dressup#3"
|
|
},
|
|
{
|
|
"id": "colour",
|
|
"name": "Colour",
|
|
"slot": "modify",
|
|
"key": null,
|
|
"feature": null,
|
|
"mcp": null,
|
|
"accepts": [
|
|
"body_solid",
|
|
"body_sheet"
|
|
],
|
|
"needs": {
|
|
"bodies": 1
|
|
},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:colour"
|
|
},
|
|
{
|
|
"id": "delete",
|
|
"name": "Delete",
|
|
"slot": "modify",
|
|
"key": "Del",
|
|
"feature": null,
|
|
"mcp": null,
|
|
"accepts": [
|
|
"body_solid",
|
|
"body_sheet",
|
|
"sk_loop",
|
|
"art",
|
|
"datum_plane",
|
|
"datum_axis",
|
|
"coordsys",
|
|
"bodies_2",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:delete"
|
|
},
|
|
{
|
|
"id": "sk_line_t",
|
|
"name": "Line",
|
|
"slot": "create",
|
|
"key": "L",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:L",
|
|
"family": "Line"
|
|
},
|
|
{
|
|
"id": "sk_polyline",
|
|
"name": "Polyline",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_line#1",
|
|
"mode": "sketch",
|
|
"family": "Line"
|
|
},
|
|
{
|
|
"id": "sk_rect",
|
|
"name": "Corner rectangle",
|
|
"slot": "create",
|
|
"key": "R",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:R",
|
|
"family": "Rectangle"
|
|
},
|
|
{
|
|
"id": "sk_rect_center",
|
|
"name": "Centre rectangle",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_rect#1",
|
|
"mode": "sketch",
|
|
"family": "Rectangle"
|
|
},
|
|
{
|
|
"id": "sk_rect_oblique",
|
|
"name": "Oblique rectangle",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_rect#2",
|
|
"mode": "sketch",
|
|
"family": "Rectangle"
|
|
},
|
|
{
|
|
"id": "sk_rect_rounded",
|
|
"name": "Rounded rectangle",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_rect#3",
|
|
"mode": "sketch",
|
|
"family": "Rectangle"
|
|
},
|
|
{
|
|
"id": "sk_circle",
|
|
"name": "Centre circle",
|
|
"slot": "create",
|
|
"key": "C",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:C",
|
|
"family": "Circle"
|
|
},
|
|
{
|
|
"id": "sk_circle_2pt",
|
|
"name": "2-point circle",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_circle#1",
|
|
"mode": "sketch",
|
|
"family": "Circle"
|
|
},
|
|
{
|
|
"id": "sk_circle_3pt",
|
|
"name": "3-point circle",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_circle#2",
|
|
"mode": "sketch",
|
|
"family": "Circle"
|
|
},
|
|
{
|
|
"id": "sk_arc_t",
|
|
"name": "3-point arc",
|
|
"slot": "create",
|
|
"key": "A",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:A",
|
|
"family": "Arc"
|
|
},
|
|
{
|
|
"id": "sk_arc_tangent",
|
|
"name": "Tangent arc",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_arc3pt#1",
|
|
"mode": "sketch",
|
|
"family": "Arc"
|
|
},
|
|
{
|
|
"id": "sk_arc_center",
|
|
"name": "Centre-point arc",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_arc3pt#2",
|
|
"mode": "sketch",
|
|
"family": "Arc"
|
|
},
|
|
{
|
|
"id": "sk_slot",
|
|
"name": "Slot",
|
|
"slot": "create",
|
|
"key": "S",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:S",
|
|
"family": "Slot"
|
|
},
|
|
{
|
|
"id": "sk_slot_arc",
|
|
"name": "Arc slot",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_slot#1",
|
|
"mode": "sketch",
|
|
"family": "Slot"
|
|
},
|
|
{
|
|
"id": "sk_ellipse",
|
|
"name": "Ellipse",
|
|
"slot": "create",
|
|
"key": "E",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:E",
|
|
"family": "Ellipse"
|
|
},
|
|
{
|
|
"id": "sk_ellipse_arc",
|
|
"name": "Elliptical arc",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_ellipse#1",
|
|
"mode": "sketch",
|
|
"family": "Ellipse"
|
|
},
|
|
{
|
|
"id": "sk_spline",
|
|
"name": "Spline",
|
|
"slot": "create",
|
|
"key": "B",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:B"
|
|
},
|
|
{
|
|
"id": "sk_poly_3",
|
|
"name": "Triangle",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:poly#3",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_poly_4",
|
|
"name": "Square",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:poly#4",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_poly_5",
|
|
"name": "Pentagon",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:poly#5",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_polygon",
|
|
"name": "Hexagon",
|
|
"slot": "create",
|
|
"key": "G",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:poly#6",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_poly_8",
|
|
"name": "Octagon",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:poly#8",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_poly_12",
|
|
"name": "Dodecagon",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:poly#12",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_poly_inscribed",
|
|
"name": "Inscribed",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:polyfit#0",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_poly_circumscribed",
|
|
"name": "Circumscribed",
|
|
"slot": "create",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:polyfit#1",
|
|
"mode": "sketch",
|
|
"family": "Polygon"
|
|
},
|
|
{
|
|
"id": "sk_point_t",
|
|
"name": "Point",
|
|
"slot": "create",
|
|
"key": "P",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_point",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:P"
|
|
},
|
|
{
|
|
"id": "sk_offset",
|
|
"name": "Offset",
|
|
"slot": "add",
|
|
"key": "O",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:O"
|
|
},
|
|
{
|
|
"id": "sk_trim",
|
|
"name": "Trim",
|
|
"slot": "remove",
|
|
"key": "T",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:T"
|
|
},
|
|
{
|
|
"id": "sk_fillet",
|
|
"name": "Fillet",
|
|
"slot": "dressup",
|
|
"key": "F",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:F"
|
|
},
|
|
{
|
|
"id": "sk_chamfer",
|
|
"name": "Chamfer",
|
|
"slot": "dressup",
|
|
"key": "H",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:H"
|
|
},
|
|
{
|
|
"id": "sk_array",
|
|
"name": "Linear array",
|
|
"slot": "repeat",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_array#0",
|
|
"mode": "sketch",
|
|
"family": "Array"
|
|
},
|
|
{
|
|
"id": "sk_array_polar",
|
|
"name": "Polar array",
|
|
"slot": "repeat",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_array#1",
|
|
"mode": "sketch",
|
|
"family": "Array"
|
|
},
|
|
{
|
|
"id": "sk_mirror",
|
|
"name": "Mirror",
|
|
"slot": "repeat",
|
|
"key": "M",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:M"
|
|
},
|
|
{
|
|
"id": "sk_move",
|
|
"name": "Move",
|
|
"slot": "transform",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_move#0",
|
|
"family": "Move"
|
|
},
|
|
{
|
|
"id": "sk_rotate",
|
|
"name": "Rotate",
|
|
"slot": "transform",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_move#1",
|
|
"mode": "sketch",
|
|
"family": "Move"
|
|
},
|
|
{
|
|
"id": "sk_scale",
|
|
"name": "Scale",
|
|
"slot": "transform",
|
|
"key": null,
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "fly:design_move#2",
|
|
"mode": "sketch",
|
|
"family": "Move"
|
|
},
|
|
{
|
|
"id": "sk_dimension",
|
|
"name": "Dimension",
|
|
"slot": "reference",
|
|
"key": "D",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:D"
|
|
},
|
|
{
|
|
"id": "sk_constrain",
|
|
"name": "Constrain",
|
|
"slot": "reference",
|
|
"key": "K",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:K"
|
|
},
|
|
{
|
|
"id": "sk_construct",
|
|
"name": "Construction",
|
|
"slot": "reference",
|
|
"key": "Q",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_none",
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:Q"
|
|
},
|
|
{
|
|
"id": "sk_extend",
|
|
"name": "Extend",
|
|
"slot": "modify",
|
|
"key": "X",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "key:X"
|
|
},
|
|
{
|
|
"id": "sk_delete",
|
|
"name": "Delete",
|
|
"slot": "modify",
|
|
"key": "Del",
|
|
"feature": "Sketch",
|
|
"mcp": null,
|
|
"mode": "sketch",
|
|
"accepts": [
|
|
"sk_line",
|
|
"sk_arc",
|
|
"sk_point",
|
|
"sk_2ent"
|
|
],
|
|
"needs": {},
|
|
"refusal": null,
|
|
"gui": true,
|
|
"action": "btn:delete"
|
|
}
|
|
],
|
|
"chrome_only": {
|
|
"_why": "document-level actions act on the DOCUMENT, not on a selection, so they stay in chrome and never enter the offer (see 4.1)",
|
|
"items": [
|
|
"Import STEP",
|
|
"Import mesh",
|
|
"Text",
|
|
"SVG",
|
|
"Export STEP",
|
|
"Commit to Plate",
|
|
"Undo",
|
|
"Redo",
|
|
"Variables",
|
|
"Section view",
|
|
"Origin planes",
|
|
"World axes"
|
|
]
|
|
},
|
|
"_ratified": "Row order ratified 2026-07-31 by Tommaso. Changing an index is a breaking change (charter 4.1)."
|
|
}
|