mattercontrol/research/10-design-tools.md

209 lines
6.1 KiB
Markdown

# 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 |