- (Improvement) CXDLP: Better parse of machine model from PrusaSlicer profile (#351)
- (Fix) OSF: Printer freezes at first layer (#657)
- (Upgrade) AvaloniaUI from 0.10.18 to 0.10.19
- (Add) Allow to pause and resume operations (#654)
- (Add) `Layer.FirstTransitionLayer`
- (Add) `Layer.LastTransitionLayer`
- (Add) File format: Elegoo GOO
- (Add) PrusaSlicer Printer: Elegoo Mars 4
- (Improvement) Allocate maximum GPU memory for Skia up to 256 MB
- (Improvement) Set and sanitize transition layers exposure time from last bottom layer and first normal layer instead of global times (#659)
- (Change) CXDLP: Default version from 2 to 3
- (Fix) UI was not rendering with GPU (ANGLE)
- (Fix) `Layer.IsTransitionLayer` was returning the wrong value
- (Upgrade) .NET from 6.0.13 to 6.0.14
- **UI:**
- (Improvement) Layer navigation load time by parallel `Mat` to `Bitmap` conversion
- (Improvement) Allow to show exceptions without the stack trace and detailed trigger action by using the `MessageExceiption` (#644)
- (Improvement) Allow progress to have and display a detailed log (#644)
- (Improvement) Convert format to another with multiple versions will now only show the possible versions for the extension
- **Suggestion - Wait time before cure:**
- (Improvement) Set the first wait time based on first valid layer mass rather than use the fixed limit
- (Improvement) Set zero time to empty and dummy layers
- (Improvement) When creating the dummy layer also increment the bottom layer count as the created layer count as one
- **PCB Exposure:**
- (Add) Excellon Drill Format (drl) to cut off holes (Implementation may lack some advanced features, please confirm the result) (#646)
- (Fix) Arc (G03) with negative offsets (I-/J-) was not drawing the shape correctly
- (Fix) Implement the rotation for the outline primitive (#645)
- **File formats:**
- (Improvement) Formats now sanitize the selected version before encode given the file extension, if version is out of range it will force the last known version
- (Fix) CBDDLP: Remove a table from the file that might cause layer corruption
- (Add) Operations - `AfterCompleteReport` property: Gets or sets an report to show to the user after complete the operation with success
- (Improvement) Suggestion - Wait time after cure: Set zero time to empty and dummy layers
- (Improvement) Slight improvement on the contour intersection check, yields better performance on resin and suction cup detection
- (Improvement) Allow to trigger message boxes from operations and scripts (#644)
- (Upgrade) .NET from 6.0.12 to 6.0.13
- (Add) File format: Anet N7 (#635)
- (Add) PrusaSlicer Printer: Anet N7 (#635)
- (Improvement) Each layer can now be aware of it own resolution
- (Improvement) Better set of file resolution from layers when using a compression codec other than png
- (Fix) Anet N4 printer reset on latest firmware (#633)
- (Fix) PrusaSlicer printers: Change thumbnails resolution to match file preview resolution (Fix stretch images)
- **Issues:**
- (Fix) Resin traps and suction cups area sum, was losing precision due uint cast (#621)
- (Fix) Overhang area was incorrectly showing bounding rectangle area instead it real area
- (Fix) OSF: Unable to open certain files when using anti-aliasing
- (Upgrade) .NET from 6.0.11 to 6.0.12
- **Windows MSI installer:**
- (Add) UVtools folder to start menu with:
- UVtools
- UVtoolsCmd
- Uninstall UVtools
- (Add) Prompt for add open in UVtools when right-click on supported files
- (Add) Prompt for create desktop shortcut
- (Add) Prompt for launch UVtools after the installation
- (Improvement) Cleanup and simplify the install project
- (Add) PrusaSlicer printer: Peopoly Phenom Forge
- (Upgrade) .NET from 6.0.8 to 6.0.9
- (Fix) Corruption in file after attempt to save to a locked file (#551)
- **File formats:**
- (Add) OSF (Vlare Open File Format)
- (Fix) CTB Encrypted: Bottom Retract Height for TSMC was constraining incorrectly with the normal total retract height
- (Fix) CWS: Only issue `;<Slice>` command when the exposure is about to happen (#514)
- **GCode:**
- (Add) Command `CommandWaitSyncDelay` for movement wait sync delay instead of depending on G4 wait command
- (Fix) Wrong parsing and set of wait times when using a wait after lift / wait before retract
- (Improvement) Auto update: Make sure the download url exists before attempt the download, if not, instead it will prompt for manual download and update
- (Improvement) MacOS: Remove `com.apple.quarantine` flag from the auto downloaded files
- (Upgrade) .NET from 6.0.7 to 6.0.8
- (Upgrade) AvaloniaUI from 0.10.17 to 0.10.18
- **Tools**
- **PCB Exposure:**
- (Add) Able to choose the size midpoint rounding method (#520)
- (Fix) Allow to flash alone D03 commands (#520)
- (Fix) Correct line thickness to have at least 1px error (#523)
- (Improvement) Layer arithmetic: Use ; to split and start a new arithmetic operation
- (Add) Cmd: Convert command now allow to pass 'auto' as target type to auto convert specific files, valid for SL1 files configured with FILEFORMAT_xxx (#522)
- (Add) GCode: Command to sync and wait for movement completion [Only enabled for cws format] (#514)
- (Add) VDT: Transition layer count
- (Upgrade) AvaloniaUI from 0.10.16 to 0.10.17