diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index aa385a2..b107c31 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -58,6 +58,8 @@ is committed and listed here with its exports. | assets/icons/interaction.contact.general.svg, assets/icons/interaction.contact.general.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/interaction.contact.general.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | | assets/icons/interaction.contact.pair.svg, assets/icons/interaction.contact.pair.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/interaction.contact.pair.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | | assets/icons/interaction.fsi.svg, assets/icons/interaction.fsi.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/interaction.fsi.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | +| assets/icons/mesh.block.svg, assets/icons/mesh.block.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/mesh.block.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | +| assets/icons/mesh.mirror.svg, assets/icons/mesh.mirror.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/mesh.mirror.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | | assets/icons/model.mass.create.svg, assets/icons/model.mass.create.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/model.mass.create.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | | assets/icons/interaction.rigid_wall.svg, assets/icons/interaction.rigid_wall.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/interaction.rigid_wall.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | | assets/icons/model.spring.create.svg, assets/icons/model.spring.create.vectorcraft | FieldCraft contributors | Original toolbar icon drawn with VectorCraft from `assets/icons/src/model.spring.create.json` (`cargo xtask icons`) | MIT OR Apache-2.0 | diff --git a/assets/icons/mesh.block.svg b/assets/icons/mesh.block.svg new file mode 100644 index 0000000..f61ce3d --- /dev/null +++ b/assets/icons/mesh.block.svg @@ -0,0 +1,8 @@ + + + mesh.block + + + + + diff --git a/assets/icons/mesh.block.vectorcraft b/assets/icons/mesh.block.vectorcraft new file mode 100644 index 0000000..336317e Binary files /dev/null and b/assets/icons/mesh.block.vectorcraft differ diff --git a/assets/icons/mesh.mirror.svg b/assets/icons/mesh.mirror.svg new file mode 100644 index 0000000..91b010a --- /dev/null +++ b/assets/icons/mesh.mirror.svg @@ -0,0 +1,11 @@ + + + mesh.mirror + + + + + + + + diff --git a/assets/icons/mesh.mirror.vectorcraft b/assets/icons/mesh.mirror.vectorcraft new file mode 100644 index 0000000..594af62 Binary files /dev/null and b/assets/icons/mesh.mirror.vectorcraft differ diff --git a/assets/icons/src/mesh.block.json b/assets/icons/src/mesh.block.json new file mode 100644 index 0000000..7c3d7dc --- /dev/null +++ b/assets/icons/src/mesh.block.json @@ -0,0 +1 @@ +{"shapes": [{"d": "M4 6 L16 3 L20 15 L8 19 Z", "fill": "soft", "stroke": "line"}, {"d": "M8 5 L12.33 16.33 M12 4 L16.67 17.67 M5.33 10.33 L17.33 7 M6.67 14.67 L18.67 11", "stroke": "accent", "width": 1}]} diff --git a/assets/icons/src/mesh.mirror.json b/assets/icons/src/mesh.mirror.json new file mode 100644 index 0000000..6d7334d --- /dev/null +++ b/assets/icons/src/mesh.mirror.json @@ -0,0 +1 @@ +{"shapes": [{"d": "M12 2 L12 22", "stroke": "accent", "width": 1.25, "dash": [2, 1.5]}, {"d": "M10 5 L3 7 L3 17 L10 19 Z", "fill": "soft", "stroke": "line"}, {"d": "M3 12 L10 12 M6.5 6 L6.5 18", "stroke": "line", "width": 1}, {"d": "M14 5 L21 7 L21 17 L14 19 Z", "fill": "soft", "stroke": "line"}, {"d": "M14 12 L21 12 M17.5 6 L17.5 18", "stroke": "line", "width": 1}]} diff --git a/crates/engine/src/catalogue.rs b/crates/engine/src/catalogue.rs index 26f93e7..c3e89f6 100644 --- a/crates/engine/src/catalogue.rs +++ b/crates/engine/src/catalogue.rs @@ -325,6 +325,7 @@ pub static CATALOGUE: &[Capability] = &[ "One mesh of a partitioned part, a method per cell (hex, tet, or all hex as conforming blocks); cells joined across partitions", &["mesh.hex.blocks"], ), + ready("mesh.block", "Mesh Block", Mesh, "Structured Hex", "A mapped block of hex, wedge or quad elements between corner points"), soon( "mesh.hex.decompose", "Decompose", @@ -347,14 +348,8 @@ pub static CATALOGUE: &[Capability] = &[ soon("mesh.untangle", "Untangle", Mesh, "Improve", "M6", "Repair inverted elements"), soon("mesh.layers", "Layers", Mesh, "Improve", "M6", "Boundary padding and layers through thin walls"), ready_more("mesh.node.add", "Node", Mesh, "Edit", "Add a node", &["mesh.node.remove"]), - ready_more( - "mesh.element.add", - "Element", - Mesh, - "Edit", - "Add an element on existing nodes, or a mapped block of them", - &["mesh.element.remove", "mesh.block", "mesh.mirror"], - ), + ready_more("mesh.element.add", "Element", Mesh, "Edit", "Add an element on existing nodes", &["mesh.element.remove"]), + ready("mesh.mirror", "Mirror Mesh", Mesh, "Edit", "Mirror a body's mesh across a plane, joined on the plane (mesh half a symmetric part)"), soon("mesh.node.merge", "Merge Nodes", Mesh, "Edit", "M6", "Merge coincident nodes"), soon("mesh.region.remesh", "Remesh Region", Mesh, "Edit", "M6", "Remesh a region in place; split and collapse elements"), soon("mesh.import.orphan", "Orphan Mesh", Mesh, "Edit", "M6", "Import a mesh without geometry"), diff --git a/docs/features.md b/docs/features.md index 701e9f0..0de5312 100644 --- a/docs/features.md +++ b/docs/features.md @@ -6,7 +6,7 @@ Every entry is a toolbar button. **Ready** entries run their command; **coming s shown greyed with the roadmap milestone that brings them (ROADMAP.md). Scripts, the command line, the control channel and AI agents over MCP (docs/mcp.md) run the same commands. -66 ready, 41 coming soon. +68 ready, 41 coming soon. ## Geometry @@ -37,6 +37,7 @@ the control channel and AI agents over MCP (docs/mcp.md) run the same commands. | Structured Hex | Quad Faces — All-quad meshes of faces on shared edge nodes | coming soon (M5) | | | Structured Hex | Hex Mesh — Structured hex mesh of a body: automatic, or extruded, swept, revolved or mapped (the Method drop-down) | ready | `mesh.hex.generate`, (`mesh.hex.sweep`), (`mesh.hex.mapped`) | | Structured Hex | Partitioned Mesh — One mesh of a partitioned part, a method per cell (hex, tet, or all hex as conforming blocks); cells joined across partitions | ready | `mesh.cells`, (`mesh.hex.blocks`) | +| Structured Hex | Mesh Block — A mapped block of hex, wedge or quad elements between corner points | ready | `mesh.block` | | Structured Hex | Decompose — Find sweepable and mappable regions of 3D parts (extruded cross-sections are already cut into blocks by Hex Mesh) | coming soon (M5) | | | Structured Hex | Transition — Conforming tet–hex interfaces with pyramids | coming soon (M5) | | | Automatic Hex | Octree Hex — Unstructured all-hex mesh of any part: adaptive grid, boundary layers on every sharp edge, untangled and proven valid | ready | `mesh.hex.octree` | @@ -46,7 +47,8 @@ the control channel and AI agents over MCP (docs/mcp.md) run the same commands. | Improve | Untangle — Repair inverted elements | coming soon (M6) | | | Improve | Layers — Boundary padding and layers through thin walls | coming soon (M6) | | | Edit | Node — Add a node | ready | `mesh.node.add`, `mesh.node.remove` | -| Edit | Element — Add an element on existing nodes, or a mapped block of them | ready | `mesh.element.add`, `mesh.element.remove`, `mesh.block`, `mesh.mirror` | +| Edit | Element — Add an element on existing nodes | ready | `mesh.element.add`, `mesh.element.remove` | +| Edit | Mirror Mesh — Mirror a body's mesh across a plane, joined on the plane (mesh half a symmetric part) | ready | `mesh.mirror` | | Edit | Merge Nodes — Merge coincident nodes | coming soon (M6) | | | Edit | Remesh Region — Remesh a region in place; split and collapse elements | coming soon (M6) | | | Edit | Orphan Mesh — Import a mesh without geometry | coming soon (M6) | |