mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-18 14:32:36 +00:00
Design: every offer verb has a hint, shown on hover — and the status line wraps
Mirror of snaporca 2b3e890165 (DesignPanel.cpp applied as a patch; parity 30 / 16, shared files byte-identical). All 86 verbs now carry a hint: 55 extracted from the C++ tool definitions so the offer and the armed-tool hint cannot drift, 31 written by hand. One wxEVT_MENU_HIGHLIGHT binding shows the hovered verb's hint in the status line. The generator asserts that no wired verb lacks one. Also: all 200 status writes go through set_status(), which wraps instead of clipping at the panel edge; and the empty-document hint is called from on_tab_shown() as well, since after_tree_edit() never runs on a freshly opened tab. Verified on the rig. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyRwbuq6fjn3VV9U9UvhBM
This commit is contained in:
co-authored by
Claude Opus 5
parent
3037e55f44
commit
96816f725c
@@ -93,6 +93,7 @@ def main():
|
||||
" // grouping instead of flattening 19 create tools into one wall.",
|
||||
" const char* family;",
|
||||
" const char* icon; // resources/images name, or nullptr — the offer draws it beside the row",
|
||||
" const char* hint; // what the verb does / what to click; shown on hover",
|
||||
"};",
|
||||
"",
|
||||
"// Row labels, in ratified order.",
|
||||
@@ -106,19 +107,23 @@ def main():
|
||||
"",
|
||||
"static const OfferVerb kOfferVerbs[] = {",
|
||||
]
|
||||
# A verb the user can PICK must say what it does. Fail loudly rather than ship a
|
||||
# bare name — the offer is now the only door to these tools.
|
||||
blind = [v["id"] for v in A["verbs"] if v.get("action") and not v.get("hint")]
|
||||
assert not blind, f"wired verbs with no hint: {blind}"
|
||||
for v in A["verbs"]:
|
||||
mask = 0
|
||||
for a in v["accepts"]:
|
||||
mask |= 1 << sels.index(a)
|
||||
n = v.get("needs") or {}
|
||||
lines.append(
|
||||
" {%s, %s, %d, %s, %s, %s, 0x%08xu, %d, %d, %s, %s, %s, %s}," % (
|
||||
" {%s, %s, %d, %s, %s, %s, 0x%08xu, %d, %d, %s, %s, %s, %s, %s}," % (
|
||||
cstr(v["id"]), cstr(v["name"]), slots.index(v["slot"]),
|
||||
cstr(v.get("key")), cstr(v.get("action")), cstr(v.get("refusal")),
|
||||
mask, n.get("bodies", 0), n.get("sketches", 0),
|
||||
"true" if n.get("sheet") else "false",
|
||||
"true" if v.get("mode") == "sketch" else "false",
|
||||
cstr(v.get("family")), cstr(v.get("icon"))))
|
||||
cstr(v.get("family")), cstr(v.get("icon")), cstr(v.get("hint"))))
|
||||
lines += [
|
||||
"};",
|
||||
f"static const int kOfferVerbCount = {len(A['verbs'])};",
|
||||
|
||||
+172
-86
@@ -226,7 +226,8 @@
|
||||
"refusal": "Click a face or a reference plane in the viewport, then a sketch tool",
|
||||
"gui": true,
|
||||
"action": "key:S+S",
|
||||
"icon": "design_sketch"
|
||||
"icon": "design_sketch",
|
||||
"hint": "Click a face or a reference plane, then pick a drawing tool"
|
||||
},
|
||||
{
|
||||
"id": "extrude",
|
||||
@@ -243,7 +244,8 @@
|
||||
"refusal": "Create a sketch, or pick a solid face, first",
|
||||
"gui": true,
|
||||
"action": "key:S+E",
|
||||
"icon": "design_extrude"
|
||||
"icon": "design_extrude",
|
||||
"hint": "Extrude a sketch profile, or push/pull a picked face"
|
||||
},
|
||||
{
|
||||
"id": "revolve",
|
||||
@@ -259,7 +261,8 @@
|
||||
"refusal": "Create a sketch profile to revolve first",
|
||||
"gui": true,
|
||||
"action": "key:S+R",
|
||||
"icon": "design_revolve"
|
||||
"icon": "design_revolve",
|
||||
"hint": "Revolve a profile about an axis"
|
||||
},
|
||||
{
|
||||
"id": "sweep",
|
||||
@@ -277,7 +280,8 @@
|
||||
"refusal": "Create a profile sketch to sweep first",
|
||||
"gui": true,
|
||||
"action": "key:S+W",
|
||||
"icon": "design_sweep"
|
||||
"icon": "design_sweep",
|
||||
"hint": "Sweep a profile along a path"
|
||||
},
|
||||
{
|
||||
"id": "loft",
|
||||
@@ -295,7 +299,8 @@
|
||||
"refusal": "Create at least two profile sketches to loft",
|
||||
"gui": true,
|
||||
"action": "key:S+L",
|
||||
"icon": "design_loft"
|
||||
"icon": "design_loft",
|
||||
"hint": "Loft (skin) between two or more profiles"
|
||||
},
|
||||
{
|
||||
"id": "thicken",
|
||||
@@ -314,7 +319,8 @@
|
||||
"refusal": "Thicken needs a solid body — add or import one first",
|
||||
"gui": true,
|
||||
"action": "fly:material#4",
|
||||
"icon": "design_thicken"
|
||||
"icon": "design_thicken",
|
||||
"hint": "Offset a solid face into a thin plate (new body)"
|
||||
},
|
||||
{
|
||||
"id": "rib",
|
||||
@@ -332,7 +338,8 @@
|
||||
"refusal": "Rib needs a solid body — add or import one first",
|
||||
"gui": true,
|
||||
"action": "fly:material#5",
|
||||
"icon": "design_rib"
|
||||
"icon": "design_rib",
|
||||
"hint": "Grow a thin wall from an open sketch line, fused to a body"
|
||||
},
|
||||
{
|
||||
"id": "boolean",
|
||||
@@ -350,7 +357,8 @@
|
||||
"refusal": "Boolean needs two bodies — create or import a second solid",
|
||||
"gui": true,
|
||||
"action": "btn:bool#0",
|
||||
"icon": "design_boolean"
|
||||
"icon": "design_boolean",
|
||||
"hint": "Fuse the tool body into the target — one solid, no seam"
|
||||
},
|
||||
{
|
||||
"id": "bool_subtract",
|
||||
@@ -369,7 +377,8 @@
|
||||
"gui": true,
|
||||
"action": "btn:bool#1",
|
||||
"mode": null,
|
||||
"icon": "design_boolean"
|
||||
"icon": "design_boolean",
|
||||
"hint": "Cut the tool body out of the target"
|
||||
},
|
||||
{
|
||||
"id": "bool_intersect",
|
||||
@@ -388,7 +397,8 @@
|
||||
"gui": true,
|
||||
"action": "btn:bool#2",
|
||||
"mode": null,
|
||||
"icon": "design_boolean"
|
||||
"icon": "design_boolean",
|
||||
"hint": "Keep only where the two bodies overlap"
|
||||
},
|
||||
{
|
||||
"id": "surf_extrude",
|
||||
@@ -404,7 +414,8 @@
|
||||
"refusal": "Create a sketch first",
|
||||
"gui": true,
|
||||
"action": "key:S+G",
|
||||
"icon": "design_extrude"
|
||||
"icon": "design_extrude",
|
||||
"hint": "Extrude a sketch into a sheet body (no end caps)"
|
||||
},
|
||||
{
|
||||
"id": "surf_revolve",
|
||||
@@ -420,7 +431,8 @@
|
||||
"refusal": "Create a sketch profile to revolve first",
|
||||
"gui": true,
|
||||
"action": "fly:surface#1",
|
||||
"icon": "design_revolve"
|
||||
"icon": "design_revolve",
|
||||
"hint": "Revolve a sketch profile into a sheet body"
|
||||
},
|
||||
{
|
||||
"id": "surf_loft",
|
||||
@@ -438,7 +450,8 @@
|
||||
"refusal": "Create at least two profile sketches to loft",
|
||||
"gui": true,
|
||||
"action": "fly:surface#2",
|
||||
"icon": "design_loft"
|
||||
"icon": "design_loft",
|
||||
"hint": "Loft (skin) between 2+ profiles, open (no end caps)"
|
||||
},
|
||||
{
|
||||
"id": "surf_fill",
|
||||
@@ -454,7 +467,8 @@
|
||||
"refusal": "Create a closed sketch first",
|
||||
"gui": true,
|
||||
"action": "fly:surface#3",
|
||||
"icon": "design_surface"
|
||||
"icon": "design_surface",
|
||||
"hint": "Fill a sketch boundary with a smooth face"
|
||||
},
|
||||
{
|
||||
"id": "thicken_surf",
|
||||
@@ -472,7 +486,8 @@
|
||||
"refusal": "target is not a sheet body",
|
||||
"gui": true,
|
||||
"action": "fly:surface#5",
|
||||
"icon": "design_thicken"
|
||||
"icon": "design_thicken",
|
||||
"hint": "Thicken a sheet body into a solid"
|
||||
},
|
||||
{
|
||||
"id": "hole",
|
||||
@@ -491,7 +506,8 @@
|
||||
"refusal": "Pick a face or a plane to drill into",
|
||||
"gui": true,
|
||||
"action": "key:S+H",
|
||||
"icon": "design_hole"
|
||||
"icon": "design_hole",
|
||||
"hint": "Drill a hole, centred on a picked face or placed on a plane"
|
||||
},
|
||||
{
|
||||
"id": "thread",
|
||||
@@ -510,7 +526,8 @@
|
||||
"refusal": "Pick a cylindrical surface (bore / outer) or a circular edge for a thread",
|
||||
"gui": true,
|
||||
"action": "key:S+T",
|
||||
"icon": "design_thread"
|
||||
"icon": "design_thread",
|
||||
"hint": "Thread a cylindrical surface (inner bore / outer) or a circular edge"
|
||||
},
|
||||
{
|
||||
"id": "shell",
|
||||
@@ -529,7 +546,8 @@
|
||||
"refusal": "Shell needs a solid body",
|
||||
"gui": true,
|
||||
"action": "key:S+K",
|
||||
"icon": "design_shell"
|
||||
"icon": "design_shell",
|
||||
"hint": "Hollow the body to a wall thickness, opening a picked face"
|
||||
},
|
||||
{
|
||||
"id": "cut",
|
||||
@@ -548,7 +566,8 @@
|
||||
"refusal": "Create a solid body to cut first",
|
||||
"gui": true,
|
||||
"action": "key:S+X",
|
||||
"icon": "design_cut"
|
||||
"icon": "design_cut",
|
||||
"hint": "Split the body with a plane; set the offset in the card"
|
||||
},
|
||||
{
|
||||
"id": "split",
|
||||
@@ -566,7 +585,8 @@
|
||||
"refusal": "Split needs a solid body",
|
||||
"gui": false,
|
||||
"action": null,
|
||||
"icon": null
|
||||
"icon": null,
|
||||
"hint": "Split the body into separate solids"
|
||||
},
|
||||
{
|
||||
"id": "fillet",
|
||||
@@ -587,7 +607,8 @@
|
||||
"refusal": "Pick an edge to round",
|
||||
"gui": true,
|
||||
"action": "btn:dress#0",
|
||||
"icon": "design_filletedge"
|
||||
"icon": "design_filletedge",
|
||||
"hint": "Pick an edge, then drag the radius arrow or type it"
|
||||
},
|
||||
{
|
||||
"id": "chamfer",
|
||||
@@ -608,7 +629,8 @@
|
||||
"refusal": "Pick an edge to bevel",
|
||||
"gui": true,
|
||||
"action": "btn:dress#1",
|
||||
"icon": "design_chamfer"
|
||||
"icon": "design_chamfer",
|
||||
"hint": "Pick an edge, then drag the distance arrow or type it"
|
||||
},
|
||||
{
|
||||
"id": "draft",
|
||||
@@ -627,7 +649,8 @@
|
||||
"refusal": "Pick a face to taper",
|
||||
"gui": true,
|
||||
"action": "key:S+D",
|
||||
"icon": "design_draft"
|
||||
"icon": "design_draft",
|
||||
"hint": "Tilt a picked face by a draft angle"
|
||||
},
|
||||
{
|
||||
"id": "surf_offset",
|
||||
@@ -645,7 +668,8 @@
|
||||
"refusal": "target is not a sheet body",
|
||||
"gui": true,
|
||||
"action": "fly:surface#4",
|
||||
"icon": "design_offset"
|
||||
"icon": "design_offset",
|
||||
"hint": "Offset a sheet body's shell by a signed distance"
|
||||
},
|
||||
{
|
||||
"id": "pattern",
|
||||
@@ -666,7 +690,8 @@
|
||||
"refusal": "Create a solid body to pattern first",
|
||||
"gui": true,
|
||||
"action": "btn:pat#0",
|
||||
"icon": "design_array"
|
||||
"icon": "design_array",
|
||||
"hint": "Repeat the body along a direction — drag the spacing, set the count"
|
||||
},
|
||||
{
|
||||
"id": "pattern_circular",
|
||||
@@ -688,7 +713,8 @@
|
||||
"gui": true,
|
||||
"action": "btn:pat#1",
|
||||
"mode": null,
|
||||
"icon": "design_polararray"
|
||||
"icon": "design_polararray",
|
||||
"hint": "Repeat the body around an axis — set the count and sweep"
|
||||
},
|
||||
{
|
||||
"id": "mirror",
|
||||
@@ -707,7 +733,8 @@
|
||||
"refusal": "Mirror needs a body — add or import one first",
|
||||
"gui": true,
|
||||
"action": "key:S+Z",
|
||||
"icon": "design_mirror"
|
||||
"icon": "design_mirror",
|
||||
"hint": "Reflect a body about a plane"
|
||||
},
|
||||
{
|
||||
"id": "pat_curve",
|
||||
@@ -726,7 +753,8 @@
|
||||
"refusal": "Pattern on curve needs a body and a curve",
|
||||
"gui": false,
|
||||
"action": null,
|
||||
"icon": null
|
||||
"icon": null,
|
||||
"hint": "Repeat the body along a picked curve"
|
||||
},
|
||||
{
|
||||
"id": "transform",
|
||||
@@ -746,7 +774,8 @@
|
||||
"refusal": "Transform needs a body — add or import one first",
|
||||
"gui": true,
|
||||
"action": "key:S+Y",
|
||||
"icon": "design_move"
|
||||
"icon": "design_move",
|
||||
"hint": "Move and/or rotate an existing body"
|
||||
},
|
||||
{
|
||||
"id": "mate",
|
||||
@@ -766,7 +795,8 @@
|
||||
"refusal": "A mate needs two coordinate systems",
|
||||
"gui": true,
|
||||
"action": "fly:placement#2",
|
||||
"icon": "design_c_coincident"
|
||||
"icon": "design_c_coincident",
|
||||
"hint": "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)"
|
||||
},
|
||||
{
|
||||
"id": "align",
|
||||
@@ -784,7 +814,8 @@
|
||||
"refusal": "Align needs a body",
|
||||
"gui": false,
|
||||
"action": null,
|
||||
"icon": null
|
||||
"icon": null,
|
||||
"hint": "Align the body to a picked face or plane"
|
||||
},
|
||||
{
|
||||
"id": "plane",
|
||||
@@ -804,7 +835,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:S+P",
|
||||
"icon": "design_plane"
|
||||
"icon": "design_plane",
|
||||
"hint": "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)"
|
||||
},
|
||||
{
|
||||
"id": "axis",
|
||||
@@ -824,7 +856,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:S+A",
|
||||
"icon": "design_line"
|
||||
"icon": "design_line",
|
||||
"hint": "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)"
|
||||
},
|
||||
{
|
||||
"id": "coordsys_v",
|
||||
@@ -842,7 +875,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:S+C",
|
||||
"icon": "design_point"
|
||||
"icon": "design_point",
|
||||
"hint": "Datum coordinate system (world point, or face + direction edge)"
|
||||
},
|
||||
{
|
||||
"id": "helix",
|
||||
@@ -860,7 +894,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "fly:plane#3",
|
||||
"icon": "design_thread"
|
||||
"icon": "design_thread",
|
||||
"hint": "Helical curve (spring path) — use as a sweep path for coils / springs / augers"
|
||||
},
|
||||
{
|
||||
"id": "project",
|
||||
@@ -880,7 +915,8 @@
|
||||
"refusal": "Project needs a body — add or import one first",
|
||||
"gui": true,
|
||||
"action": "fly:plane#4",
|
||||
"icon": "design_sketch"
|
||||
"icon": "design_sketch",
|
||||
"hint": "Project body edges onto a plane as sketch entities"
|
||||
},
|
||||
{
|
||||
"id": "measure",
|
||||
@@ -907,7 +943,8 @@
|
||||
"refusal": null,
|
||||
"gui": false,
|
||||
"action": null,
|
||||
"icon": null
|
||||
"icon": null,
|
||||
"hint": "Measure between the picked points, edges or faces"
|
||||
},
|
||||
{
|
||||
"id": "mass_props",
|
||||
@@ -925,7 +962,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "btn:mass",
|
||||
"icon": "info"
|
||||
"icon": "info",
|
||||
"hint": "Report the volume and surface area of the selected body"
|
||||
},
|
||||
{
|
||||
"id": "interference",
|
||||
@@ -943,7 +981,8 @@
|
||||
"refusal": null,
|
||||
"gui": false,
|
||||
"action": null,
|
||||
"icon": null
|
||||
"icon": null,
|
||||
"hint": "Check whether two bodies overlap — reports, changes nothing"
|
||||
},
|
||||
{
|
||||
"id": "edit_feature",
|
||||
@@ -968,7 +1007,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "btn:edit",
|
||||
"icon": "design_edit"
|
||||
"icon": "design_edit",
|
||||
"hint": "Reopen the selected feature to change what it was made from"
|
||||
},
|
||||
{
|
||||
"id": "delete_face",
|
||||
@@ -988,7 +1028,8 @@
|
||||
"refusal": "Delete Face needs a body — add or import one first",
|
||||
"gui": true,
|
||||
"action": "fly:dressup#3",
|
||||
"icon": "design_delete"
|
||||
"icon": "design_delete",
|
||||
"hint": "Remove faces from a body and heal the solid"
|
||||
},
|
||||
{
|
||||
"id": "colour",
|
||||
@@ -1007,7 +1048,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "btn:colour",
|
||||
"icon": "color_palette"
|
||||
"icon": "color_palette",
|
||||
"hint": "Set the selected body's display colour"
|
||||
},
|
||||
{
|
||||
"id": "delete",
|
||||
@@ -1034,7 +1076,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "btn:delete",
|
||||
"icon": "design_delete"
|
||||
"icon": "design_delete",
|
||||
"hint": "Delete what is selected"
|
||||
},
|
||||
{
|
||||
"id": "sk_line_t",
|
||||
@@ -1056,7 +1099,8 @@
|
||||
"gui": true,
|
||||
"action": "key:L",
|
||||
"family": "Line",
|
||||
"icon": "design_line"
|
||||
"icon": "design_line",
|
||||
"hint": "Line — click start, then end"
|
||||
},
|
||||
{
|
||||
"id": "sk_polyline",
|
||||
@@ -1078,7 +1122,8 @@
|
||||
"action": "fly:design_line#1",
|
||||
"mode": "sketch",
|
||||
"family": "Line",
|
||||
"icon": "design_polyline"
|
||||
"icon": "design_polyline",
|
||||
"hint": "Click points; click first / right-click to close the loop"
|
||||
},
|
||||
{
|
||||
"id": "sk_rect",
|
||||
@@ -1100,7 +1145,8 @@
|
||||
"gui": true,
|
||||
"action": "key:R",
|
||||
"family": "Rectangle",
|
||||
"icon": "design_rect"
|
||||
"icon": "design_rect",
|
||||
"hint": "Rectangle — click two opposite corners"
|
||||
},
|
||||
{
|
||||
"id": "sk_rect_center",
|
||||
@@ -1122,7 +1168,8 @@
|
||||
"action": "fly:design_rect#1",
|
||||
"mode": "sketch",
|
||||
"family": "Rectangle",
|
||||
"icon": "design_crect"
|
||||
"icon": "design_crect",
|
||||
"hint": "Click center, then a corner"
|
||||
},
|
||||
{
|
||||
"id": "sk_rect_oblique",
|
||||
@@ -1144,7 +1191,8 @@
|
||||
"action": "fly:design_rect#2",
|
||||
"mode": "sketch",
|
||||
"family": "Rectangle",
|
||||
"icon": "design_rect_oblique"
|
||||
"icon": "design_rect_oblique",
|
||||
"hint": "Click two corners of one edge, then a point for the width"
|
||||
},
|
||||
{
|
||||
"id": "sk_rect_rounded",
|
||||
@@ -1166,7 +1214,8 @@
|
||||
"action": "fly:design_rect#3",
|
||||
"mode": "sketch",
|
||||
"family": "Rectangle",
|
||||
"icon": "design_rect_rounded"
|
||||
"icon": "design_rect_rounded",
|
||||
"hint": "Click two opposite corners, then a point for the corner radius"
|
||||
},
|
||||
{
|
||||
"id": "sk_circle",
|
||||
@@ -1188,7 +1237,8 @@
|
||||
"gui": true,
|
||||
"action": "key:C",
|
||||
"family": "Circle",
|
||||
"icon": "design_circle"
|
||||
"icon": "design_circle",
|
||||
"hint": "Circle — click center, then radius"
|
||||
},
|
||||
{
|
||||
"id": "sk_circle_2pt",
|
||||
@@ -1210,7 +1260,8 @@
|
||||
"action": "fly:design_circle#1",
|
||||
"mode": "sketch",
|
||||
"family": "Circle",
|
||||
"icon": "design_circle2pt"
|
||||
"icon": "design_circle2pt",
|
||||
"hint": "Click two ends of the diameter"
|
||||
},
|
||||
{
|
||||
"id": "sk_circle_3pt",
|
||||
@@ -1232,7 +1283,8 @@
|
||||
"action": "fly:design_circle#2",
|
||||
"mode": "sketch",
|
||||
"family": "Circle",
|
||||
"icon": "design_circle3pt"
|
||||
"icon": "design_circle3pt",
|
||||
"hint": "Click three points on the circle"
|
||||
},
|
||||
{
|
||||
"id": "sk_arc_t",
|
||||
@@ -1254,7 +1306,8 @@
|
||||
"gui": true,
|
||||
"action": "key:A",
|
||||
"family": "Arc",
|
||||
"icon": "design_arc3pt"
|
||||
"icon": "design_arc3pt",
|
||||
"hint": "Arc — click start, end, then a point"
|
||||
},
|
||||
{
|
||||
"id": "sk_arc_tangent",
|
||||
@@ -1276,7 +1329,8 @@
|
||||
"action": "fly:design_arc3pt#1",
|
||||
"mode": "sketch",
|
||||
"family": "Arc",
|
||||
"icon": "design_tangentarc"
|
||||
"icon": "design_tangentarc",
|
||||
"hint": "Click start (on the last entity) then end"
|
||||
},
|
||||
{
|
||||
"id": "sk_arc_center",
|
||||
@@ -1298,7 +1352,8 @@
|
||||
"action": "fly:design_arc3pt#2",
|
||||
"mode": "sketch",
|
||||
"family": "Arc",
|
||||
"icon": "design_arc_center"
|
||||
"icon": "design_arc_center",
|
||||
"hint": "Click center, then start, then a point for the end angle"
|
||||
},
|
||||
{
|
||||
"id": "sk_slot",
|
||||
@@ -1320,7 +1375,8 @@
|
||||
"gui": true,
|
||||
"action": "key:S",
|
||||
"family": "Slot",
|
||||
"icon": "design_slot"
|
||||
"icon": "design_slot",
|
||||
"hint": "Slot — two centerline ends, then end radius"
|
||||
},
|
||||
{
|
||||
"id": "sk_slot_arc",
|
||||
@@ -1342,7 +1398,8 @@
|
||||
"action": "fly:design_slot#1",
|
||||
"mode": "sketch",
|
||||
"family": "Slot",
|
||||
"icon": "design_slot_arc"
|
||||
"icon": "design_slot_arc",
|
||||
"hint": "Click center, start, end, then a point for the width"
|
||||
},
|
||||
{
|
||||
"id": "sk_ellipse",
|
||||
@@ -1364,7 +1421,8 @@
|
||||
"gui": true,
|
||||
"action": "key:E",
|
||||
"family": "Ellipse",
|
||||
"icon": "design_ellipse"
|
||||
"icon": "design_ellipse",
|
||||
"hint": "Ellipse — center, major end, minor point"
|
||||
},
|
||||
{
|
||||
"id": "sk_ellipse_arc",
|
||||
@@ -1386,7 +1444,8 @@
|
||||
"action": "fly:design_ellipse#1",
|
||||
"mode": "sketch",
|
||||
"family": "Ellipse",
|
||||
"icon": "design_ellipse_arc"
|
||||
"icon": "design_ellipse_arc",
|
||||
"hint": "Click center, major-axis end, minor point, then arc start and end"
|
||||
},
|
||||
{
|
||||
"id": "sk_spline",
|
||||
@@ -1407,7 +1466,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:B",
|
||||
"icon": "design_bspline"
|
||||
"icon": "design_bspline",
|
||||
"hint": "Spline — click control points"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_3",
|
||||
@@ -1429,7 +1489,8 @@
|
||||
"action": "btn:poly#3",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Triangle — click centre, then a vertex"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_4",
|
||||
@@ -1451,7 +1512,8 @@
|
||||
"action": "btn:poly#4",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Square — click centre, then a vertex"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_5",
|
||||
@@ -1473,7 +1535,8 @@
|
||||
"action": "btn:poly#5",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Pentagon — click centre, then a vertex"
|
||||
},
|
||||
{
|
||||
"id": "sk_polygon",
|
||||
@@ -1495,7 +1558,8 @@
|
||||
"gui": true,
|
||||
"action": "btn:poly#6",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Hexagon — click centre, then a vertex"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_8",
|
||||
@@ -1517,7 +1581,8 @@
|
||||
"action": "btn:poly#8",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Octagon — click centre, then a vertex"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_12",
|
||||
@@ -1539,7 +1604,8 @@
|
||||
"action": "btn:poly#12",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Dodecagon — click centre, then a vertex"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_inscribed",
|
||||
@@ -1561,7 +1627,8 @@
|
||||
"action": "btn:polyfit#0",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Measure the polygon to its corners (inscribed)"
|
||||
},
|
||||
{
|
||||
"id": "sk_poly_circumscribed",
|
||||
@@ -1583,7 +1650,8 @@
|
||||
"action": "btn:polyfit#1",
|
||||
"mode": "sketch",
|
||||
"family": "Polygon",
|
||||
"icon": "design_polygon"
|
||||
"icon": "design_polygon",
|
||||
"hint": "Measure the polygon to its flats (circumscribed)"
|
||||
},
|
||||
{
|
||||
"id": "sk_point_t",
|
||||
@@ -1604,7 +1672,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:P",
|
||||
"icon": "design_point"
|
||||
"icon": "design_point",
|
||||
"hint": "Point — click to place"
|
||||
},
|
||||
{
|
||||
"id": "sk_text",
|
||||
@@ -1625,7 +1694,8 @@
|
||||
"gui": true,
|
||||
"action": "btn:text",
|
||||
"mode": "sketch",
|
||||
"icon": "design_text"
|
||||
"icon": "design_text",
|
||||
"hint": "Type text; its outline is added to this sketch as editable lines"
|
||||
},
|
||||
{
|
||||
"id": "sk_svg",
|
||||
@@ -1646,7 +1716,8 @@
|
||||
"gui": true,
|
||||
"action": "btn:svg",
|
||||
"mode": "sketch",
|
||||
"icon": "design_svg"
|
||||
"icon": "design_svg",
|
||||
"hint": "Import an SVG outline into this sketch as editable lines"
|
||||
},
|
||||
{
|
||||
"id": "sk_offset",
|
||||
@@ -1665,7 +1736,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:O",
|
||||
"icon": "design_offset"
|
||||
"icon": "design_offset",
|
||||
"hint": "Offset — pick an entity, drag the distance"
|
||||
},
|
||||
{
|
||||
"id": "sk_trim",
|
||||
@@ -1684,7 +1756,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:T",
|
||||
"icon": "design_trim"
|
||||
"icon": "design_trim",
|
||||
"hint": "Trim — click a segment to trim it"
|
||||
},
|
||||
{
|
||||
"id": "sk_fillet",
|
||||
@@ -1702,7 +1775,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:F",
|
||||
"icon": "design_filletedge"
|
||||
"icon": "design_filletedge",
|
||||
"hint": "Fillet — pick two lines, set the radius"
|
||||
},
|
||||
{
|
||||
"id": "sk_chamfer",
|
||||
@@ -1720,7 +1794,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:H",
|
||||
"icon": "design_chamfer"
|
||||
"icon": "design_chamfer",
|
||||
"hint": "Chamfer — pick two lines, set the distance"
|
||||
},
|
||||
{
|
||||
"id": "sk_array",
|
||||
@@ -1740,7 +1815,8 @@
|
||||
"action": "fly:design_array#0",
|
||||
"mode": "sketch",
|
||||
"family": "Array",
|
||||
"icon": "design_array"
|
||||
"icon": "design_array",
|
||||
"hint": "Pick entities, drag the spacing handle, click the count; click empty to apply"
|
||||
},
|
||||
{
|
||||
"id": "sk_array_polar",
|
||||
@@ -1760,7 +1836,8 @@
|
||||
"action": "fly:design_array#1",
|
||||
"mode": "sketch",
|
||||
"family": "Array",
|
||||
"icon": "design_polararray"
|
||||
"icon": "design_polararray",
|
||||
"hint": "Pick entities, drag the sweep handle, click the count; click empty to apply"
|
||||
},
|
||||
{
|
||||
"id": "sk_mirror",
|
||||
@@ -1779,7 +1856,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:M",
|
||||
"icon": "design_mirror"
|
||||
"icon": "design_mirror",
|
||||
"hint": "Mirror — pick axis, then entities"
|
||||
},
|
||||
{
|
||||
"id": "sk_move",
|
||||
@@ -1800,7 +1878,8 @@
|
||||
"gui": true,
|
||||
"action": "fly:design_move#0",
|
||||
"family": "Move",
|
||||
"icon": "design_move"
|
||||
"icon": "design_move",
|
||||
"hint": "Pick entities, then drag the handle or click the distance; click empty to apply"
|
||||
},
|
||||
{
|
||||
"id": "sk_rotate",
|
||||
@@ -1821,7 +1900,8 @@
|
||||
"action": "fly:design_move#1",
|
||||
"mode": "sketch",
|
||||
"family": "Move",
|
||||
"icon": "design_rotate"
|
||||
"icon": "design_rotate",
|
||||
"hint": "Pick entities, then drag around the pivot or click the angle; click empty to apply"
|
||||
},
|
||||
{
|
||||
"id": "sk_scale",
|
||||
@@ -1842,7 +1922,8 @@
|
||||
"action": "fly:design_move#2",
|
||||
"mode": "sketch",
|
||||
"family": "Move",
|
||||
"icon": "design_scale"
|
||||
"icon": "design_scale",
|
||||
"hint": "Pick entities, then drag the handle or click the factor; click empty to apply"
|
||||
},
|
||||
{
|
||||
"id": "sk_dimension",
|
||||
@@ -1863,7 +1944,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:D",
|
||||
"icon": "design_dimension"
|
||||
"icon": "design_dimension",
|
||||
"hint": "Dimension — click 2 points or an entity"
|
||||
},
|
||||
{
|
||||
"id": "sk_constrain",
|
||||
@@ -1883,7 +1965,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:K",
|
||||
"icon": "design_constrain"
|
||||
"icon": "design_constrain",
|
||||
"hint": "Constrain the selected sketch entities to each other"
|
||||
},
|
||||
{
|
||||
"id": "sk_construct",
|
||||
@@ -1903,7 +1986,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:Q",
|
||||
"icon": null
|
||||
"icon": null,
|
||||
"hint": "Toggle construction: geometry that guides but is never built"
|
||||
},
|
||||
{
|
||||
"id": "sk_extend",
|
||||
@@ -1922,7 +2006,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "key:X",
|
||||
"icon": "design_extend"
|
||||
"icon": "design_extend",
|
||||
"hint": "Extend — click a line/arc to extend it"
|
||||
},
|
||||
{
|
||||
"id": "sk_delete",
|
||||
@@ -1942,7 +2027,8 @@
|
||||
"refusal": null,
|
||||
"gui": true,
|
||||
"action": "btn:delete",
|
||||
"icon": "design_delete"
|
||||
"icon": "design_delete",
|
||||
"hint": "Delete the selected sketch entities"
|
||||
}
|
||||
],
|
||||
"chrome_only": {
|
||||
|
||||
@@ -64,6 +64,7 @@ struct OfferVerb {
|
||||
// grouping instead of flattening 19 create tools into one wall.
|
||||
const char* family;
|
||||
const char* icon; // resources/images name, or nullptr — the offer draws it beside the row
|
||||
const char* hint; // what the verb does / what to click; shown on hover
|
||||
};
|
||||
|
||||
// Row labels, in ratified order.
|
||||
@@ -80,92 +81,92 @@ static const char* const kOfferRowNames[] = {
|
||||
static const int kOfferRowCount = 8;
|
||||
|
||||
static const OfferVerb kOfferVerbs[] = {
|
||||
{"sketch", "Sketch", 0, "Shift+S", "key:S+S", "Click a face or a reference plane in the viewport, then a sketch tool", 0x00000403u, 0, 0, false, false, nullptr, "design_sketch"},
|
||||
{"extrude", "Extrude", 1, "Shift+E", "key:S+E", "Create a sketch, or pick a solid face, first", 0x00004002u, 0, 0, false, false, nullptr, "design_extrude"},
|
||||
{"revolve", "Revolve", 1, "Shift+R", "key:S+R", "Create a sketch profile to revolve first", 0x00004000u, 0, 0, false, false, nullptr, "design_revolve"},
|
||||
{"sweep", "Sweep", 1, "Shift+W", "key:S+W", "Create a profile sketch to sweep first", 0x00004000u, 0, 2, false, false, nullptr, "design_sweep"},
|
||||
{"loft", "Loft", 1, "Shift+L", "key:S+L", "Create at least two profile sketches to loft", 0x00004000u, 0, 2, false, false, nullptr, "design_loft"},
|
||||
{"thicken", "Thicken", 1, nullptr, "fly:material#4", "Thicken needs a solid body — add or import one first", 0x0000000au, 1, 0, false, false, nullptr, "design_thicken"},
|
||||
{"rib", "Rib", 1, nullptr, "fly:material#5", "Rib needs a solid body — add or import one first", 0x00010000u, 1, 0, false, false, nullptr, "design_rib"},
|
||||
{"boolean", "Union", 1, "Shift+B", "btn:bool#0", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean"},
|
||||
{"bool_subtract", "Subtract", 1, nullptr, "btn:bool#1", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean"},
|
||||
{"bool_intersect", "Intersect", 1, nullptr, "btn:bool#2", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean"},
|
||||
{"surf_extrude", "Surface Extrude", 1, "Shift+G", "key:S+G", "Create a sketch first", 0x00004000u, 0, 0, false, false, nullptr, "design_extrude"},
|
||||
{"surf_revolve", "Surface Revolve", 1, nullptr, "fly:surface#1", "Create a sketch profile to revolve first", 0x00004000u, 0, 0, false, false, nullptr, "design_revolve"},
|
||||
{"surf_loft", "Surface Loft", 1, nullptr, "fly:surface#2", "Create at least two profile sketches to loft", 0x00004000u, 0, 2, false, false, nullptr, "design_loft"},
|
||||
{"surf_fill", "Surface Fill", 1, nullptr, "fly:surface#3", "Create a closed sketch first", 0x00004000u, 0, 0, false, false, nullptr, "design_surface"},
|
||||
{"thicken_surf", "Thicken Surface", 1, nullptr, "fly:surface#5", "target is not a sheet body", 0x00000100u, 0, 0, true, false, nullptr, "design_thicken"},
|
||||
{"hole", "Hole", 2, "Shift+H", "key:S+H", "Pick a face or a plane to drill into", 0x00000402u, 1, 0, false, false, nullptr, "design_hole"},
|
||||
{"thread", "Thread", 2, "Shift+T", "key:S+T", "Pick a cylindrical surface (bore / outer) or a circular edge for a thread", 0x00000024u, 1, 0, false, false, nullptr, "design_thread"},
|
||||
{"shell", "Shell", 2, "Shift+K", "key:S+K", "Shell needs a solid body", 0x00000082u, 1, 0, false, false, nullptr, "design_shell"},
|
||||
{"cut", "Cut", 2, "Shift+X", "key:S+X", "Create a solid body to cut first", 0x00000480u, 1, 0, false, false, nullptr, "design_cut"},
|
||||
{"split", "Split", 2, nullptr, nullptr, "Split needs a solid body", 0x00000080u, 1, 0, false, false, nullptr, nullptr},
|
||||
{"fillet", "Fillet", 3, "Shift+F", "btn:dress#0", "Pick an edge to round", 0x000000b2u, 1, 0, false, false, nullptr, "design_filletedge"},
|
||||
{"chamfer", "Chamfer", 3, nullptr, "btn:dress#1", "Pick an edge to bevel", 0x000000b2u, 1, 0, false, false, nullptr, "design_chamfer"},
|
||||
{"draft", "Draft", 3, "Shift+D", "key:S+D", "Pick a face to taper", 0x0000000au, 1, 0, false, false, nullptr, "design_draft"},
|
||||
{"surf_offset", "Surface Offset", 3, nullptr, "fly:surface#4", "target is not a sheet body", 0x00000100u, 0, 0, true, false, nullptr, "design_offset"},
|
||||
{"pattern", "Linear pattern", 4, "Shift+N", "btn:pat#0", "Create a solid body to pattern first", 0x00006082u, 1, 0, false, false, nullptr, "design_array"},
|
||||
{"pattern_circular", "Circular pattern", 4, nullptr, "btn:pat#1", "Create a solid body to pattern first", 0x00006082u, 1, 0, false, false, nullptr, "design_polararray"},
|
||||
{"mirror", "Mirror", 4, "Shift+Z", "key:S+Z", "Mirror needs a body — add or import one first", 0x00000480u, 1, 0, false, false, nullptr, "design_mirror"},
|
||||
{"pat_curve", "Pattern on Curve", 4, nullptr, nullptr, "Pattern on curve needs a body and a curve", 0x00000090u, 1, 0, false, false, nullptr, nullptr},
|
||||
{"transform", "Move", 5, "Shift+Y", "key:S+Y", "Transform needs a body — add or import one first", 0x00002180u, 1, 0, false, false, nullptr, "design_move"},
|
||||
{"mate", "Mate", 5, nullptr, "fly:placement#2", "A mate needs two coordinate systems", 0x00001202u, 2, 0, false, false, nullptr, "design_c_coincident"},
|
||||
{"align", "Align to", 5, nullptr, nullptr, "Align needs a body", 0x00000002u, 1, 0, false, false, nullptr, nullptr},
|
||||
{"plane", "Plane", 6, "Shift+P", "key:S+P", nullptr, 0x00000453u, 0, 0, false, false, nullptr, "design_plane"},
|
||||
{"axis", "Axis", 6, "Shift+A", "key:S+A", nullptr, 0x00000057u, 0, 0, false, false, nullptr, "design_line"},
|
||||
{"coordsys_v", "Coord Sys", 6, "Shift+C", "key:S+C", nullptr, 0x00000043u, 0, 0, false, false, nullptr, "design_point"},
|
||||
{"helix", "Helix", 6, nullptr, "fly:plane#3", nullptr, 0x00000405u, 0, 0, false, false, nullptr, "design_thread"},
|
||||
{"project", "Project", 6, nullptr, "fly:plane#4", "Project needs a body — add or import one first", 0x00000482u, 1, 0, false, false, nullptr, "design_sketch"},
|
||||
{"measure", "Measure", 6, nullptr, nullptr, nullptr, 0x000b03feu, 0, 0, false, false, nullptr, nullptr},
|
||||
{"mass_props", "Mass", 6, nullptr, "btn:mass", nullptr, 0x00000080u, 1, 0, false, false, nullptr, "info"},
|
||||
{"interference", "Interference", 6, nullptr, nullptr, nullptr, 0x00000200u, 2, 0, false, false, nullptr, nullptr},
|
||||
{"edit_feature", "Edit", 7, nullptr, "btn:edit", nullptr, 0x00007d8eu, 0, 0, false, false, nullptr, "design_edit"},
|
||||
{"delete_face", "Delete Face", 7, nullptr, "fly:dressup#3", "Delete Face needs a body — add or import one first", 0x0000000eu, 1, 0, false, false, nullptr, "design_delete"},
|
||||
{"colour", "Colour", 7, nullptr, "btn:colour", nullptr, 0x00000180u, 1, 0, false, false, nullptr, "color_palette"},
|
||||
{"delete", "Delete", 7, "Del", "btn:delete", nullptr, 0x000f7f80u, 0, 0, false, false, nullptr, "design_delete"},
|
||||
{"sk_line_t", "Line", 0, "L", "key:L", nullptr, 0x000f8000u, 0, 0, false, true, "Line", "design_line"},
|
||||
{"sk_polyline", "Polyline", 0, nullptr, "fly:design_line#1", nullptr, 0x000f8000u, 0, 0, false, true, "Line", "design_polyline"},
|
||||
{"sk_rect", "Corner rectangle", 0, "R", "key:R", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect"},
|
||||
{"sk_rect_center", "Centre rectangle", 0, nullptr, "fly:design_rect#1", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_crect"},
|
||||
{"sk_rect_oblique", "Oblique rectangle", 0, nullptr, "fly:design_rect#2", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect_oblique"},
|
||||
{"sk_rect_rounded", "Rounded rectangle", 0, nullptr, "fly:design_rect#3", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect_rounded"},
|
||||
{"sk_circle", "Centre circle", 0, "C", "key:C", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle"},
|
||||
{"sk_circle_2pt", "2-point circle", 0, nullptr, "fly:design_circle#1", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle2pt"},
|
||||
{"sk_circle_3pt", "3-point circle", 0, nullptr, "fly:design_circle#2", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle3pt"},
|
||||
{"sk_arc_t", "3-point arc", 0, "A", "key:A", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_arc3pt"},
|
||||
{"sk_arc_tangent", "Tangent arc", 0, nullptr, "fly:design_arc3pt#1", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_tangentarc"},
|
||||
{"sk_arc_center", "Centre-point arc", 0, nullptr, "fly:design_arc3pt#2", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_arc_center"},
|
||||
{"sk_slot", "Slot", 0, "S", "key:S", nullptr, 0x000f8000u, 0, 0, false, true, "Slot", "design_slot"},
|
||||
{"sk_slot_arc", "Arc slot", 0, nullptr, "fly:design_slot#1", nullptr, 0x000f8000u, 0, 0, false, true, "Slot", "design_slot_arc"},
|
||||
{"sk_ellipse", "Ellipse", 0, "E", "key:E", nullptr, 0x000f8000u, 0, 0, false, true, "Ellipse", "design_ellipse"},
|
||||
{"sk_ellipse_arc", "Elliptical arc", 0, nullptr, "fly:design_ellipse#1", nullptr, 0x000f8000u, 0, 0, false, true, "Ellipse", "design_ellipse_arc"},
|
||||
{"sk_spline", "Spline", 0, "B", "key:B", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_bspline"},
|
||||
{"sk_poly_3", "Triangle", 0, nullptr, "btn:poly#3", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_poly_4", "Square", 0, nullptr, "btn:poly#4", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_poly_5", "Pentagon", 0, nullptr, "btn:poly#5", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_polygon", "Hexagon", 0, "G", "btn:poly#6", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_poly_8", "Octagon", 0, nullptr, "btn:poly#8", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_poly_12", "Dodecagon", 0, nullptr, "btn:poly#12", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_poly_inscribed", "Inscribed", 0, nullptr, "btn:polyfit#0", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_poly_circumscribed", "Circumscribed", 0, nullptr, "btn:polyfit#1", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon"},
|
||||
{"sk_point_t", "Point", 0, "P", "key:P", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_point"},
|
||||
{"sk_text", "Text", 0, nullptr, "btn:text", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_text"},
|
||||
{"sk_svg", "SVG", 0, nullptr, "btn:svg", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_svg"},
|
||||
{"sk_offset", "Offset", 1, "O", "key:O", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_offset"},
|
||||
{"sk_trim", "Trim", 2, "T", "key:T", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_trim"},
|
||||
{"sk_fillet", "Fillet", 3, "F", "key:F", nullptr, 0x00090000u, 0, 0, false, true, nullptr, "design_filletedge"},
|
||||
{"sk_chamfer", "Chamfer", 3, "H", "key:H", nullptr, 0x00090000u, 0, 0, false, true, nullptr, "design_chamfer"},
|
||||
{"sk_array", "Linear array", 4, nullptr, "fly:design_array#0", nullptr, 0x000b0000u, 0, 0, false, true, "Array", "design_array"},
|
||||
{"sk_array_polar", "Polar array", 4, nullptr, "fly:design_array#1", nullptr, 0x000b0000u, 0, 0, false, true, "Array", "design_polararray"},
|
||||
{"sk_mirror", "Mirror", 4, "M", "key:M", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_mirror"},
|
||||
{"sk_move", "Move", 5, nullptr, "fly:design_move#0", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_move"},
|
||||
{"sk_rotate", "Rotate", 5, nullptr, "fly:design_move#1", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_rotate"},
|
||||
{"sk_scale", "Scale", 5, nullptr, "fly:design_move#2", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_scale"},
|
||||
{"sk_dimension", "Dimension", 6, "D", "key:D", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_dimension"},
|
||||
{"sk_constrain", "Constrain", 6, "K", "key:K", nullptr, 0x000f0000u, 0, 0, false, true, nullptr, "design_constrain"},
|
||||
{"sk_construct", "Construction", 6, "Q", "key:Q", nullptr, 0x000b8000u, 0, 0, false, true, nullptr, nullptr},
|
||||
{"sk_extend", "Extend", 7, "X", "key:X", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_extend"},
|
||||
{"sk_delete", "Delete", 7, "Del", "btn:delete", nullptr, 0x000f0000u, 0, 0, false, true, nullptr, "design_delete"},
|
||||
{"sketch", "Sketch", 0, "Shift+S", "key:S+S", "Click a face or a reference plane in the viewport, then a sketch tool", 0x00000403u, 0, 0, false, false, nullptr, "design_sketch", "Click a face or a reference plane, then pick a drawing tool"},
|
||||
{"extrude", "Extrude", 1, "Shift+E", "key:S+E", "Create a sketch, or pick a solid face, first", 0x00004002u, 0, 0, false, false, nullptr, "design_extrude", "Extrude a sketch profile, or push/pull a picked face"},
|
||||
{"revolve", "Revolve", 1, "Shift+R", "key:S+R", "Create a sketch profile to revolve first", 0x00004000u, 0, 0, false, false, nullptr, "design_revolve", "Revolve a profile about an axis"},
|
||||
{"sweep", "Sweep", 1, "Shift+W", "key:S+W", "Create a profile sketch to sweep first", 0x00004000u, 0, 2, false, false, nullptr, "design_sweep", "Sweep a profile along a path"},
|
||||
{"loft", "Loft", 1, "Shift+L", "key:S+L", "Create at least two profile sketches to loft", 0x00004000u, 0, 2, false, false, nullptr, "design_loft", "Loft (skin) between two or more profiles"},
|
||||
{"thicken", "Thicken", 1, nullptr, "fly:material#4", "Thicken needs a solid body — add or import one first", 0x0000000au, 1, 0, false, false, nullptr, "design_thicken", "Offset a solid face into a thin plate (new body)"},
|
||||
{"rib", "Rib", 1, nullptr, "fly:material#5", "Rib needs a solid body — add or import one first", 0x00010000u, 1, 0, false, false, nullptr, "design_rib", "Grow a thin wall from an open sketch line, fused to a body"},
|
||||
{"boolean", "Union", 1, "Shift+B", "btn:bool#0", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean", "Fuse the tool body into the target — one solid, no seam"},
|
||||
{"bool_subtract", "Subtract", 1, nullptr, "btn:bool#1", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean", "Cut the tool body out of the target"},
|
||||
{"bool_intersect", "Intersect", 1, nullptr, "btn:bool#2", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean", "Keep only where the two bodies overlap"},
|
||||
{"surf_extrude", "Surface Extrude", 1, "Shift+G", "key:S+G", "Create a sketch first", 0x00004000u, 0, 0, false, false, nullptr, "design_extrude", "Extrude a sketch into a sheet body (no end caps)"},
|
||||
{"surf_revolve", "Surface Revolve", 1, nullptr, "fly:surface#1", "Create a sketch profile to revolve first", 0x00004000u, 0, 0, false, false, nullptr, "design_revolve", "Revolve a sketch profile into a sheet body"},
|
||||
{"surf_loft", "Surface Loft", 1, nullptr, "fly:surface#2", "Create at least two profile sketches to loft", 0x00004000u, 0, 2, false, false, nullptr, "design_loft", "Loft (skin) between 2+ profiles, open (no end caps)"},
|
||||
{"surf_fill", "Surface Fill", 1, nullptr, "fly:surface#3", "Create a closed sketch first", 0x00004000u, 0, 0, false, false, nullptr, "design_surface", "Fill a sketch boundary with a smooth face"},
|
||||
{"thicken_surf", "Thicken Surface", 1, nullptr, "fly:surface#5", "target is not a sheet body", 0x00000100u, 0, 0, true, false, nullptr, "design_thicken", "Thicken a sheet body into a solid"},
|
||||
{"hole", "Hole", 2, "Shift+H", "key:S+H", "Pick a face or a plane to drill into", 0x00000402u, 1, 0, false, false, nullptr, "design_hole", "Drill a hole, centred on a picked face or placed on a plane"},
|
||||
{"thread", "Thread", 2, "Shift+T", "key:S+T", "Pick a cylindrical surface (bore / outer) or a circular edge for a thread", 0x00000024u, 1, 0, false, false, nullptr, "design_thread", "Thread a cylindrical surface (inner bore / outer) or a circular edge"},
|
||||
{"shell", "Shell", 2, "Shift+K", "key:S+K", "Shell needs a solid body", 0x00000082u, 1, 0, false, false, nullptr, "design_shell", "Hollow the body to a wall thickness, opening a picked face"},
|
||||
{"cut", "Cut", 2, "Shift+X", "key:S+X", "Create a solid body to cut first", 0x00000480u, 1, 0, false, false, nullptr, "design_cut", "Split the body with a plane; set the offset in the card"},
|
||||
{"split", "Split", 2, nullptr, nullptr, "Split needs a solid body", 0x00000080u, 1, 0, false, false, nullptr, nullptr, "Split the body into separate solids"},
|
||||
{"fillet", "Fillet", 3, "Shift+F", "btn:dress#0", "Pick an edge to round", 0x000000b2u, 1, 0, false, false, nullptr, "design_filletedge", "Pick an edge, then drag the radius arrow or type it"},
|
||||
{"chamfer", "Chamfer", 3, nullptr, "btn:dress#1", "Pick an edge to bevel", 0x000000b2u, 1, 0, false, false, nullptr, "design_chamfer", "Pick an edge, then drag the distance arrow or type it"},
|
||||
{"draft", "Draft", 3, "Shift+D", "key:S+D", "Pick a face to taper", 0x0000000au, 1, 0, false, false, nullptr, "design_draft", "Tilt a picked face by a draft angle"},
|
||||
{"surf_offset", "Surface Offset", 3, nullptr, "fly:surface#4", "target is not a sheet body", 0x00000100u, 0, 0, true, false, nullptr, "design_offset", "Offset a sheet body's shell by a signed distance"},
|
||||
{"pattern", "Linear pattern", 4, "Shift+N", "btn:pat#0", "Create a solid body to pattern first", 0x00006082u, 1, 0, false, false, nullptr, "design_array", "Repeat the body along a direction — drag the spacing, set the count"},
|
||||
{"pattern_circular", "Circular pattern", 4, nullptr, "btn:pat#1", "Create a solid body to pattern first", 0x00006082u, 1, 0, false, false, nullptr, "design_polararray", "Repeat the body around an axis — set the count and sweep"},
|
||||
{"mirror", "Mirror", 4, "Shift+Z", "key:S+Z", "Mirror needs a body — add or import one first", 0x00000480u, 1, 0, false, false, nullptr, "design_mirror", "Reflect a body about a plane"},
|
||||
{"pat_curve", "Pattern on Curve", 4, nullptr, nullptr, "Pattern on curve needs a body and a curve", 0x00000090u, 1, 0, false, false, nullptr, nullptr, "Repeat the body along a picked curve"},
|
||||
{"transform", "Move", 5, "Shift+Y", "key:S+Y", "Transform needs a body — add or import one first", 0x00002180u, 1, 0, false, false, nullptr, "design_move", "Move and/or rotate an existing body"},
|
||||
{"mate", "Mate", 5, nullptr, "fly:placement#2", "A mate needs two coordinate systems", 0x00001202u, 2, 0, false, false, nullptr, "design_c_coincident", "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)"},
|
||||
{"align", "Align to", 5, nullptr, nullptr, "Align needs a body", 0x00000002u, 1, 0, false, false, nullptr, nullptr, "Align the body to a picked face or plane"},
|
||||
{"plane", "Plane", 6, "Shift+P", "key:S+P", nullptr, 0x00000453u, 0, 0, false, false, nullptr, "design_plane", "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)"},
|
||||
{"axis", "Axis", 6, "Shift+A", "key:S+A", nullptr, 0x00000057u, 0, 0, false, false, nullptr, "design_line", "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)"},
|
||||
{"coordsys_v", "Coord Sys", 6, "Shift+C", "key:S+C", nullptr, 0x00000043u, 0, 0, false, false, nullptr, "design_point", "Datum coordinate system (world point, or face + direction edge)"},
|
||||
{"helix", "Helix", 6, nullptr, "fly:plane#3", nullptr, 0x00000405u, 0, 0, false, false, nullptr, "design_thread", "Helical curve (spring path) — use as a sweep path for coils / springs / augers"},
|
||||
{"project", "Project", 6, nullptr, "fly:plane#4", "Project needs a body — add or import one first", 0x00000482u, 1, 0, false, false, nullptr, "design_sketch", "Project body edges onto a plane as sketch entities"},
|
||||
{"measure", "Measure", 6, nullptr, nullptr, nullptr, 0x000b03feu, 0, 0, false, false, nullptr, nullptr, "Measure between the picked points, edges or faces"},
|
||||
{"mass_props", "Mass", 6, nullptr, "btn:mass", nullptr, 0x00000080u, 1, 0, false, false, nullptr, "info", "Report the volume and surface area of the selected body"},
|
||||
{"interference", "Interference", 6, nullptr, nullptr, nullptr, 0x00000200u, 2, 0, false, false, nullptr, nullptr, "Check whether two bodies overlap — reports, changes nothing"},
|
||||
{"edit_feature", "Edit", 7, nullptr, "btn:edit", nullptr, 0x00007d8eu, 0, 0, false, false, nullptr, "design_edit", "Reopen the selected feature to change what it was made from"},
|
||||
{"delete_face", "Delete Face", 7, nullptr, "fly:dressup#3", "Delete Face needs a body — add or import one first", 0x0000000eu, 1, 0, false, false, nullptr, "design_delete", "Remove faces from a body and heal the solid"},
|
||||
{"colour", "Colour", 7, nullptr, "btn:colour", nullptr, 0x00000180u, 1, 0, false, false, nullptr, "color_palette", "Set the selected body's display colour"},
|
||||
{"delete", "Delete", 7, "Del", "btn:delete", nullptr, 0x000f7f80u, 0, 0, false, false, nullptr, "design_delete", "Delete what is selected"},
|
||||
{"sk_line_t", "Line", 0, "L", "key:L", nullptr, 0x000f8000u, 0, 0, false, true, "Line", "design_line", "Line — click start, then end"},
|
||||
{"sk_polyline", "Polyline", 0, nullptr, "fly:design_line#1", nullptr, 0x000f8000u, 0, 0, false, true, "Line", "design_polyline", "Click points; click first / right-click to close the loop"},
|
||||
{"sk_rect", "Corner rectangle", 0, "R", "key:R", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect", "Rectangle — click two opposite corners"},
|
||||
{"sk_rect_center", "Centre rectangle", 0, nullptr, "fly:design_rect#1", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_crect", "Click center, then a corner"},
|
||||
{"sk_rect_oblique", "Oblique rectangle", 0, nullptr, "fly:design_rect#2", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect_oblique", "Click two corners of one edge, then a point for the width"},
|
||||
{"sk_rect_rounded", "Rounded rectangle", 0, nullptr, "fly:design_rect#3", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect_rounded", "Click two opposite corners, then a point for the corner radius"},
|
||||
{"sk_circle", "Centre circle", 0, "C", "key:C", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle", "Circle — click center, then radius"},
|
||||
{"sk_circle_2pt", "2-point circle", 0, nullptr, "fly:design_circle#1", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle2pt", "Click two ends of the diameter"},
|
||||
{"sk_circle_3pt", "3-point circle", 0, nullptr, "fly:design_circle#2", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle3pt", "Click three points on the circle"},
|
||||
{"sk_arc_t", "3-point arc", 0, "A", "key:A", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_arc3pt", "Arc — click start, end, then a point"},
|
||||
{"sk_arc_tangent", "Tangent arc", 0, nullptr, "fly:design_arc3pt#1", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_tangentarc", "Click start (on the last entity) then end"},
|
||||
{"sk_arc_center", "Centre-point arc", 0, nullptr, "fly:design_arc3pt#2", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_arc_center", "Click center, then start, then a point for the end angle"},
|
||||
{"sk_slot", "Slot", 0, "S", "key:S", nullptr, 0x000f8000u, 0, 0, false, true, "Slot", "design_slot", "Slot — two centerline ends, then end radius"},
|
||||
{"sk_slot_arc", "Arc slot", 0, nullptr, "fly:design_slot#1", nullptr, 0x000f8000u, 0, 0, false, true, "Slot", "design_slot_arc", "Click center, start, end, then a point for the width"},
|
||||
{"sk_ellipse", "Ellipse", 0, "E", "key:E", nullptr, 0x000f8000u, 0, 0, false, true, "Ellipse", "design_ellipse", "Ellipse — center, major end, minor point"},
|
||||
{"sk_ellipse_arc", "Elliptical arc", 0, nullptr, "fly:design_ellipse#1", nullptr, 0x000f8000u, 0, 0, false, true, "Ellipse", "design_ellipse_arc", "Click center, major-axis end, minor point, then arc start and end"},
|
||||
{"sk_spline", "Spline", 0, "B", "key:B", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_bspline", "Spline — click control points"},
|
||||
{"sk_poly_3", "Triangle", 0, nullptr, "btn:poly#3", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Triangle — click centre, then a vertex"},
|
||||
{"sk_poly_4", "Square", 0, nullptr, "btn:poly#4", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Square — click centre, then a vertex"},
|
||||
{"sk_poly_5", "Pentagon", 0, nullptr, "btn:poly#5", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Pentagon — click centre, then a vertex"},
|
||||
{"sk_polygon", "Hexagon", 0, "G", "btn:poly#6", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Hexagon — click centre, then a vertex"},
|
||||
{"sk_poly_8", "Octagon", 0, nullptr, "btn:poly#8", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Octagon — click centre, then a vertex"},
|
||||
{"sk_poly_12", "Dodecagon", 0, nullptr, "btn:poly#12", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Dodecagon — click centre, then a vertex"},
|
||||
{"sk_poly_inscribed", "Inscribed", 0, nullptr, "btn:polyfit#0", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Measure the polygon to its corners (inscribed)"},
|
||||
{"sk_poly_circumscribed", "Circumscribed", 0, nullptr, "btn:polyfit#1", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Measure the polygon to its flats (circumscribed)"},
|
||||
{"sk_point_t", "Point", 0, "P", "key:P", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_point", "Point — click to place"},
|
||||
{"sk_text", "Text", 0, nullptr, "btn:text", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_text", "Type text; its outline is added to this sketch as editable lines"},
|
||||
{"sk_svg", "SVG", 0, nullptr, "btn:svg", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_svg", "Import an SVG outline into this sketch as editable lines"},
|
||||
{"sk_offset", "Offset", 1, "O", "key:O", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_offset", "Offset — pick an entity, drag the distance"},
|
||||
{"sk_trim", "Trim", 2, "T", "key:T", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_trim", "Trim — click a segment to trim it"},
|
||||
{"sk_fillet", "Fillet", 3, "F", "key:F", nullptr, 0x00090000u, 0, 0, false, true, nullptr, "design_filletedge", "Fillet — pick two lines, set the radius"},
|
||||
{"sk_chamfer", "Chamfer", 3, "H", "key:H", nullptr, 0x00090000u, 0, 0, false, true, nullptr, "design_chamfer", "Chamfer — pick two lines, set the distance"},
|
||||
{"sk_array", "Linear array", 4, nullptr, "fly:design_array#0", nullptr, 0x000b0000u, 0, 0, false, true, "Array", "design_array", "Pick entities, drag the spacing handle, click the count; click empty to apply"},
|
||||
{"sk_array_polar", "Polar array", 4, nullptr, "fly:design_array#1", nullptr, 0x000b0000u, 0, 0, false, true, "Array", "design_polararray", "Pick entities, drag the sweep handle, click the count; click empty to apply"},
|
||||
{"sk_mirror", "Mirror", 4, "M", "key:M", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_mirror", "Mirror — pick axis, then entities"},
|
||||
{"sk_move", "Move", 5, nullptr, "fly:design_move#0", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_move", "Pick entities, then drag the handle or click the distance; click empty to apply"},
|
||||
{"sk_rotate", "Rotate", 5, nullptr, "fly:design_move#1", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_rotate", "Pick entities, then drag around the pivot or click the angle; click empty to apply"},
|
||||
{"sk_scale", "Scale", 5, nullptr, "fly:design_move#2", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_scale", "Pick entities, then drag the handle or click the factor; click empty to apply"},
|
||||
{"sk_dimension", "Dimension", 6, "D", "key:D", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_dimension", "Dimension — click 2 points or an entity"},
|
||||
{"sk_constrain", "Constrain", 6, "K", "key:K", nullptr, 0x000f0000u, 0, 0, false, true, nullptr, "design_constrain", "Constrain the selected sketch entities to each other"},
|
||||
{"sk_construct", "Construction", 6, "Q", "key:Q", nullptr, 0x000b8000u, 0, 0, false, true, nullptr, nullptr, "Toggle construction: geometry that guides but is never built"},
|
||||
{"sk_extend", "Extend", 7, "X", "key:X", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_extend", "Extend — click a line/arc to extend it"},
|
||||
{"sk_delete", "Delete", 7, "Del", "btn:delete", nullptr, 0x000f0000u, 0, 0, false, true, nullptr, "design_delete", "Delete the selected sketch entities"},
|
||||
};
|
||||
static const int kOfferVerbCount = 86;
|
||||
|
||||
|
||||
+235
-202
File diff suppressed because it is too large
Load Diff
@@ -624,6 +624,10 @@ private:
|
||||
std::map<std::string, std::function<void()>> m_verb_actions;
|
||||
// Append an offer row with its toolbar glyph. The bitmap must be set BEFORE Append —
|
||||
// wxGTK builds the GtkMenuItem there and only makes an image item if one is present.
|
||||
// Every status write goes through here so long hints wrap instead of clipping.
|
||||
void set_status(const wxString& text);
|
||||
wxString idle_hint() const; // what to say when nothing is selected
|
||||
|
||||
wxMenuItem* append_offer_item(wxMenu* menu, int id, const wxString& text,
|
||||
const struct OfferVerb& v);
|
||||
void show_offer_menu(const wxPoint& screen_pos);
|
||||
|
||||
Reference in New Issue
Block a user