# EzCAD Patcher
This tool parses and patches EZCAD files with values specified in a YAML config file.
The EZCAD format as implemented in this crate was reverse engineered from sample files, so use at your own risk.
## 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
-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.
### Patching Pen
Setting values of specific fields for a given pen:
``` yaml
Ops:
- !PatchPen
Pen: 0 # Target pen
Color: [127, 127, 127] # Optional - target pen RGB color
Enabled: true # Optional - target pen enable flag
LoopCount: 3 # Optional - target pen loop count
Speed: 1.234 # Optional - target pen speed
Power: 10.5 # Optional - target pen power
Frequency: 10000 # Optional - target pen frequency
```
Cloning pen(s) (and optionally override settings):
``` yaml
Ops:
- !ClonePen
From: 0 # Source pen
To: 1 # Target pen
# Inclusive: true # Optional - will clone to all pens in range
# Color: [64, 64, 64] # Optional - target pen RGB color
# Enabled: true # Optional - target pen enable flag
# LoopCount: 3 # Optional - target pen loop count
# Speed: 1.234 # Optional - target pen speed
# Power: 10.5 # Optional - target pen power
# Frequency: 10000 # Optional - target pen frequency
```
Incrementing a specific field by some value across a sequence of pens:
``` yaml
Ops:
- !PatternPen
From: 1 # Starting pen to copy settings from
To: 5 # Ending pen to stop at (inclusive)
# Field: !Loops 1 # Choose one
# Field: !Speed 100.0 # Choose one
# Field: !Power 10.0 # Choose one
# Field: !Frequency 1000 # Choose one
```
### Importing and Exporting Pens and Objects
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"
```
Exporting an object to a file:
``` yaml
Ops:
- !ExportObject
Layer: 0
Object: 0
Path: "exported_object.bin"
```
Importing an object from a file:
``` yaml
Ops:
- !ImportObject
Layer: 0
Object: 3 # Optional, will replace specified object instead
Path: "exported_object.bin"
```
### Deleting and Generating Objects
Deleting all objects from a layer:
``` yaml
Ops:
- !DeleteObjects
Layer: 0
Object: 3 # Optional, will delete specific object instead
```
Generating a grid of rectangles with incrementing pens:
``` yaml
Ops:
- !RectangleArray
Layer: 0
Width: 10.0
Height: 10.0
Columns: 3
Rows: 5
Spacing: 0.5
Z: 0.0
StartingPen: 0
```