README.md 4.4 KB

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

Usage: minilase.exe [OPTIONS] --input <INPUT>

Options:
  -i, --input <INPUT>                Input file to parse
  -d, --diff <DIFF>                  File to diff input against
  -o, --output <OUTPUT>              Output file to write to
  -c, --config <CONFIG>              Configuration file
  -p, --pen <PEN>                    Print pen info
  -l, --object-layer <OBJECT_LAYER>  Layer of object to print info
  -b, --object <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:

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: <PulseWidth>

Where <PulseWidth> 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):

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:

Ops: 
  - !PatternPen
    Index: 1
    Count: 5
    Field: <PenPattern>

Where <PenPattern> is one of the following:

Field: !Loops 1
Field: !Speed 100.0
Field: !Power 10.0
Field: !Frequency 1000
Field: !PulseWidth 2 # Increment

Randomizing pen values:

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:

Ops:
  - !ExportPen
    Index: 0
    Path: "exported_pen.bin"

Importing a pen from a file:

Ops:
  - !ImportPen
    Index: 0
    Path: "exported_pen.bin"

Object Operations

Deleting all objects from a layer:

Ops:
  - !DeleteObjects
    Layer: 0
    Object: 3 # Optional, will delete specific object instead

All other operations:

Ops:
  - !Object
    Input: <InputObject>

    # Specify one or more of the following
    Z: 0.0
    Origin: { X: 10.0, Y: 10.0 }
    Pen: 3
    Layer: 2
    Array: <ArrayOptions>
    Hatch: <HatchOptions>
    Export: "exported_object.bin"
    ReplaceObject: 0

Where <InputObject> is one of the following:

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 <ArrayOptions> is:

Array:
  Columns: 3
  Rows: 2
  Spacing: 1.0
  RandomizeOrder: True
  StartingPen: 1
  PatternX: <PenPattern> // Optional
  PatternY: <PenPattern> // Optional

Where <HatchOptions> is:

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: <Pattern>
  FollowEdgeOnce: True
  Crosshatch: True

Where <Pattern> is one of the following:

Pattern: !Directional
Pattern: !Bidirectional
Pattern: !Ring
Pattern: !Continuous
Pattern: !Gong
Pattern: !Background # (not supported)
Pattern: !Fill
Pattern: !Zigzag

Settings

Stainless Steel (mirror finish)