# Minilase
This tool parses and patches Minilase EZCAD save files with values specified in a YAML config file.
The EZCAD format as implemented in this crate was reverse engineered from sample files, so not all formats or options are supported.
TODO:
* Write settings to output file by default
* Figure out some sort of formula to sweep power density
## Usage
``` text
Usage: minilase.exe [OPTIONS] --input
Options:
-i, --input Input file to parse
-d, --diff File to diff input against
-o, --output Output file to write to
-c, --config Configuration file
-p, --pen Print pen info
-l, --object-layer Layer of object to print info
-b, --object Print object info
-v, --verbose... Increase logging verbosity
-q, --quiet... Decrease logging verbosity
-h, --help Print help
```
## Configuration File
Operations defined in the configuration file are applied in order of definition.
### Pen Operations
Setting values of specific fields for a given pen:
``` yaml
Ops:
- !PatchPen
Pen: 0 # Target pen
# Specify one or more of the following:
Color: [127, 127, 127]
Enabled: true
LoopCount: 3
Speed: 1.234
Power: 10.5
Frequency: 10000
PulseWidth:
```
Where `` can be 2/4/6/8/12/20/30/45/60/80/100/150/200/250/350/500.
Cloning pen(s) (and optionally override settings):
``` yaml
Ops:
- !ClonePen
From: 0
To: 1
# Specify one or more of the following:
Inclusive: true
Patch:
Color: [64, 64, 64]
Enabled: true
LoopCount: 3
Speed: 1.234
Power: 10.5
Frequency: 10000
```
Incrementing a specific field by some value across a sequence of pens:
``` yaml
Ops:
- !PatternPen
Index: 1
Count: 5
Field:
```
Where `` is one of the following:
``` yaml
Field: !Loops 1
Field: !Speed 100.0
Field: !Power 10.0
Field: !Frequency 1000
Field: !PulseWidth 2 # Increment
```
Randomizing pen values:
``` yaml
Op:
- !RandomizePen
Index: 0
Count: 10
# Specify one or more of the following:
Speed: [100, 1000, 100] # [min, max, step]
Power: [10, 100, 5] # [min, max, step]
Frequency: [20000, 100000, 1000] # [min, max, step]
PulseWidth: [2, 350, 2] # [min, max, step]
```
Exporting a pen to a file:
``` yaml
Ops:
- !ExportPen
Index: 0
Path: "exported_pen.bin"
```
Importing a pen from a file:
``` yaml
Ops:
- !ImportPen
Index: 0
Path: "exported_pen.bin"
```
### Object Operations
Deleting all objects from a layer:
``` yaml
Ops:
- !DeleteObjects
Layer: 0
Object: 3 # Optional, will delete specific object instead
```
All other operations:
``` yaml
Ops:
- !Object
Input:
# Specify one or more of the following
Z: 0.0
Origin: { X: 10.0, Y: 10.0 }
Pen: 3
Layer: 2
Array:
Hatch:
Export: "exported_object.bin"
ReplaceObject: 0
```
Where `` is one of the following:
``` yaml
Input: !Rectangle { Width: 3.0, Height: 2.0 }
Input: !Circle { Radius: 3.0 }
Input: !Import { Path: "exported_object.bin" }
Input: !Existing { Layer: 0, Object: 1 }
```
Where `` is:
``` yaml
Array:
Columns: 3
Rows: 2
Spacing: 1.0
RandomizeOrder: True
StartingPen: 1
PatternX: // Optional
PatternY: // Optional
```
Where `` is:
``` yaml
Hatch:
LineSpacing: 0.1
# Specify one or more of the following
Pen: 1
Count: 3
EdgeOffset: 0.0
StartOffset: 0.0
EndOffset: 0.0
Angle: 3.0
RotateAngle: 0.0
LineReduction: 0.0
LoopDistance: 0.0
LoopCount: 0.0
Pattern:
FollowEdgeOnce: True
Crosshatch: True
```
Where `` is one of the following:
``` yaml
Pattern: !Directional
Pattern: !Bidirectional
Pattern: !Ring
Pattern: !Continuous
Pattern: !Gong
Pattern: !Background # (not supported)
Pattern: !Fill
Pattern: !Zigzag
```
## Settings
### Stainless Steel (mirror finish)