From feaaba156e6c1fb0136c39c9f9c6defebedd7b1f Mon Sep 17 00:00:00 2001 From: bherbruck Date: Thu, 8 Oct 2026 16:39:12 +0000 Subject: [PATCH] Split Body by a face of a body: FusionSplitBodyCommand tool {body, point} The Split feature takes an optional face tool (FaceAt, the face through a point on a named body) and splits with kernel split_body, the tool's surface extended; otherwise the plane as before. Engine test: a box split by a cylinder's side into the core and the rest. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL --- crates/doc/src/document.rs | 12 ++- crates/doc/src/eval.rs | 19 ++++- crates/engine/src/cmd/features.rs | 26 ++++++- crates/engine/src/tests.rs | 17 +++++ crates/ui-egui/src/dialogs.rs | 2 +- docs/parity.md | 122 +++++++++++++++--------------- 6 files changed, 129 insertions(+), 69 deletions(-) diff --git a/crates/doc/src/document.rs b/crates/doc/src/document.rs index 412d6959..35548e79 100644 --- a/crates/doc/src/document.rs +++ b/crates/doc/src/document.rs @@ -312,10 +312,13 @@ pub enum FeatureKind { ConstructionPlane { plane: PlaneRef, }, - /// Split a body with a plane into two bodies. + /// Split a body into the parts on either side of a plane, or of a face of a body (the face + /// through `point`, its surface extended) when `tool` is set. Split { body: String, plane: PlaneRef, + #[serde(default, skip_serializing_if = "Option::is_none")] + tool: Option, }, /// Scale bodies about a point (uniform, or per axis). Scale { @@ -630,6 +633,13 @@ pub enum FeatureKind { }, } +/// A face picked by a point on it, on a named body. +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct FaceAt { + pub body: String, + pub point: Vec3, +} + /// Triangles of one imported mesh body (millimetres). #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct MeshData { diff --git a/crates/doc/src/eval.rs b/crates/doc/src/eval.rs index 1d17c249..8e4ee146 100644 --- a/crates/doc/src/eval.rs +++ b/crates/doc/src/eval.rs @@ -2016,13 +2016,24 @@ fn eval_feature(doc: &Document, vals: &BTreeMap, f: &Feature, st: doc.resolve_plane(vals, plane, 0)?; Ok(()) } - FeatureKind::Split { body, plane } => { - let pl = doc.resolve_plane(vals, plane, 0)?; + FeatureKind::Split { body, plane, tool } => { let i = st.bodies.iter().position(|b| &b.name == body).ok_or_else(|| DocError::Unknown(format!("body `{body}`")))?; let Some(mb) = st.bodies.get(i).cloned() else { return Err(DocError::Unknown(format!("body `{body}`"))) }; - let parts = kernel::split_by_plane(&mb.body, &pl)?; + let parts = match tool { + // A face of a body (its surface extended). + Some(t) => { + let tb = st.body(&t.body).ok_or_else(|| DocError::Unknown(format!("body `{}`", t.body)))?; + let face = crate::appearance::face_index_at(tb, t.point) + .ok_or_else(|| DocError::Invalid(format!("no face of `{}` at the tool point", t.body)))?; + kernel::split_body(&mb.body, &kernel::SplitTool::Face { body: &tb.body, face })? + } + None => { + let pl = doc.resolve_plane(vals, plane, 0)?; + kernel::split_by_plane(&mb.body, &pl)? + } + }; if parts.len() < 2 { - return Err(DocError::Invalid("the plane does not split the body".into())); + return Err(DocError::Invalid("the tool does not split the body".into())); } let mut it = parts.into_iter(); if let (Some(first), Some(slot)) = (it.next(), st.bodies.get_mut(i)) { diff --git a/crates/engine/src/cmd/features.rs b/crates/engine/src/cmd/features.rs index 642c075c..0584f086 100644 --- a/crates/engine/src/cmd/features.rs +++ b/crates/engine/src/cmd/features.rs @@ -88,7 +88,10 @@ pub static COMMANDS: &[CommandSpec] = &[ .at("SOLID", "CONSTRUCT") .icon("plane") .params("base: XY|XZ|YZ|plane name; axis: X|Y|Z|{origin, dir}; angle: expr; name?"), - CommandSpec::new("FusionSplitBodyCommand", "Split Body", split_body).at("SOLID", "MODIFY").icon("split").params("body: name; plane: XY|XZ|YZ|plane name|{origin, normal}"), + CommandSpec::new("FusionSplitBodyCommand", "Split Body", split_body) + .at("SOLID", "MODIFY") + .icon("split") + .params("body: name; plane: XY|XZ|YZ|plane name|{origin, normal} — or tool: {body, point} (a face of a body, its surface extended)"), CommandSpec::new("FusionPressPullCommand", "Press Pull", press_pull) .at("SOLID", "MODIFY") .icon("presspull") @@ -771,8 +774,27 @@ fn split_body(s: &mut Session, p: &Value) -> Result { if s.model.state().body(&body).is_none() { return Err(bad(cmd, format!("no body `{body}`"))); } + // A face as the tool: `tool: {body, point}` (its surface extended); else a plane. + if let Some(t) = p.get("tool").filter(|t| !t.is_null()) { + let tb = t.get("body").and_then(Value::as_str).ok_or_else(|| bad(cmd, "`tool.body` must name a body"))?.to_string(); + let point = t.get("point").and_then(crate::params::vec3).ok_or_else(|| bad(cmd, "`tool.point` must be [x, y, z] on the tool face"))?; + let st = s.model.state(); + let tbody = st.body(&tb).ok_or_else(|| bad(cmd, format!("no body `{tb}`")))?; + if solvecraft_doc::appearance::face_index_at(tbody, point).is_none() { + return Err(bad(cmd, "`tool.point` is not on a face of the tool body")); + } + return add_feature( + s, + p, + FeatureKind::Split { + body, + plane: solvecraft_doc::PlaneRef::Origin { name: "XY".into() }, + tool: Some(solvecraft_doc::FaceAt { body: tb, point }), + }, + ); + } let plane = plane_param(s, p.get("plane"), cmd)?; - add_feature(s, p, FeatureKind::Split { body, plane }) + add_feature(s, p, FeatureKind::Split { body, plane, tool: None }) } /// ISO 273 clearance hole diameters (close, normal, loose fit) for metric bolts. diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 818e4b46..067d4994 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -1041,6 +1041,23 @@ fn iges_export_and_open() { assert_eq!(st.bodies[1].body.color(), Some([1.0, 0.0, 0.0])); } +/// Split Body by a face of another body (its surface extended): a box cut by a cylinder's +/// side into the core and the rest; volumes add up exactly. +#[test] +fn split_body_by_a_face() { + let mut s = Session::default(); + run(&mut s, "PrimitiveBox", json!({"length": 10, "width": 20, "height": 30, "body_name": "Block"})); + run(&mut s, "PrimitiveCylinder", json!({"radius": 4, "height": 40, "base": [5, 10, -5], "body_name": "Tool"})); + run(&mut s, "FusionSplitBodyCommand", json!({"body": "Block", "tool": {"body": "Tool", "point": [9, 10, 10]}})); + let st = s.world_state(); + let mut v: Vec = + st.bodies.iter().filter(|b| b.name.starts_with("Block")).map(|b| solvecraft_kernel::measure(&b.body).unwrap().volume).collect(); + v.sort_by(f64::total_cmp); + let core = PI * 16.0 * 30.0; + assert!(v.len() == 2 && rel(v[0], core) < 1e-3 && rel(v[1], 6000.0 - core) < 1e-3, "{v:?}"); + assert!(s.execute("FusionSplitBodyCommand", &json!({"body": "Block", "tool": {"body": "Tool", "point": [100, 0, 0]}})).is_err()); +} + /// Components export as a STEP assembly: products, occurrences, placements. #[test] fn components_export_as_step_assembly() { diff --git a/crates/ui-egui/src/dialogs.rs b/crates/ui-egui/src/dialogs.rs index a9cff5f3..5e241b41 100644 --- a/crates/ui-egui/src/dialogs.rs +++ b/crates/ui-egui/src/dialogs.rs @@ -2625,7 +2625,7 @@ pub fn for_feature(app: &SolveApp, id: u64, marker: Option) -> Option { + FeatureKind::Split { body, plane, .. } => { let mut d = start("FusionSplitBodyCommand")?; if let Some(inp) = d.inputs.first_mut() { inp.items = vec![Sel::Body { name: body.clone() }]; diff --git a/docs/parity.md b/docs/parity.md index 3d85c336..8fb0765d 100644 --- a/docs/parity.md +++ b/docs/parity.md @@ -2,49 +2,49 @@ Generated by `cargo xtask parity` from `xtask/data/fusion-catalog.tsv` (the toolbar commands of Fusion's Design workspace, ids and names only) and the live command registry (`solvecraft-cli commands`). A command counts as live when SolveCraft registers the same command id. This measures breadth, not depth; see ROADMAP.md and docs/oracle.md for depth. -**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 220 / 541 commands live (41%).** SOLID + SKETCH: 140 / 291 (48%). Registered commands: 225. +**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 278 / 541 commands live (51%).** SOLID + SKETCH: 167 / 291 (57%). Registered commands: 276. -Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 372 / 1175 (32%). +Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 494 / 1175 (42%). | Tab | Panel | Live | Total | % | |---|---|---:|---:|---:| | SOLID | CREATE | 22 | 35 | 63% | | SOLID | MODIFY | 18 | 32 | 56% | -| SOLID | ASSEMBLE | 7 | 21 | 33% | -| SOLID | CONFIGURE | 0 | 3 | 0% | +| SOLID | ASSEMBLE | 12 | 21 | 57% | +| SOLID | CONFIGURE | 2 | 3 | 67% | | SOLID | CONSTRUCT | 2 | 20 | 10% | -| SOLID | INSPECT | 4 | 25 | 16% | -| SOLID | INSERT | 5 | 11 | 45% | +| SOLID | INSPECT | 12 | 25 | 48% | +| SOLID | INSERT | 6 | 11 | 55% | | SOLID | SELECT | 0 | 15 | 0% | | SOLID | POSITION | 2 | 2 | 100% | | SKETCH | CREATE | 41 | 41 | 100% | | SKETCH | MODIFY | 12 | 12 | 100% | | SKETCH | CONSTRAINTS | 15 | 15 | 100% | -| SKETCH | CONFIGURE | 0 | 3 | 0% | -| SKETCH | INSPECT | 4 | 25 | 16% | -| SKETCH | INSERT | 6 | 13 | 46% | +| SKETCH | CONFIGURE | 2 | 3 | 67% | +| SKETCH | INSPECT | 12 | 25 | 48% | +| SKETCH | INSERT | 7 | 13 | 54% | | SKETCH | ASSEMBLE | 0 | 1 | 0% | | SKETCH | SELECT | 0 | 15 | 0% | | SKETCH | FINISH SKETCH | 2 | 2 | 100% | -| SHEET METAL | CREATE | 14 | 19 | 74% | +| SHEET METAL | CREATE | 15 | 19 | 79% | | SHEET METAL | MODIFY | 12 | 21 | 57% | -| SHEET METAL | ASSEMBLE | 6 | 20 | 30% | -| SHEET METAL | CONFIGURE | 0 | 3 | 0% | +| SHEET METAL | ASSEMBLE | 11 | 20 | 55% | +| SHEET METAL | CONFIGURE | 2 | 3 | 67% | | SHEET METAL | CONSTRUCT | 2 | 20 | 10% | -| SHEET METAL | INSPECT | 4 | 25 | 16% | -| SHEET METAL | INSERT | 5 | 11 | 45% | +| SHEET METAL | INSPECT | 12 | 25 | 48% | +| SHEET METAL | INSERT | 6 | 11 | 55% | | SHEET METAL | SELECT | 0 | 15 | 0% | | SHEET METAL | REFOLD | 0 | 1 | 0% | | SHEET METAL | POSITION | 2 | 2 | 100% | -| ASSEMBLY | INSERT | 3 | 8 | 38% | +| ASSEMBLY | INSERT | 4 | 8 | 50% | | ASSEMBLY | CREATE | 5 | 8 | 62% | | ASSEMBLY | RELATIONSHIPS | 4 | 11 | 36% | -| ASSEMBLY | MOTION | 2 | 3 | 67% | +| ASSEMBLY | MOTION | 3 | 3 | 100% | | ASSEMBLY | MODIFY | 8 | 11 | 73% | -| ASSEMBLY | CONTACT | 0 | 2 | 0% | -| ASSEMBLY | CONFIGURE | 0 | 3 | 0% | +| ASSEMBLY | CONTACT | 2 | 2 | 100% | +| ASSEMBLY | CONFIGURE | 2 | 3 | 67% | | ASSEMBLY | CONSTRUCT | 2 | 20 | 10% | -| ASSEMBLY | INSPECT | 4 | 25 | 16% | +| ASSEMBLY | INSPECT | 12 | 25 | 48% | | ASSEMBLY | SELECT | 0 | 15 | 0% | | ASSEMBLY | POSITION | 2 | 2 | 100% | | PLASTIC | enclosure subset | 5 | 5 | 100% | @@ -55,21 +55,21 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE |---|---|---:|---:|---:| | SURFACE | CREATE | 7 | 25 | 28% | | SURFACE | MODIFY | 13 | 26 | 50% | -| SURFACE | ASSEMBLE | 6 | 20 | 30% | -| SURFACE | CONFIGURE | 0 | 3 | 0% | +| SURFACE | ASSEMBLE | 11 | 20 | 55% | +| SURFACE | CONFIGURE | 2 | 3 | 67% | | SURFACE | CONSTRUCT | 2 | 20 | 10% | -| SURFACE | INSPECT | 4 | 25 | 16% | -| SURFACE | INSERT | 5 | 11 | 45% | +| SURFACE | INSPECT | 12 | 25 | 48% | +| SURFACE | INSERT | 6 | 11 | 55% | | SURFACE | SELECT | 0 | 15 | 0% | | SURFACE | POSITION | 2 | 2 | 100% | | MESH | CREATE | 2 | 5 | 40% | | MESH | PREPARE | 0 | 4 | 0% | | MESH | MODIFY | 6 | 30 | 20% | -| MESH | ASSEMBLE | 7 | 21 | 33% | -| MESH | CONFIGURE | 0 | 3 | 0% | +| MESH | ASSEMBLE | 12 | 21 | 57% | +| MESH | CONFIGURE | 2 | 3 | 67% | | MESH | CONSTRUCT | 2 | 20 | 10% | -| MESH | INSPECT | 4 | 25 | 16% | -| MESH | INSERT | 4 | 10 | 40% | +| MESH | INSPECT | 12 | 25 | 48% | +| MESH | INSERT | 5 | 10 | 50% | | MESH | SELECT | 0 | 10 | 0% | | MESH | EXPORT | 0 | 1 | 0% | | MESH | POSITION | 2 | 2 | 100% | @@ -78,19 +78,19 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | FORM | SYMMETRY | 0 | 6 | 0% | | FORM | UTILITIES | 0 | 5 | 0% | | FORM | CONSTRUCT | 2 | 20 | 10% | -| FORM | INSPECT | 4 | 25 | 16% | -| FORM | INSERT | 6 | 13 | 46% | +| FORM | INSPECT | 12 | 25 | 48% | +| FORM | INSERT | 7 | 13 | 54% | | FORM | ASSEMBLE | 0 | 1 | 0% | | FORM | SELECT | 0 | 15 | 0% | | FORM | FINISH FORM | 0 | 1 | 0% | | PLASTIC | SETUP | 2 | 2 | 100% | | PLASTIC | CREATE | 26 | 35 | 74% | | PLASTIC | MODIFY | 18 | 32 | 56% | -| PLASTIC | ASSEMBLE | 6 | 20 | 30% | -| PLASTIC | CONFIGURE | 0 | 3 | 0% | +| PLASTIC | ASSEMBLE | 11 | 20 | 55% | +| PLASTIC | CONFIGURE | 2 | 3 | 67% | | PLASTIC | CONSTRUCT | 2 | 20 | 10% | -| PLASTIC | INSPECT | 4 | 26 | 15% | -| PLASTIC | INSERT | 5 | 11 | 45% | +| PLASTIC | INSPECT | 12 | 26 | 46% | +| PLASTIC | INSERT | 6 | 11 | 55% | | PLASTIC | SELECT | 0 | 15 | 0% | | PLASTIC | POSITION | 2 | 2 | 100% | | MANAGE | ASSIGN | 0 | 1 | 0% | @@ -103,7 +103,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE | UTILITIES | NEST | 0 | 1 | 0% | | UTILITIES | ADD-INS | 0 | 2 | 0% | | UTILITIES | UTILITY | 1 | 3 | 33% | -| UTILITIES | INSPECT | 4 | 24 | 17% | +| UTILITIES | INSPECT | 11 | 24 | 46% | | UTILITIES | CREATE PMI | 0 | 4 | 0% | | UTILITIES | SELECT | 0 | 15 | 0% | | UTILITIES | POSITION | 2 | 2 | 100% | @@ -157,17 +157,33 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › ASSEMBLE › Rigid Group (`RigidGroupCmd`) - SOLID › ASSEMBLE › Drive Joints (`FusionMoveJointsCommand`) - SOLID › ASSEMBLE › Motion Link (`FusionMotionRelationshipCommand`) +- SOLID › ASSEMBLE › Motion Study (`FusionMotionStudyCommand`) +- SOLID › ASSEMBLE › Enable Contact Sets (`EnableContactSetsCmd`) +- SOLID › ASSEMBLE › Enable All Contact (`EnableAllContactCmd`) +- SOLID › ASSEMBLE › Disable Contact (`DisableAllContactCmd`) +- SOLID › ASSEMBLE › New Contact Set (`ContactSetCmd`) +- SOLID › CONFIGURE › Configure (`FusionStartDesignConfigModeCmd`) +- SOLID › CONFIGURE › Display Configuration Table (`FusionShowDesignConfigPanelCmd`) - SOLID › CONSTRUCT › Offset Plane (`ConstructionPlaneOffsetFromPlaneCommand`) - SOLID › CONSTRUCT › Plane at Angle (`ConstructionPlaneAtAngleCommand`) - SOLID › INSPECT › Measure (`MeasureCommand`) - SOLID › INSPECT › Interference (`InterferenceCheckCommand`) - SOLID › INSPECT › Section Analysis (`FusionHalfSectionViewCommand`) - SOLID › INSPECT › Curvature Comb Analysis (`FusionCurvatureCombAnalysisCommand`) +- SOLID › INSPECT › Curvature Map Analysis (`FusionCurvatureMapAnalysisCommand`) +- SOLID › INSPECT › Draft Analysis (`FusionDraftAnalysisCommand`) +- SOLID › INSPECT › Environment Map Analysis (`FusionEnvironmentMapAnalysisCommand`) +- SOLID › INSPECT › Isocurve Analysis (`FusionIsoCurveAnalysisCommand`) +- SOLID › INSPECT › Zebra Analysis (`FusionZebraAnalysisCommand`) +- SOLID › INSPECT › Accessibility Analysis (`FusionAccessibilityAnalysisCommand`) +- SOLID › INSPECT › Center of Mass (`FusionCenterOfMassCommand`) +- SOLID › INSPECT › Minimum Radius Analysis (`FusionMinimumRadiusAnalysisCommand`) - SOLID › INSERT › Decal (`FusionAddEditDecalCommand`) - SOLID › INSERT › Canvas (`FusionAddCanvasCommand`) - SOLID › INSERT › Insert SVG (`SketchImportSVG`) - SOLID › INSERT › Insert DXF (`ImportDxfFileCommand`) - SOLID › INSERT › Insert Mesh (`ParaMeshInsertAlignCommand`) +- SOLID › INSERT › Insert Fastener (`FusionFastenersCommand`) - SOLID › POSITION › Capture Position (`SnapshotCmd`) - SOLID › POSITION › Revert Position (`AsBuiltPositionsCmd`) - SKETCH › CREATE › Line (`DrawPolyline`) @@ -238,16 +254,27 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SKETCH › CONSTRAINTS › Symmetry (`ConstraintSymmetry`) - SKETCH › CONSTRAINTS › Curvature (`ConstraintSmooth`) - SKETCH › CONSTRAINTS › Polygon (`SketchPolygonConstraintCmd`) +- SKETCH › CONFIGURE › Configure (`FusionStartDesignConfigModeCmd`) +- SKETCH › CONFIGURE › Display Configuration Table (`FusionShowDesignConfigPanelCmd`) - SKETCH › INSPECT › Measure (`MeasureCommand`) - SKETCH › INSPECT › Interference (`InterferenceCheckCommand`) - SKETCH › INSPECT › Section Analysis (`FusionHalfSectionViewCommand`) - SKETCH › INSPECT › Curvature Comb Analysis (`FusionCurvatureCombAnalysisCommand`) +- SKETCH › INSPECT › Curvature Map Analysis (`FusionCurvatureMapAnalysisCommand`) +- SKETCH › INSPECT › Draft Analysis (`FusionDraftAnalysisCommand`) +- SKETCH › INSPECT › Environment Map Analysis (`FusionEnvironmentMapAnalysisCommand`) +- SKETCH › INSPECT › Isocurve Analysis (`FusionIsoCurveAnalysisCommand`) +- SKETCH › INSPECT › Zebra Analysis (`FusionZebraAnalysisCommand`) +- SKETCH › INSPECT › Accessibility Analysis (`FusionAccessibilityAnalysisCommand`) +- SKETCH › INSPECT › Center of Mass (`FusionCenterOfMassCommand`) +- SKETCH › INSPECT › Minimum Radius Analysis (`FusionMinimumRadiusAnalysisCommand`) - SKETCH › INSERT › Decal (`FusionAddEditDecalCommand`) - SKETCH › INSERT › Canvas (`FusionAddCanvasCommand`) - SKETCH › INSERT › Insert SVG (`SketchImportSVG`) - SKETCH › INSERT › Insert DXF (`ImportDxfFileCommand`) - SKETCH › INSERT › Insert Mesh (`ParaMeshInsertAlignCommand`) - SKETCH › INSERT › Insert Component (`FusionImportCommandFromToolbar`) +- SKETCH › INSERT › Insert Fastener (`FusionFastenersCommand`) - SKETCH › FINISH SKETCH › Finish Sketch (`SketchStop`) - SKETCH › FINISH SKETCH › Finish with AutoConstrain (`SketchAutoConstrainAndFinish`) @@ -288,13 +315,6 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › ASSEMBLE › Tangent Constraint (`TangentConstraintCmd`) - SOLID › ASSEMBLE › Joint Constraint (`JointConstraintCmd`) - SOLID › ASSEMBLE › As-Built Constraint (`AsBuiltConstraintCmd`) -- SOLID › ASSEMBLE › Motion Study (`FusionMotionStudyCommand`) -- SOLID › ASSEMBLE › Enable Contact Sets (`EnableContactSetsCmd`) -- SOLID › ASSEMBLE › Enable All Contact (`EnableAllContactCmd`) -- SOLID › ASSEMBLE › Disable Contact (`DisableAllContactCmd`) -- SOLID › ASSEMBLE › New Contact Set (`ContactSetCmd`) -- SOLID › CONFIGURE › Configure (`FusionStartDesignConfigModeCmd`) -- SOLID › CONFIGURE › Display Configuration Table (`FusionShowDesignConfigPanelCmd`) - SOLID › CONFIGURE › Create Configuration Rules (`FusionConfigurationRulesCmd`) - SOLID › CONSTRUCT › User Coordinate System (UCS) (`CoordinateSystemCommand`) - SOLID › CONSTRUCT › Tangent Plane (`ConstructionTangentPlaneCommand`) @@ -314,15 +334,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › CONSTRUCT › Point At Center Of Circle/Sphere/Torus (`ConstructionPointFromCircleOrSphereCommand`) - SOLID › CONSTRUCT › Point At Edge And Plane (`ConstructionPointAtEdgeAndPlaneCommand`) - SOLID › CONSTRUCT › Point Along Path (`ConstructionPointAlongPathCommand`) -- SOLID › INSPECT › Curvature Map Analysis (`FusionCurvatureMapAnalysisCommand`) -- SOLID › INSPECT › Draft Analysis (`FusionDraftAnalysisCommand`) -- SOLID › INSPECT › Environment Map Analysis (`FusionEnvironmentMapAnalysisCommand`) -- SOLID › INSPECT › Isocurve Analysis (`FusionIsoCurveAnalysisCommand`) - SOLID › INSPECT › Validate (`FusionSurfaceValidateCommand`) -- SOLID › INSPECT › Zebra Analysis (`FusionZebraAnalysisCommand`) -- SOLID › INSPECT › Accessibility Analysis (`FusionAccessibilityAnalysisCommand`) -- SOLID › INSPECT › Center of Mass (`FusionCenterOfMassCommand`) -- SOLID › INSPECT › Minimum Radius Analysis (`FusionMinimumRadiusAnalysisCommand`) - SOLID › INSPECT › Component Connection Analysis (`FusionComponentConnectionAnalysisCommand`) - SOLID › INSPECT › DOF Analysis (`FusionDOFAnalysisCommand`) - SOLID › INSPECT › Edit Component Connection Analysis (`FusionEditComponentConnectionAnalysisCommand`) @@ -336,7 +348,6 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › INSPECT › History (`ShowHistoryToolbarCmd`) - SOLID › INSPECT › Sustainability Insights (`GravityClimate_ManufacturingSustainabilityInsights_MainDialog`) - SOLID › INSERT › Insert T-Spline (`TSplineImportCommand`) -- SOLID › INSERT › Insert Fastener (`FusionFastenersCommand`) - SOLID › INSERT › Insert Derive (`PullDeriveCommand`) - SOLID › INSERT › Insert McMaster-Carr Component (`InsertMcMasterCarrComponentCommand`) - SOLID › INSERT › Insert a manufacturer part (`cadenasparts4cad`) @@ -357,18 +368,8 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SOLID › SELECT › Select Edge Priority (`SelectEdgePriorityCommand`) - SOLID › SELECT › Select Component Priority (`SelectComponentPriorityCommand`) - SOLID › SELECT › Selection Filters (`SelectionFilterCommand`) -- SKETCH › CONFIGURE › Configure (`FusionStartDesignConfigModeCmd`) -- SKETCH › CONFIGURE › Display Configuration Table (`FusionShowDesignConfigPanelCmd`) - SKETCH › CONFIGURE › Create Configuration Rules (`FusionConfigurationRulesCmd`) -- SKETCH › INSPECT › Curvature Map Analysis (`FusionCurvatureMapAnalysisCommand`) -- SKETCH › INSPECT › Draft Analysis (`FusionDraftAnalysisCommand`) -- SKETCH › INSPECT › Environment Map Analysis (`FusionEnvironmentMapAnalysisCommand`) -- SKETCH › INSPECT › Isocurve Analysis (`FusionIsoCurveAnalysisCommand`) - SKETCH › INSPECT › Validate (`FusionSurfaceValidateCommand`) -- SKETCH › INSPECT › Zebra Analysis (`FusionZebraAnalysisCommand`) -- SKETCH › INSPECT › Accessibility Analysis (`FusionAccessibilityAnalysisCommand`) -- SKETCH › INSPECT › Center of Mass (`FusionCenterOfMassCommand`) -- SKETCH › INSPECT › Minimum Radius Analysis (`FusionMinimumRadiusAnalysisCommand`) - SKETCH › INSPECT › Component Connection Analysis (`FusionComponentConnectionAnalysisCommand`) - SKETCH › INSPECT › DOF Analysis (`FusionDOFAnalysisCommand`) - SKETCH › INSPECT › Edit Component Connection Analysis (`FusionEditComponentConnectionAnalysisCommand`) @@ -382,7 +383,6 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE - SKETCH › INSPECT › History (`ShowHistoryToolbarCmd`) - SKETCH › INSPECT › Sustainability Insights (`GravityClimate_ManufacturingSustainabilityInsights_MainDialog`) - SKETCH › INSERT › Insert T-Spline (`TSplineImportCommand`) -- SKETCH › INSERT › Insert Fastener (`FusionFastenersCommand`) - SKETCH › INSERT › Duplicate With Joints (`FusionDuplicateWithJointsCommand`) - SKETCH › INSERT › Insert Derive (`PullDeriveCommand`) - SKETCH › INSERT › Insert McMaster-Carr Component (`InsertMcMasterCarrComponentCommand`)