# Design Tools ## Summary MatterControl includes a comprehensive set of parametric design tools for creating and modifying 3D objects. Tools range from primitive shape generators to advanced boolean operations, mesh modifications, and text/image extrusion. ## Technical Description ### Architecture Design tools are implemented as `IObject3D` subclasses: ``` Object3D (base) ├── Primitives (generators) │ ├── CubeObject3D │ ├── CylinderObject3D │ ├── SphereObject3D │ └── ... ├── Operations (modifiers) │ ├── ScaleObject3D │ ├── RotateObject3D │ ├── AlignObject3D │ └── ... └── Boolean Operations ├── CombineObject3D (Union) ├── SubtractObject3D └── IntersectObject3D ``` ### Primitive Objects Shape generators with parametric properties: | Primitive | Parameters | |-----------|------------| | `CubeObject3D` | Width, Depth, Height | | `CylinderObject3D` | Diameter, Height, Sides | | `SphereObject3D` | Diameter, Latitude/Longitude Steps | | `ConeObject3D` | Top/Bottom Diameter, Height | | `TorusObject3D` | Outer Diameter, Ring Diameter | | `HemisphereObject3D` | Diameter | | `PyramidObject3D` | Width, Depth, Height | | `WedgeObject3D` | Width, Depth, Height | | `RingObject3D` | Outer/Inner Diameter, Height | ### Transform Operations | Operation | Description | Parameters | |-----------|-------------|------------| | `ScaleObject3D` | Resize object | X/Y/Z scale factors | | `RotateObject3D` | Rotate around axis | Angle, Axis | | `TranslateObject3D` | Move object | X/Y/Z offset | | `MirrorObject3D` | Mirror across plane | Mirror plane | | `AlignObject3D` | Align to reference | Alignment mode | ### Array Operations | Operation | Description | |-----------|-------------| | `ArrayLinearObject3D` | Linear array (copies in line) | | `ArrayRadialObject3D` | Radial array (copies in circle) | | `ArrayAdvancedObject3D` | Custom array patterns | ### Mesh Modifications | Operation | Description | |-----------|-------------| | `CurveObject3D` | Bend mesh along curve | | `TwistObject3D` | Twist mesh around axis | | `PinchObject3D` | Pinch/bulge mesh | | `HollowOutObject3D` | Create hollow shell | | `DecimateObject3D` | Reduce polygon count | | `RepairObject3D` | Fix mesh errors | | `PlaneCutObject3D` | Cut with plane | ### Boolean Operations Constructive Solid Geometry (CSG): | Operation | Result | |-----------|--------| | `CombineObject3D` | Union (merge shapes) | | `SubtractObject3D` | Difference (cut away) | | `IntersectObject3D` | Intersection (common volume) | | `SubtractAndReplaceObject3D` | Subtract with material replacement | ### Text and Image Tools **TextObject3D:** - Font selection - Height/depth parameters - Bold/italic options **ImageToPathObject3D:** - Image to vector outline - Threshold control - Extrusion depth **LinearExtrudeObject3D:** - Extrude 2D path to 3D - Height, twist, scale parameters ### Path Operations Located in `DesignTools/Operations/Path/`: | Operation | Description | |-----------|-------------| | `LinearExtrudeObject3D` | Extrude path vertically | | `RotateExtrudeObject3D` | Revolve path around axis | | `SmoothPathObject3D` | Smooth path curves | | `OffsetPathObject3D` | Offset/inset path | ### Property System Design tools use `[ShowAsMutableObject]` and custom attributes: ```csharp [ShowAsMutableObject] public class CubeObject3D : PrimitiveObject3D { [DisplayName("Width")] public double Width { get; set; } = 20; [DisplayName("Depth")] public double Depth { get; set; } = 20; [DisplayName("Height")] public double Height { get; set; } = 20; } ``` ### Rebuild System Objects are rebuilt when properties change: ```csharp public override Task Rebuild() { // Generate new mesh from parameters var mesh = CreateMesh(); Mesh = mesh; return Task.CompletedTask; } ``` ### Undo/Redo Support Operations integrate with scene undo buffer: ```csharp sceneContext.Scene.UndoBuffer.Add(new UndoCommand( () => { /* undo action */ }, () => { /* redo action */ } )); ``` ### Design Rationale **Parametric Objects**: Storing parameters instead of fixed meshes enables: - Non-destructive editing - Dimension changes without re-creation - Saved file size reduction **Hierarchical Operations**: Nesting objects allows: - Complex compositions - Chained operations - Clear modification history **Property System**: Using attributes provides: - Automatic UI generation - Type-safe editing - Validation support ## Reference ### Primitives | Class | Location | Description | |-------|----------|-------------| | `CubeObject3D` | [DesignTools/Primitives/](MatterControlLib/DesignTools/Primitives/) | Box primitive | | `CylinderObject3D` | [DesignTools/Primitives/](MatterControlLib/DesignTools/Primitives/) | Cylinder | | `SphereObject3D` | [DesignTools/Primitives/](MatterControlLib/DesignTools/Primitives/) | Sphere | | `TextObject3D` | [DesignTools/Primitives/](MatterControlLib/DesignTools/Primitives/) | 3D text | ### Operations | Class | Location | Description | |-------|----------|-------------| | `ScaleObject3D` | [DesignTools/Operations/](MatterControlLib/DesignTools/Operations/) | Scale | | `RotateObject3D` | [DesignTools/Operations/](MatterControlLib/DesignTools/Operations/) | Rotate | | `AlignObject3D` | [DesignTools/Operations/](MatterControlLib/DesignTools/Operations/) | Align | | `ArrayLinearObject3D` | [DesignTools/Operations/](MatterControlLib/DesignTools/Operations/) | Linear array | ### Boolean Operations | Class | Location | Description | |-------|----------|-------------| | `CombineObject3D` | [DesignTools/](MatterControlLib/DesignTools/) | Union | | `SubtractObject3D` | [DesignTools/](MatterControlLib/DesignTools/) | Subtraction | | `IntersectObject3D` | [DesignTools/](MatterControlLib/DesignTools/) | Intersection | ### Editors | Class | Location | Description | |-------|----------|-------------| | `PropertyEditor` | [DesignTools/EditorTools/](MatterControlLib/DesignTools/EditorTools/) | Property grid | | `SheetEditor` | [DesignTools/Sheets/](MatterControlLib/DesignTools/Sheets/) | Spreadsheet editor |