Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sn4k3/UVtools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Conceição <Tiago_caza@hotmail.com>2021-01-14 02:19:23 +0300
committerTiago Conceição <Tiago_caza@hotmail.com>2021-01-14 02:19:23 +0300
commit097bbb867dd2a5942602d0dadc71187494e55b35 (patch)
tree3e3da6bf15cb0b3c9197bd8e63322f1250afba1d
parent17bdece1b536013ae72213717311a0dcd389f97c (diff)
v2.3.0v2.3.0
* **PrusaSlicer:** * **In this release is recommended to discard your printer and refresh it with uvtools updated printer or replace notes over** * (Add) FILEFORMAT_XXX variable to auto-convert to that file format once open in UVtools * (Update) Print profiles fields with new PrusaSlicer version * (Remove) LayerOffDelay from printer notes and use only the LightOffDelay variable instead, both were being used, to avoid redundacy LayerOffDelay was dropped. Please update your printer accordingly! * (Remove) FLIP_XY compability from printers * (Remove) AntiAlias variable from printers * **(Add) Settings - Automations:** * Auto save the file after apply any automation(s) * Auto convert SL1 files to the target format when possible and load it back * Auto set the extra 'light-off delay' based on lift height and speed. * (Add) Allow all and future formats to convert between them without knowing each other (Abstraction) * (Add) XYResolution and XYResolutionUm property to file formats * (Add) Calculator - Optimal model tilt: Calculates the optimal model tilt angle for printing and to minimize the visual layer effect * (Add) Bottom layer count to the status bar * **(Add) FileFormat propertiers:** * MirrorDisplay: If images need to be mirrored on lcd to print on the correct orientation (If available) * MaxPrintHeight: The maximum Z build volume of the printer (If available) * (Add) ZCodex: Print paramenter light-off delay" * (Add) SL1: Implement missing keys: host_type, physical_printer_settings_id and support_small_pillar_diameter_percent * (Change) File formats: Round all setters floats to 2 decimals * (Change) Island Repair: "Remove Islands Below Equal Pixels" limit from 255 to 65535 (#124) * (Change) LightOffTime variables to LayerOffDelay * (Fix) Files with upper case extensions doesn't load in * **(Fix) SL1:** * Prevent error when bottle volume is 0 * bool values were incorrectly parsed * (Fix) **ZIP:** * Material volume was set to grams * Bed Y was not being set
-rw-r--r--CHANGELOG.md33
-rw-r--r--CREDITS.md3
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon Mono SE.ini5
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon Mono X.ini5
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon Mono.ini5
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon S.ini5
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon X.ini5
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon Zero.ini5
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon.ini5
-rw-r--r--PrusaSlicer/printer/Creality LD-002H.ini5
-rw-r--r--PrusaSlicer/printer/Creality LD-002R.ini5
-rw-r--r--PrusaSlicer/printer/Creality LD-006.ini5
-rw-r--r--PrusaSlicer/printer/EPAX E10 Mono.ini5
-rw-r--r--PrusaSlicer/printer/EPAX E6 Mono.ini5
-rw-r--r--PrusaSlicer/printer/EPAX X1.ini5
-rw-r--r--PrusaSlicer/printer/EPAX X10 4K Mono.ini5
-rw-r--r--PrusaSlicer/printer/EPAX X10.ini5
-rw-r--r--PrusaSlicer/printer/EPAX X133 4K Mono.ini5
-rw-r--r--PrusaSlicer/printer/EPAX X156 4K Color.ini5
-rw-r--r--PrusaSlicer/printer/EPAX X1K 2K Mono.ini5
-rw-r--r--PrusaSlicer/printer/Elegoo Mars 2 Pro.ini5
-rw-r--r--PrusaSlicer/printer/Elegoo Mars C.ini5
-rw-r--r--PrusaSlicer/printer/Elegoo Mars.ini5
-rw-r--r--PrusaSlicer/printer/Elegoo Saturn.ini5
-rw-r--r--PrusaSlicer/printer/Kelant S400.ini5
-rw-r--r--PrusaSlicer/printer/Longer Orange 10.ini5
-rw-r--r--PrusaSlicer/printer/Longer Orange 30.ini5
-rw-r--r--PrusaSlicer/printer/Longer Orange4K.ini5
-rw-r--r--PrusaSlicer/printer/Nova3D Bene4 Mono.ini5
-rw-r--r--PrusaSlicer/printer/Nova3D Elfin.ini5
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom L.ini5
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom Noir.ini5
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom XXL.ini5
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle 16.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle 4K.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle Lite.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle XL.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic 4K.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mini.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic.ini5
-rw-r--r--PrusaSlicer/printer/Phrozen Transform.ini5
-rw-r--r--PrusaSlicer/printer/QIDI I-Box Mono.ini5
-rw-r--r--PrusaSlicer/printer/QIDI S-Box.ini5
-rw-r--r--PrusaSlicer/printer/QIDI Shadow5.5.ini5
-rw-r--r--PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini5
-rw-r--r--PrusaSlicer/printer/Voxelab Ceres 8.9.ini5
-rw-r--r--PrusaSlicer/printer/Voxelab Polaris 5.5.ini5
-rw-r--r--PrusaSlicer/printer/Voxelab Proxima 6.ini5
-rw-r--r--PrusaSlicer/printer/Wanhao CGR Mini Mono.ini5
-rw-r--r--PrusaSlicer/printer/Wanhao CGR Mono.ini5
-rw-r--r--PrusaSlicer/printer/Wanhao D7.ini5
-rw-r--r--PrusaSlicer/printer/Wanhao D8.ini5
-rw-r--r--PrusaSlicer/printer/Zortrax Inkspire.ini5
-rw-r--r--PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.01 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.02 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.03 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.04 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.05 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.10 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.15 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.20 - Light Supports.ini3
-rw-r--r--PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini3
-rw-r--r--UVtools.Cmd/Program.cs2
-rw-r--r--UVtools.Core/Extensions/PathExtensions.cs23
-rw-r--r--UVtools.Core/FileFormats/CWSFile.cs134
-rw-r--r--UVtools.Core/FileFormats/ChituboxFile.cs563
-rw-r--r--UVtools.Core/FileFormats/ChituboxZipFile.cs468
-rw-r--r--UVtools.Core/FileFormats/FDGFile.cs494
-rw-r--r--UVtools.Core/FileFormats/FileExtension.cs4
-rw-r--r--UVtools.Core/FileFormats/FileFormat.cs223
-rw-r--r--UVtools.Core/FileFormats/IFileFormat.cs54
-rw-r--r--UVtools.Core/FileFormats/ImageFile.cs29
-rw-r--r--UVtools.Core/FileFormats/LGSFile.cs57
-rw-r--r--UVtools.Core/FileFormats/MakerbaseFile.cs389
-rw-r--r--UVtools.Core/FileFormats/PHZFile.cs494
-rw-r--r--UVtools.Core/FileFormats/PhotonSFile.cs74
-rw-r--r--UVtools.Core/FileFormats/PhotonWorkshopFile.cs336
-rw-r--r--UVtools.Core/FileFormats/SL1File.cs663
-rw-r--r--UVtools.Core/FileFormats/UVJFile.cs428
-rw-r--r--UVtools.Core/FileFormats/ZCodexFile.cs118
-rw-r--r--UVtools.Core/Helpers.cs2
-rw-r--r--UVtools.Core/Layer/Layer.cs18
-rw-r--r--UVtools.Core/Layer/LayerIssue.cs4
-rw-r--r--UVtools.Core/Layer/LayerManager.cs2
-rw-r--r--UVtools.Core/Operations/OperationCalculator.cs102
-rw-r--r--UVtools.Core/Operations/OperationRepairLayers.cs8
-rw-r--r--UVtools.Core/UVtools.Core.csproj2
-rw-r--r--UVtools.WPF/App.axaml.cs2
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon S.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon Zero.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Creality LD-002H.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Creality LD-002R.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Creality LD-006.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX E10 Mono.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX E6 Mono.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX X1.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX X10 4K Mono.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX X10.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX X133 4K Mono.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX X156 4K Color.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/EPAX X1K 2K Mono.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars 2 Pro.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars C.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Elegoo Saturn.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Kelant S400.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Longer Orange 10.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Longer Orange 30.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Longer Orange4K.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Nova3D Bene4 Mono.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Nova3D Elfin.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom L.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom Noir.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 16.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 4K.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle Lite.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL Lite.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic 4K.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mighty 4K.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini 4K.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Phrozen Transform.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/QIDI S-Box.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow5.5.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow6.0 Pro.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Heavy Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Medium Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Heavy Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Medium Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Heavy Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Medium Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Heavy Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Medium Supports.ini44
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Voxelab Polaris.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Voxelab Proxima.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Wanhao D7.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Wanhao D8.ini37
-rw-r--r--UVtools.WPF/Assets/PrusaSlicer/Zortrax Inkspire.ini37
-rw-r--r--UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml196
-rw-r--r--UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs7
-rw-r--r--UVtools.WPF/Controls/Tools/ToolLayerCloneControl.axaml.cs2
-rw-r--r--UVtools.WPF/Controls/Tools/ToolLayerRemoveControl.axaml.cs2
-rw-r--r--UVtools.WPF/Controls/Tools/ToolRepairLayersControl.axaml2
-rw-r--r--UVtools.WPF/MainWindow.Information.cs6
-rw-r--r--UVtools.WPF/MainWindow.LayerPreview.cs2
-rw-r--r--UVtools.WPF/MainWindow.axaml20
-rw-r--r--UVtools.WPF/MainWindow.axaml.cs95
-rw-r--r--UVtools.WPF/UVtools.WPF.csproj2
-rw-r--r--UVtools.WPF/UserSettings.cs52
-rw-r--r--UVtools.WPF/Windows/SettingsWindow.axaml95
-rw-r--r--UVtools.WPF/Windows/SettingsWindow.axaml.cs2
176 files changed, 1755 insertions, 5900 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e873e3..707bcb7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,38 @@
# Changelog
+## 13/01/2021 - v2.3.0
+
+* **PrusaSlicer:**
+ * **In this release is recommended to discard your printer and refresh it with uvtools updated printer or replace notes over**
+ * (Add) FILEFORMAT_XXX variable to auto-convert to that file format once open in UVtools
+ * (Update) Print profiles fields with new PrusaSlicer version
+ * (Remove) LayerOffDelay from printer notes and use only the LightOffDelay variable instead, both were being used, to avoid redundacy LayerOffDelay was dropped. Please update your printer accordingly!
+ * (Remove) FLIP_XY compability from printers
+ * (Remove) AntiAlias variable from printers
+* **(Add) Settings - Automations:**
+ * Auto save the file after apply any automation(s)
+ * Auto convert SL1 files to the target format when possible and load it back
+ * Auto set the extra 'light-off delay' based on lift height and speed.
+* (Add) Allow all and future formats to convert between them without knowing each other (Abstraction)
+* (Add) XYResolution and XYResolutionUm property to file formats
+* (Add) Calculator - Optimal model tilt: Calculates the optimal model tilt angle for printing and to minimize the visual layer effect
+* (Add) Bottom layer count to the status bar
+* **(Add) FileFormat propertiers:**
+ * MirrorDisplay: If images need to be mirrored on lcd to print on the correct orientation (If available)
+ * MaxPrintHeight: The maximum Z build volume of the printer (If available)
+* (Add) ZCodex: Print paramenter light-off delay"
+* (Add) SL1: Implement missing keys: host_type, physical_printer_settings_id and support_small_pillar_diameter_percent
+* (Change) File formats: Round all setters floats to 2 decimals
+* (Change) Island Repair: "Remove Islands Below Equal Pixels" limit from 255 to 65535 (#124)
+* (Change) LightOffTime variables to LayerOffDelay
+* (Fix) Files with upper case extensions doesn't load in
+* **(Fix) SL1:**
+ * Prevent error when bottle volume is 0
+ * bool values were incorrectly parsed
+* (Fix) **ZIP:**
+ * Material volume was set to grams
+ * Bed Y was not being set
+
## 10/01/2021 - v2.2.0
* (Add) FDG file format for Voxelab Printers (ezrec/uv3dp#129)
diff --git a/CREDITS.md b/CREDITS.md
index 13a83c2..2d9d6c9 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -41,4 +41,5 @@
* Jorge diego Robles Ayerbe
* Timothy Gray
* David Gordon
-* Claus Pfeilschifter \ No newline at end of file
+* Claus Pfeilschifter
+* Chris Taatgen \ No newline at end of file
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini b/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini
index 801bf75..5f7594b 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-15 at 17:22:57 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:41:49 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SE\nFILEFORMAT_PWMS\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X.ini
index 24333d0..0a9a498 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono X.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono X.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-15 at 17:27:21 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:41:30 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X\nFILEFORMAT_PWMX\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono.ini b/PrusaSlicer/printer/AnyCubic Photon Mono.ini
index 9d7c45d..a6a56b7 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-15 at 17:22:43 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:42:13 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO\nFILEFORMAT_PWMO\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon S.ini b/PrusaSlicer/printer/AnyCubic Photon S.ini
index a0e3071..c598345 100644
--- a/PrusaSlicer/printer/AnyCubic Photon S.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon S.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:30:11 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:41:23 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\nFILEFORMAT_PWS\n\nSTART_CUSTOM_VALUES\nLightOffDelay_1\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon X.ini b/PrusaSlicer/printer/AnyCubic Photon X.ini
index 6ac2568..e7954b6 100644
--- a/PrusaSlicer/printer/AnyCubic Photon X.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon X.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-15 at 17:25:52 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:41:05 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_X\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0.5\nBottomLightOffDelay_2\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_X\nFILEFORMAT_PWX\n\nSTART_CUSTOM_VALUES\nLightOffDelay_1\nBottomLightOffDelay_2\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon Zero.ini b/PrusaSlicer/printer/AnyCubic Photon Zero.ini
index 3f312b4..4a82e05 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Zero.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon Zero.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:11:02 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:39:53 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\nFILEFORMAT_PW0\n\nSTART_CUSTOM_VALUES\nLightOffDelay_1\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon.ini b/PrusaSlicer/printer/AnyCubic Photon.ini
index 28922c3..a6174ab 100644
--- a/PrusaSlicer/printer/AnyCubic Photon.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:09:41 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:42:24 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Creality LD-002H.ini b/PrusaSlicer/printer/Creality LD-002H.ini
index f64c265..28a5178 100644
--- a/PrusaSlicer/printer/Creality LD-002H.ini
+++ b/PrusaSlicer/printer/Creality LD-002H.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:00 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:39:43 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_002H\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_50\nLiftSpeed_50\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_002H\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_50\nLiftSpeed_50\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Creality LD-002R.ini b/PrusaSlicer/printer/Creality LD-002R.ini
index e4bdfbd..3605fff 100644
--- a/PrusaSlicer/printer/Creality LD-002R.ini
+++ b/PrusaSlicer/printer/Creality LD-002R.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:06 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:39:38 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_002R\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_002R\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Creality LD-006.ini b/PrusaSlicer/printer/Creality LD-006.ini
index 8a88238..0bfaa6f 100644
--- a/PrusaSlicer/printer/Creality LD-006.ini
+++ b/PrusaSlicer/printer/Creality LD-006.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:10 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:39:33 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_006\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_80\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_006\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_80\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX E10 Mono.ini b/PrusaSlicer/printer/EPAX E10 Mono.ini
index 3d8c0c7..c186b4e 100644
--- a/PrusaSlicer/printer/EPAX E10 Mono.ini
+++ b/PrusaSlicer/printer/EPAX E10 Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:14 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:54 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_E10_Mono\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_E10_Mono\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX E6 Mono.ini b/PrusaSlicer/printer/EPAX E6 Mono.ini
index aab4ae4..e8306d4 100644
--- a/PrusaSlicer/printer/EPAX E6 Mono.ini
+++ b/PrusaSlicer/printer/EPAX E6 Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:18 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:51 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_E6_Mono\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_E6_Mono\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X1.ini b/PrusaSlicer/printer/EPAX X1.ini
index 80d13c0..08aaa22 100644
--- a/PrusaSlicer/printer/EPAX X1.ini
+++ b/PrusaSlicer/printer/EPAX X1.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:43:50 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:47 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X10 4K Mono.ini b/PrusaSlicer/printer/EPAX X10 4K Mono.ini
index ca8583e..5934dd2 100644
--- a/PrusaSlicer/printer/EPAX X10 4K Mono.ini
+++ b/PrusaSlicer/printer/EPAX X10 4K Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:24 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:39 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10_4KMONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10_4KMONO\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X10.ini b/PrusaSlicer/printer/EPAX X10.ini
index dae3c2d..557eb46 100644
--- a/PrusaSlicer/printer/EPAX X10.ini
+++ b/PrusaSlicer/printer/EPAX X10.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:44:05 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:43 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X133 4K Mono.ini b/PrusaSlicer/printer/EPAX X133 4K Mono.ini
index 73ed4b5..1c9f25f 100644
--- a/PrusaSlicer/printer/EPAX X133 4K Mono.ini
+++ b/PrusaSlicer/printer/EPAX X133 4K Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:27 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:35 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X133_4KMONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X133_4KMONO\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X156 4K Color.ini b/PrusaSlicer/printer/EPAX X156 4K Color.ini
index 6f47841..9c0ffbc 100644
--- a/PrusaSlicer/printer/EPAX X156 4K Color.ini
+++ b/PrusaSlicer/printer/EPAX X156 4K Color.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:32 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:31 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X156_4KCOLOR\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X156_4KCOLOR\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X1K 2K Mono.ini b/PrusaSlicer/printer/EPAX X1K 2K Mono.ini
index 611935f..7db4ecb 100644
--- a/PrusaSlicer/printer/EPAX X1K 2K Mono.ini
+++ b/PrusaSlicer/printer/EPAX X1K 2K Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:38 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:25 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1K_2K_MONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1K_2K_MONO\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini b/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini
index c41ae9a..a544198 100644
--- a/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini
+++ b/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:49:49 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:08 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS2_PRO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_80\nRetractSpeed_210\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS2_PRO\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_80\nRetractSpeed_210\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Elegoo Mars C.ini b/PrusaSlicer/printer/Elegoo Mars C.ini
index b01c79a..1f3cb39 100644
--- a/PrusaSlicer/printer/Elegoo Mars C.ini
+++ b/PrusaSlicer/printer/Elegoo Mars C.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:46 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:03 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS_C\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS_C\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Elegoo Mars.ini b/PrusaSlicer/printer/Elegoo Mars.ini
index dc243d1..8e0d8ef 100644
--- a/PrusaSlicer/printer/Elegoo Mars.ini
+++ b/PrusaSlicer/printer/Elegoo Mars.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:08:57 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:38:21 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Elegoo Saturn.ini b/PrusaSlicer/printer/Elegoo Saturn.ini
index 33233c1..36a1217 100644
--- a/PrusaSlicer/printer/Elegoo Saturn.ini
+++ b/PrusaSlicer/printer/Elegoo Saturn.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:50:06 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:37:58 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_SATURN\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_210\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_SATURN\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_210\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Kelant S400.ini b/PrusaSlicer/printer/Kelant S400.ini
index 2e21c0c..18262dc 100644
--- a/PrusaSlicer/printer/Kelant S400.ini
+++ b/PrusaSlicer/printer/Kelant S400.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:20:36 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:37:24 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_KELANT\nPRINTER_MODEL_S400\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_15\nBottomLiftSpeed_30\nLiftSpeed_30\nRetractSpeed_300\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_KELANT\nPRINTER_MODEL_S400\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_15\nBottomLiftSpeed_30\nLiftSpeed_30\nRetractSpeed_300\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Longer Orange 10.ini b/PrusaSlicer/printer/Longer Orange 10.ini
index 4c923e0..cedf3f5 100644
--- a/PrusaSlicer/printer/Longer Orange 10.ini
+++ b/PrusaSlicer/printer/Longer Orange 10.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:21:14 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:36:09 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE10\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nBottomLightOffDelay_1\nBottomLiftHeight_4\nLiftHeight_2\nBottomLiftSpeed_90\nLiftSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE10\nFILEFORMAT_LGS\n\nSTART_CUSTOM_VALUES\nLightOffDelay_1\nBottomLightOffDelay_1\nBottomLiftHeight_4\nLiftHeight_2\nBottomLiftSpeed_90\nLiftSpeed_150\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Longer Orange 30.ini b/PrusaSlicer/printer/Longer Orange 30.ini
index 5e9bd7e..b5ee165 100644
--- a/PrusaSlicer/printer/Longer Orange 30.ini
+++ b/PrusaSlicer/printer/Longer Orange 30.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:51:24 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 03:51:46 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE30\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nBottomLightOffDelay_1\nBottomLiftHeight_2\nLiftHeight_2\nBottomLiftSpeed_48\nLiftSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE30\nFILEFORMAT_LGS30\n\nSTART_CUSTOM_VALUES\nLightOffDelay_1\nBottomLightOffDelay_1\nBottomLiftHeight_2\nLiftHeight_2\nBottomLiftSpeed_48\nLiftSpeed_150\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Longer Orange4K.ini b/PrusaSlicer/printer/Longer Orange4K.ini
index 7766383..440ae51 100644
--- a/PrusaSlicer/printer/Longer Orange4K.ini
+++ b/PrusaSlicer/printer/Longer Orange4K.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:52:58 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:35:56 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE30\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nBottomLightOffDelay_1\nBottomLiftHeight_2\nLiftHeight_2\nBottomLiftSpeed_90\nLiftSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE30\nFILEFORMAT_LGS\n\nSTART_CUSTOM_VALUES\nLightOffDelay_1\nBottomLightOffDelay_1\nBottomLiftHeight_2\nLiftHeight_2\nBottomLiftSpeed_90\nLiftSpeed_150\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Nova3D Bene4 Mono.ini b/PrusaSlicer/printer/Nova3D Bene4 Mono.ini
index 8e11a37..21b2736 100644
--- a/PrusaSlicer/printer/Nova3D Bene4 Mono.ini
+++ b/PrusaSlicer/printer/Nova3D Bene4 Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:22:18 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:35:43 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_NOVA3D\nPRINTER_MODEL_BENE4_MONO\n\nSTART_CUSTOM_VALUES\nXppm_19.608\nYppm_19.608\nWaitBeforeExpoMs_3000\nLiftHeight_4\nLiftSpeed_120\nRetractSpeed_120\nLiftWhenFinished_80\nBlankingLayerTime_0\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nNOVAMAKER_GRAY2RGB_ENCODE ; Required for Bene4 Mono as output images are in RGB\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_NOVA3D\nPRINTER_MODEL_BENE4_MONO\nFILEFORMAT_RGB.CWS\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Nova3D Elfin.ini b/PrusaSlicer/printer/Nova3D Elfin.ini
index 8786860..336c23b 100644
--- a/PrusaSlicer/printer/Nova3D Elfin.ini
+++ b/PrusaSlicer/printer/Nova3D Elfin.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:22:45 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:35:32 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_NOVA3D\nPRINTER_MODEL_ELFIN\n\nSTART_CUSTOM_VALUES\nXppm_19.324\nYppm_19.324\nWaitBeforeExpoMs_2000\nLiftHeight_4\nLiftSpeed_120\nRetractSpeed_120\nLiftWhenFinished_80\nBlankingLayerTime_0\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_NOVA3D\nPRINTER_MODEL_ELFIN\nFILEFORMAT_CWS\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Peopoly Phenom L.ini b/PrusaSlicer/printer/Peopoly Phenom L.ini
index 3a31a1d..5696a43 100644
--- a/PrusaSlicer/printer/Peopoly Phenom L.ini
+++ b/PrusaSlicer/printer/Peopoly Phenom L.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:26:28 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:35:04 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_L\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_12\nLiftHeight_9\nBottomLiftSpeed_32\nLiftSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_L\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_12\nLiftHeight_9\nBottomLiftSpeed_32\nLiftSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Peopoly Phenom Noir.ini b/PrusaSlicer/printer/Peopoly Phenom Noir.ini
index 11c53bf..98726f1 100644
--- a/PrusaSlicer/printer/Peopoly Phenom Noir.ini
+++ b/PrusaSlicer/printer/Peopoly Phenom Noir.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:23:00 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:34:50 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_NOIR\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_36\nLiftSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_NOIR\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_36\nLiftSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Peopoly Phenom XXL.ini b/PrusaSlicer/printer/Peopoly Phenom XXL.ini
index 2b25a87..50a551f 100644
--- a/PrusaSlicer/printer/Peopoly Phenom XXL.ini
+++ b/PrusaSlicer/printer/Peopoly Phenom XXL.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-05 at 20:51:10 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:34:39 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_XXL\n\nSTART_CUSTOM_VALUES\nLayerOffTime_2\nBottomLightOffDelay_8\nBottomLiftHeight_15\nLiftHeight_14\nBottomLiftSpeed_32\nLiftSpeed_35\nRetractSpeed_100\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_XXL\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_2\nBottomLightOffDelay_8\nBottomLiftHeight_15\nLiftHeight_14\nBottomLiftSpeed_32\nLiftSpeed_35\nRetractSpeed_100\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Peopoly Phenom.ini b/PrusaSlicer/printer/Peopoly Phenom.ini
index 0b6fbd2..c7b8a41 100644
--- a/PrusaSlicer/printer/Peopoly Phenom.ini
+++ b/PrusaSlicer/printer/Peopoly Phenom.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:22:52 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:35:17 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_36\nLiftSpeed_48\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_36\nLiftSpeed_48\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Shuffle 16.ini b/PrusaSlicer/printer/Phrozen Shuffle 16.ini
index 4fd48c3..cc546b5 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle 16.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle 16.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:11:50 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:33:45 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_16\n\nSTART_CUSTOM_VALUES\nLayerOffTime_15\nBottomLightOffDelay_15\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_16\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_15\nBottomLightOffDelay_15\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Shuffle 4K.ini b/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
index 1d78ca5..bef8e0d 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:57:14 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:33:30 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_4K\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_10\nBottomLightOffDelay_10\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Shuffle Lite.ini b/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
index ae1b713..8915387 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:04:46 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:33:14 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_LITE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_LITE\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini b/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini
index bcc8bac..c619657 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:06:06 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:32:55 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_XL_LITE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_XL_LITE\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Shuffle XL.ini b/PrusaSlicer/printer/Phrozen Shuffle XL.ini
index 3240641..8e3bf95 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle XL.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle XL.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:06:01 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:33:01 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_XL\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_8\nLiftHeight_6\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_XL\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_7\nBottomLightOffDelay_7\nBottomLiftHeight_8\nLiftHeight_6\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Shuffle.ini b/PrusaSlicer/printer/Phrozen Shuffle.ini
index 37ce48c..faa1ecb 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:56:59 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:34:03 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Sonic 4K.ini b/PrusaSlicer/printer/Phrozen Sonic 4K.ini
index f2255ce..b48fcd2 100644
--- a/PrusaSlicer/printer/Phrozen Sonic 4K.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic 4K.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:13:52 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:32:07 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_4K\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini b/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini
index c93d717..dd9fd15 100644
--- a/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:16:20 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:31:52 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MIGHTY_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_11\nBottomLightOffDelay_11\nBottomLiftHeight_8\nLiftHeight_6\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MIGHTY_4K\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_11\nBottomLightOffDelay_11\nBottomLiftHeight_8\nLiftHeight_6\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini b/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini
index 94a0c00..1260ca8 100644
--- a/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:09:38 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:31:27 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI_4K\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Sonic Mini.ini b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
index cdcda19..48baf59 100644
--- a/PrusaSlicer/printer/Phrozen Sonic Mini.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:26:16 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:31:37 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI\nFILEFORMAT_PHZ\n\nSTART_CUSTOM_VALUES\nLightOffDelay_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Sonic.ini b/PrusaSlicer/printer/Phrozen Sonic.ini
index f87a458..8fe4087 100644
--- a/PrusaSlicer/printer/Phrozen Sonic.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:08:50 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:32:22 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC\n\nSTART_CUSTOM_VALUES\nLayerOffTime_6\nBottomLightOffDelay_6\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_6\nBottomLightOffDelay_6\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Transform.ini b/PrusaSlicer/printer/Phrozen Transform.ini
index 1360d3f..0674451 100644
--- a/PrusaSlicer/printer/Phrozen Transform.ini
+++ b/PrusaSlicer/printer/Phrozen Transform.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:41:58 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:31:21 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_TRANSFORM\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_TRANSFORM\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_10\nBottomLightOffDelay_10\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/QIDI I-Box Mono.ini b/PrusaSlicer/printer/QIDI I-Box Mono.ini
index e870f9d..9075d01 100644
--- a/PrusaSlicer/printer/QIDI I-Box Mono.ini
+++ b/PrusaSlicer/printer/QIDI I-Box Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-05 at 20:54:54 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:30:16 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_I-BOX_MONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_100\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_I-BOX_MONO\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_100\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/QIDI S-Box.ini b/PrusaSlicer/printer/QIDI S-Box.ini
index 3014478..8e8d1eb 100644
--- a/PrusaSlicer/printer/QIDI S-Box.ini
+++ b/PrusaSlicer/printer/QIDI S-Box.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:21:39 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:30:13 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_S-BOX\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_10\nLiftHeight_7\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_S-BOX\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_10\nLiftHeight_7\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/QIDI Shadow5.5.ini b/PrusaSlicer/printer/QIDI Shadow5.5.ini
index abfdfb2..f45b416 100644
--- a/PrusaSlicer/printer/QIDI Shadow5.5.ini
+++ b/PrusaSlicer/printer/QIDI Shadow5.5.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:19:21 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:30:09 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW5.5\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW5.5\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini b/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
index 1cd2f97..4ebd8ca 100644
--- a/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
+++ b/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:20:10 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:30:04 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW6.0_PRO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW6.0_PRO\nFILEFORMAT_CTB\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Voxelab Ceres 8.9.ini b/PrusaSlicer/printer/Voxelab Ceres 8.9.ini
index 20e560d..fc63f38 100644
--- a/PrusaSlicer/printer/Voxelab Ceres 8.9.ini
+++ b/PrusaSlicer/printer/Voxelab Ceres 8.9.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-09 at 22:10:08 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:26:10 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_CERES_8.9\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nFORMAT_FDG\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_CERES_8.9\nFILEFORMAT_FDG\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Voxelab Polaris 5.5.ini b/PrusaSlicer/printer/Voxelab Polaris 5.5.ini
index 7015849..45990db 100644
--- a/PrusaSlicer/printer/Voxelab Polaris 5.5.ini
+++ b/PrusaSlicer/printer/Voxelab Polaris 5.5.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-09 at 22:08:12 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:26:19 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_POLARIS_5.5\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nFORMAT_FDG\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_POLARIS_5.5\nFILEFORMAT_FDG\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Voxelab Proxima 6.ini b/PrusaSlicer/printer/Voxelab Proxima 6.ini
index 1c6e5d9..400d244 100644
--- a/PrusaSlicer/printer/Voxelab Proxima 6.ini
+++ b/PrusaSlicer/printer/Voxelab Proxima 6.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-09 at 22:08:28 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:26:34 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_PROXIMA_6\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nFORMAT_FDG\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_PROXIMA_6\nFILEFORMAT_FDG\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Wanhao CGR Mini Mono.ini b/PrusaSlicer/printer/Wanhao CGR Mini Mono.ini
index 12a718a..ba70432 100644
--- a/PrusaSlicer/printer/Wanhao CGR Mini Mono.ini
+++ b/PrusaSlicer/printer/Wanhao CGR Mini Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-05 at 21:18:50 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:27:56 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_CGR_MINI_MONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_50\nRetractSpeed_100\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_CGR_MINI_MONO\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_50\nRetractSpeed_100\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Wanhao CGR Mono.ini b/PrusaSlicer/printer/Wanhao CGR Mono.ini
index 9770f50..45020b4 100644
--- a/PrusaSlicer/printer/Wanhao CGR Mono.ini
+++ b/PrusaSlicer/printer/Wanhao CGR Mono.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-05 at 21:23:35 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:27:51 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_CGR_MONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_60\nLiftSpeed_50\nRetractSpeed_60\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_CGR_MONO\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_60\nLiftSpeed_50\nRetractSpeed_60\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Wanhao D7.ini b/PrusaSlicer/printer/Wanhao D7.ini
index 9361237..1c1636b 100644
--- a/PrusaSlicer/printer/Wanhao D7.ini
+++ b/PrusaSlicer/printer/Wanhao D7.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:28:07 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:28:38 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_D7\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_D7\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Wanhao D8.ini b/PrusaSlicer/printer/Wanhao D8.ini
index 2ced018..9328103 100644
--- a/PrusaSlicer/printer/Wanhao D8.ini
+++ b/PrusaSlicer/printer/Wanhao D8.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:28:11 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:28:34 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_D8\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_D8\nFILEFORMAT_ZIP\n\nSTART_CUSTOM_VALUES\nLightOffDelay_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Zortrax Inkspire.ini b/PrusaSlicer/printer/Zortrax Inkspire.ini
index 879b5b9..4b574ec 100644
--- a/PrusaSlicer/printer/Zortrax Inkspire.ini
+++ b/PrusaSlicer/printer/Zortrax Inkspire.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:06:43 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 02:27:12 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -17,6 +17,7 @@ elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
gamma_correction = 1
+host_type = octoprint
inherits = Original Prusa SL1
max_exposure_time = 120
max_initial_exposure_time = 300
@@ -25,7 +26,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ZORTRAX\nPRINTER_MODEL_INKSPIRE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_5\nLiftHeight_5\nLiftSpeed_100\nRetractSpeed_100\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ZORTRAX\nPRINTER_MODEL_INKSPIRE\nFILEFORMAT_ZCODEX\n\nSTART_CUSTOM_VALUES\nLightOffDelay_5\nLiftHeight_5\nLiftSpeed_100\nRetractSpeed_100\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini
index f488711..54a964b 100644
--- a/PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:44 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:05:42 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.01 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.01 - Light Supports.ini
index 3d03b66..60e45f2 100644
--- a/PrusaSlicer/sla_print/Universal 0.01 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.01 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:08:08 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:05:47 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini
index 9601136..031f5e2 100644
--- a/PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:52 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:05:57 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.2
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini
index 4ea1a87..a05af1b 100644
--- a/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:51:04 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:01 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.02 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.02 - Light Supports.ini
index 96da187..4b31a2f 100644
--- a/PrusaSlicer/sla_print/Universal 0.02 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.02 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:09:11 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:05 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini
index 687dcce..4abdf3e 100644
--- a/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:50:13 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:11 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.2
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini
index 328c178..a742d6e 100644
--- a/PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:05 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:16 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.03 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.03 - Light Supports.ini
index 02c00f7..d4ecc3c 100644
--- a/PrusaSlicer/sla_print/Universal 0.03 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.03 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:09:40 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:20 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini
index 0d6956f..f76de22 100644
--- a/PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:15 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:32 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.2
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini
index 083e3d8..0b95e6a 100644
--- a/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:53:43 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:36 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.04 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.04 - Light Supports.ini
index fdb07f3..8cb802c 100644
--- a/PrusaSlicer/sla_print/Universal 0.04 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.04 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:10:03 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:38 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini
index ffcc1ff..f85f2bb 100644
--- a/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:53:55 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:41 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.2
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini
index 8acc0c9..51f9874 100644
--- a/PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:54:04 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:44 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.05 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.05 - Light Supports.ini
index 698b7a2..42c4012 100644
--- a/PrusaSlicer/sla_print/Universal 0.05 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.05 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:10:30 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:47 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini
index 8db1a15..e73f429 100644
--- a/PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:54:10 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:51 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.2
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini
index 99826a8..ce007b3 100644
--- a/PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:55:43 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:55 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.10 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.10 - Light Supports.ini
index b3fab88..3d85901 100644
--- a/PrusaSlicer/sla_print/Universal 0.10 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.10 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:11:26 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:06:58 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.3
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini
index 675a61b..86cc2f4 100644
--- a/PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:55:50 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:01 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.3
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini
index acdf018..87c1089 100644
--- a/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:57:42 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:03 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.15 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.15 - Light Supports.ini
index e1dbed6..befb278 100644
--- a/PrusaSlicer/sla_print/Universal 0.15 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.15 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:12:14 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:06 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.3
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini
index 5a6b036..40e5b19 100644
--- a/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:57:49 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:09 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.3
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini
index bd5f3b4..f0600c1 100644
--- a/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:58:16 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:12 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.5
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.20 - Light Supports.ini b/PrusaSlicer/sla_print/Universal 0.20 - Light Supports.ini
index cab31df..f9d51d3 100644
--- a/PrusaSlicer/sla_print/Universal 0.20 - Light Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.20 - Light Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2021-01-07 at 02:12:28 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:15 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.3
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini
index 4996e9f..92593d0 100644
--- a/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini
+++ b/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:58:26 UTC
+# generated by PrusaSlicer 2.3.0+win64 on 2021-01-13 at 23:07:18 UTC
compatible_printers =
compatible_printers_condition =
default_sla_print_profile =
@@ -41,4 +41,5 @@ support_pillar_diameter = 1.3
support_pillar_widening_factor = 0
support_points_density_relative = 100
support_points_minimal_distance = 1
+support_small_pillar_diameter_percent = 60%
supports_enable = 1
diff --git a/UVtools.Cmd/Program.cs b/UVtools.Cmd/Program.cs
index e19e5ef..8f1a004 100644
--- a/UVtools.Cmd/Program.cs
+++ b/UVtools.Cmd/Program.cs
@@ -119,7 +119,7 @@ namespace UVtools.Cmd
sw.Stop();
Console.WriteLine($", in {sw.ElapsedMilliseconds}ms");
Console.WriteLine("----------------------");
- Console.WriteLine($"Layers: {fileFormat.LayerCount} x {fileFormat.LayerHeight}mm = {fileFormat.TotalHeight}mm");
+ Console.WriteLine($"Layers: {fileFormat.LayerCount} x {fileFormat.LayerHeight}mm = {fileFormat.PrintHeight}mm");
Console.WriteLine($"Resolution: {new Size((int) fileFormat.ResolutionX, (int) fileFormat.ResolutionY)}");
Console.WriteLine($"AntiAlias: {fileFormat.ValidateAntiAliasingLevel()}");
diff --git a/UVtools.Core/Extensions/PathExtensions.cs b/UVtools.Core/Extensions/PathExtensions.cs
new file mode 100644
index 0000000..846c4e1
--- /dev/null
+++ b/UVtools.Core/Extensions/PathExtensions.cs
@@ -0,0 +1,23 @@
+/*
+ * GNU AFFERO GENERAL PUBLIC LICENSE
+ * Version 3, 19 November 2007
+ * Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ * Everyone is permitted to copy and distribute verbatim copies
+ * of this license document, but changing it is not allowed.
+ */
+using System;
+using System.IO;
+
+namespace UVtools.Core.Extensions
+{
+ public static class PathExtensions
+ {
+ public static string GetFileNameStripAllExtensions(string path)
+ {
+ path = Path.GetFileName(path);
+ if(string.IsNullOrEmpty(path)) return string.Empty;
+ var splitPath = path.Split('.', 2, StringSplitOptions.TrimEntries);
+ return splitPath.Length == 0 ? string.Empty : splitPath[0];
+ }
+ }
+}
diff --git a/UVtools.Core/FileFormats/CWSFile.cs b/UVtools.Core/FileFormats/CWSFile.cs
index 6ac5a7c..0578202 100644
--- a/UVtools.Core/FileFormats/CWSFile.cs
+++ b/UVtools.Core/FileFormats/CWSFile.cs
@@ -304,14 +304,9 @@ namespace UVtools.Core.FileFormats
public PrinterType Printer { get; set; } = PrinterType.Unknown;
public override FileExtension[] FileExtensions { get; } = {
- new FileExtension("cws", "NovaMaker CWS"),
- new FileExtension("rgb.cws", "NovaMaker Bene4 Mono / Elfin2 Mono SE (CWS)"),
- new FileExtension("xml.cws", "Creation Workshop X (CWS)"),
- };
-
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(UVJFile)
+ new ("cws", "NovaMaker CWS"),
+ new ("rgb.cws", "NovaMaker Bene4 Mono / Elfin2 Mono SE (CWS)"),
+ new ("xml.cws", "Creation Workshop X (CWS)"),
};
public override PrintParameterModifier[] PrintParameterModifiers { get; } = {
@@ -331,7 +326,6 @@ namespace UVtools.Core.FileFormats
public override PrintParameterModifier[] PrintParameterPerLayerModifiers { get; } = {
PrintParameterModifier.ExposureSeconds,
- //PrintParameterModifier.LayerOffTime,
PrintParameterModifier.LiftHeight,
PrintParameterModifier.LiftSpeed,
PrintParameterModifier.RetractSpeed,
@@ -371,7 +365,7 @@ namespace UVtools.Core.FileFormats
get => OutputSettings.PlatformXSize;
set
{
- OutputSettings.PlatformXSize = value;
+ OutputSettings.PlatformXSize = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -381,19 +375,49 @@ namespace UVtools.Core.FileFormats
get => OutputSettings.PlatformYSize;
set
{
- OutputSettings.PlatformYSize = value;
+ OutputSettings.PlatformYSize = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float MaxPrintHeight
+ {
+ get => OutputSettings.PlatformZSize;
+ set
+ {
+ OutputSettings.PlatformZSize = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => (byte) OutputSettings.AntiAliasingValue;
+ public override bool MirrorDisplay
+ {
+ get => OutputSettings.FlipX;
+ set
+ {
+ OutputSettings.FlipX = value;
+ OutputSettings.FlipY = false;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => (byte) OutputSettings.AntiAliasingValue;
+ set
+ {
+ OutputSettings.AntiAliasingValue = value.Clamp(1, 16);
+ OutputSettings.AntiAliasing = OutputSettings.AntiAliasingValue > 1;
+ RaisePropertyChanged();
+ }
+ }
public override float LayerHeight
{
get => SliceSettings.Thickness > 0 ? SliceSettings.Thickness : OutputSettings.LayerThickness;
set
{
- OutputSettings.LayerThickness = SliceSettings.Thickness = value;
+ OutputSettings.LayerThickness = SliceSettings.Thickness = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -446,7 +470,7 @@ namespace UVtools.Core.FileFormats
get => OutputSettings.ZBottomLiftFeedRate;
set
{
- OutputSettings.ZBottomLiftFeedRate = value;
+ OutputSettings.ZBottomLiftFeedRate = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -457,7 +481,7 @@ namespace UVtools.Core.FileFormats
set
{
OutputSettings.LiftDistance =
- SliceSettings.LiftDistance = value;
+ SliceSettings.LiftDistance = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -469,7 +493,7 @@ namespace UVtools.Core.FileFormats
{
OutputSettings.ZLiftFeedRate =
SliceSettings.LiftUpSpeed =
- SliceSettings.LiftDownSpeed = value;
+ SliceSettings.LiftDownSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -479,7 +503,7 @@ namespace UVtools.Core.FileFormats
get => OutputSettings.ZLiftRetractRate;
set
{
- OutputSettings.ZLiftRetractRate = value;
+ OutputSettings.ZLiftRetractRate = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -505,16 +529,6 @@ namespace UVtools.Core.FileFormats
}
- /*public override float PrintTime => 0;
-
- public override float UsedMaterial => 0;
-
- public override float MaterialCost => 0;
-
- public override string MaterialName => string.Empty;
-
- public override string MachineName => "Unknown";*/
-
public override object[] Configs => Printer == PrinterType.Wanhao ? new object[] { SliceBuildConfig, OutputSettings } : new object[] { SliceSettings, OutputSettings};
#endregion
@@ -528,6 +542,8 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
//var filename = fileFullPath.EndsWith(TemporaryFileAppend) ? Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(fileFullPath)) : Path.GetFileNameWithoutExtension(fileFullPath);
@@ -822,7 +838,7 @@ namespace UVtools.Core.FileFormats
float liftHeight = 0;
float liftSpeed = GetInitialLayerValueOrNormal(layerIndex, BottomLiftSpeed, LiftSpeed);
float retractSpeed = RetractSpeed;
- float lightOffDelay = GetInitialLayerValueOrNormal(layerIndex, BottomLayerOffTime, LayerOffTime);
+ float lightOffDelay = GetInitialLayerValueOrNormal(layerIndex, BottomLightOffDelay, LightOffDelay);
byte pwm = GetInitialLayerValueOrNormal(layerIndex, BottomLightPWM, LightPWM); ;
float exposureTime = GetInitialLayerValueOrNormal(layerIndex, BottomExposureTime, ExposureTime);
@@ -926,7 +942,7 @@ namespace UVtools.Core.FileFormats
LiftHeight = liftHeight,
LiftSpeed = liftSpeed,
RetractSpeed = retractSpeed,
- LayerOffTime = lightOffDelay,
+ LightOffDelay = lightOffDelay,
LightPWM = pwm,
};
}
@@ -941,7 +957,7 @@ namespace UVtools.Core.FileFormats
LiftHeight = liftHeight,
LiftSpeed = liftSpeed,
RetractSpeed = retractSpeed,
- LayerOffTime = lightOffDelay,
+ LightOffDelay = lightOffDelay,
LightPWM = pwm,
};
}
@@ -1118,64 +1134,6 @@ namespace UVtools.Core.FileFormats
//Decode(FileFullPath, progress);
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(UVJFile))
- {
- UVJFile defaultFormat = (UVJFile)FindByType(typeof(UVJFile));
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = OutputSettings.PlatformXSize,
- Y = OutputSettings.PlatformYSize,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = SliceSettings.LiftDistance,
- LiftSpeed = SliceSettings.LiftUpSpeed,
- LightOnTime = BottomExposureTime,
- //LightOffTime = SliceSettings.BottomLightOffDelay,
- LightPWM = OutputSettings.BottomLightPWM,
- RetractSpeed = OutputSettings.ZBottomLiftFeedRate,
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = SliceSettings.LiftDistance,
- LiftSpeed = SliceSettings.LiftUpSpeed,
- LightOnTime = BottomExposureTime,
- //LightOffTime = SliceSettings.BottomLightOffDelay,
- LightPWM = OutputSettings.BottomLightPWM,
- RetractSpeed = SliceSettings.LiftDownSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
-
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/ChituboxFile.cs b/UVtools.Core/FileFormats/ChituboxFile.cs
index 276b59b..a9f6faa 100644
--- a/UVtools.Core/FileFormats/ChituboxFile.cs
+++ b/UVtools.Core/FileFormats/ChituboxFile.cs
@@ -73,7 +73,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets the height of the model described by this file, in millimeters.
/// </summary>
- [FieldOrder(7)] public float OverallHeightMilimeter { get; set; }
+ [FieldOrder(7)] public float TotalHeightMilimeter { get; set; }
/// <summary>
/// Gets the layer height setting used at slicing, in millimeters. Actual height used by the machine is in the layer table.
@@ -93,7 +93,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets the light off time setting used at slicing, for normal layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig.
/// </summary>
- [FieldOrder(11)] public float LayerOffTime { get; set; } = 1;
+ [FieldOrder(11)] public float LightOffDelay { get; set; } = 1;
/// <summary>
/// Gets number of layers configured as "bottom." Note that this field appears in both the file header and ExtConfig..
@@ -187,7 +187,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(Magic)}: {Magic}, {nameof(Version)}: {Version}, {nameof(BedSizeX)}: {BedSizeX}, {nameof(BedSizeY)}: {BedSizeY}, {nameof(BedSizeZ)}: {BedSizeZ}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(OverallHeightMilimeter)}: {OverallHeightMilimeter}, {nameof(LayerHeightMilimeter)}: {LayerHeightMilimeter}, {nameof(LayerExposureSeconds)}: {LayerExposureSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(LayerOffTime)}: {LayerOffTime}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(PreviewLargeOffsetAddress)}: {PreviewLargeOffsetAddress}, {nameof(LayersDefinitionOffsetAddress)}: {LayersDefinitionOffsetAddress}, {nameof(LayerCount)}: {LayerCount}, {nameof(PreviewSmallOffsetAddress)}: {PreviewSmallOffsetAddress}, {nameof(PrintTime)}: {PrintTime}, {nameof(ProjectorType)}: {ProjectorType}, {nameof(PrintParametersOffsetAddress)}: {PrintParametersOffsetAddress}, {nameof(PrintParametersSize)}: {PrintParametersSize}, {nameof(AntiAliasLevel)}: {AntiAliasLevel}, {nameof(LightPWM)}: {LightPWM}, {nameof(BottomLightPWM)}: {BottomLightPWM}, {nameof(EncryptionKey)}: {EncryptionKey}, {nameof(SlicerOffset)}: {SlicerOffset}, {nameof(SlicerSize)}: {SlicerSize}";
+ return $"{nameof(Magic)}: {Magic}, {nameof(Version)}: {Version}, {nameof(BedSizeX)}: {BedSizeX}, {nameof(BedSizeY)}: {BedSizeY}, {nameof(BedSizeZ)}: {BedSizeZ}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(TotalHeightMilimeter)}: {TotalHeightMilimeter}, {nameof(LayerHeightMilimeter)}: {LayerHeightMilimeter}, {nameof(LayerExposureSeconds)}: {LayerExposureSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(PreviewLargeOffsetAddress)}: {PreviewLargeOffsetAddress}, {nameof(LayersDefinitionOffsetAddress)}: {LayersDefinitionOffsetAddress}, {nameof(LayerCount)}: {LayerCount}, {nameof(PreviewSmallOffsetAddress)}: {PreviewSmallOffsetAddress}, {nameof(PrintTime)}: {PrintTime}, {nameof(ProjectorType)}: {ProjectorType}, {nameof(PrintParametersOffsetAddress)}: {PrintParametersOffsetAddress}, {nameof(PrintParametersSize)}: {PrintParametersSize}, {nameof(AntiAliasLevel)}: {AntiAliasLevel}, {nameof(LightPWM)}: {LightPWM}, {nameof(BottomLightPWM)}: {BottomLightPWM}, {nameof(EncryptionKey)}: {EncryptionKey}, {nameof(SlicerOffset)}: {SlicerOffset}, {nameof(SlicerSize)}: {SlicerSize}";
}
}
#endregion
@@ -265,6 +265,7 @@ namespace UVtools.Core.FileFormats
public class SlicerInfo
{
+ private string _machineName;
[FieldOrder(0)] public uint Padding1 { get; set; }
[FieldOrder(1)] public uint Padding2 { get; set; }
[FieldOrder(2)] public uint Padding3 { get; set; }
@@ -317,8 +318,18 @@ namespace UVtools.Core.FileFormats
/// The character encoding is currently unknown — all observed files in the wild use 7-bit ASCII characters only.
/// Note that the machine type here is set in the software profile, and is not the name the user assigned to the machine.
/// </summary>
- [FieldOrder(19)] [FieldLength(nameof(MachineNameSize))]
- public string MachineName { get; set; }
+ [FieldOrder(19)]
+ [FieldLength(nameof(MachineNameSize))]
+ public string MachineName
+ {
+ get => _machineName;
+ set
+ {
+ _machineName = value;
+ MachineNameSize = string.IsNullOrEmpty(_machineName) ? 0 : (uint)_machineName.Length;
+ }
+
+ }
public override string ToString()
{
@@ -482,7 +493,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets how long to keep the light off after exposing this layer, in seconds.
/// </summary>
- [FieldOrder(2)] public float LayerOffSeconds { get; set; }
+ [FieldOrder(2)] public float LightOffSeconds { get; set; }
/// <summary>
/// Gets the layer image offset to encoded layer data, and its length in bytes.
@@ -523,7 +534,7 @@ namespace UVtools.Core.FileFormats
{
LayerPositionZ = parent[layerIndex].PositionZ;
LayerExposure = parent[layerIndex].ExposureTime;
- LayerOffSeconds = parent[layerIndex].LayerOffTime;
+ LightOffSeconds = parent[layerIndex].LightOffDelay;
}
@@ -831,7 +842,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(LayerPositionZ)}: {LayerPositionZ}, {nameof(LayerExposure)}: {LayerExposure}, {nameof(LayerOffSeconds)}: {LayerOffSeconds}, {nameof(DataAddress)}: {DataAddress}, {nameof(DataSize)}: {DataSize}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(Unknown3)}: {Unknown3}, {nameof(Unknown4)}: {Unknown4}";
+ return $"{nameof(LayerPositionZ)}: {LayerPositionZ}, {nameof(LayerExposure)}: {LayerExposure}, {nameof(LightOffSeconds)}: {LightOffSeconds}, {nameof(DataAddress)}: {DataAddress}, {nameof(DataSize)}: {DataSize}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(Unknown3)}: {Unknown3}, {nameof(Unknown4)}: {Unknown4}";
}
@@ -962,26 +973,14 @@ namespace UVtools.Core.FileFormats
new("photon", "Chitubox Photon"),
};
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(ChituboxFile),
- typeof(ChituboxZipFile),
- typeof(PHZFile),
- typeof(FDGFile),
- typeof(PhotonWorkshopFile),
- typeof(ZCodexFile),
- typeof(CWSFile),
- typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
{
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -1003,7 +1002,7 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.LiftHeight,
PrintParameterModifier.LiftSpeed,
PrintParameterModifier.RetractSpeed,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.LightPWM,
};
}
@@ -1013,7 +1012,7 @@ namespace UVtools.Core.FileFormats
return new[]
{
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.LightOffDelay,
};
}
@@ -1052,7 +1051,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BedSizeX;
set
{
- HeaderSettings.BedSizeX = value;
+ HeaderSettings.BedSizeX = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1062,19 +1061,65 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BedSizeY;
set
{
- HeaderSettings.BedSizeY = value;
+ HeaderSettings.BedSizeY = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => (byte) (IsCbtFile ? SlicerInfoSettings.AntiAliasLevel : HeaderSettings.AntiAliasLevel);
+ public override float MaxPrintHeight
+ {
+ get => HeaderSettings.BedSizeZ > 0 ? HeaderSettings.BedSizeZ : base.MaxPrintHeight;
+ set
+ {
+ HeaderSettings.BedSizeZ = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override bool MirrorDisplay
+ {
+ get => HeaderSettings.ProjectorType > 0;
+ set
+ {
+ HeaderSettings.ProjectorType = value ? 1 : 0;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => (byte) (IsCbtFile ? SlicerInfoSettings.AntiAliasLevel : HeaderSettings.AntiAliasLevel);
+ set
+ {
+ if (IsCbtFile)
+ {
+ SlicerInfoSettings.AntiAliasLevel = value;
+ }
+ else
+ {
+ HeaderSettings.AntiAliasLevel = value.Clamp(1, 16);
+ ValidateAntiAliasingLevel();
+ }
+ RaisePropertyChanged();
+ }
+ }
public override float LayerHeight
{
get => HeaderSettings.LayerHeightMilimeter;
set
{
- HeaderSettings.LayerHeightMilimeter = value;
+ HeaderSettings.LayerHeightMilimeter = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float PrintHeight
+ {
+ get => base.PrintHeight;
+ set
+ {
+ HeaderSettings.TotalHeightMilimeter = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1086,7 +1131,6 @@ namespace UVtools.Core.FileFormats
HeaderSettings.LayerCount = LayerCount;
RaisePropertyChanged();
RaisePropertyChanged(nameof(NormalLayerCount));
- HeaderSettings.OverallHeightMilimeter = TotalHeight;
}
}
@@ -1105,7 +1149,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomExposureSeconds;
set
{
- HeaderSettings.BottomExposureSeconds = value;
+ HeaderSettings.BottomExposureSeconds = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1115,27 +1159,27 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LayerExposureSeconds;
set
{
- HeaderSettings.LayerExposureSeconds = value;
+ HeaderSettings.LayerExposureSeconds = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
get => PrintParametersSettings.BottomLightOffDelay;
set
{
- PrintParametersSettings.BottomLightOffDelay = value;
+ PrintParametersSettings.BottomLightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
get => PrintParametersSettings.LightOffDelay;
set
{
- HeaderSettings.LayerOffTime = PrintParametersSettings.LightOffDelay = value;
+ HeaderSettings.LightOffDelay = PrintParametersSettings.LightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1145,7 +1189,7 @@ namespace UVtools.Core.FileFormats
get => PrintParametersSettings.BottomLiftHeight;
set
{
- PrintParametersSettings.BottomLiftHeight = value;
+ PrintParametersSettings.BottomLiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1155,7 +1199,7 @@ namespace UVtools.Core.FileFormats
get => PrintParametersSettings.LiftHeight;
set
{
- PrintParametersSettings.LiftHeight = value;
+ PrintParametersSettings.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1165,7 +1209,7 @@ namespace UVtools.Core.FileFormats
get => PrintParametersSettings.BottomLiftSpeed;
set
{
- PrintParametersSettings.BottomLiftSpeed = value;
+ PrintParametersSettings.BottomLiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1175,7 +1219,7 @@ namespace UVtools.Core.FileFormats
get => PrintParametersSettings.LiftSpeed;
set
{
- PrintParametersSettings.LiftSpeed = value;
+ PrintParametersSettings.LiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1185,7 +1229,7 @@ namespace UVtools.Core.FileFormats
get => PrintParametersSettings.RetractSpeed;
set
{
- PrintParametersSettings.RetractSpeed = value;
+ PrintParametersSettings.RetractSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -1220,7 +1264,7 @@ namespace UVtools.Core.FileFormats
}
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => (float) Math.Round(PrintParametersSettings.VolumeMl, 2);
set
@@ -1230,6 +1274,16 @@ namespace UVtools.Core.FileFormats
}
}
+ public override float MaterialGrams
+ {
+ get => PrintParametersSettings.WeightG;
+ set
+ {
+ PrintParametersSettings.WeightG = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
public override float MaterialCost
{
get => (float) Math.Round(PrintParametersSettings.CostDollars, 2);
@@ -1280,6 +1334,8 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
LayersHash.Clear();
@@ -1598,7 +1654,7 @@ namespace UVtools.Core.FileFormats
{
PositionZ = LayerDefinitions[0, layerIndex].LayerPositionZ,
ExposureTime = LayerDefinitions[0, layerIndex].LayerExposure,
- LayerOffTime = LayerDefinitions[0, layerIndex].LayerOffSeconds,
+ LightOffDelay = LayerDefinitions[0, layerIndex].LightOffSeconds,
};
if (LayerDefinitionsEx is not null)
@@ -1682,429 +1738,6 @@ namespace UVtools.Core.FileFormats
}
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(ChituboxFile))
- {
- if (Path.GetExtension(FileFullPath).Equals(Path.GetExtension(fileFullPath)))
- {
- return false;
- }
- ChituboxFile file = new ChituboxFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- ProjectorType = HeaderSettings.ProjectorType,
- LayerCount = LayerCount,
- AntiAliasLevel = ValidateAntiAliasingLevel(),
- BottomLightPWM = (byte) HeaderSettings.BottomLightPWM,
- LightPWM = (byte) HeaderSettings.LightPWM,
- LayerOffTime = HeaderSettings.LayerOffTime,
- PrintTime = HeaderSettings.PrintTime,
- BottomExposureSeconds = HeaderSettings.BottomExposureSeconds,
- BottomLayersCount = HeaderSettings.BottomLayersCount,
- //EncryptionKey = HeaderSettings.EncryptionKey,
- LayerExposureSeconds = HeaderSettings.LayerExposureSeconds,
- LayerHeightMilimeter = HeaderSettings.LayerHeightMilimeter,
- OverallHeightMilimeter = HeaderSettings.OverallHeightMilimeter,
- },
- PrintParametersSettings =
- {
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- LiftHeight = PrintParametersSettings.LiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- BottomLightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- LightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- BottomLayerCount = PrintParametersSettings.BottomLayerCount,
- VolumeMl = PrintParametersSettings.VolumeMl,
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- CostDollars = PrintParametersSettings.CostDollars,
- WeightG = PrintParametersSettings.WeightG
- },
- SlicerInfoSettings =
- {
- AntiAliasLevel = SlicerInfoSettings.AntiAliasLevel,
- MachineName = SlicerInfoSettings.MachineName,
- //EncryptionMode = SlicerInfoSettings.EncryptionMode,
- MachineNameSize = SlicerInfoSettings.MachineNameSize,
- },
- Thumbnails = Thumbnails,
- };
-
- //file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ChituboxZipFile))
- {
- ChituboxZipFile file = new ChituboxZipFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Filename = Path.GetFileName(FileFullPath),
-
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- MachineX = HeaderSettings.BedSizeX,
- MachineY = HeaderSettings.BedSizeY,
- MachineZ = HeaderSettings.BedSizeZ,
- MachineType = MachineName,
- ProjectType = HeaderSettings.ProjectorType == 0 ? "Normal" : "LCD_mirror",
-
- Resin = MaterialName,
- Price = MaterialCost,
- Weight = PrintParametersSettings.WeightG,
- Volume = UsedMaterial,
- Mirror = (byte) (HeaderSettings.ProjectorType == 0 ? 0 : 1),
-
-
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- LiftHeight = PrintParametersSettings.LiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- BottomLayCount = BottomLayerCount,
- BottomLayerCount = BottomLayerCount,
- BottomLightOffTime = PrintParametersSettings.BottomLightOffDelay,
- LightOffTime = PrintParametersSettings.LightOffDelay,
- BottomLayExposureTime = BottomExposureTime,
- BottomLayerExposureTime = BottomExposureTime,
- LayerExposureTime = ExposureTime,
- LayerHeight = LayerHeight,
- LayerCount = LayerCount,
- AntiAliasing = ValidateAntiAliasingLevel(),
- BottomLightPWM = (byte) HeaderSettings.BottomLightPWM,
- LightPWM = (byte) HeaderSettings.LightPWM,
-
- EstimatedPrintTime = PrintTime
- },
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonWorkshopFile))
- {
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed / 60,
- RetractSpeed = RetractSpeed / 60,
- LayerOffTime = HeaderSettings.LayerOffTime,
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = PrintParametersSettings.WeightG,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PHZFile))
- {
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- BottomLightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = PrintParametersSettings.LiftHeight,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = PrintParametersSettings.WeightG,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(FDGFile))
- {
- FDGFile file = new FDGFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- BottomLightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = PrintParametersSettings.LiftHeight,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = PrintParametersSettings.WeightG,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = BottomLayerCount,
- BottomLayersTime = (uint)(BottomExposureTime * 1000),
- LayerTime = (uint)(ExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = BottomLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(ExposureTime * 1000),
- BottomLayerExposureTime = (uint)(BottomExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte)(ValidateAntiAliasingLevel() > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint) HeaderSettings.LayerOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = PrintParametersSettings.LiftHeight,
- ZLiftFeedRate = PrintParametersSettings.LiftSpeed,
- ZLiftRetractRate = PrintParametersSettings.RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float)Math.Round(ResolutionX / HeaderSettings.BedSizeX, 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / HeaderSettings.BedSizeY, 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(PrintParametersSettings.LightOffDelay * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint) (PrintParametersSettings.LightOffDelay * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = HeaderSettings.ProjectorType != 0;
- file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- /*file.Printer = MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Unknown;*/
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(UVJFile))
- {
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = HeaderSettings.BedSizeX,
- Y = HeaderSettings.BedSizeY,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = PrintParametersSettings.BottomLiftHeight,
- LiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- LightOnTime = BottomExposureTime,
- LightOffTime = PrintParametersSettings.BottomLightOffDelay,
- LightPWM = (byte) HeaderSettings.BottomLightPWM,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = PrintParametersSettings.LiftHeight,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- LightOnTime = ExposureTime,
- LightOffTime = PrintParametersSettings.LightOffDelay,
- LightPWM = (byte) HeaderSettings.LightPWM,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
-
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/ChituboxZipFile.cs b/UVtools.Core/FileFormats/ChituboxZipFile.cs
index ba0527c..d9cf337 100644
--- a/UVtools.Core/FileFormats/ChituboxZipFile.cs
+++ b/UVtools.Core/FileFormats/ChituboxZipFile.cs
@@ -7,7 +7,6 @@
*/
using System;
-using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
@@ -56,7 +55,7 @@ namespace UVtools.Core.FileFormats
[DisplayName("estimatedPrintTime")] public float EstimatedPrintTime { get; set; }
[DisplayName("volume")] public float Volume { get; set; }
[DisplayName("resin")] public string Resin { get; set; } = "Normal";
- [DisplayName("weight")] public float Weight { get; set; }
+ [DisplayName("weight")] public float WeightG { get; set; }
[DisplayName("price")] public float Price { get; set; }
[DisplayName("layerHeight")] public float LayerHeight { get; set; }
[DisplayName("resolutionX")] public uint ResolutionX { get; set; }
@@ -93,17 +92,7 @@ namespace UVtools.Core.FileFormats
public override FileFormatType FileType => FileFormatType.Archive;
public override FileExtension[] FileExtensions { get; } = {
- new FileExtension("zip", "Chitubox Zip")
- };
-
- public override Type[] ConvertToFormats { get; } = {
- typeof(ChituboxFile),
- typeof(PHZFile),
- typeof(FDGFile),
- typeof(PhotonWorkshopFile),
- typeof(CWSFile),
- typeof(ZCodexFile),
- typeof(UVJFile)
+ new("zip", "Chitubox Zip")
};
public override PrintParameterModifier[] PrintParameterModifiers { get; } = {
@@ -111,8 +100,8 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -125,7 +114,7 @@ namespace UVtools.Core.FileFormats
public override PrintParameterModifier[] PrintParameterPerLayerModifiers { get; } = {
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.LiftHeight,
PrintParameterModifier.LiftSpeed,
PrintParameterModifier.RetractSpeed,
@@ -171,19 +160,48 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.MachineY;
set
{
- HeaderSettings.MachineX = value;
+ HeaderSettings.MachineY = value;
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => HeaderSettings.AntiAliasing;
+ public override float MaxPrintHeight
+ {
+ get => HeaderSettings.MachineZ > 0 ? HeaderSettings.MachineZ : base.MaxPrintHeight;
+ set
+ {
+ HeaderSettings.MachineZ = value;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override bool MirrorDisplay
+ {
+ get => HeaderSettings.Mirror > 0;
+ set
+ {
+ HeaderSettings.ProjectType = value ? "LCD_mirror" : "Normal";
+ HeaderSettings.Mirror = value ? 1 : 0;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => HeaderSettings.AntiAliasing;
+ set
+ {
+ HeaderSettings.AntiAliasing = value.Clamp(1, 16);
+ RaisePropertyChanged();
+ }
+ }
public override float LayerHeight
{
get => HeaderSettings.LayerHeight;
set
{
- HeaderSettings.LayerHeight = value;
+ HeaderSettings.LayerHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -213,7 +231,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLayerExposureTime;
set
{
- HeaderSettings.BottomLayerExposureTime = HeaderSettings.BottomLayExposureTime = value;
+ HeaderSettings.BottomLayerExposureTime = HeaderSettings.BottomLayExposureTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -223,27 +241,27 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LayerExposureTime;
set
{
- HeaderSettings.LayerExposureTime = value;
+ HeaderSettings.LayerExposureTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
get => HeaderSettings.BottomLightOffTime;
set
{
- HeaderSettings.BottomLightOffTime = value;
+ HeaderSettings.BottomLightOffTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
get => HeaderSettings.LightOffTime;
set
{
- HeaderSettings.LightOffTime = value;
+ HeaderSettings.LightOffTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -253,7 +271,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLiftHeight;
set
{
- HeaderSettings.BottomLiftHeight = value;
+ HeaderSettings.BottomLiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -263,7 +281,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftHeight;
set
{
- HeaderSettings.LiftHeight = value;
+ HeaderSettings.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -273,7 +291,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLiftSpeed;
set
{
- HeaderSettings.BottomLiftSpeed = value;
+ HeaderSettings.BottomLiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -283,7 +301,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftSpeed;
set
{
- HeaderSettings.LiftSpeed = value;
+ HeaderSettings.LiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -293,7 +311,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.RetractSpeed;
set
{
- HeaderSettings.RetractSpeed = value;
+ HeaderSettings.RetractSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -321,15 +339,25 @@ namespace UVtools.Core.FileFormats
public override float PrintTime
{
get => HeaderSettings.EstimatedPrintTime;
- set => base.PrintTime = HeaderSettings.EstimatedPrintTime = value;
+ set => base.PrintTime = HeaderSettings.EstimatedPrintTime = (float)Math.Round(value, 2);
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
- get => HeaderSettings.Weight;
+ get => HeaderSettings.Volume;
set
{
- HeaderSettings.Weight = value;
+ HeaderSettings.Volume = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float MaterialGrams
+ {
+ get => HeaderSettings.WeightG;
+ set
+ {
+ HeaderSettings.WeightG = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -339,7 +367,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.Price;
set
{
- HeaderSettings.Price = value;
+ HeaderSettings.Price = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -367,13 +395,15 @@ namespace UVtools.Core.FileFormats
public override object[] Configs => new object[] { HeaderSettings };
- public bool IsPHZZip = false;
+ public bool IsPHZZip;
#endregion
#region Methods
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
using (ZipArchive outputFile = ZipFile.Open(fileFullPath, ZipArchiveMode.Create))
{
@@ -577,7 +607,7 @@ namespace UVtools.Core.FileFormats
}
else // Only one match, meaning light off delay is not present
{
- lightOffDelay = GetInitialLayerValueOrNormal(layerIndex, BottomLayerOffTime, LayerOffTime);
+ lightOffDelay = GetInitialLayerValueOrNormal(layerIndex, BottomLightOffDelay, LightOffDelay);
}
}
@@ -588,7 +618,7 @@ namespace UVtools.Core.FileFormats
LiftHeight = liftHeight,
LiftSpeed = liftSpeed,
RetractSpeed = retractSpeed,
- LayerOffTime = lightOffDelay,
+ LightOffDelay = lightOffDelay,
LightPWM = pwm,
};
progress++;
@@ -654,7 +684,7 @@ namespace UVtools.Core.FileFormats
var liftZHeight = Math.Round(liftHeight + layer.PositionZ, 2);
var liftSpeed = layer.LiftSpeed;
var retractSpeed = layer.RetractSpeed;
- var lightOffDelay = layer.LayerOffTime * 1000;
+ var lightOffDelay = layer.LightOffDelay * 1000;
var pwmValue = layer.LightPWM;
GCode.AppendLine($";LAYER_START:{layerIndex}");
@@ -728,366 +758,6 @@ namespace UVtools.Core.FileFormats
//Decode(FileFullPath, progress);
}
-
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(ChituboxFile))
- {
- ChituboxFile file = new ChituboxFile
- {
-
- LayerManager = LayerManager,
- HeaderSettings
- =
- {
- BedSizeX = HeaderSettings.MachineX,
- BedSizeY = HeaderSettings.MachineY,
- BedSizeZ = HeaderSettings.MachineZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LightOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = (uint) HeaderSettings.EstimatedPrintTime,
- ProjectorType = HeaderSettings.Mirror,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- AntiAliasLevel = ValidateAntiAliasingLevel()
- },
- PrintParametersSettings =
- {
- BottomLayerCount = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffTime,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOffDelay = HeaderSettings.LightOffTime,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- WeightG = HeaderSettings.Weight
- },
- SlicerInfoSettings = { MachineName = MachineName, MachineNameSize = (uint)MachineName.Length }
- };
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PHZFile))
- {
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = HeaderSettings.MachineX,
- BedSizeY = HeaderSettings.MachineY,
- BedSizeZ = HeaderSettings.MachineZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LightOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = (uint) HeaderSettings.EstimatedPrintTime,
- ProjectorType = HeaderSettings.Mirror,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffTime,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = HeaderSettings.Weight,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(FDGFile))
- {
- FDGFile file = new FDGFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- BedSizeX = HeaderSettings.MachineX,
- BedSizeY = HeaderSettings.MachineY,
- BedSizeZ = HeaderSettings.MachineZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LightOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = (uint) HeaderSettings.EstimatedPrintTime,
- ProjectorType = HeaderSettings.Mirror,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffTime,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = HeaderSettings.Weight,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonWorkshopFile))
- {
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed / 60,
- RetractSpeed = RetractSpeed / 60,
- LayerOffTime = HeaderSettings.LightOffTime,
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = HeaderSettings.Weight,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = BottomLayerCount,
- BottomLayersTime = (uint)(BottomExposureTime * 1000),
- LayerTime = (uint)(ExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = BottomLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(ExposureTime * 1000),
- BottomLayerExposureTime = (uint)(BottomExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte)(AntiAliasing > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint)HeaderSettings.LightOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = HeaderSettings.LiftHeight,
- ZLiftFeedRate = HeaderSettings.LiftSpeed,
- ZLiftRetractRate = HeaderSettings.RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float)Math.Round(ResolutionX / HeaderSettings.MachineX, 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / HeaderSettings.MachineY, 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(HeaderSettings.LightOffTime * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint)(HeaderSettings.LightOffTime * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = HeaderSettings.Mirror != 0;
- file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- /*file.Printer = MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;*/
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(UVJFile))
- {
- UVJFile defaultFormat = (UVJFile)FindByType(typeof(UVJFile));
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = HeaderSettings.MachineX,
- Y = HeaderSettings.MachineY,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = HeaderSettings.BottomLiftHeight,
- LiftSpeed = HeaderSettings.BottomLiftSpeed,
- LightOnTime = BottomExposureTime,
- LightOffTime = HeaderSettings.BottomLightOffTime,
- LightPWM = HeaderSettings.BottomLightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOnTime = ExposureTime,
- LightOffTime = HeaderSettings.LightOffTime,
- LightPWM = HeaderSettings.LightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
-
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/FDGFile.cs b/UVtools.Core/FileFormats/FDGFile.cs
index 40ad1cd..d2ed39d 100644
--- a/UVtools.Core/FileFormats/FDGFile.cs
+++ b/UVtools.Core/FileFormats/FDGFile.cs
@@ -37,6 +37,7 @@ namespace UVtools.Core.FileFormats
#region Header
public class Header
{
+ private string _machineName;
/// <summary>
/// Gets a magic number identifying the file type.
@@ -189,7 +190,16 @@ namespace UVtools.Core.FileFormats
/// The character encoding is currently unknown — all observed files in the wild use 7-bit ASCII characters only.
/// Note that the machine type here is set in the software profile, and is not the name the user assigned to the machine.
/// </summary>
- [Ignore] public string MachineName { get; set; }
+ [Ignore]
+ public string MachineName
+ {
+ get => _machineName;
+ set
+ {
+ _machineName = value;
+ MachineNameSize = string.IsNullOrEmpty(_machineName) ? 0 : (uint)_machineName.Length;
+ }
+ }
/// <summary>
/// Gets the light off time setting used at slicing, for bottom layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig.
@@ -199,7 +209,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets the light off time setting used at slicing, for normal layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig.
/// </summary>
- [FieldOrder(33)] public float LayerOffTime { get; set; } = 1;
+ [FieldOrder(33)] public float LightOffDelay { get; set; } = 1;
[FieldOrder(34)] public uint Padding4 { get; set; }
@@ -252,7 +262,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(Magic)}: {Magic}, {nameof(Version)}: {Version}, {nameof(LayerCount)}: {LayerCount}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(ProjectorType)}: {ProjectorType}, {nameof(BottomLayersCount2)}: {BottomLayersCount2}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(LayerHeightMilimeter)}: {LayerHeightMilimeter}, {nameof(LayerExposureSeconds)}: {LayerExposureSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(PreviewLargeOffsetAddress)}: {PreviewLargeOffsetAddress}, {nameof(PreviewSmallOffsetAddress)}: {PreviewSmallOffsetAddress}, {nameof(LayersDefinitionOffsetAddress)}: {LayersDefinitionOffsetAddress}, {nameof(PrintTime)}: {PrintTime}, {nameof(AntiAliasLevel)}: {AntiAliasLevel}, {nameof(LightPWM)}: {LightPWM}, {nameof(BottomLightPWM)}: {BottomLightPWM}, {nameof(Padding1)}: {Padding1}, {nameof(Padding2)}: {Padding2}, {nameof(OverallHeightMilimeter)}: {OverallHeightMilimeter}, {nameof(BedSizeX)}: {BedSizeX}, {nameof(BedSizeY)}: {BedSizeY}, {nameof(BedSizeZ)}: {BedSizeZ}, {nameof(EncryptionKey)}: {EncryptionKey}, {nameof(AntiAliasLevelInfo)}: {AntiAliasLevelInfo}, {nameof(EncryptionMode)}: {EncryptionMode}, {nameof(VolumeMl)}: {VolumeMl}, {nameof(WeightG)}: {WeightG}, {nameof(CostDollars)}: {CostDollars}, {nameof(MachineNameAddress)}: {MachineNameAddress}, {nameof(MachineNameSize)}: {MachineNameSize}, {nameof(MachineName)}: {MachineName}, {nameof(BottomLightOffDelay)}: {BottomLightOffDelay}, {nameof(LayerOffTime)}: {LayerOffTime}, {nameof(Padding4)}: {Padding4}, {nameof(BottomLiftHeight)}: {BottomLiftHeight}, {nameof(BottomLiftSpeed)}: {BottomLiftSpeed}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(Padding5)}: {Padding5}, {nameof(Padding6)}: {Padding6}, {nameof(Padding7)}: {Padding7}, {nameof(Padding8)}: {Padding8}, {nameof(Padding9)}: {Padding9}, {nameof(Padding10)}: {Padding10}, {nameof(Padding11)}: {Padding11}, {nameof(Timestamp)}: {Timestamp}, {nameof(SoftwareVersion)}: {SoftwareVersion}, {nameof(Padding12)}: {Padding12}, {nameof(Padding13)}: {Padding13}, {nameof(Padding14)}: {Padding14}, {nameof(Padding15)}: {Padding15}, {nameof(Padding16)}: {Padding16}, {nameof(Padding17)}: {Padding17}";
+ return $"{nameof(Magic)}: {Magic}, {nameof(Version)}: {Version}, {nameof(LayerCount)}: {LayerCount}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(ProjectorType)}: {ProjectorType}, {nameof(BottomLayersCount2)}: {BottomLayersCount2}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(LayerHeightMilimeter)}: {LayerHeightMilimeter}, {nameof(LayerExposureSeconds)}: {LayerExposureSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(PreviewLargeOffsetAddress)}: {PreviewLargeOffsetAddress}, {nameof(PreviewSmallOffsetAddress)}: {PreviewSmallOffsetAddress}, {nameof(LayersDefinitionOffsetAddress)}: {LayersDefinitionOffsetAddress}, {nameof(PrintTime)}: {PrintTime}, {nameof(AntiAliasLevel)}: {AntiAliasLevel}, {nameof(LightPWM)}: {LightPWM}, {nameof(BottomLightPWM)}: {BottomLightPWM}, {nameof(Padding1)}: {Padding1}, {nameof(Padding2)}: {Padding2}, {nameof(OverallHeightMilimeter)}: {OverallHeightMilimeter}, {nameof(BedSizeX)}: {BedSizeX}, {nameof(BedSizeY)}: {BedSizeY}, {nameof(BedSizeZ)}: {BedSizeZ}, {nameof(EncryptionKey)}: {EncryptionKey}, {nameof(AntiAliasLevelInfo)}: {AntiAliasLevelInfo}, {nameof(EncryptionMode)}: {EncryptionMode}, {nameof(VolumeMl)}: {VolumeMl}, {nameof(WeightG)}: {WeightG}, {nameof(CostDollars)}: {CostDollars}, {nameof(MachineNameAddress)}: {MachineNameAddress}, {nameof(MachineNameSize)}: {MachineNameSize}, {nameof(MachineName)}: {MachineName}, {nameof(BottomLightOffDelay)}: {BottomLightOffDelay}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(Padding4)}: {Padding4}, {nameof(BottomLiftHeight)}: {BottomLiftHeight}, {nameof(BottomLiftSpeed)}: {BottomLiftSpeed}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(Padding5)}: {Padding5}, {nameof(Padding6)}: {Padding6}, {nameof(Padding7)}: {Padding7}, {nameof(Padding8)}: {Padding8}, {nameof(Padding9)}: {Padding9}, {nameof(Padding10)}: {Padding10}, {nameof(Padding11)}: {Padding11}, {nameof(Timestamp)}: {Timestamp}, {nameof(SoftwareVersion)}: {SoftwareVersion}, {nameof(Padding12)}: {Padding12}, {nameof(Padding13)}: {Padding13}, {nameof(Padding14)}: {Padding14}, {nameof(Padding15)}: {Padding15}, {nameof(Padding16)}: {Padding16}, {nameof(Padding17)}: {Padding17}";
}
}
#endregion
@@ -410,7 +420,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets how long to keep the light off after exposing this layer, in seconds.
/// </summary>
- [FieldOrder(2)] public float LayerOffTimeSeconds { get; set; }
+ [FieldOrder(2)] public float LightOffDelay { get; set; }
/// <summary>
/// Gets the layer image offset to encoded layer data, and its length in bytes.
@@ -444,7 +454,7 @@ namespace UVtools.Core.FileFormats
{
LayerPositionZ = Parent[layerIndex].PositionZ;
LayerExposure = Parent[layerIndex].ExposureTime;
- LayerOffTimeSeconds = Parent[layerIndex].LayerOffTime;
+ LightOffDelay = Parent[layerIndex].LightOffDelay;
}
public unsafe Mat Decode(uint layerIndex, bool consumeData = true)
@@ -592,7 +602,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(LayerPositionZ)}: {LayerPositionZ}, {nameof(LayerExposure)}: {LayerExposure}, {nameof(LayerOffTimeSeconds)}: {LayerOffTimeSeconds}, {nameof(DataAddress)}: {DataAddress}, {nameof(DataSize)}: {DataSize}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(Unknown3)}: {Unknown3}, {nameof(Unknown4)}: {Unknown4}";
+ return $"{nameof(LayerPositionZ)}: {LayerPositionZ}, {nameof(LayerExposure)}: {LayerExposure}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(DataAddress)}: {DataAddress}, {nameof(DataSize)}: {DataSize}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(Unknown3)}: {Unknown3}, {nameof(Unknown4)}: {Unknown4}";
}
}
#endregion
@@ -664,25 +674,14 @@ namespace UVtools.Core.FileFormats
new("fdg", "Voxelab FDG"),
};
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(ChituboxFile),
- typeof(ChituboxZipFile),
- typeof(PHZFile),
- typeof(PhotonWorkshopFile),
- typeof(ZCodexFile),
- typeof(CWSFile),
- typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
{
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -695,7 +694,7 @@ namespace UVtools.Core.FileFormats
public override PrintParameterModifier[] PrintParameterPerLayerModifiers { get; } = {
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.LightOffDelay,
};
public override byte ThumbnailsCount { get; } = 2;
@@ -727,7 +726,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BedSizeX;
set
{
- HeaderSettings.BedSizeX = value;
+ HeaderSettings.BedSizeX = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -738,19 +737,57 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BedSizeY;
set
{
- HeaderSettings.BedSizeY = value;
+ HeaderSettings.BedSizeY = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float MaxPrintHeight
+ {
+ get => HeaderSettings.BedSizeZ;
+ set
+ {
+ HeaderSettings.BedSizeZ = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => (byte) HeaderSettings.AntiAliasLevelInfo;
+ public override bool MirrorDisplay
+ {
+ get => HeaderSettings.ProjectorType > 0;
+ set
+ {
+ HeaderSettings.ProjectorType = value ? 1 : 0;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => (byte) HeaderSettings.AntiAliasLevelInfo;
+ set
+ {
+ HeaderSettings.AntiAliasLevelInfo = value.Clamp(1, 16);
+ RaisePropertyChanged();
+ }
+ }
public override float LayerHeight
{
get => HeaderSettings.LayerHeightMilimeter;
set
{
- HeaderSettings.LayerHeightMilimeter = value;
+ HeaderSettings.LayerHeightMilimeter = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float PrintHeight
+ {
+ get => base.PrintHeight;
+ set
+ {
+ HeaderSettings.OverallHeightMilimeter = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -762,7 +799,7 @@ namespace UVtools.Core.FileFormats
HeaderSettings.LayerCount = LayerCount;
RaisePropertyChanged();
RaisePropertyChanged(nameof(NormalLayerCount));
- HeaderSettings.OverallHeightMilimeter = TotalHeight;
+ HeaderSettings.OverallHeightMilimeter = PrintHeight;
}
}
@@ -791,27 +828,27 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LayerExposureSeconds;
set
{
- HeaderSettings.LayerExposureSeconds = value;
+ HeaderSettings.LayerExposureSeconds = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
get => HeaderSettings.BottomLightOffDelay;
set
{
- HeaderSettings.BottomLightOffDelay = value;
+ HeaderSettings.BottomLightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
- get => HeaderSettings.LayerOffTime;
+ get => HeaderSettings.LightOffDelay;
set
{
- HeaderSettings.LayerOffTime = value;
+ HeaderSettings.LightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -821,7 +858,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLiftHeight;
set
{
- HeaderSettings.BottomLiftHeight = value;
+ HeaderSettings.BottomLiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -831,7 +868,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftHeight;
set
{
- HeaderSettings.LiftHeight = value;
+ HeaderSettings.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -841,7 +878,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLiftSpeed;
set
{
- HeaderSettings.BottomLiftSpeed = value;
+ HeaderSettings.BottomLiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -851,7 +888,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftSpeed;
set
{
- HeaderSettings.LiftSpeed = value;
+ HeaderSettings.LiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -861,7 +898,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.RetractSpeed;
set
{
- HeaderSettings.RetractSpeed = value;
+ HeaderSettings.RetractSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -896,7 +933,7 @@ namespace UVtools.Core.FileFormats
}
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => (float) Math.Round(HeaderSettings.VolumeMl, 2);
set
@@ -906,6 +943,16 @@ namespace UVtools.Core.FileFormats
}
}
+ public override float MaterialGrams
+ {
+ get => HeaderSettings.WeightG;
+ set
+ {
+ HeaderSettings.WeightG = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
public override float MaterialCost
{
get => (float) Math.Round(HeaderSettings.CostDollars, 2);
@@ -954,6 +1001,8 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
LayersHash.Clear();
@@ -1176,7 +1225,7 @@ namespace UVtools.Core.FileFormats
{
PositionZ = LayersDefinitions[layerIndex].LayerPositionZ,
ExposureTime = LayersDefinitions[layerIndex].LayerExposure,
- LayerOffTime = LayersDefinitions[layerIndex].LayerOffTimeSeconds,
+ LightOffDelay = LayersDefinitions[layerIndex].LightOffDelay,
};
}
@@ -1231,373 +1280,6 @@ namespace UVtools.Core.FileFormats
}
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(ChituboxFile))
- {
- ChituboxFile file = new ChituboxFile
- {
- LayerManager = LayerManager,
- HeaderSettings
- =
- {
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- AntiAliasLevel = ValidateAntiAliasingLevel()
- },
- PrintParametersSettings =
- {
- BottomLayerCount = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOffDelay = HeaderSettings.LayerOffTime,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- WeightG = HeaderSettings.WeightG
- },
- SlicerInfoSettings = {MachineName = MachineName, MachineNameSize = (uint) MachineName.Length}
- };
-
-
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ChituboxZipFile))
- {
- ChituboxZipFile file = new ChituboxZipFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Filename = Path.GetFileName(FileFullPath),
-
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- MachineX = HeaderSettings.BedSizeX,
- MachineY = HeaderSettings.BedSizeY,
- MachineZ = HeaderSettings.BedSizeZ,
- MachineType = MachineName,
- ProjectType = HeaderSettings.ProjectorType == 0 ? "Normal" : "LCD_mirror",
-
- Resin = MaterialName,
- Price = MaterialCost,
- Weight = HeaderSettings.WeightG,
- Volume = UsedMaterial,
- Mirror = (byte) (HeaderSettings.ProjectorType == 0 ? 0 : 1),
-
-
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- LiftHeight = HeaderSettings.LiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- LiftSpeed = HeaderSettings.LiftSpeed,
- RetractSpeed = HeaderSettings.RetractSpeed,
- BottomLayCount = BottomLayerCount,
- BottomLayerCount = BottomLayerCount,
- BottomLightOffTime = HeaderSettings.BottomLightOffDelay,
- LightOffTime = HeaderSettings.LayerOffTime,
- BottomLayExposureTime = BottomExposureTime,
- BottomLayerExposureTime = BottomExposureTime,
- LayerExposureTime = ExposureTime,
- LayerHeight = LayerHeight,
- LayerCount = LayerCount,
- AntiAliasing = ValidateAntiAliasingLevel(),
- BottomLightPWM = (byte) HeaderSettings.BottomLightPWM,
- LightPWM = (byte) HeaderSettings.LightPWM,
-
- EstimatedPrintTime = PrintTime
- },
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PHZFile))
- {
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = HeaderSettings.WeightG,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonWorkshopFile))
- {
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed / 60,
- RetractSpeed = RetractSpeed / 60,
- LayerOffTime = HeaderSettings.LayerOffTime,
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = HeaderSettings.WeightG,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = BottomLayerCount,
- BottomLayersTime = (uint)(BottomExposureTime * 1000),
- LayerTime = (uint)(ExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = BottomLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(ExposureTime * 1000),
- BottomLayerExposureTime = (uint)(BottomExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte) (AntiAliasing > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint)HeaderSettings.LayerOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = HeaderSettings.LiftHeight,
- ZLiftFeedRate = HeaderSettings.LiftSpeed,
- ZLiftRetractRate = HeaderSettings.RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float)Math.Round(ResolutionX / HeaderSettings.BedSizeX, 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / HeaderSettings.BedSizeY, 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(HeaderSettings.LayerOffTime * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint)(HeaderSettings.LayerOffTime * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = HeaderSettings.ProjectorType != 0;
- file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- /*file.Printer = MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;*/
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(UVJFile))
- {
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = HeaderSettings.BedSizeX,
- Y = HeaderSettings.BedSizeY,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = HeaderSettings.BottomLiftHeight,
- LiftSpeed = HeaderSettings.BottomLiftSpeed,
- LightOnTime = BottomExposureTime,
- LightOffTime = HeaderSettings.BottomLightOffDelay,
- LightPWM = (byte)HeaderSettings.BottomLightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOnTime = ExposureTime,
- LightOffTime = HeaderSettings.LayerOffTime,
- LightPWM = (byte)HeaderSettings.LightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
- #endregion
+ #endregion
}
}
diff --git a/UVtools.Core/FileFormats/FileExtension.cs b/UVtools.Core/FileFormats/FileExtension.cs
index cc605f1..39d4ff5 100644
--- a/UVtools.Core/FileFormats/FileExtension.cs
+++ b/UVtools.Core/FileFormats/FileExtension.cs
@@ -63,12 +63,12 @@ namespace UVtools.Core.FileFormats
public bool Equals(FileExtension other)
{
- return Extension == other.Extension;
+ return Extension.Equals(other.Extension, StringComparison.InvariantCultureIgnoreCase);
}
public bool Equals(string other)
{
- return Extension == other;
+ return Extension.Equals(other, StringComparison.InvariantCultureIgnoreCase);
}
public override bool Equals(object obj)
diff --git a/UVtools.Core/FileFormats/FileFormat.cs b/UVtools.Core/FileFormats/FileFormat.cs
index f0951ef..7fd6cff 100644
--- a/UVtools.Core/FileFormats/FileFormat.cs
+++ b/UVtools.Core/FileFormats/FileFormat.cs
@@ -10,7 +10,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
-using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
@@ -29,8 +28,24 @@ namespace UVtools.Core.FileFormats
/// </summary>
public abstract class FileFormat : BindableBase, IFileFormat, IDisposable, IEquatable<FileFormat>, IEnumerable<Layer>
{
+ #region Constants
public const string TemporaryFileAppend = ".tmp";
public const ushort ExtraPrintTime = 300;
+
+ private const string ExtractConfigFileName = "Configuration";
+ private const string ExtractConfigFileExtension = "ini";
+
+ public const float DefaultBottomLiftHeight = 5;
+ public const float DefaultLiftHeight = 5;
+ public const float DefaultBottomLiftSpeed = 100;
+ public const float DefaultLiftSpeed = 100;
+ public const float DefaultRetractSpeed = 100;
+ public const float DefaultBottomLightOffDelay = 0;
+ public const float DefaultLightOffDelay = 0;
+ public const byte DefaultBottomLightPWM = 255;
+ public const byte DefaultLightPWM = 255;
+ #endregion
+
#region Enums
/// <summary>
@@ -64,8 +79,8 @@ namespace UVtools.Core.FileFormats
public static PrintParameterModifier BottomExposureSeconds { get; } = new PrintParameterModifier("Bottom exposure time", null, "s", 0.1M, 1000, 2);
public static PrintParameterModifier ExposureSeconds { get; } = new PrintParameterModifier("Exposure time", null, "s", 0.1M, 1000, 2);
- public static PrintParameterModifier BottomLayerOffTime { get; } = new PrintParameterModifier("Bottom layer off seconds", null, "s");
- public static PrintParameterModifier LayerOffTime { get; } = new PrintParameterModifier("Layer off seconds", null, "s");
+ public static PrintParameterModifier BottomLightOffDelay { get; } = new PrintParameterModifier("Bottom light-off seconds", null, "s");
+ public static PrintParameterModifier LightOffDelay { get; } = new PrintParameterModifier("Light-off seconds", null, "s");
public static PrintParameterModifier BottomLiftHeight { get; } = new PrintParameterModifier("Bottom lift height", @"Modify 'Bottom lift height' millimeters between bottom layers", "mm", 1);
public static PrintParameterModifier LiftHeight { get; } = new PrintParameterModifier("Lift height", @"Modify 'Lift height' millimeters between layers", "mm", 1);
public static PrintParameterModifier BottomLiftSpeed { get; } = new PrintParameterModifier("Bottom lift Speed", @"Modify 'Bottom lift Speed' mm/min between bottom layers", "mm/min", 10);
@@ -80,8 +95,8 @@ namespace UVtools.Core.FileFormats
BottomExposureSeconds,
ExposureSeconds,
- BottomLayerOffTime,
- LayerOffTime,
+ BottomLightOffDelay,
+ LightOffDelay,
BottomLiftHeight,
BottomLiftSpeed,
LiftHeight,
@@ -168,26 +183,11 @@ namespace UVtools.Core.FileFormats
}
#endregion
- #region Constants
- private const string ExtractConfigFileName = "Configuration";
- private const string ExtractConfigFileExtension = "ini";
-
- public const float DefaultBottomLiftHeight = 5;
- public const float DefaultLiftHeight = 5;
- public const float DefaultBottomLiftSpeed = 100;
- public const float DefaultLiftSpeed = 100;
- public const float DefaultRetractSpeed = 100;
- public const float DefaultBottomLightOffDelay = 0;
- public const float DefaultLightOffDelay = 0;
- public const byte DefaultBottomLightPWM = 255;
- public const byte DefaultLightPWM = 255;
- #endregion
-
#region Static Methods
/// <summary>
/// Gets the available formats to process
/// </summary>
- public static FileFormat[] AvaliableFormats { get; } =
+ public static FileFormat[] AvailableFormats { get; } =
{
new SL1File(), // Prusa SL1
new ChituboxZipFile(), // Zip
@@ -204,7 +204,7 @@ namespace UVtools.Core.FileFormats
new ImageFile(), // images
};
- public static string AllSlicerFiles => AvaliableFormats.Aggregate("All slicer files|",
+ public static string AllSlicerFiles => AvailableFormats.Aggregate("All slicer files|",
(current, fileFormat) => current.EndsWith("|")
? $"{current}{fileFormat.FileFilterExtensionsOnly}"
: $"{current}; {fileFormat.FileFilterExtensionsOnly}");
@@ -215,7 +215,7 @@ namespace UVtools.Core.FileFormats
public static string AllFileFilters =>
AllSlicerFiles
+
- AvaliableFormats.Aggregate(string.Empty,
+ AvailableFormats.Aggregate(string.Empty,
(current, fileFormat) => $"{current}|" + fileFormat.FileFilter);
public static List<KeyValuePair<string, List<string>>> AllFileFiltersAvalonia
@@ -227,9 +227,9 @@ namespace UVtools.Core.FileFormats
new KeyValuePair<string, List<string>>("All slicer files", new List<string>())
};
- for (int i = 0; i < AvaliableFormats.Length; i++)
+ for (int i = 0; i < AvailableFormats.Length; i++)
{
- foreach (var fileExtension in AvaliableFormats[i].FileExtensions)
+ foreach (var fileExtension in AvailableFormats[i].FileExtensions)
{
result[0].Value.Add(fileExtension.Extension);
result.Add(new KeyValuePair<string, List<string>>(fileExtension.Description, new List<string>
@@ -252,7 +252,7 @@ namespace UVtools.Core.FileFormats
{
get
{
- return AvaliableFormats.Aggregate<FileFormat, byte>(0, (current, fileFormat) => (byte) (current + fileFormat.FileExtensions.Length));
+ return AvailableFormats.Aggregate<FileFormat, byte>(0, (current, fileFormat) => (byte) (current + fileFormat.FileExtensions.Length));
}
}
@@ -265,12 +265,12 @@ namespace UVtools.Core.FileFormats
/// <returns><see cref="FileFormat"/> object or null if not found</returns>
public static FileFormat FindByExtension(string extension, bool isFilePath = false, bool createNewInstance = false)
{
- return (from fileFormat in AvaliableFormats where fileFormat.IsExtensionValid(extension, isFilePath) select createNewInstance ? (FileFormat) Activator.CreateInstance(fileFormat.GetType()) : fileFormat).FirstOrDefault();
+ return (from fileFormat in AvailableFormats where fileFormat.IsExtensionValid(extension, isFilePath) select createNewInstance ? (FileFormat) Activator.CreateInstance(fileFormat.GetType()) : fileFormat).FirstOrDefault();
}
public static FileExtension FindExtension(string extension, bool isFilePath = false, bool createNewInstance = false)
{
- return AvaliableFormats.SelectMany(format => format.FileExtensions).FirstOrDefault(ext => ext.Equals(extension));
+ return AvailableFormats.SelectMany(format => format.FileExtensions).FirstOrDefault(ext => ext.Equals(extension));
}
/// <summary>
@@ -281,7 +281,7 @@ namespace UVtools.Core.FileFormats
/// <returns><see cref="FileFormat"/> object or null if not found</returns>
public static FileFormat FindByType(Type type, bool createNewInstance = false)
{
- return (from t in AvaliableFormats where type == t.GetType() select createNewInstance ? (FileFormat) Activator.CreateInstance(type) : t).FirstOrDefault();
+ return (from t in AvailableFormats where type == t.GetType() select createNewInstance ? (FileFormat) Activator.CreateInstance(type) : t).FirstOrDefault();
}
#endregion
@@ -290,8 +290,6 @@ namespace UVtools.Core.FileFormats
public abstract FileFormatType FileType { get; }
public abstract FileExtension[] FileExtensions { get; }
- public abstract Type[] ConvertToFormats { get; }
-
public abstract PrintParameterModifier[] PrintParameterModifiers { get; }
public virtual PrintParameterModifier[] PrintParameterPerLayerModifiers { get; } = null;
@@ -378,6 +376,7 @@ namespace UVtools.Core.FileFormats
private bool _haveModifiedLayers;
private LayerManager _layerManager;
private float _printTime;
+ private float _maxPrintHeight;
/// <summary>
/// Gets or sets if modifications require a full encode to save
@@ -390,7 +389,7 @@ namespace UVtools.Core.FileFormats
public Size Resolution
{
- get => new Size((int)ResolutionX, (int)ResolutionY);
+ get => new((int)ResolutionX, (int)ResolutionY);
set
{
ResolutionX = (uint) value.Width;
@@ -405,7 +404,7 @@ namespace UVtools.Core.FileFormats
public SizeF Display
{
- get => new SizeF(DisplayWidth, DisplayHeight);
+ get => new(DisplayWidth, DisplayHeight);
set
{
DisplayWidth = value.Width;
@@ -416,8 +415,15 @@ namespace UVtools.Core.FileFormats
public abstract float DisplayWidth { get; set; }
public abstract float DisplayHeight { get; set; }
+ public abstract bool MirrorDisplay { get; set; }
- public float Xppmm
+ public virtual float MaxPrintHeight
+ {
+ get => _maxPrintHeight > 0 ? _maxPrintHeight : PrintHeight;
+ set => RaiseAndSetIfChanged(ref _maxPrintHeight, value);
+ }
+
+ public virtual float Xppmm
{
get => DisplayWidth > 0 ? ResolutionX / DisplayWidth : 0;
set
@@ -427,7 +433,7 @@ namespace UVtools.Core.FileFormats
}
}
- public float Yppmm
+ public virtual float Yppmm
{
get => DisplayHeight > 0 ? ResolutionY / DisplayHeight : 0;
set
@@ -439,7 +445,7 @@ namespace UVtools.Core.FileFormats
public SizeF Ppmm
{
- get => new SizeF(Xppmm, Yppmm);
+ get => new(Xppmm, Yppmm);
set
{
Xppmm = value.Width;
@@ -448,12 +454,33 @@ namespace UVtools.Core.FileFormats
}
+ public decimal XYResolution => DisplayWidth > 0 || DisplayHeight > 0 ?
+ (decimal) Math.Round(Math.Max(
+ DisplayWidth / ResolutionX,
+ DisplayHeight / ResolutionY
+ ), 3)
+ : 0;
+
+ public decimal XYResolutionUm => DisplayWidth > 0 || DisplayHeight > 0 ?
+ (decimal)Math.Round(Math.Max(
+ DisplayWidth / ResolutionX,
+ DisplayHeight / ResolutionY
+ ), 3) * 1000
+ : 0;
+
public bool HaveAntiAliasing => AntiAliasing > 1;
- public abstract byte AntiAliasing { get; }
+ public abstract byte AntiAliasing { get; set; }
public abstract float LayerHeight { get; set; }
- public float TotalHeight => LayerCount == 0 ? 0 : this[LayerCount - 1].PositionZ; //(float)Math.Round(LayerCount * LayerHeight, 2);
+ public virtual float PrintHeight
+ {
+ get => LayerCount == 0 ? 0 : this[LayerCount - 1]?.PositionZ ?? 0;
+ set
+ {
+ RaisePropertyChanged();
+ }
+ }
public uint LastLayerIndex => LayerCount - 1;
public virtual bool SupportPerLayerSettings => !(PrintParameterPerLayerModifiers is null || PrintParameterPerLayerModifiers.Length == 0);
@@ -468,8 +495,8 @@ namespace UVtools.Core.FileFormats
public uint NormalLayerCount => LayerCount - BottomLayerCount;
public virtual float BottomExposureTime { get; set; }
public virtual float ExposureTime { get; set; }
- public virtual float BottomLayerOffTime { get; set; } = DefaultBottomLightOffDelay;
- public virtual float LayerOffTime { get; set; } = DefaultLightOffDelay;
+ public virtual float BottomLightOffDelay { get; set; } = DefaultBottomLightOffDelay;
+ public virtual float LightOffDelay { get; set; } = DefaultLightOffDelay;
public virtual float BottomLiftHeight { get; set; } = DefaultBottomLiftHeight;
public virtual float LiftHeight { get; set; } = DefaultLiftHeight;
public virtual float BottomLiftSpeed { get; set; } = DefaultBottomLiftSpeed;
@@ -513,20 +540,20 @@ namespace UVtools.Core.FileFormats
break;
}
- var layerOff = OperationCalculator.LightOffDelayC.CalculateSeconds(layer.LiftHeight, layer.LiftSpeed, layer.RetractSpeed);
+ var lightOffDelay = OperationCalculator.LightOffDelayC.CalculateSeconds(layer.LiftHeight, layer.LiftSpeed, layer.RetractSpeed);
time += layer.ExposureTime;
- if (layerOff >= layer.LayerOffTime)
- time += layerOff;
+ if (lightOffDelay >= layer.LightOffDelay)
+ time += lightOffDelay;
else
- time += layer.LayerOffTime;
+ time += layer.LightOffDelay;
}
}
if (computeGeneral)
{
time = ExtraPrintTime +
- BottomLayerOffTime * BottomLayerCount +
- LayerOffTime * NormalLayerCount +
+ BottomLightOffDelay * BottomLayerCount +
+ LightOffDelay * NormalLayerCount +
OperationCalculator.LightOffDelayC.CalculateSeconds(BottomLiftHeight, BottomLiftSpeed, RetractSpeed) * BottomLayerCount +
OperationCalculator.LightOffDelayC.CalculateSeconds(LiftHeight, LiftSpeed, RetractSpeed) * NormalLayerCount;
}
@@ -539,7 +566,8 @@ namespace UVtools.Core.FileFormats
public string PrintTimeString => TimeSpan.FromSeconds(PrintTimeOrComputed).ToString("hh\\hmm\\m");
- public virtual float UsedMaterial { get; set; }
+ public virtual float MaterialMilliliters { get; set; }
+ public virtual float MaterialGrams { get; set; }
public virtual float MaterialCost { get; set; }
@@ -566,6 +594,11 @@ namespace UVtools.Core.FileFormats
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
+ if (e.PropertyName == nameof(LayerCount))
+ {
+ PrintHeight = PrintHeight;
+ }
+
if (SuppressRebuildProperties) return;
if (e.PropertyName == nameof(LayerCount))
{
@@ -579,8 +612,8 @@ namespace UVtools.Core.FileFormats
e.PropertyName == nameof(BottomLayerCount) ||
e.PropertyName == nameof(BottomExposureTime) ||
e.PropertyName == nameof(ExposureTime) ||
- e.PropertyName == nameof(BottomLayerOffTime) ||
- e.PropertyName == nameof(LayerOffTime) ||
+ e.PropertyName == nameof(BottomLightOffDelay) ||
+ e.PropertyName == nameof(LightOffDelay) ||
e.PropertyName == nameof(BottomLiftHeight) ||
e.PropertyName == nameof(LiftHeight) ||
e.PropertyName == nameof(BottomLiftSpeed) ||
@@ -789,9 +822,6 @@ namespace UVtools.Core.FileFormats
if(Thumbnails[i].Size == ThumbnailsOriginalSize[i]) continue;
CvInvoke.Resize(Thumbnails[i], Thumbnails[i], new Size(ThumbnailsOriginalSize[i].Width, ThumbnailsOriginalSize[i].Height));
}
-
- progress ??= new OperationProgress();
- progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
}
public void AfterEncode()
@@ -953,14 +983,14 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.ExposureSeconds.OldValue = (decimal)ExposureTime;
}
- if (PrintParameterModifiers.Contains(PrintParameterModifier.BottomLayerOffTime))
+ if (PrintParameterModifiers.Contains(PrintParameterModifier.BottomLightOffDelay))
{
- PrintParameterModifier.BottomLayerOffTime.OldValue = (decimal)BottomLayerOffTime;
+ PrintParameterModifier.BottomLightOffDelay.OldValue = (decimal)BottomLightOffDelay;
}
- if (PrintParameterModifiers.Contains(PrintParameterModifier.LayerOffTime))
+ if (PrintParameterModifiers.Contains(PrintParameterModifier.LightOffDelay))
{
- PrintParameterModifier.LayerOffTime.OldValue = (decimal)LayerOffTime;
+ PrintParameterModifier.LightOffDelay.OldValue = (decimal)LightOffDelay;
}
if (PrintParameterModifiers.Contains(PrintParameterModifier.BottomLiftHeight))
@@ -1009,9 +1039,9 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.ExposureSeconds.OldValue = (decimal)layer.ExposureTime;
}
- if (PrintParameterPerLayerModifiers.Contains(PrintParameterModifier.LayerOffTime))
+ if (PrintParameterPerLayerModifiers.Contains(PrintParameterModifier.LightOffDelay))
{
- PrintParameterModifier.LayerOffTime.OldValue = (decimal)layer.LayerOffTime;
+ PrintParameterModifier.LightOffDelay.OldValue = (decimal)layer.LightOffDelay;
}
if (PrintParameterPerLayerModifiers.Contains(PrintParameterModifier.LiftHeight))
@@ -1044,10 +1074,10 @@ namespace UVtools.Core.FileFormats
if (ReferenceEquals(modifier, PrintParameterModifier.ExposureSeconds))
return ExposureTime;
- if (ReferenceEquals(modifier, PrintParameterModifier.BottomLayerOffTime))
- return BottomLayerOffTime;
- if (ReferenceEquals(modifier, PrintParameterModifier.LayerOffTime))
- return LayerOffTime;
+ if (ReferenceEquals(modifier, PrintParameterModifier.BottomLightOffDelay))
+ return BottomLightOffDelay;
+ if (ReferenceEquals(modifier, PrintParameterModifier.LightOffDelay))
+ return LightOffDelay;
if (ReferenceEquals(modifier, PrintParameterModifier.BottomLiftHeight))
return BottomLiftHeight;
@@ -1086,14 +1116,14 @@ namespace UVtools.Core.FileFormats
return true;
}
- if (ReferenceEquals(modifier, PrintParameterModifier.BottomLayerOffTime))
+ if (ReferenceEquals(modifier, PrintParameterModifier.BottomLightOffDelay))
{
- BottomLayerOffTime = (float) value;
+ BottomLightOffDelay = (float) value;
return true;
}
- if (ReferenceEquals(modifier, PrintParameterModifier.LayerOffTime))
+ if (ReferenceEquals(modifier, PrintParameterModifier.LightOffDelay))
{
- LayerOffTime = (float) value;
+ LightOffDelay = (float) value;
return true;
}
@@ -1182,8 +1212,65 @@ namespace UVtools.Core.FileFormats
public abstract void SaveAs(string filePath = null, OperationProgress progress = null);
- public abstract bool Convert(Type to, string fileFullPath, OperationProgress progress = null);
- public bool Convert(FileFormat to, string fileFullPath, OperationProgress progress = null)
+ public virtual FileFormat Convert(Type to, string fileFullPath, OperationProgress progress = null)
+ {
+ if (!IsValid) return null;
+ var found = AvailableFormats.Any(format => to == format.GetType());
+ if (!found) return null;
+
+ progress ??= new OperationProgress("Converting");
+
+ var slicerFile = (FileFormat)Activator.CreateInstance(to);
+ if (slicerFile is null) return null;
+
+ slicerFile.SuppressRebuildProperties = true;
+
+ slicerFile.LayerManager = LayerManager;
+ slicerFile.AntiAliasing = ValidateAntiAliasingLevel();
+ slicerFile.LayerCount = LayerManager.Count;
+ slicerFile.BottomLayerCount = BottomLayerCount;
+ slicerFile.LayerHeight = LayerHeight;
+ slicerFile.ResolutionX = ResolutionX;
+ slicerFile.ResolutionY = ResolutionY;
+ slicerFile.DisplayWidth = DisplayWidth;
+ slicerFile.DisplayHeight = DisplayHeight;
+ slicerFile.MaxPrintHeight = MaxPrintHeight;
+ slicerFile.MirrorDisplay = MirrorDisplay;
+ slicerFile.BottomExposureTime = BottomExposureTime;
+ slicerFile.ExposureTime = ExposureTime;
+
+ slicerFile.BottomLiftHeight = BottomLiftHeight;
+ slicerFile.LiftHeight = LiftHeight;
+
+ slicerFile.BottomLiftSpeed = BottomLiftSpeed;
+ slicerFile.LiftSpeed = LiftSpeed;
+ slicerFile.RetractSpeed = RetractSpeed;
+
+ slicerFile.BottomLightOffDelay = BottomLightOffDelay;
+ slicerFile.LightOffDelay = LightOffDelay;
+
+ slicerFile.BottomLightPWM = BottomLightPWM;
+ slicerFile.LightPWM = LightPWM;
+
+ slicerFile.MachineName = MachineName;
+ slicerFile.MaterialName = MaterialName;
+ slicerFile.MaterialMilliliters = MaterialMilliliters;
+ slicerFile.MaterialGrams = MaterialGrams;
+ slicerFile.MaterialCost = MaterialCost;
+ slicerFile.Xppmm = Xppmm;
+ slicerFile.Yppmm = Yppmm;
+ slicerFile.PrintTime = PrintTimeOrComputed;
+ slicerFile.PrintHeight = PrintHeight;
+
+
+
+ slicerFile.SuppressRebuildProperties = false;
+ slicerFile.SetThumbnails(Thumbnails);
+ slicerFile.Encode(fileFullPath, progress);
+
+ return slicerFile;
+ }
+ public FileFormat Convert(FileFormat to, string fileFullPath, OperationProgress progress = null)
=> Convert(to.GetType(), fileFullPath, progress);
public byte ValidateAntiAliasingLevel()
diff --git a/UVtools.Core/FileFormats/IFileFormat.cs b/UVtools.Core/FileFormats/IFileFormat.cs
index 6b46b4f..e96bb0a 100644
--- a/UVtools.Core/FileFormats/IFileFormat.cs
+++ b/UVtools.Core/FileFormats/IFileFormat.cs
@@ -31,11 +31,6 @@ namespace UVtools.Core.FileFormats
FileExtension[] FileExtensions { get; }
/// <summary>
- /// Gets the implemented file formats able to convert to
- /// </summary>
- Type[] ConvertToFormats { get; }
-
- /// <summary>
/// Gets the available <see cref="FileFormat.PrintParameterModifier"/>
/// </summary>
FileFormat.PrintParameterModifier[] PrintParameterModifiers { get; }
@@ -91,7 +86,7 @@ namespace UVtools.Core.FileFormats
/// </summary>
LayerManager LayerManager { get; set; }
- Size Resolution { get; }
+ Size Resolution { get; set; }
/// <summary>
/// Gets the image width resolution
@@ -117,6 +112,16 @@ namespace UVtools.Core.FileFormats
/// Gets or sets the display height in millimeters
/// </summary>
float DisplayHeight { get; set; }
+
+ /// <summary>
+ /// Gets or sets if images need to be mirrored on lcd to print on the correct orientation
+ /// </summary>
+ bool MirrorDisplay { get; set; }
+
+ /// <summary>
+ /// Gets or sets the maximum printer build Z volume
+ /// </summary>
+ float MaxPrintHeight { get; set; }
/// <summary>
/// Gets or sets the pixels per mm on X direction
@@ -133,12 +138,22 @@ namespace UVtools.Core.FileFormats
/// </summary>
SizeF Ppmm { get; set; }
+ /// <summary>
+ /// Gets the printer XY pixel resolution
+ /// </summary>
+ decimal XYResolution { get; }
+
+ /// <summary>
+ /// Gets the printer XY pixel resolution in microns
+ /// </summary>
+ decimal XYResolutionUm { get; }
+
bool HaveAntiAliasing { get; }
/// <summary>
- /// Gets the AntiAliasing level
+ /// Gets or sets the AntiAliasing level
/// </summary>
- byte AntiAliasing { get; }
+ byte AntiAliasing { get; set; }
/// <summary>
/// Gets Layer Height in mm
@@ -146,9 +161,9 @@ namespace UVtools.Core.FileFormats
float LayerHeight { get; set; }
/// <summary>
- /// Gets Total Height in mm
+ /// Gets or sets the print height in mm
/// </summary>
- float TotalHeight { get; }
+ float PrintHeight { get; set; }
/// <summary>
/// Gets the last layer index
@@ -190,12 +205,12 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets or sets the bottom layer off time in seconds
/// </summary>
- float BottomLayerOffTime { get; set; }
+ float BottomLightOffDelay { get; set; }
/// <summary>
/// Gets or sets the layer off time in seconds
/// </summary>
- float LayerOffTime { get; set; }
+ float LightOffDelay { get; set; }
/// <summary>
/// Gets or sets the bottom lift height in mm
@@ -261,7 +276,12 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets the estimate used material in ml
/// </summary>
- float UsedMaterial { get; set; }
+ float MaterialMilliliters { get; set; }
+
+ /// <summary>
+ /// Gets the estimate material in grams
+ /// </summary>
+ float MaterialGrams { get; set; }
/// <summary>
/// Gets the estimate material cost
@@ -468,8 +488,8 @@ namespace UVtools.Core.FileFormats
/// <param name="to">Target file format</param>
/// <param name="fileFullPath">Output path file</param>
/// <param name="progress"></param>
- /// <returns>True if convert succeed, otherwise false</returns>
- bool Convert(Type to, string fileFullPath, OperationProgress progress = null);
+ /// <returns>The converted file if successful, otherwise null</returns>
+ FileFormat Convert(Type to, string fileFullPath, OperationProgress progress = null);
/// <summary>
/// Converts this file type to another file type
@@ -477,8 +497,8 @@ namespace UVtools.Core.FileFormats
/// <param name="to">Target file format</param>
/// <param name="fileFullPath">Output path file</param>
/// <param name="progress"></param>
- /// <returns>True if convert succeed, otherwise false</returns>
- bool Convert(FileFormat to, string fileFullPath, OperationProgress progress = null);
+ /// <returns>TThe converted file if successful, otherwise null</returns>
+ FileFormat Convert(FileFormat to, string fileFullPath, OperationProgress progress = null);
/// <summary>
/// Validate AntiAlias Level
diff --git a/UVtools.Core/FileFormats/ImageFile.cs b/UVtools.Core/FileFormats/ImageFile.cs
index 3331d44..490b286 100644
--- a/UVtools.Core/FileFormats/ImageFile.cs
+++ b/UVtools.Core/FileFormats/ImageFile.cs
@@ -12,15 +12,13 @@ namespace UVtools.Core.FileFormats
public override FileExtension[] FileExtensions { get; } =
{
- new FileExtension("jpg", "JPG"),
- new FileExtension("jpeg", "JPEG"),
- new FileExtension("png", "PNG"),
- new FileExtension("bmp", "BMP"),
- new FileExtension("gif", "GIF"),
- new FileExtension("tga", "TGA"),
+ new ("jpg", "JPG"),
+ new ("jpeg", "JPEG"),
+ new ("png", "PNG"),
+ new ("bmp", "BMP"),
+ new ("gif", "GIF"),
+ new ("tga", "TGA"),
};
-
- public override Type[] ConvertToFormats { get; } = null;
public override PrintParameterModifier[] PrintParameterModifiers { get; } = null;
public override byte ThumbnailsCount { get; } = 4;
public override Size[] ThumbnailsOriginalSize { get; } = null;
@@ -56,7 +54,18 @@ namespace UVtools.Core.FileFormats
}
}
- public override byte AntiAliasing { get; } = 1;
+ public override bool MirrorDisplay
+ {
+ get => false;
+ set { }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => 1;
+ set { }
+ }
+
public override float LayerHeight { get; set; } = 0;
/*public override float PrintTime { get; } = 0;
public override float UsedMaterial { get; } = 0;
@@ -95,7 +104,7 @@ namespace UVtools.Core.FileFormats
this[0].LayerMat.Save(filePath ?? FileFullPath);
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
+ public override FileFormat Convert(Type to, string fileFullPath, OperationProgress progress = null)
{
throw new NotImplementedException();
}
diff --git a/UVtools.Core/FileFormats/LGSFile.cs b/UVtools.Core/FileFormats/LGSFile.cs
index cf98191..84806fc 100644
--- a/UVtools.Core/FileFormats/LGSFile.cs
+++ b/UVtools.Core/FileFormats/LGSFile.cs
@@ -42,8 +42,8 @@ namespace UVtools.Core.FileFormats
[FieldOrder(3)] public uint Uint_10 { get; set; } = 30; // 0x10: 30 ?
[FieldOrder(4)] public uint Uint_14 { get; set; } = 0; // 0x14: 0 ?
[FieldOrder(5)] public uint Uint_18 { get; set; } = 34; // 0x18: 34 ?
- [FieldOrder(6)] public float PixelPerMmX { get; set; }
- [FieldOrder(7)] public float PixelPerMmY { get; set; }
+ [FieldOrder(6)] public float PixelPerMmX { get; set; } = 15.404f;
+ [FieldOrder(7)] public float PixelPerMmY { get; set; } = 4.866f;
[FieldOrder(8)] public float ResolutionX { get; set; }
[FieldOrder(9)] public float ResolutionY { get; set; }
[FieldOrder(10)] public float LayerHeight { get; set; }
@@ -211,19 +211,14 @@ namespace UVtools.Core.FileFormats
new FileExtension("lgs30", "Longer Orange 30"),
};
- public override Type[] ConvertToFormats { get; } =
- {
- //typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
{
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -254,6 +249,26 @@ namespace UVtools.Core.FileFormats
}
}
+ public override float Xppmm
+ {
+ get => HeaderSettings.PixelPerMmX > 0 ? HeaderSettings.PixelPerMmX : base.Xppmm;
+ set
+ {
+ HeaderSettings.PixelPerMmX = value;
+ base.Xppmm = value;
+ }
+ }
+
+ public override float Yppmm
+ {
+ get => HeaderSettings.PixelPerMmY > 0 ? HeaderSettings.PixelPerMmY : base.Yppmm;
+ set
+ {
+ HeaderSettings.PixelPerMmY = value;
+ base.Yppmm = value;
+ }
+ }
+
public override float DisplayWidth
{
get => ResolutionX / HeaderSettings.PixelPerMmX;
@@ -266,7 +281,17 @@ namespace UVtools.Core.FileFormats
set { }
}
- public override byte AntiAliasing => 4;
+ public override bool MirrorDisplay
+ {
+ get => true;
+ set { }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => 4;
+ set { }
+ }
public override float LayerHeight
{
@@ -318,7 +343,7 @@ namespace UVtools.Core.FileFormats
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
get => HeaderSettings.BottomLightOffDelayMs;
set
@@ -328,7 +353,7 @@ namespace UVtools.Core.FileFormats
}
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
get => HeaderSettings.LightOffDelayMs;
set
@@ -427,6 +452,8 @@ namespace UVtools.Core.FileFormats
}
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
if (ResolutionY >= 2560) // Longer Orange 30
@@ -590,11 +617,7 @@ namespace UVtools.Core.FileFormats
Helpers.SerializeWriteFileStream(outputFile, HeaderSettings);
}
}
-
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- return false;
- }
+
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/MakerbaseFile.cs b/UVtools.Core/FileFormats/MakerbaseFile.cs
index a74d1ed..218e54e 100644
--- a/UVtools.Core/FileFormats/MakerbaseFile.cs
+++ b/UVtools.Core/FileFormats/MakerbaseFile.cs
@@ -61,19 +61,14 @@ namespace UVtools.Core.FileFormats
new FileExtension("gr1", "GR1 Workshop GR1 Files"),
};
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
{
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -102,8 +97,13 @@ namespace UVtools.Core.FileFormats
public override float DisplayWidth { get; set; }
public override float DisplayHeight { get; set; }
+ public override bool MirrorDisplay { get; set; }
- public override byte AntiAliasing => 1;
+ public override byte AntiAliasing
+ {
+ get => 1;
+ set { }
+ }
public override float LayerHeight
{
@@ -132,7 +132,7 @@ namespace UVtools.Core.FileFormats
public override float PrintTime => 0;
- public override float UsedMaterial => 0;
+ public override float MaterialMilliliters => 0;
public override float MaterialCost => 0;
@@ -241,377 +241,6 @@ namespace UVtools.Core.FileFormats
//Decode(FileFullPath, progress);
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- /*if (to == typeof(ChituboxFile))
- {
- if (Path.GetExtension(FileFullPath).Equals(Path.GetExtension(fileFullPath)))
- {
- return false;
- }
- ChituboxFile file = new ChituboxFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- ProjectorType = HeaderSettings.ProjectorType,
- LayerCount = LayerCount,
- AntiAliasLevel = ValidateAntiAliasingLevel(),
- BottomLightPWM = (byte) HeaderSettings.BottomLightPWM,
- LightPWM = (byte) HeaderSettings.LightPWM,
- LayerOffTime = HeaderSettings.LayerOffTime,
- PrintTime = HeaderSettings.PrintTime,
- BottomExposureSeconds = HeaderSettings.BottomExposureSeconds,
- BottomLayersCount = HeaderSettings.BottomLayersCount,
- //EncryptionKey = HeaderSettings.EncryptionKey,
- LayerExposureSeconds = HeaderSettings.LayerExposureSeconds,
- LayerHeightMilimeter = HeaderSettings.LayerHeightMilimeter,
- OverallHeightMilimeter = HeaderSettings.OverallHeightMilimeter,
- },
- PrintParametersSettings =
- {
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- LiftHeight = PrintParametersSettings.LiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- BottomLightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- LightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- BottomLayerCount = PrintParametersSettings.BottomLayerCount,
- VolumeMl = PrintParametersSettings.VolumeMl,
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- CostDollars = PrintParametersSettings.CostDollars,
- WeightG = PrintParametersSettings.WeightG
- },
- SlicerInfoSettings =
- {
- AntiAliasLevel = SlicerInfoSettings.AntiAliasLevel,
- MachineName = SlicerInfoSettings.MachineName,
- //EncryptionMode = SlicerInfoSettings.EncryptionMode,
- MachineNameSize = SlicerInfoSettings.MachineNameSize,
- },
- Thumbnails = Thumbnails,
- };
-
- //file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ChituboxZipFile))
- {
- ChituboxZipFile file = new ChituboxZipFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Filename = Path.GetFileName(FileFullPath),
-
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- MachineX = HeaderSettings.BedSizeX,
- MachineY = HeaderSettings.BedSizeY,
- MachineZ = HeaderSettings.BedSizeZ,
- MachineType = MachineName,
- ProjectType = HeaderSettings.ProjectorType == 0 ? "Normal" : "LCD_mirror",
-
- Resin = MaterialName,
- Price = MaterialCost,
- Weight = PrintParametersSettings.WeightG,
- Volume = UsedMaterial,
- Mirror = (byte) (HeaderSettings.ProjectorType == 0 ? 0 : 1),
-
-
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- LiftHeight = PrintParametersSettings.LiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- BottomLayCount = InitialLayerCount,
- BottomLayerCount = InitialLayerCount,
- BottomLightOffTime = PrintParametersSettings.BottomLightOffDelay,
- LightOffTime = PrintParametersSettings.LightOffDelay,
- BottomLayExposureTime = InitialExposureTime,
- BottomLayerExposureTime = InitialExposureTime,
- LayerExposureTime = LayerExposureTime,
- LayerHeight = LayerHeight,
- LayerCount = LayerCount,
- AntiAliasing = ValidateAntiAliasingLevel(),
- BottomLightPWM = (byte) HeaderSettings.BottomLightPWM,
- LayerLightPWM = (byte) HeaderSettings.LightPWM,
-
- EstimatedPrintTime = PrintTime
- },
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PWSFile))
- {
- PWSFile file = new PWSFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = LayerExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed / 60,
- RetractSpeed = RetractSpeed / 60,
- LayerOffTime = HeaderSettings.LayerOffTime,
- BottomLayersCount = InitialLayerCount,
- BottomExposureSeconds = InitialExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = PrintParametersSettings.WeightG,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PHZFile))
- {
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = InitialExposureTime,
- BottomLayersCount = InitialLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = LayerExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayerCount = InitialLayerCount,
- BottomLiftHeight = PrintParametersSettings.BottomLiftHeight,
- BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- BottomLightOffDelay = PrintParametersSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = PrintParametersSettings.LiftHeight,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = PrintParametersSettings.WeightG,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = InitialLayerCount,
- BottomLayersTime = (uint)(InitialExposureTime * 1000),
- LayerTime = (uint)(LayerExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = InitialLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(LayerExposureTime * 1000),
- BottomLayerExposureTime = (uint)(InitialExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte)(ValidateAntiAliasingLevel() > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint) HeaderSettings.LayerOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = PrintParametersSettings.LiftHeight,
- ZLiftFeedRate = PrintParametersSettings.LiftSpeed,
- ZLiftRetractRate = PrintParametersSettings.RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float)Math.Round(ResolutionX / HeaderSettings.BedSizeX, 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / HeaderSettings.BedSizeY, 3);
- file.SliceSettings.Xres = file.OutputSettings.XResolution = (ushort)ResolutionX;
- file.SliceSettings.Yres = file.OutputSettings.YResolution = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = InitialLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)LayerExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)InitialExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(PrintParametersSettings.LightOffDelay * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint) (PrintParametersSettings.LightOffDelay * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = HeaderSettings.ProjectorType != 0;
- file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- /*if (to == typeof(UVJFile))
- {
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = HeaderSettings.BedSizeX,
- Y = HeaderSettings.BedSizeY,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = PrintParametersSettings.BottomLiftHeight,
- LiftSpeed = PrintParametersSettings.BottomLiftSpeed,
- LightOnTime = InitialExposureTime,
- LightOffTime = PrintParametersSettings.BottomLightOffDelay,
- LightPWM = (byte) HeaderSettings.BottomLightPWM,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- Count = InitialLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = PrintParametersSettings.LiftHeight,
- LiftSpeed = PrintParametersSettings.LiftSpeed,
- LightOnTime = LayerExposureTime,
- LightOffTime = PrintParametersSettings.LightOffDelay,
- LightPWM = (byte) HeaderSettings.LightPWM,
- RetractSpeed = PrintParametersSettings.RetractSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }*/
-
- return false;
- }
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/PHZFile.cs b/UVtools.Core/FileFormats/PHZFile.cs
index 83c7783..2555786 100644
--- a/UVtools.Core/FileFormats/PHZFile.cs
+++ b/UVtools.Core/FileFormats/PHZFile.cs
@@ -37,6 +37,7 @@ namespace UVtools.Core.FileFormats
#region Header
public class Header
{
+ private string _machineName;
/// <summary>
/// Gets a magic number identifying the file type.
@@ -167,7 +168,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets the light off time setting used at slicing, for normal layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig.
/// </summary>
- [FieldOrder(25)] public float LayerOffTime { get; set; } = 1;
+ [FieldOrder(25)] public float LightOffDelay { get; set; } = 1;
/// <summary>
/// Gets number of layers configured as "bottom." Note that this field appears in both the file header and ExtConfig.
@@ -233,7 +234,16 @@ namespace UVtools.Core.FileFormats
/// The character encoding is currently unknown — all observed files in the wild use 7-bit ASCII characters only.
/// Note that the machine type here is set in the software profile, and is not the name the user assigned to the machine.
/// </summary>
- [Ignore] public string MachineName { get; set; }
+ [Ignore]
+ public string MachineName
+ {
+ get => _machineName;
+ set
+ {
+ _machineName = value;
+ MachineNameSize = string.IsNullOrEmpty(_machineName) ? 0 : (uint)_machineName.Length;
+ }
+ }
[FieldOrder(39)] public uint Padding5 { get; set; }
[FieldOrder(40)] public uint Padding6 { get; set; }
@@ -269,7 +279,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(Magic)}: {Magic}, {nameof(Version)}: {Version}, {nameof(LayerHeightMilimeter)}: {LayerHeightMilimeter}, {nameof(LayerExposureSeconds)}: {LayerExposureSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(PreviewLargeOffsetAddress)}: {PreviewLargeOffsetAddress}, {nameof(LayersDefinitionOffsetAddress)}: {LayersDefinitionOffsetAddress}, {nameof(LayerCount)}: {LayerCount}, {nameof(PreviewSmallOffsetAddress)}: {PreviewSmallOffsetAddress}, {nameof(PrintTime)}: {PrintTime}, {nameof(ProjectorType)}: {ProjectorType}, {nameof(AntiAliasLevel)}: {AntiAliasLevel}, {nameof(LightPWM)}: {LightPWM}, {nameof(BottomLightPWM)}: {BottomLightPWM}, {nameof(Padding1)}: {Padding1}, {nameof(Padding2)}: {Padding2}, {nameof(OverallHeightMilimeter)}: {OverallHeightMilimeter}, {nameof(BedSizeX)}: {BedSizeX}, {nameof(BedSizeY)}: {BedSizeY}, {nameof(BedSizeZ)}: {BedSizeZ}, {nameof(EncryptionKey)}: {EncryptionKey}, {nameof(BottomLightOffDelay)}: {BottomLightOffDelay}, {nameof(LayerOffTime)}: {LayerOffTime}, {nameof(BottomLayersCount2)}: {BottomLayersCount2}, {nameof(Padding3)}: {Padding3}, {nameof(BottomLiftHeight)}: {BottomLiftHeight}, {nameof(BottomLiftSpeed)}: {BottomLiftSpeed}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(VolumeMl)}: {VolumeMl}, {nameof(WeightG)}: {WeightG}, {nameof(CostDollars)}: {CostDollars}, {nameof(Padding4)}: {Padding4}, {nameof(MachineNameAddress)}: {MachineNameAddress}, {nameof(MachineNameSize)}: {MachineNameSize}, {nameof(MachineName)}: {MachineName}, {nameof(Padding5)}: {Padding5}, {nameof(Padding6)}: {Padding6}, {nameof(Padding7)}: {Padding7}, {nameof(Padding8)}: {Padding8}, {nameof(Padding9)}: {Padding9}, {nameof(Padding10)}: {Padding10}, {nameof(EncryptionMode)}: {EncryptionMode}, {nameof(MysteriousId)}: {MysteriousId}, {nameof(AntiAliasLevelInfo)}: {AntiAliasLevelInfo}, {nameof(SoftwareVersion)}: {SoftwareVersion}, {nameof(Padding11)}: {Padding11}, {nameof(Padding12)}: {Padding12}, {nameof(Padding13)}: {Padding13}, {nameof(Padding14)}: {Padding14}, {nameof(Padding15)}: {Padding15}, {nameof(Padding16)}: {Padding16}";
+ return $"{nameof(Magic)}: {Magic}, {nameof(Version)}: {Version}, {nameof(LayerHeightMilimeter)}: {LayerHeightMilimeter}, {nameof(LayerExposureSeconds)}: {LayerExposureSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(PreviewLargeOffsetAddress)}: {PreviewLargeOffsetAddress}, {nameof(LayersDefinitionOffsetAddress)}: {LayersDefinitionOffsetAddress}, {nameof(LayerCount)}: {LayerCount}, {nameof(PreviewSmallOffsetAddress)}: {PreviewSmallOffsetAddress}, {nameof(PrintTime)}: {PrintTime}, {nameof(ProjectorType)}: {ProjectorType}, {nameof(AntiAliasLevel)}: {AntiAliasLevel}, {nameof(LightPWM)}: {LightPWM}, {nameof(BottomLightPWM)}: {BottomLightPWM}, {nameof(Padding1)}: {Padding1}, {nameof(Padding2)}: {Padding2}, {nameof(OverallHeightMilimeter)}: {OverallHeightMilimeter}, {nameof(BedSizeX)}: {BedSizeX}, {nameof(BedSizeY)}: {BedSizeY}, {nameof(BedSizeZ)}: {BedSizeZ}, {nameof(EncryptionKey)}: {EncryptionKey}, {nameof(BottomLightOffDelay)}: {BottomLightOffDelay}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(BottomLayersCount2)}: {BottomLayersCount2}, {nameof(Padding3)}: {Padding3}, {nameof(BottomLiftHeight)}: {BottomLiftHeight}, {nameof(BottomLiftSpeed)}: {BottomLiftSpeed}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(VolumeMl)}: {VolumeMl}, {nameof(WeightG)}: {WeightG}, {nameof(CostDollars)}: {CostDollars}, {nameof(Padding4)}: {Padding4}, {nameof(MachineNameAddress)}: {MachineNameAddress}, {nameof(MachineNameSize)}: {MachineNameSize}, {nameof(MachineName)}: {MachineName}, {nameof(Padding5)}: {Padding5}, {nameof(Padding6)}: {Padding6}, {nameof(Padding7)}: {Padding7}, {nameof(Padding8)}: {Padding8}, {nameof(Padding9)}: {Padding9}, {nameof(Padding10)}: {Padding10}, {nameof(EncryptionMode)}: {EncryptionMode}, {nameof(MysteriousId)}: {MysteriousId}, {nameof(AntiAliasLevelInfo)}: {AntiAliasLevelInfo}, {nameof(SoftwareVersion)}: {SoftwareVersion}, {nameof(Padding11)}: {Padding11}, {nameof(Padding12)}: {Padding12}, {nameof(Padding13)}: {Padding13}, {nameof(Padding14)}: {Padding14}, {nameof(Padding15)}: {Padding15}, {nameof(Padding16)}: {Padding16}";
}
}
#endregion
@@ -427,7 +437,7 @@ namespace UVtools.Core.FileFormats
/// <summary>
/// Gets how long to keep the light off after exposing this layer, in seconds.
/// </summary>
- [FieldOrder(2)] public float LayerOffTimeSeconds { get; set; }
+ [FieldOrder(2)] public float LightOffDelay { get; set; }
/// <summary>
/// Gets the layer image offset to encoded layer data, and its length in bytes.
@@ -461,7 +471,7 @@ namespace UVtools.Core.FileFormats
{
LayerPositionZ = Parent[layerIndex].PositionZ;
LayerExposure = Parent[layerIndex].ExposureTime;
- LayerOffTimeSeconds = Parent[layerIndex].LayerOffTime;
+ LightOffDelay = Parent[layerIndex].LightOffDelay;
}
public unsafe Mat Decode(uint layerIndex, bool consumeData = true)
@@ -609,7 +619,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(LayerPositionZ)}: {LayerPositionZ}, {nameof(LayerExposure)}: {LayerExposure}, {nameof(LayerOffTimeSeconds)}: {LayerOffTimeSeconds}, {nameof(DataAddress)}: {DataAddress}, {nameof(DataSize)}: {DataSize}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(Unknown3)}: {Unknown3}, {nameof(Unknown4)}: {Unknown4}";
+ return $"{nameof(LayerPositionZ)}: {LayerPositionZ}, {nameof(LayerExposure)}: {LayerExposure}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(DataAddress)}: {DataAddress}, {nameof(DataSize)}: {DataSize}, {nameof(Unknown1)}: {Unknown1}, {nameof(Unknown2)}: {Unknown2}, {nameof(Unknown3)}: {Unknown3}, {nameof(Unknown4)}: {Unknown4}";
}
}
#endregion
@@ -682,25 +692,14 @@ namespace UVtools.Core.FileFormats
new FileExtension("phz", "Chitubox PHZ"),
};
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(ChituboxFile),
- typeof(ChituboxZipFile),
- typeof(FDGFile),
- typeof(PhotonWorkshopFile),
- typeof(ZCodexFile),
- typeof(CWSFile),
- typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
{
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -713,7 +712,7 @@ namespace UVtools.Core.FileFormats
public override PrintParameterModifier[] PrintParameterPerLayerModifiers { get; } = {
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.LightOffDelay,
};
public override byte ThumbnailsCount { get; } = 2;
@@ -745,7 +744,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BedSizeX;
set
{
- HeaderSettings.BedSizeX = value;
+ HeaderSettings.BedSizeX = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -756,19 +755,57 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BedSizeY;
set
{
- HeaderSettings.BedSizeY = value;
+ HeaderSettings.BedSizeY = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float MaxPrintHeight
+ {
+ get => HeaderSettings.BedSizeZ > 0 ? HeaderSettings.BedSizeZ : base.MaxPrintHeight;
+ set
+ {
+ HeaderSettings.BedSizeZ = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => (byte) HeaderSettings.AntiAliasLevelInfo;
+ public override bool MirrorDisplay
+ {
+ get => HeaderSettings.ProjectorType > 0;
+ set
+ {
+ HeaderSettings.ProjectorType = value ? 1 : 0;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => (byte) HeaderSettings.AntiAliasLevelInfo;
+ set
+ {
+ HeaderSettings.AntiAliasLevelInfo = value.Clamp(1, 16);
+ RaisePropertyChanged();
+ }
+ }
public override float LayerHeight
{
get => HeaderSettings.LayerHeightMilimeter;
set
{
- HeaderSettings.LayerHeightMilimeter = value;
+ HeaderSettings.LayerHeightMilimeter = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float PrintHeight
+ {
+ get => base.PrintHeight;
+ set
+ {
+ HeaderSettings.OverallHeightMilimeter = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -780,7 +817,7 @@ namespace UVtools.Core.FileFormats
HeaderSettings.LayerCount = LayerCount;
RaisePropertyChanged();
RaisePropertyChanged(nameof(NormalLayerCount));
- HeaderSettings.OverallHeightMilimeter = TotalHeight;
+ HeaderSettings.OverallHeightMilimeter = PrintHeight;
}
}
@@ -799,7 +836,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomExposureSeconds;
set
{
- HeaderSettings.BottomExposureSeconds = value;
+ HeaderSettings.BottomExposureSeconds = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -809,27 +846,27 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LayerExposureSeconds;
set
{
- HeaderSettings.LayerExposureSeconds = value;
+ HeaderSettings.LayerExposureSeconds = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
get => HeaderSettings.BottomLightOffDelay;
set
{
- HeaderSettings.BottomLightOffDelay = value;
+ HeaderSettings.BottomLightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
- get => HeaderSettings.LayerOffTime;
+ get => HeaderSettings.LightOffDelay;
set
{
- HeaderSettings.LayerOffTime = value;
+ HeaderSettings.LightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -839,7 +876,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLiftHeight;
set
{
- HeaderSettings.BottomLiftHeight = value;
+ HeaderSettings.BottomLiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -849,7 +886,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftHeight;
set
{
- HeaderSettings.LiftHeight = value;
+ HeaderSettings.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -859,7 +896,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomLiftSpeed;
set
{
- HeaderSettings.BottomLiftSpeed = value;
+ HeaderSettings.BottomLiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -869,7 +906,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftSpeed;
set
{
- HeaderSettings.LiftSpeed = value;
+ HeaderSettings.LiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -879,7 +916,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.RetractSpeed;
set
{
- HeaderSettings.RetractSpeed = value;
+ HeaderSettings.RetractSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -914,7 +951,7 @@ namespace UVtools.Core.FileFormats
}
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => (float) Math.Round(HeaderSettings.VolumeMl, 2);
set
@@ -924,6 +961,16 @@ namespace UVtools.Core.FileFormats
}
}
+ public override float MaterialGrams
+ {
+ get => HeaderSettings.WeightG;
+ set
+ {
+ HeaderSettings.WeightG = (float) Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
public override float MaterialCost
{
get => (float) Math.Round(HeaderSettings.CostDollars, 2);
@@ -972,6 +1019,8 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
LayersHash.Clear();
@@ -1197,7 +1246,7 @@ namespace UVtools.Core.FileFormats
{
PositionZ = LayersDefinitions[layerIndex].LayerPositionZ,
ExposureTime = LayersDefinitions[layerIndex].LayerExposure,
- LayerOffTime = LayersDefinitions[layerIndex].LayerOffTimeSeconds,
+ LightOffDelay = LayersDefinitions[layerIndex].LightOffDelay,
};
}
@@ -1252,373 +1301,6 @@ namespace UVtools.Core.FileFormats
}
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(ChituboxFile))
- {
- ChituboxFile file = new ChituboxFile
- {
- LayerManager = LayerManager,
- HeaderSettings
- =
- {
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- AntiAliasLevel = ValidateAntiAliasingLevel()
- },
- PrintParametersSettings =
- {
- BottomLayerCount = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOffDelay = HeaderSettings.LayerOffTime,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- WeightG = HeaderSettings.WeightG
- },
- SlicerInfoSettings = {MachineName = MachineName, MachineNameSize = (uint) MachineName.Length}
- };
-
-
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ChituboxZipFile))
- {
- ChituboxZipFile file = new ChituboxZipFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Filename = Path.GetFileName(FileFullPath),
-
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- MachineX = HeaderSettings.BedSizeX,
- MachineY = HeaderSettings.BedSizeY,
- MachineZ = HeaderSettings.BedSizeZ,
- MachineType = MachineName,
- ProjectType = HeaderSettings.ProjectorType == 0 ? "Normal" : "LCD_mirror",
-
- Resin = MaterialName,
- Price = MaterialCost,
- Weight = HeaderSettings.WeightG,
- Volume = UsedMaterial,
- Mirror = (byte) (HeaderSettings.ProjectorType == 0 ? 0 : 1),
-
-
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- LiftHeight = HeaderSettings.LiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- LiftSpeed = HeaderSettings.LiftSpeed,
- RetractSpeed = HeaderSettings.RetractSpeed,
- BottomLayCount = BottomLayerCount,
- BottomLayerCount = BottomLayerCount,
- BottomLightOffTime = HeaderSettings.BottomLightOffDelay,
- LightOffTime = HeaderSettings.LayerOffTime,
- BottomLayExposureTime = BottomExposureTime,
- BottomLayerExposureTime = BottomExposureTime,
- LayerExposureTime = ExposureTime,
- LayerHeight = LayerHeight,
- LayerCount = LayerCount,
- AntiAliasing = ValidateAntiAliasingLevel(),
- BottomLightPWM = (byte) HeaderSettings.BottomLightPWM,
- LightPWM = (byte) HeaderSettings.LightPWM,
-
- EstimatedPrintTime = PrintTime
- },
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(FDGFile))
- {
- FDGFile file = new FDGFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- BedSizeX = HeaderSettings.BedSizeX,
- BedSizeY = HeaderSettings.BedSizeY,
- BedSizeZ = HeaderSettings.BedSizeZ,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = HeaderSettings.BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = HeaderSettings.LayerOffTime,
- LightPWM = HeaderSettings.LightPWM,
- PrintTime = HeaderSettings.PrintTime,
- ProjectorType = HeaderSettings.ProjectorType,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = HeaderSettings.BottomLiftHeight,
- BottomLiftSpeed = HeaderSettings.BottomLiftSpeed,
- BottomLightOffDelay = HeaderSettings.BottomLightOffDelay,
- CostDollars = MaterialCost,
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- RetractSpeed = HeaderSettings.RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = HeaderSettings.WeightG,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonWorkshopFile))
- {
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed / 60,
- RetractSpeed = RetractSpeed / 60,
- LayerOffTime = HeaderSettings.LayerOffTime,
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = HeaderSettings.WeightG,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = BottomLayerCount,
- BottomLayersTime = (uint)(BottomExposureTime * 1000),
- LayerTime = (uint)(ExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = BottomLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(ExposureTime * 1000),
- BottomLayerExposureTime = (uint)(BottomExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte) (AntiAliasing > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint)HeaderSettings.LayerOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = HeaderSettings.LiftHeight,
- ZLiftFeedRate = HeaderSettings.LiftSpeed,
- ZLiftRetractRate = HeaderSettings.RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float)Math.Round(ResolutionX / HeaderSettings.BedSizeX, 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / HeaderSettings.BedSizeY, 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(HeaderSettings.LayerOffTime * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint)(HeaderSettings.LayerOffTime * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = HeaderSettings.ProjectorType != 0;
- file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- /*file.Printer = MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;*/
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(UVJFile))
- {
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = HeaderSettings.BedSizeX,
- Y = HeaderSettings.BedSizeY,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = HeaderSettings.BottomLiftHeight,
- LiftSpeed = HeaderSettings.BottomLiftSpeed,
- LightOnTime = BottomExposureTime,
- LightOffTime = HeaderSettings.BottomLightOffDelay,
- LightPWM = (byte)HeaderSettings.BottomLightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOnTime = ExposureTime,
- LightOffTime = HeaderSettings.LayerOffTime,
- LightPWM = (byte)HeaderSettings.LightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/PhotonSFile.cs b/UVtools.Core/FileFormats/PhotonSFile.cs
index e77b200..4b14faf 100644
--- a/UVtools.Core/FileFormats/PhotonSFile.cs
+++ b/UVtools.Core/FileFormats/PhotonSFile.cs
@@ -48,7 +48,7 @@ namespace UVtools.Core.FileFormats
[FieldOrder(2)] [FieldEndianness(Endianness.Big)] public double XYPixelSize { get; set; } = 0.04725; // 0.04725
[FieldOrder(3)] [FieldEndianness(Endianness.Big)] public double LayerHeight { get; set; }
[FieldOrder(4)] [FieldEndianness(Endianness.Big)] public double ExposureSeconds { get; set; }
- [FieldOrder(5)] [FieldEndianness(Endianness.Big)] public double LayerOffSeconds { get; set; }
+ [FieldOrder(5)] [FieldEndianness(Endianness.Big)] public double LightOffDelay { get; set; }
[FieldOrder(6)] [FieldEndianness(Endianness.Big)] public double BottomExposureSeconds { get; set; }
[FieldOrder(7)] [FieldEndianness(Endianness.Big)] public uint BottomLayerCount { get; set; }
[FieldOrder(8)] [FieldEndianness(Endianness.Big)] public double LiftHeight { get; set; } // mm
@@ -62,7 +62,7 @@ namespace UVtools.Core.FileFormats
public override string ToString()
{
- return $"{nameof(Tag1)}: {Tag1}, {nameof(Tag2)}: {Tag2}, {nameof(XYPixelSize)}: {XYPixelSize}, {nameof(LayerHeight)}: {LayerHeight}, {nameof(ExposureSeconds)}: {ExposureSeconds}, {nameof(LayerOffSeconds)}: {LayerOffSeconds}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(BottomLayerCount)}: {BottomLayerCount}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(Volume)}: {Volume}, {nameof(PreviewResolutionX)}: {PreviewResolutionX}, {nameof(Unknown2)}: {Unknown2}, {nameof(PreviewResolutionY)}: {PreviewResolutionY}, {nameof(Unknown4)}: {Unknown4}";
+ return $"{nameof(Tag1)}: {Tag1}, {nameof(Tag2)}: {Tag2}, {nameof(XYPixelSize)}: {XYPixelSize}, {nameof(LayerHeight)}: {LayerHeight}, {nameof(ExposureSeconds)}: {ExposureSeconds}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(BottomLayerCount)}: {BottomLayerCount}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(Volume)}: {Volume}, {nameof(PreviewResolutionX)}: {PreviewResolutionX}, {nameof(Unknown2)}: {Unknown2}, {nameof(PreviewResolutionY)}: {PreviewResolutionY}, {nameof(Unknown4)}: {Unknown4}";
}
}
@@ -201,12 +201,7 @@ namespace UVtools.Core.FileFormats
public override FileFormatType FileType => FileFormatType.Binary;
public override FileExtension[] FileExtensions { get; } = {
- new FileExtension("photons", "Chitubox PhotonS"),
- };
-
- public override Type[] ConvertToFormats { get; } =
- {
- //typeof(UVJFile),
+ new("photons", "Chitubox PhotonS"),
};
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
@@ -215,8 +210,8 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- //PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ //PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
//PrintParameterModifier.BottomLiftHeight,
//PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -231,18 +226,13 @@ namespace UVtools.Core.FileFormats
public override uint ResolutionX
{
get => Header.ResolutionX;
- set
- {
-
- }
+ set { }
}
public override uint ResolutionY
{
get => Header.ResolutionY;
- set
- {
- }
+ set { }
}
public override float DisplayWidth
@@ -257,14 +247,24 @@ namespace UVtools.Core.FileFormats
set { }
}
- public override byte AntiAliasing => 1;
+ public override bool MirrorDisplay
+ {
+ get => true;
+ set { }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => 1;
+ set { }
+ }
public override float LayerHeight
{
get => (float) Math.Round(HeaderSettings.LayerHeight);
set
{
- HeaderSettings.LayerHeight = value;
+ HeaderSettings.LayerHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -304,27 +304,17 @@ namespace UVtools.Core.FileFormats
get => (float)HeaderSettings.ExposureSeconds;
set
{
- HeaderSettings.ExposureSeconds = value;
+ HeaderSettings.ExposureSeconds = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- /*public override float BottomLayerOffTime
- {
- get => HeaderSettings.BottomLightOffDelayMs;
- set
- {
- HeaderSettings.BottomLightOffDelayMs = value;
- RaisePropertyChanged();
- }
- }*/
-
- public override float LayerOffTime
+ public override float LightOffDelay
{
- get => (float) HeaderSettings.LayerOffSeconds;
+ get => (float) HeaderSettings.LightOffDelay;
set
{
- HeaderSettings.LayerOffSeconds = value;
+ HeaderSettings.LightOffDelay = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -344,7 +334,7 @@ namespace UVtools.Core.FileFormats
get => (float) HeaderSettings.LiftHeight;
set
{
- HeaderSettings.LiftHeight = value;
+ HeaderSettings.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -361,26 +351,26 @@ namespace UVtools.Core.FileFormats
public override float LiftSpeed
{
- get => (float) Math.Round(HeaderSettings.LiftSpeed * 60.0);
+ get => (float) Math.Round(HeaderSettings.LiftSpeed * 60.0, 2);
set
{
- HeaderSettings.LiftSpeed = Math.Round(value / 60.0);
+ HeaderSettings.LiftSpeed = Math.Round(value / 60.0, 2);
RaisePropertyChanged();
}
}
public override float RetractSpeed
{
- get => (float)Math.Round(HeaderSettings.RetractSpeed * 60.0);
+ get => (float)Math.Round(HeaderSettings.RetractSpeed * 60.0, 2);
set
{
- HeaderSettings.RetractSpeed = Math.Round(value / 60.0);
+ HeaderSettings.RetractSpeed = Math.Round(value / 60.0, 2);
RaisePropertyChanged();
}
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => (float) HeaderSettings.Volume;
set
@@ -432,6 +422,8 @@ namespace UVtools.Core.FileFormats
}
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
//uint currentOffset = (uint)Helpers.Serializer.SizeOf(HeaderSettings);
@@ -601,10 +593,6 @@ namespace UVtools.Core.FileFormats
}
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- return false;
- }
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs b/UVtools.Core/FileFormats/PhotonWorkshopFile.cs
index 0fbaee3..c4b9edc 100644
--- a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs
+++ b/UVtools.Core/FileFormats/PhotonWorkshopFile.cs
@@ -198,10 +198,10 @@ namespace UVtools.Core.FileFormats
public const string SectionMark = "HEADER";
[FieldOrder(0)] public SectionHeader Section { get; set; }
- [FieldOrder(1)] public float PixelSize { get; set; }
+ [FieldOrder(1)] public float PixelSize { get; set; } = 0.04725f;
[FieldOrder(2)] public float LayerHeight { get; set; }
[FieldOrder(3)] public float LayerExposureTime { get; set; }
- [FieldOrder(4)] public float LayerOffTime { get; set; } = 1;
+ [FieldOrder(4)] public float LightOffDelay { get; set; } = 1;
[FieldOrder(5)] public float BottomExposureSeconds { get; set; }
[FieldOrder(6)] public float BottomLayersCount { get; set; }
[FieldOrder(7)] public float LiftHeight { get; set; } = 6;
@@ -218,10 +218,10 @@ namespace UVtools.Core.FileFormats
[FieldOrder(11)] public uint AntiAliasing { get; set; } = 1;
[FieldOrder(12)] public uint ResolutionX { get; set; }
[FieldOrder(13)] public uint ResolutionY { get; set; }
- [FieldOrder(14)] public float Weight { get; set; }
+ [FieldOrder(14)] public float WeightG { get; set; }
[FieldOrder(15)] public float Price { get; set; }
[FieldOrder(16)] public uint ResinType { get; set; } // 0x24 ?
- [FieldOrder(17)] public uint PerLayerOverride { get; set; } // bool
+ [FieldOrder(17)] public uint PerLayerOverride { get; set; } = 1; // bool
[FieldOrder(18)] public uint Offset1 { get; set; }
[FieldOrder(19)] public uint Offset2 { get; set; }
[FieldOrder(20)] public uint Offset3 { get; set; }
@@ -231,7 +231,7 @@ namespace UVtools.Core.FileFormats
Section = new SectionHeader(SectionMark, this);
}
- public override string ToString() => $"{nameof(Section)}: {Section}, {nameof(PixelSize)}: {PixelSize}, {nameof(LayerHeight)}: {LayerHeight}, {nameof(LayerExposureTime)}: {LayerExposureTime}, {nameof(LayerOffTime)}: {LayerOffTime}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(Volume)}: {Volume}, {nameof(AntiAliasing)}: {AntiAliasing}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(Weight)}: {Weight}, {nameof(Price)}: {Price}, {nameof(ResinType)}: {ResinType}, {nameof(PerLayerOverride)}: {PerLayerOverride}, {nameof(Offset1)}: {Offset1}, {nameof(Offset2)}: {Offset2}, {nameof(Offset3)}: {Offset3}";
+ public override string ToString() => $"{nameof(Section)}: {Section}, {nameof(PixelSize)}: {PixelSize}, {nameof(LayerHeight)}: {LayerHeight}, {nameof(LayerExposureTime)}: {LayerExposureTime}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(BottomExposureSeconds)}: {BottomExposureSeconds}, {nameof(BottomLayersCount)}: {BottomLayersCount}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(Volume)}: {Volume}, {nameof(AntiAliasing)}: {AntiAliasing}, {nameof(ResolutionX)}: {ResolutionX}, {nameof(ResolutionY)}: {ResolutionY}, {nameof(WeightG)}: {WeightG}, {nameof(Price)}: {Price}, {nameof(ResinType)}: {ResinType}, {nameof(PerLayerOverride)}: {PerLayerOverride}, {nameof(Offset1)}: {Offset1}, {nameof(Offset2)}: {Offset2}, {nameof(Offset3)}: {Offset3}";
public void Validate()
{
@@ -781,23 +781,14 @@ namespace UVtools.Core.FileFormats
};
- public override Type[] ConvertToFormats { get; } =
- {
- //typeof(ChituboxZipFile)
- //typeof(PHZFile),
- typeof(PhotonWorkshopFile),
- typeof(CWSFile),
- typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } =
{
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- //PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ //PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
//PrintParameterModifier.BottomLiftHeight,
//PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -846,14 +837,24 @@ namespace UVtools.Core.FileFormats
set { }
}
- public override byte AntiAliasing => (byte) HeaderSettings.AntiAliasing;
+ public override bool MirrorDisplay
+ {
+ get => true;
+ set {}
+ }
+
+ public override byte AntiAliasing
+ {
+ get => 4;
+ set { }
+ }
public override float LayerHeight
{
get => HeaderSettings.LayerHeight;
set
{
- HeaderSettings.LayerHeight = value;
+ HeaderSettings.LayerHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -883,7 +884,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.BottomExposureSeconds;
set
{
- HeaderSettings.BottomExposureSeconds = value;
+ HeaderSettings.BottomExposureSeconds = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -893,23 +894,23 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LayerExposureTime;
set
{
- HeaderSettings.LayerExposureTime = value;
+ HeaderSettings.LayerExposureTime = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
- get => LayerOffTime;
- set => LayerOffTime = value;
+ get => LightOffDelay;
+ set => LightOffDelay = value;
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
- get => HeaderSettings.LayerOffTime;
+ get => HeaderSettings.LightOffDelay;
set
{
- HeaderSettings.LayerOffTime = value;
+ HeaderSettings.LightOffDelay = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -925,7 +926,7 @@ namespace UVtools.Core.FileFormats
get => HeaderSettings.LiftHeight;
set
{
- HeaderSettings.LiftHeight = value;
+ HeaderSettings.LiftHeight = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -956,7 +957,7 @@ namespace UVtools.Core.FileFormats
}
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => (float) Math.Round(HeaderSettings.Volume, 2);
set
@@ -966,6 +967,16 @@ namespace UVtools.Core.FileFormats
}
}
+ public override float MaterialGrams
+ {
+ get => HeaderSettings.WeightG;
+ set
+ {
+ HeaderSettings.WeightG = (float) Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
public override float MaterialCost
{
get => (float) Math.Round(HeaderSettings.Price, 2);
@@ -1039,6 +1050,8 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
LayersHash.Clear();
@@ -1260,273 +1273,6 @@ namespace UVtools.Core.FileFormats
}
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(PhotonWorkshopFile))
- {
- if (Path.GetExtension(FileFullPath).Equals(Path.GetExtension(fileFullPath)))
- {
- return false;
- }
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed,
- RetractSpeed = RetractSpeed,
- LayerOffTime = HeaderSettings.LayerOffTime,
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = HeaderSettings.Weight,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
- /*if (to == typeof(PHZFile))
- {
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager
- };
-
-
- file.HeaderSettings.Version = 2;
- file.HeaderSettings.BedSizeX = HeaderSettings.BedSizeX;
- file.HeaderSettings.BedSizeY = HeaderSettings.BedSizeY;
- file.HeaderSettings.BedSizeZ = HeaderSettings.BedSizeZ;
- file.HeaderSettings.OverallHeightMilimeter = TotalHeight;
- file.HeaderSettings.BottomExposureSeconds = InitialExposureTime;
- file.HeaderSettings.BottomLayersCount = InitialLayerCount;
- file.HeaderSettings.BottomLightPWM = HeaderSettings.BottomLightPWM;
- file.HeaderSettings.LayerCount = LayerCount;
- file.HeaderSettings.LayerExposureSeconds = LayerExposureTime;
- file.HeaderSettings.LayerHeightMilimeter = LayerHeight;
- file.HeaderSettings.LayerOffTime = HeaderSettings.LayerOffTime;
- file.HeaderSettings.LightPWM = HeaderSettings.LightPWM;
- file.HeaderSettings.PrintTime = HeaderSettings.PrintTime;
- file.HeaderSettings.ProjectorType = HeaderSettings.ProjectorType;
- file.HeaderSettings.ResolutionX = ResolutionX;
- file.HeaderSettings.ResolutionY = ResolutionY;
-
- file.HeaderSettings.BottomLayerCount = InitialLayerCount;
- file.HeaderSettings.BottomLiftHeight = PrintParametersSettings.BottomLiftHeight;
- file.HeaderSettings.BottomLiftSpeed = PrintParametersSettings.BottomLiftSpeed;
- file.HeaderSettings.BottomLightOffDelay = PrintParametersSettings.BottomLightOffDelay;
- file.HeaderSettings.CostDollars = MaterialCost;
- file.HeaderSettings.LiftHeight = PrintParametersSettings.LiftHeight;
- file.HeaderSettings.LiftingSpeed = PrintParametersSettings.LiftingSpeed;
- file.HeaderSettings.LayerOffTime = HeaderSettings.LayerOffTime;
- file.HeaderSettings.RetractSpeed = PrintParametersSettings.RetractSpeed;
- file.HeaderSettings.VolumeMl = UsedMaterial;
- file.HeaderSettings.WeightG = PrintParametersSettings.WeightG;
-
- file.HeaderSettings.MachineName = MachineName;
- file.HeaderSettings.MachineNameSize = (uint) MachineName.Length;
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = InitialLayerCount,
- BottomLayersTime = (uint)(InitialExposureTime * 1000),
- LayerTime = (uint)(LayerExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = InitialLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(LayerExposureTime * 1000),
- BottomLayerExposureTime = (uint)(InitialExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = 0,
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint) HeaderSettings.LayerOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = PrintParametersSettings.LiftHeight,
- ZLiftFeedRate = PrintParametersSettings.LiftingSpeed,
- ZLiftRetractRate = PrintParametersSettings.RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
- */
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- //file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = defaultFormat.OutputSettings.
- //file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / HeaderSettings.BedSizeY, 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(HeaderSettings.LayerOffTime * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint)(HeaderSettings.LayerOffTime * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- //file.OutputSettings.FlipX = HeaderSettings. != 0;
- //file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- /*file.Printer = MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;*/
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(UVJFile))
- {
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- //X = HeaderSettings.BedSizeX,
- //Y = HeaderSettings.BedSizeY,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOnTime = BottomExposureTime,
- LightOffTime = HeaderSettings.LayerOffTime,
- //LightPWM = (byte)HeaderSettings.LightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = HeaderSettings.LiftHeight,
- LiftSpeed = HeaderSettings.LiftSpeed,
- LightOnTime = ExposureTime,
- LightOffTime = HeaderSettings.LayerOffTime,
- //LightPWM = (byte)HeaderSettings.LightPWM,
- RetractSpeed = HeaderSettings.RetractSpeed,
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
-
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/SL1File.cs b/UVtools.Core/FileFormats/SL1File.cs
index e8e2230..cb7997c 100644
--- a/UVtools.Core/FileFormats/SL1File.cs
+++ b/UVtools.Core/FileFormats/SL1File.cs
@@ -25,9 +25,9 @@ namespace UVtools.Core.FileFormats
{
#region Constants
- public const string Keyword_AntiAliasing = "AntiAliasing";
+ public const string Keyword_FileFormat = "FILEFORMAT";
+
public const string Keyword_BottomLightOffDelay = "BottomLightOffDelay";
- public const string Keyword_LayerOffTime = "LayerOffTime";
public const string Keyword_LightOffDelay = "LightOffDelay";
public const string Keyword_BottomLiftHeight = "BottomLiftHeight";
public const string Keyword_BottomLiftSpeed = "BottomLiftSpeed";
@@ -45,6 +45,8 @@ namespace UVtools.Core.FileFormats
{
#region Printer
public string InheritsCummulative { get; set; }
+ public string HostType { get; set; }
+ public string PhysicalPrinterSettingsId { get; set; }
public string PrinterSettingsId { get; set; }
public string PrinterTechnology { get; set; }
public string PrinterModel { get; set; }
@@ -177,6 +179,7 @@ namespace UVtools.Core.FileFormats
public byte SupportPillarWideningFactor { set; get; }
public float SupportPillarDiameter { get; set; }
+ public string SupportSmallPillarDiameterPercent { get; set; }
public float SupportMaxBridgesOnPillar { get; set; }
public string SupportPillarConnectionMode { get; set; }
public bool SupportBuildplateOnly { get; set; }
@@ -235,7 +238,7 @@ namespace UVtools.Core.FileFormats
#region Overrides
public override string ToString()
{
- return $"{nameof(SlaPrintSettingsId)}: {SlaPrintSettingsId}, {nameof(LayerHeight)}: {LayerHeight}, {nameof(FadedLayers)}: {FadedLayers}, {nameof(SupportsEnable)}: {SupportsEnable}, {nameof(SupportHeadFrontDiameter)}: {SupportHeadFrontDiameter}, {nameof(SupportHeadPenetration)}: {SupportHeadPenetration}, {nameof(SupportHeadWidth)}: {SupportHeadWidth}, {nameof(SupportPillarWideningFactor)}: {SupportPillarWideningFactor}, {nameof(SupportPillarDiameter)}: {SupportPillarDiameter}, {nameof(SupportMaxBridgesOnPillar)}: {SupportMaxBridgesOnPillar}, {nameof(SupportPillarConnectionMode)}: {SupportPillarConnectionMode}, {nameof(SupportBuildplateOnly)}: {SupportBuildplateOnly}, {nameof(SupportBaseDiameter)}: {SupportBaseDiameter}, {nameof(SupportBaseHeight)}: {SupportBaseHeight}, {nameof(SupportBaseSafetyDistance)}: {SupportBaseSafetyDistance}, {nameof(PadAroundObject)}: {PadAroundObject}, {nameof(SupportObjectElevation)}: {SupportObjectElevation}, {nameof(SupportCriticalAngle)}: {SupportCriticalAngle}, {nameof(SupportMaxBridgeLength)}: {SupportMaxBridgeLength}, {nameof(SupportMaxPillarLinkDistance)}: {SupportMaxPillarLinkDistance}, {nameof(SupportPointsDensityRelative)}: {SupportPointsDensityRelative}, {nameof(SupportPointsMinimalDistance)}: {SupportPointsMinimalDistance}, {nameof(PadEnable)}: {PadEnable}, {nameof(PadWallThickness)}: {PadWallThickness}, {nameof(PadWallHeight)}: {PadWallHeight}, {nameof(PadBrimSize)}: {PadBrimSize}, {nameof(PadMaxMergeDistance)}: {PadMaxMergeDistance}, {nameof(PadWallSlope)}: {PadWallSlope}, {nameof(PadAroundObjectEverywhere)}: {PadAroundObjectEverywhere}, {nameof(PadObjectGap)}: {PadObjectGap}, {nameof(PadObjectConnectorStride)}: {PadObjectConnectorStride}, {nameof(PadObjectConnectorWidth)}: {PadObjectConnectorWidth}, {nameof(PadObjectConnectorPenetration)}: {PadObjectConnectorPenetration}, {nameof(HollowingEnable)}: {HollowingEnable}, {nameof(HollowingMinThickness)}: {HollowingMinThickness}, {nameof(HollowingQuality)}: {HollowingQuality}, {nameof(HollowingClosingDistance)}: {HollowingClosingDistance}, {nameof(SliceClosingRadius)}: {SliceClosingRadius}, {nameof(OutputFilenameFormat)}: {OutputFilenameFormat}, {nameof(CompatiblePrintsCondition)}: {CompatiblePrintsCondition}";
+ return $"{nameof(SlaPrintSettingsId)}: {SlaPrintSettingsId}, {nameof(LayerHeight)}: {LayerHeight}, {nameof(FadedLayers)}: {FadedLayers}, {nameof(SupportsEnable)}: {SupportsEnable}, {nameof(SupportHeadFrontDiameter)}: {SupportHeadFrontDiameter}, {nameof(SupportHeadPenetration)}: {SupportHeadPenetration}, {nameof(SupportHeadWidth)}: {SupportHeadWidth}, {nameof(SupportPillarWideningFactor)}: {SupportPillarWideningFactor}, {nameof(SupportPillarDiameter)}: {SupportPillarDiameter}, {nameof(SupportSmallPillarDiameterPercent)}: {SupportSmallPillarDiameterPercent}, {nameof(SupportMaxBridgesOnPillar)}: {SupportMaxBridgesOnPillar}, {nameof(SupportPillarConnectionMode)}: {SupportPillarConnectionMode}, {nameof(SupportBuildplateOnly)}: {SupportBuildplateOnly}, {nameof(SupportBaseDiameter)}: {SupportBaseDiameter}, {nameof(SupportBaseHeight)}: {SupportBaseHeight}, {nameof(SupportBaseSafetyDistance)}: {SupportBaseSafetyDistance}, {nameof(PadAroundObject)}: {PadAroundObject}, {nameof(SupportObjectElevation)}: {SupportObjectElevation}, {nameof(SupportCriticalAngle)}: {SupportCriticalAngle}, {nameof(SupportMaxBridgeLength)}: {SupportMaxBridgeLength}, {nameof(SupportMaxPillarLinkDistance)}: {SupportMaxPillarLinkDistance}, {nameof(SupportPointsDensityRelative)}: {SupportPointsDensityRelative}, {nameof(SupportPointsMinimalDistance)}: {SupportPointsMinimalDistance}, {nameof(PadEnable)}: {PadEnable}, {nameof(PadWallThickness)}: {PadWallThickness}, {nameof(PadWallHeight)}: {PadWallHeight}, {nameof(PadBrimSize)}: {PadBrimSize}, {nameof(PadMaxMergeDistance)}: {PadMaxMergeDistance}, {nameof(PadWallSlope)}: {PadWallSlope}, {nameof(PadAroundObjectEverywhere)}: {PadAroundObjectEverywhere}, {nameof(PadObjectGap)}: {PadObjectGap}, {nameof(PadObjectConnectorStride)}: {PadObjectConnectorStride}, {nameof(PadObjectConnectorWidth)}: {PadObjectConnectorWidth}, {nameof(PadObjectConnectorPenetration)}: {PadObjectConnectorPenetration}, {nameof(HollowingEnable)}: {HollowingEnable}, {nameof(HollowingMinThickness)}: {HollowingMinThickness}, {nameof(HollowingQuality)}: {HollowingQuality}, {nameof(HollowingClosingDistance)}: {HollowingClosingDistance}, {nameof(SliceClosingRadius)}: {SliceClosingRadius}, {nameof(OutputFilenameFormat)}: {OutputFilenameFormat}, {nameof(CompatiblePrintsCondition)}: {CompatiblePrintsCondition}";
}
#endregion
}
@@ -289,23 +292,8 @@ namespace UVtools.Core.FileFormats
public override FileFormatType FileType => FileFormatType.Archive;
public override FileExtension[] FileExtensions { get; } = {
- new FileExtension("sl1", "PrusaSlicer SL1")
+ new("sl1", "PrusaSlicer SL1")
};
-
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(ChituboxFile),
- typeof(ChituboxZipFile),
- typeof(PHZFile),
- typeof(FDGFile),
- typeof(PhotonSFile),
- typeof(PhotonWorkshopFile),
- typeof(ZCodexFile),
- typeof(CWSFile),
- typeof(LGSFile),
- typeof(UVJFile),
- };
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } = {
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
@@ -342,7 +330,7 @@ namespace UVtools.Core.FileFormats
get => PrinterSettings.DisplayWidth;
set
{
- PrinterSettings.DisplayWidth = value;
+ PrinterSettings.DisplayWidth = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -352,19 +340,44 @@ namespace UVtools.Core.FileFormats
get => PrinterSettings.DisplayHeight;
set
{
- PrinterSettings.DisplayHeight = value;
+ PrinterSettings.DisplayHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => (byte) (PrinterSettings.GammaCorrection > 0 ? LookupCustomValue(Keyword_AntiAliasing, 4) : 1);
+ public override float MaxPrintHeight
+ {
+ get => PrinterSettings.MaxPrintHeight;
+ set
+ {
+ PrinterSettings.MaxPrintHeight = (float)Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override bool MirrorDisplay
+ {
+ get => PrinterSettings.DisplayMirrorX || PrinterSettings.DisplayMirrorY;
+ set
+ {
+ PrinterSettings.DisplayMirrorX = value;
+ PrinterSettings.DisplayMirrorY = false;
+ RaisePropertyChanged();
+ }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => (byte)PrinterSettings.GammaCorrection > 0 ? 4 : 1;
+ set => PrinterSettings.GammaCorrection = value > 0 ? 1 : 0;
+ }
public override float LayerHeight
{
get => OutputConfigSettings.LayerHeight;
set
{
- OutputConfigSettings.LayerHeight = value;
+ OutputConfigSettings.LayerHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -394,7 +407,7 @@ namespace UVtools.Core.FileFormats
get => OutputConfigSettings.ExpTimeFirst;
set
{
- OutputConfigSettings.ExpTimeFirst = value;
+ OutputConfigSettings.ExpTimeFirst = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -404,7 +417,7 @@ namespace UVtools.Core.FileFormats
get => OutputConfigSettings.ExpTime;
set
{
- OutputConfigSettings.ExpTime = value;
+ OutputConfigSettings.ExpTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -412,20 +425,26 @@ namespace UVtools.Core.FileFormats
public override float PrintTime
{
get => OutputConfigSettings.PrintTime;
- set => base.PrintTime = OutputConfigSettings.PrintTime = value;
+ set => base.PrintTime = OutputConfigSettings.PrintTime = (float)Math.Round(value, 2);
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => OutputConfigSettings.UsedMaterial;
set
{
- OutputConfigSettings.UsedMaterial = value;
+ OutputConfigSettings.UsedMaterial = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float MaterialCost => (float) Math.Round(OutputConfigSettings.UsedMaterial * MaterialSettings.BottleCost / MaterialSettings.BottleVolume, 2);
+ public override float MaterialGrams
+ {
+ get => (float) Math.Round(OutputConfigSettings.UsedMaterial * MaterialSettings.MaterialDensity, 2);
+ set { }
+ }
+
+ public override float MaterialCost => MaterialSettings.BottleVolume > 0 ? (float) Math.Round(OutputConfigSettings.UsedMaterial * MaterialSettings.BottleCost / MaterialSettings.BottleVolume, 2) : 0;
public override string MaterialName
{
@@ -453,7 +472,7 @@ namespace UVtools.Core.FileFormats
#region Overrides
public override string ToString()
{
- return $"{nameof(FileFullPath)}: {FileFullPath}, {nameof(MaterialSettings)}: {MaterialSettings}, {nameof(PrintSettings)}: {PrintSettings}, {nameof(OutputConfigSettings)}: {OutputConfigSettings}, {nameof(Statistics)}: {Statistics}, {nameof(LayerCount)}: {LayerCount}, {nameof(TotalHeight)}: {TotalHeight}";
+ return $"{nameof(FileFullPath)}: {FileFullPath}, {nameof(MaterialSettings)}: {MaterialSettings}, {nameof(PrintSettings)}: {PrintSettings}, {nameof(OutputConfigSettings)}: {OutputConfigSettings}, {nameof(Statistics)}: {Statistics}, {nameof(LayerCount)}: {LayerCount}, {nameof(PrintHeight)}: {PrintHeight}";
}
#endregion
@@ -604,6 +623,7 @@ namespace UVtools.Core.FileFormats
{
var attribute = obj.GetType().GetProperty(fieldName);
if (ReferenceEquals(attribute, null)) continue;
+ //Debug.WriteLine(attribute.Name);
Helpers.SetPropertyValue(attribute, obj, keyValue[1]);
Statistics.ImplementedKeys.Add(keyValue[0]);
@@ -620,15 +640,15 @@ namespace UVtools.Core.FileFormats
}
}
- BottomLiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight, 5);
- BottomLiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed, 100);
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, 5);
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, 100);
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, 100);
- BottomLayerOffTime = LookupCustomValue<float>(Keyword_BottomLightOffDelay, 0);
- LayerOffTime = LookupCustomValue<float>(Keyword_LayerOffTime, 0);
- BottomLightPWM = LookupCustomValue<byte>(Keyword_BottomLightPWM, 255);
- LightPWM = LookupCustomValue<byte>(Keyword_LightPWM, 255);
+ BottomLiftHeight = LookupCustomValue(Keyword_BottomLiftHeight, DefaultBottomLiftHeight);
+ BottomLiftSpeed = LookupCustomValue(Keyword_BottomLiftSpeed, DefaultBottomLiftSpeed);
+ LiftHeight = LookupCustomValue(Keyword_LiftHeight, DefaultLiftHeight);
+ LiftSpeed = LookupCustomValue(Keyword_LiftSpeed, DefaultLiftSpeed);
+ RetractSpeed = LookupCustomValue(Keyword_RetractSpeed, DefaultRetractSpeed);
+ BottomLightOffDelay = LookupCustomValue(Keyword_BottomLightOffDelay, DefaultBottomLightOffDelay);
+ LightOffDelay = LookupCustomValue(Keyword_LightOffDelay, DefaultLightOffDelay);
+ BottomLightPWM = LookupCustomValue(Keyword_BottomLightPWM, DefaultLightPWM);
+ LightPWM = LookupCustomValue(Keyword_LightPWM, DefaultBottomLightPWM);
LayerManager = new LayerManager((uint) (OutputConfigSettings.NumSlow + OutputConfigSettings.NumFast), this);
@@ -733,559 +753,6 @@ namespace UVtools.Core.FileFormats
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (!IsValid) return false;
-
- if (to == typeof(ChituboxFile))
- {
- ChituboxFile defaultFormat = (ChituboxFile)FindByType(typeof(ChituboxFile));
- ChituboxFile file = new ChituboxFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- BedSizeX = PrinterSettings.DisplayWidth,
- BedSizeY = PrinterSettings.DisplayHeight,
- BedSizeZ = PrinterSettings.MaxPrintHeight,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = LookupCustomValue<ushort>(Keyword_BottomLightPWM, defaultFormat.HeaderSettings.BottomLightPWM),
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = LookupCustomValue<float>(Keyword_LayerOffTime, defaultFormat.HeaderSettings.LayerOffTime),
- LightPWM = LookupCustomValue<ushort>(Keyword_LightPWM, defaultFormat.HeaderSettings.LightPWM),
- PrintTime = (uint) OutputConfigSettings.PrintTime,
- ProjectorType = PrinterSettings.DisplayMirrorX || PrinterSettings.DisplayMirrorY ? 1u : 0u,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- AntiAliasLevel = ValidateAntiAliasingLevel()
- },
- PrintParametersSettings =
- {
- BottomLayerCount = PrintSettings.FadedLayers,
- BottomLiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight,
- defaultFormat.PrintParametersSettings.BottomLiftHeight),
- BottomLiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed,
- defaultFormat.PrintParametersSettings.BottomLiftSpeed),
- BottomLightOffDelay = LookupCustomValue<float>(Keyword_BottomLightOffDelay,
- defaultFormat.PrintParametersSettings.BottomLightOffDelay),
- CostDollars = MaterialCost,
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight,
- defaultFormat.PrintParametersSettings.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed,
- defaultFormat.PrintParametersSettings.LiftSpeed),
- LightOffDelay = LookupCustomValue<float>(Keyword_LightOffDelay,
- defaultFormat.PrintParametersSettings.LightOffDelay),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed,
- defaultFormat.PrintParametersSettings.RetractSpeed),
- VolumeMl = UsedMaterial,
- WeightG = (float) Math.Round(
- OutputConfigSettings.UsedMaterial * MaterialSettings.MaterialDensity, 2)
- },
- SlicerInfoSettings = {MachineName = MachineName, MachineNameSize = (uint) MachineName.Length}
- };
-
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.HeaderSettings.ResolutionX = PrinterSettings.DisplayPixelsY;
- file.HeaderSettings.ResolutionY = PrinterSettings.DisplayPixelsX;
-
- file.HeaderSettings.BedSizeX = PrinterSettings.DisplayHeight;
- file.HeaderSettings.BedSizeY = PrinterSettings.DisplayWidth;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ChituboxZipFile))
- {
- ChituboxZipFile defaultFormat = (ChituboxZipFile)FindByType(typeof(ChituboxZipFile));
- ChituboxZipFile file = new ChituboxZipFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Filename = Path.GetFileName(FileFullPath),
-
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- MachineX = PrinterSettings.DisplayWidth,
- MachineY = PrinterSettings.DisplayHeight,
- MachineZ = PrinterSettings.MaxPrintHeight,
- MachineType = MachineName,
- ProjectType = PrinterSettings.DisplayMirrorX || PrinterSettings.DisplayMirrorY ? "LCD_mirror" : "Normal",
-
- Resin = MaterialName,
- Price = MaterialCost,
- Weight = (float) Math.Round(UsedMaterial * MaterialSettings.MaterialDensity, 2),
- Volume = UsedMaterial,
- Mirror = (byte) (PrinterSettings.DisplayMirrorX || PrinterSettings.DisplayMirrorY ? 1 : 0),
-
-
- BottomLiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight, defaultFormat.HeaderSettings.BottomLiftHeight),
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.HeaderSettings.LiftHeight),
- BottomLiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed, defaultFormat.HeaderSettings.BottomLiftSpeed),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.HeaderSettings.LiftSpeed),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.HeaderSettings.RetractSpeed),
- BottomLayCount = BottomLayerCount,
- BottomLayerCount = BottomLayerCount,
- BottomLightOffTime = LookupCustomValue<float>(Keyword_BottomLightOffDelay, defaultFormat.HeaderSettings.BottomLightOffTime),
- LightOffTime = LookupCustomValue<float>(Keyword_LightOffDelay, defaultFormat.HeaderSettings.LightOffTime),
- BottomLayExposureTime = BottomExposureTime,
- BottomLayerExposureTime = BottomExposureTime,
- LayerExposureTime = ExposureTime,
- LayerHeight = LayerHeight,
- LayerCount = LayerCount,
- AntiAliasing = ValidateAntiAliasingLevel(),
- BottomLightPWM = LookupCustomValue<byte>(Keyword_BottomLightPWM, defaultFormat.HeaderSettings.BottomLightPWM),
- LightPWM = LookupCustomValue<byte>(Keyword_LightPWM, defaultFormat.HeaderSettings.LightPWM),
-
- EstimatedPrintTime = PrintTime
- },
- };
-
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.HeaderSettings.ResolutionX = PrinterSettings.DisplayPixelsY;
- file.HeaderSettings.ResolutionY = PrinterSettings.DisplayPixelsX;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonWorkshopFile))
- {
- PhotonWorkshopFile defaultFormat = (PhotonWorkshopFile)FindByType(typeof(PhotonWorkshopFile));
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.HeaderSettings.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.HeaderSettings.LiftSpeed) / 60,
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.HeaderSettings.RetractSpeed) / 60,
- LayerOffTime = LookupCustomValue<float>(Keyword_LayerOffTime, defaultFormat.HeaderSettings.LayerOffTime),
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = (float) Math.Round(OutputConfigSettings.UsedMaterial * MaterialSettings.MaterialDensity, 2),
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.HeaderSettings.ResolutionX = PrinterSettings.DisplayPixelsY;
- file.HeaderSettings.ResolutionY = PrinterSettings.DisplayPixelsX;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PHZFile))
- {
- PHZFile defaultFormat = (PHZFile)FindByType(typeof(PHZFile));
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = PrinterSettings.DisplayWidth,
- BedSizeY = PrinterSettings.DisplayHeight,
- BedSizeZ = PrinterSettings.MaxPrintHeight,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = MaterialSettings.InitialExposureTime,
- BottomLayersCount = PrintSettings.FadedLayers,
- BottomLightPWM = LookupCustomValue<ushort>(Keyword_BottomLightPWM, defaultFormat.HeaderSettings.BottomLightPWM),
- LayerCount = LayerCount,
- LayerExposureSeconds = MaterialSettings.ExposureTime,
- LayerHeightMilimeter = PrintSettings.LayerHeight,
- LayerOffTime = LookupCustomValue<float>(Keyword_LayerOffTime, defaultFormat.HeaderSettings.LayerOffTime),
- LightPWM = LookupCustomValue<ushort>(Keyword_LightPWM, defaultFormat.HeaderSettings.LightPWM),
- PrintTime = (uint) OutputConfigSettings.PrintTime,
- ProjectorType = PrinterSettings.DisplayMirrorX || PrinterSettings.DisplayMirrorY ? 1u : 0u,
- ResolutionX = PrinterSettings.DisplayPixelsX,
- ResolutionY = PrinterSettings.DisplayPixelsY,
- BottomLayersCount2 = PrintSettings.FadedLayers,
- BottomLiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight, defaultFormat.HeaderSettings.BottomLiftHeight),
- BottomLiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed, defaultFormat.HeaderSettings.BottomLiftSpeed),
- BottomLightOffDelay = LookupCustomValue<float>(Keyword_BottomLightOffDelay, defaultFormat.HeaderSettings.BottomLightOffDelay),
- CostDollars = MaterialCost,
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.HeaderSettings.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.HeaderSettings.LiftSpeed),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.HeaderSettings.RetractSpeed),
- VolumeMl = OutputConfigSettings.UsedMaterial,
- WeightG = (float)Math.Round(OutputConfigSettings.UsedMaterial * MaterialSettings.MaterialDensity, 2),
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel()
- }
- };
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.HeaderSettings.ResolutionX = ResolutionY;
- file.HeaderSettings.ResolutionY = ResolutionX;
-
- file.HeaderSettings.BedSizeX = PrinterSettings.DisplayHeight;
- file.HeaderSettings.BedSizeY = PrinterSettings.DisplayWidth;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(FDGFile))
- {
- FDGFile defaultFormat = (FDGFile)FindByType(typeof(FDGFile));
- FDGFile file = new FDGFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = PrinterSettings.DisplayWidth,
- BedSizeY = PrinterSettings.DisplayHeight,
- BedSizeZ = PrinterSettings.MaxPrintHeight,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = MaterialSettings.InitialExposureTime,
- BottomLayersCount = PrintSettings.FadedLayers,
- BottomLightPWM = LookupCustomValue<ushort>(Keyword_BottomLightPWM, defaultFormat.HeaderSettings.BottomLightPWM),
- LayerCount = LayerCount,
- LayerExposureSeconds = MaterialSettings.ExposureTime,
- LayerHeightMilimeter = PrintSettings.LayerHeight,
- LayerOffTime = LookupCustomValue<float>(Keyword_LayerOffTime, defaultFormat.HeaderSettings.LayerOffTime),
- LightPWM = LookupCustomValue<ushort>(Keyword_LightPWM, defaultFormat.HeaderSettings.LightPWM),
- PrintTime = (uint) OutputConfigSettings.PrintTime,
- ProjectorType = PrinterSettings.DisplayMirrorX || PrinterSettings.DisplayMirrorY ? 1u : 0u,
- ResolutionX = PrinterSettings.DisplayPixelsX,
- ResolutionY = PrinterSettings.DisplayPixelsY,
- BottomLayersCount2 = PrintSettings.FadedLayers,
- BottomLiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight, defaultFormat.HeaderSettings.BottomLiftHeight),
- BottomLiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed, defaultFormat.HeaderSettings.BottomLiftSpeed),
- BottomLightOffDelay = LookupCustomValue<float>(Keyword_BottomLightOffDelay, defaultFormat.HeaderSettings.BottomLightOffDelay),
- CostDollars = MaterialCost,
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.HeaderSettings.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.HeaderSettings.LiftSpeed),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.HeaderSettings.RetractSpeed),
- VolumeMl = OutputConfigSettings.UsedMaterial,
- WeightG = (float)Math.Round(OutputConfigSettings.UsedMaterial * MaterialSettings.MaterialDensity, 2),
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel()
- }
- };
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.HeaderSettings.ResolutionX = ResolutionY;
- file.HeaderSettings.ResolutionY = ResolutionX;
-
- file.HeaderSettings.BedSizeX = PrinterSettings.DisplayHeight;
- file.HeaderSettings.BedSizeY = PrinterSettings.DisplayWidth;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonSFile))
- {
- PhotonSFile defaultFormat = (PhotonSFile)FindByType(typeof(PhotonSFile));
- PhotonSFile file = new PhotonSFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- BottomExposureSeconds = MaterialSettings.InitialExposureTime,
- BottomLayerCount = PrintSettings.FadedLayers,
- ExposureSeconds = MaterialSettings.ExposureTime,
- LayerHeight = PrintSettings.LayerHeight,
- LayerOffSeconds = LookupCustomValue<double>(Keyword_LayerOffTime, DefaultLightOffDelay),
- LiftHeight = LookupCustomValue<double>(Keyword_LiftHeight, DefaultLiftHeight),
- LiftSpeed = LookupCustomValue<double>(Keyword_LiftSpeed, DefaultLiftSpeed),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, DefaultRetractSpeed),
- Volume = OutputConfigSettings.UsedMaterial,
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- ZCodexFile defaultFormat = (ZCodexFile)FindByType(typeof(ZCodexFile));
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = BottomLayerCount,
- BottomLayersTime = (uint)(BottomExposureTime*1000),
- LayerTime = (uint)(ExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = BottomLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(ExposureTime * 1000),
- BottomLayerExposureTime = (uint)(BottomExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte) (ValidateAntiAliasingLevel() > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = LookupCustomValue<uint>(Keyword_LayerOffTime, defaultFormat.UserSettings.ExposureOffTime) * 1000,
- HollowEnabled = PrintSettings.HollowingEnable ? (byte)1 : (byte)0,
- HollowThickness = PrintSettings.HollowingMinThickness,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount-1,
- ModelLiftEnabled = PrintSettings.SupportObjectElevation > 0 ? (byte)1 : (byte)0,
- ModelLiftHeight = PrintSettings.SupportObjectElevation,
- RaftEnabled = PrintSettings.SupportBaseHeight > 0 ? (byte)1 : (byte)0,
- RaftHeight = PrintSettings.SupportBaseHeight,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = PrinterSettings.AbsoluteCorrection,
- YCorrection = PrinterSettings.AbsoluteCorrection,
- ZLiftDistance = (float)Math.Round(LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.UserSettings.ZLiftDistance), 2),
- ZLiftFeedRate = (float)Math.Round(LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.UserSettings.ZLiftFeedRate), 2),
- ZLiftRetractRate = (float)Math.Round(LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.UserSettings.ZLiftRetractRate), 2),
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile {LayerManager = LayerManager};
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float) Math.Round(LookupCustomValue<float>("Xppm", defaultFormat.SliceSettings.Xppm), 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float) Math.Round(LookupCustomValue<float>("Yppm", defaultFormat.SliceSettings.Xppm), 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.OutputSettings.PlatformXSize = PrinterSettings.DisplayWidth;
- file.OutputSettings.PlatformYSize = PrinterSettings.DisplayHeight;
- file.OutputSettings.PlatformZSize = PrinterSettings.MaxPrintHeight;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint) ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint) BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = LookupCustomValue<uint>("WaitBeforeExpoMs", defaultFormat.SliceSettings.WaitBeforeExpoMs);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = (float) Math.Round(LookupCustomValue<float>(Keyword_LiftHeight, file.SliceSettings.LiftDistance), 2);
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = file.OutputSettings.ZBottomLiftFeedRate = (float) Math.Round(LookupCustomValue<float>(Keyword_LiftSpeed, file.SliceSettings.LiftUpSpeed), 2);
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = (float) Math.Round(LookupCustomValue<float>(Keyword_RetractSpeed, file.SliceSettings.LiftDownSpeed), 2);
- file.SliceSettings.LiftWhenFinished = LookupCustomValue<byte>("LiftWhenFinished", defaultFormat.SliceSettings.LiftWhenFinished);
-
- file.OutputSettings.BlankingLayerTime = LookupCustomValue<uint>("BlankingLayerTime", defaultFormat.OutputSettings.BlankingLayerTime);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = PrinterSettings.DisplayMirrorX;
- file.OutputSettings.FlipY = PrinterSettings.DisplayMirrorY;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.SliceSettings.Xres = file.OutputSettings.XResolution = (ushort) ResolutionY;
- file.SliceSettings.Yres = file.OutputSettings.YResolution = (ushort) ResolutionX;
-
- file.OutputSettings.PlatformXSize = PrinterSettings.DisplayHeight;
- file.OutputSettings.PlatformYSize = PrinterSettings.DisplayWidth;
- }
-
- file.Printer = LookupCustomValue<bool>("NOVAMAKER_GRAY2RGB_ENCODE", false, true) ||
- MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Unknown;
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(LGSFile))
- {
- LGSFile defaultFormat = (LGSFile)FindByType(typeof(LGSFile));
- LGSFile file = new LGSFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- ExposureTimeMs = ExposureTime * 1000,
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.HeaderSettings.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.HeaderSettings.LiftSpeed),
- LiftSpeed_ = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.HeaderSettings.LiftSpeed),
- LightOffDelayMs = LookupCustomValue<float>(Keyword_LayerOffTime, defaultFormat.HeaderSettings.LightOffDelayMs) * 1000,
- BottomHeight = BottomLayerCount * LayerHeight,
- BottomExposureTimeMs = BottomExposureTime * 1000,
- LayerCount = LayerCount,
- BottomLiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed, defaultFormat.HeaderSettings.BottomLiftSpeed),
- BottomLiftSpeed_ = LookupCustomValue<float>(Keyword_BottomLiftSpeed, defaultFormat.HeaderSettings.BottomLiftSpeed_),
- BottomLiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight, defaultFormat.HeaderSettings.BottomLiftHeight),
- BottomLightOffDelayMs = LookupCustomValue<float>(Keyword_BottomLightOffDelay, defaultFormat.HeaderSettings.BottomLightOffDelayMs) * 1000,
- PixelPerMmX = (float) Math.Round(ResolutionY / PrinterSettings.DisplayWidth, 3),
- PixelPerMmY = (float) Math.Round(ResolutionX / PrinterSettings.DisplayHeight, 3),
- }
- };
-
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.HeaderSettings.ResolutionX = PrinterSettings.DisplayPixelsY;
- file.HeaderSettings.ResolutionY = PrinterSettings.DisplayPixelsX;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(UVJFile))
- {
- UVJFile defaultFormat = (UVJFile)FindByType(typeof(UVJFile));
- UVJFile file = new UVJFile
- {
- LayerManager = LayerManager,
- JsonSettings = new UVJFile.Settings
- {
- Properties = new UVJFile.Properties
- {
- Size = new UVJFile.Size
- {
- X = (ushort)ResolutionX,
- Y = (ushort)ResolutionY,
- Millimeter = new UVJFile.Millimeter
- {
- X = PrinterSettings.DisplayWidth,
- Y = PrinterSettings.DisplayHeight,
- },
- LayerHeight = LayerHeight,
- Layers = LayerCount
- },
- Bottom = new UVJFile.Bottom
- {
- LiftHeight = LookupCustomValue<float>(Keyword_BottomLiftHeight, defaultFormat.JsonSettings.Properties.Bottom.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_BottomLiftSpeed, defaultFormat.JsonSettings.Properties.Bottom.LiftSpeed),
- LightOnTime = BottomExposureTime,
- LightOffTime = LookupCustomValue<float>(Keyword_BottomLightOffDelay, defaultFormat.JsonSettings.Properties.Bottom.LightOffTime),
- LightPWM = LookupCustomValue<byte>(Keyword_BottomLightPWM, defaultFormat.JsonSettings.Properties.Bottom.LightPWM),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.JsonSettings.Properties.Bottom.RetractSpeed),
- Count = BottomLayerCount
- //RetractHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Bottom.RetractHeight),
- },
- Exposure = new UVJFile.Exposure
- {
- LiftHeight = LookupCustomValue<float>(Keyword_LiftHeight, defaultFormat.JsonSettings.Properties.Exposure.LiftHeight),
- LiftSpeed = LookupCustomValue<float>(Keyword_LiftSpeed, defaultFormat.JsonSettings.Properties.Exposure.LiftSpeed),
- LightOnTime = ExposureTime,
- LightOffTime = LookupCustomValue<float>(Keyword_LightOffDelay, defaultFormat.JsonSettings.Properties.Exposure.LightOffTime),
- LightPWM = LookupCustomValue<byte>(Keyword_LightPWM, defaultFormat.JsonSettings.Properties.Exposure.LightPWM),
- RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, defaultFormat.JsonSettings.Properties.Exposure.RetractSpeed),
- },
- AntiAliasLevel = ValidateAntiAliasingLevel()
- }
- }
- };
-
- if (LookupCustomValue<bool>("FLIP_XY", false, true))
- {
- file.JsonSettings.Properties.Size.X = (ushort) ResolutionY;
- file.JsonSettings.Properties.Size.Y = (ushort) ResolutionX;
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
-
public T LookupCustomValue<T>(string name, T defaultValue, bool existsOnly = false)
{
if (string.IsNullOrEmpty(PrinterSettings.PrinterNotes)) return defaultValue;
@@ -1305,10 +772,18 @@ namespace UVtools.Core.FileFormats
for (int x = 0; x < value.Length; x++)
{
char c = value[x];
- if (!char.IsLetterOrDigit(c) && c != '.')
+ if (typeof(T) == typeof(string))
{
- break;
+ if (char.IsWhiteSpace(c)) break;
+ }
+ else
+ {
+ if (!char.IsLetterOrDigit(c) && c != '.')
+ {
+ break;
+ }
}
+
result += c;
}
diff --git a/UVtools.Core/FileFormats/UVJFile.cs b/UVtools.Core/FileFormats/UVJFile.cs
index e57e319..c74f438 100644
--- a/UVtools.Core/FileFormats/UVJFile.cs
+++ b/UVtools.Core/FileFormats/UVJFile.cs
@@ -125,24 +125,12 @@ namespace UVtools.Core.FileFormats
#endregion
#region Properties
- public Settings JsonSettings { get; set; } = new Settings();
+ public Settings JsonSettings { get; set; } = new();
public override FileFormatType FileType => FileFormatType.Archive;
public override FileExtension[] FileExtensions { get; } = {
- new FileExtension("uvj", "UVJ")
- };
-
- public override Type[] ConvertToFormats { get; } =
- {
- typeof(ChituboxFile),
- typeof(ChituboxZipFile),
- typeof(PHZFile),
- typeof(FDGFile),
- typeof(PhotonWorkshopFile),
- typeof(ZCodexFile),
- typeof(CWSFile),
- //typeof(LGSFile)
+ new("uvj", "UVJ")
};
public override PrintParameterModifier[] PrintParameterModifiers { get; } = {
@@ -150,8 +138,8 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.BottomExposureSeconds,
PrintParameterModifier.ExposureSeconds,
- PrintParameterModifier.BottomLayerOffTime,
- PrintParameterModifier.LayerOffTime,
+ PrintParameterModifier.BottomLightOffDelay,
+ PrintParameterModifier.LightOffDelay,
PrintParameterModifier.BottomLiftHeight,
PrintParameterModifier.BottomLiftSpeed,
PrintParameterModifier.LiftHeight,
@@ -191,7 +179,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Size.Millimeter.X;
set
{
- JsonSettings.Properties.Size.Millimeter.X = value;
+ JsonSettings.Properties.Size.Millimeter.X = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -201,12 +189,23 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Size.Millimeter.Y;
set
{
- JsonSettings.Properties.Size.Millimeter.Y = value;
+ JsonSettings.Properties.Size.Millimeter.Y = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override byte AntiAliasing => JsonSettings.Properties.AntiAliasLevel;
+ public override bool MirrorDisplay { get; set; }
+
+ public override byte AntiAliasing
+ {
+ get => JsonSettings.Properties.AntiAliasLevel;
+ set
+ {
+ JsonSettings.Properties.AntiAliasLevel = value.Clamp(1, 16);
+ RaisePropertyChanged();
+ }
+
+ }
public override bool SupportPerLayerSettings => true;
@@ -215,7 +214,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Size.LayerHeight;
set
{
- JsonSettings.Properties.Size.LayerHeight = value;
+ JsonSettings.Properties.Size.LayerHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -245,7 +244,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Bottom.LightOnTime;
set
{
- JsonSettings.Properties.Bottom.LightOnTime = value;
+ JsonSettings.Properties.Bottom.LightOnTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -255,27 +254,27 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Exposure.LightOnTime;
set
{
- JsonSettings.Properties.Exposure.LightOnTime = value;
+ JsonSettings.Properties.Exposure.LightOnTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float BottomLayerOffTime
+ public override float BottomLightOffDelay
{
get => JsonSettings.Properties.Bottom.LightOffTime;
set
{
- JsonSettings.Properties.Bottom.LightOffTime = value;
+ JsonSettings.Properties.Bottom.LightOffTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
- public override float LayerOffTime
+ public override float LightOffDelay
{
get => JsonSettings.Properties.Exposure.LightOffTime;
set
{
- JsonSettings.Properties.Exposure.LightOffTime = value;
+ JsonSettings.Properties.Exposure.LightOffTime = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -285,7 +284,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Bottom.LiftHeight;
set
{
- JsonSettings.Properties.Bottom.LiftHeight = value;
+ JsonSettings.Properties.Bottom.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -295,7 +294,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Exposure.LiftHeight;
set
{
- JsonSettings.Properties.Exposure.LiftHeight = value;
+ JsonSettings.Properties.Exposure.LiftHeight = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -305,7 +304,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Bottom.LiftSpeed;
set
{
- JsonSettings.Properties.Bottom.LiftSpeed = value;
+ JsonSettings.Properties.Bottom.LiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -315,7 +314,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Exposure.LiftSpeed;
set
{
- JsonSettings.Properties.Exposure.LiftSpeed = value;
+ JsonSettings.Properties.Exposure.LiftSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -325,7 +324,7 @@ namespace UVtools.Core.FileFormats
get => JsonSettings.Properties.Exposure.RetractSpeed;
set
{
- JsonSettings.Properties.Exposure.RetractSpeed = value;
+ JsonSettings.Properties.Exposure.RetractSpeed = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -363,6 +362,9 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
+
base.Encode(fileFullPath, progress);
// Redo layer data
@@ -379,7 +381,7 @@ namespace UVtools.Core.FileFormats
LiftSpeed = layer.LiftSpeed,
RetractHeight = layer.LiftHeight+1,
RetractSpeed = layer.RetractSpeed,
- LightOffTime = layer.LayerOffTime,
+ LightOffTime = layer.LightOffDelay,
LightOnTime = layer.ExposureTime,
LightPWM = layer.LightPWM
}
@@ -486,7 +488,7 @@ namespace UVtools.Core.FileFormats
LiftHeight = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.LiftHeight : GetInitialLayerValueOrNormal(layerIndex, BottomLiftHeight, LiftHeight),
LiftSpeed = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.LiftSpeed : GetInitialLayerValueOrNormal(layerIndex, BottomLiftSpeed, LiftSpeed),
RetractSpeed = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.RetractSpeed : RetractSpeed,
- LayerOffTime = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.LightOffTime : GetInitialLayerValueOrNormal(layerIndex, BottomLayerOffTime, LayerOffTime),
+ LightOffDelay = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.LightOffTime : GetInitialLayerValueOrNormal(layerIndex, BottomLightOffDelay, LightOffDelay),
ExposureTime = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.LightOnTime : GetInitialLayerValueOrNormal(layerIndex, BottomExposureTime, ExposureTime),
LightPWM = JsonSettings.Layers.Count >= layerIndex ? JsonSettings.Layers[(int)layerIndex].Exposure.LightPWM : GetInitialLayerValueOrNormal(layerIndex, BottomLightPWM, LightPWM),
};
@@ -524,366 +526,6 @@ namespace UVtools.Core.FileFormats
//Decode(FileFullPath, progress);
}
-
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- if (to == typeof(ChituboxFile))
- {
- ChituboxFile file = new ChituboxFile
- {
-
- LayerManager = LayerManager,
- HeaderSettings
- =
- {
- BedSizeX = DisplayWidth,
- BedSizeY = DisplayHeight,
- BedSizeZ = TotalHeight,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = LayerOffTime,
- LightPWM = LightPWM,
- PrintTime = (uint) PrintTimeOrComputed,
- ProjectorType = 0,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- AntiAliasLevel = ValidateAntiAliasingLevel()
- },
- PrintParametersSettings =
- {
- BottomLayerCount = BottomLayerCount,
- BottomLiftHeight = BottomLiftHeight,
- BottomLiftSpeed = BottomLiftSpeed,
- BottomLightOffDelay = BottomLayerOffTime,
- CostDollars = MaterialCost,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed,
- LightOffDelay = LayerOffTime,
- RetractSpeed = RetractSpeed,
- VolumeMl = UsedMaterial,
- WeightG = 0
- },
- SlicerInfoSettings = { MachineName = MachineName, MachineNameSize = (uint)MachineName.Length }
- };
-
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ChituboxZipFile))
- {
- ChituboxZipFile file = new ChituboxZipFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Filename = Path.GetFileName(FileFullPath),
-
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- MachineX = DisplayWidth,
- MachineY = DisplayHeight,
- MachineZ = TotalHeight,
- MachineType = MachineName,
- ProjectType = "Normal",
-
- Resin = MaterialName,
- Price = MaterialCost,
- Weight = 0,
- Volume = UsedMaterial,
- Mirror = 0,
-
-
- BottomLiftHeight = BottomLiftHeight,
- LiftHeight = LiftHeight,
- BottomLiftSpeed = BottomLiftSpeed,
- LiftSpeed = LiftSpeed,
- RetractSpeed = RetractSpeed,
- BottomLayCount = BottomLayerCount,
- BottomLayerCount = BottomLayerCount,
- BottomLightOffTime = BottomLayerOffTime,
- LightOffTime = LayerOffTime,
- BottomLayExposureTime = BottomExposureTime,
- BottomLayerExposureTime = BottomExposureTime,
- LayerExposureTime = ExposureTime,
- LayerHeight = LayerHeight,
- LayerCount = LayerCount,
- AntiAliasing = ValidateAntiAliasingLevel(),
- BottomLightPWM = BottomLightPWM,
- LightPWM = LightPWM,
-
- EstimatedPrintTime = PrintTime
- },
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PHZFile))
- {
- PHZFile file = new PHZFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = DisplayWidth,
- BedSizeY = DisplayHeight,
- BedSizeZ = TotalHeight,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = LayerOffTime,
- LightPWM = LightPWM,
- PrintTime = (uint) PrintTimeOrComputed,
- ProjectorType = 0,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = BottomLiftHeight,
- BottomLiftSpeed = BottomLiftSpeed,
- BottomLightOffDelay = BottomLayerOffTime,
- CostDollars = MaterialCost,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed,
- RetractSpeed = RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = 0,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(FDGFile))
- {
- FDGFile file = new FDGFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- Version = 2,
- BedSizeX = DisplayWidth,
- BedSizeY = DisplayHeight,
- BedSizeZ = TotalHeight,
- OverallHeightMilimeter = TotalHeight,
- BottomExposureSeconds = BottomExposureTime,
- BottomLayersCount = BottomLayerCount,
- BottomLightPWM = BottomLightPWM,
- LayerCount = LayerCount,
- LayerExposureSeconds = ExposureTime,
- LayerHeightMilimeter = LayerHeight,
- LayerOffTime = LayerOffTime,
- LightPWM = LightPWM,
- PrintTime = (uint) PrintTimeOrComputed,
- ProjectorType = 0,
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- BottomLayersCount2 = BottomLayerCount,
- BottomLiftHeight = BottomLiftHeight,
- BottomLiftSpeed = BottomLiftSpeed,
- BottomLightOffDelay = BottomLayerOffTime,
- CostDollars = MaterialCost,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed,
- RetractSpeed = RetractSpeed,
- VolumeMl = UsedMaterial,
- AntiAliasLevelInfo = ValidateAntiAliasingLevel(),
- WeightG = 0,
- MachineName = MachineName,
- MachineNameSize = (uint)MachineName.Length
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(PhotonWorkshopFile))
- {
- PhotonWorkshopFile file = new PhotonWorkshopFile
- {
- LayerManager = LayerManager,
- HeaderSettings =
- {
- ResolutionX = ResolutionX,
- ResolutionY = ResolutionY,
- LayerHeight = LayerHeight,
- LayerExposureTime = ExposureTime,
- LiftHeight = LiftHeight,
- LiftSpeed = LiftSpeed / 60,
- RetractSpeed = RetractSpeed / 60,
- LayerOffTime = LayerOffTime,
- BottomLayersCount = BottomLayerCount,
- BottomExposureSeconds = BottomExposureTime,
- Price = MaterialCost,
- Volume = UsedMaterial,
- Weight = 0,
- AntiAliasing = ValidateAntiAliasingLevel()
- }
- };
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- if (to == typeof(ZCodexFile))
- {
- TimeSpan ts = new TimeSpan(0, 0, (int)PrintTime);
- ZCodexFile file = new ZCodexFile
- {
- ResinMetadataSettings = new ZCodexFile.ResinMetadata
- {
- MaterialId = 2,
- Material = MaterialName,
- AdditionalSupportLayerTime = 0,
- BottomLayersNumber = BottomLayerCount,
- BottomLayersTime = (uint)(BottomExposureTime * 1000),
- LayerTime = (uint)(ExposureTime * 1000),
- DisableSettingsChanges = false,
- LayerThickness = LayerHeight,
- PrintTime = (uint)PrintTime,
- TotalLayersCount = LayerCount,
- TotalMaterialVolumeUsed = UsedMaterial,
- TotalMaterialWeightUsed = UsedMaterial,
- },
- UserSettings = new ZCodexFile.UserSettingsdata
- {
- Printer = MachineName,
- BottomLayersCount = BottomLayerCount,
- PrintTime = $"{ts.Hours}h {ts.Minutes}m",
- LayerExposureTime = (uint)(ExposureTime * 1000),
- BottomLayerExposureTime = (uint)(BottomExposureTime * 1000),
- MaterialId = 2,
- LayerThickness = $"{LayerHeight} mm",
- AntiAliasing = (byte)(AntiAliasing > 1 ? 1 : 0),
- CrossSupportEnabled = 1,
- ExposureOffTime = (uint)LayerOffTime,
- HollowEnabled = 0,
- HollowThickness = 0,
- InfillDensity = 0,
- IsAdvanced = 0,
- MaterialType = MaterialName,
- MaterialVolume = UsedMaterial,
- MaxLayer = LayerCount - 1,
- ModelLiftEnabled = 0,
- ModelLiftHeight = 0,
- RaftEnabled = 0,
- RaftHeight = 0,
- RaftOffset = 0,
- SupportAdditionalExposureEnabled = 0,
- SupportAdditionalExposureTime = 0,
- XCorrection = 0,
- YCorrection = 0,
- ZLiftDistance = LiftHeight,
- ZLiftFeedRate = LiftSpeed,
- ZLiftRetractRate = RetractSpeed,
- },
- ZCodeMetadataSettings = new ZCodexFile.ZCodeMetadata
- {
- PrintTime = (uint)PrintTime,
- PrinterName = MachineName,
- Materials = new List<ZCodexFile.ZCodeMetadata.MaterialsData>
- {
- new ZCodexFile.ZCodeMetadata.MaterialsData
- {
- Name = MaterialName,
- ExtruderType = "MAIN",
- Id = 0,
- Usage = 0,
- Temperature = 0
- }
- },
- },
- LayerManager = LayerManager
- };
-
- float usedMaterial = UsedMaterial / LayerCount;
- for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
- {
- file.ResinMetadataSettings.Layers.Add(new ZCodexFile.ResinMetadata.LayerData
- {
- Layer = layerIndex,
- UsedMaterialVolume = usedMaterial
- });
- }
-
- file.SetThumbnails(Thumbnails);
- file.Encode(fileFullPath, progress);
- return true;
- }
-
- if (to == typeof(CWSFile))
- {
- CWSFile defaultFormat = (CWSFile)FindByType(typeof(CWSFile));
- CWSFile file = new CWSFile { LayerManager = LayerManager };
-
- file.SliceSettings.Xppm = file.OutputSettings.PixPermmX = (float)Math.Round(ResolutionX / DisplayWidth, 3);
- file.SliceSettings.Yppm = file.OutputSettings.PixPermmY = (float)Math.Round(ResolutionY / DisplayHeight, 3);
- file.ResolutionX = (ushort)ResolutionX;
- file.ResolutionY = (ushort)ResolutionY;
- file.SliceSettings.Thickness = file.OutputSettings.LayerThickness = LayerHeight;
- file.SliceSettings.LayersNum = file.OutputSettings.LayersNum = LayerCount;
- file.SliceSettings.HeadLayersNum = file.OutputSettings.NumberBottomLayers = BottomLayerCount;
- file.SliceSettings.LayersExpoMs = file.OutputSettings.LayerTime = (uint)ExposureTime * 1000;
- file.SliceSettings.HeadLayersExpoMs = file.OutputSettings.BottomLayersTime = (uint)BottomExposureTime * 1000;
- file.SliceSettings.WaitBeforeExpoMs = (uint)(LayerOffTime * 1000);
- file.SliceSettings.LiftDistance = file.OutputSettings.LiftDistance = LiftHeight;
- file.SliceSettings.LiftUpSpeed = file.OutputSettings.ZLiftFeedRate = LiftSpeed;
- file.SliceSettings.LiftDownSpeed = file.OutputSettings.ZLiftRetractRate = RetractSpeed;
- file.SliceSettings.LiftWhenFinished = defaultFormat.SliceSettings.LiftWhenFinished;
-
- file.OutputSettings.BlankingLayerTime = (uint)(LayerOffTime * 1000);
- //file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.OutlineWidthInset = 0;
- //file.OutputSettings.OutlineWidthOutset = 0;
- file.OutputSettings.RenderOutlines = false;
- //file.OutputSettings.TiltValue = 0;
- //file.OutputSettings.UseMainliftGCodeTab = false;
- //file.OutputSettings.AntiAliasing = 0;
- //file.OutputSettings.AntiAliasingValue = 0;
- file.OutputSettings.FlipX = false;
- file.OutputSettings.FlipY = file.OutputSettings.FlipX;
- file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
- file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
-
- /*file.Printer = MachineName.Contains("Bene4 Mono") ||
- FileFullPath.Contains("bene4_mono")
- ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;*/
-
- file.Encode(fileFullPath, progress);
-
- return true;
- }
-
- return false;
- }
-
#endregion
}
}
diff --git a/UVtools.Core/FileFormats/ZCodexFile.cs b/UVtools.Core/FileFormats/ZCodexFile.cs
index 79d738a..208cd29 100644
--- a/UVtools.Core/FileFormats/ZCodexFile.cs
+++ b/UVtools.Core/FileFormats/ZCodexFile.cs
@@ -15,6 +15,7 @@ using System.Text;
using System.Text.RegularExpressions;
using Emgu.CV;
using Emgu.CV.CvEnum;
+using Emgu.CV.Stitching;
using Emgu.CV.Util;
using Newtonsoft.Json;
using UVtools.Core.Extensions;
@@ -62,7 +63,7 @@ namespace UVtools.Core.FileFormats
public uint TotalLayersCount { get; set; }
public bool DisableSettingsChanges { get; set; }
- public List<LayerData> Layers { get; set; } = new List<LayerData>();
+ public List<LayerData> Layers { get; set; } = new();
}
public class UserSettingsdata
@@ -85,7 +86,7 @@ namespace UVtools.Core.FileFormats
//public uint LayerThicknessesDisplayTime { get; set; } arr
public uint ExposureOffTime { get; set; } = 5;
public uint BottomLayerExposureTime { get; set; }
- public uint BottomLayersCount { get; set; }
+ public ushort BottomLayersCount { get; set; }
public byte SupportAdditionalExposureEnabled { get; set; }
public uint SupportAdditionalExposureTime { get; set; }
public float ZLiftDistance { get; set; } = 5;
@@ -115,7 +116,18 @@ namespace UVtools.Core.FileFormats
public string MinFirmwareVersion { get; set; } = "20013";
public uint PrinterModelEnumId { get; set; } = 40;
public string PrinterName { get; set; } = "Inkspire";
- public List<MaterialsData> Materials { get; set; }
+
+ public List<MaterialsData> Materials { get; set; } = new()
+ {
+ new MaterialsData
+ {
+ Name = "",
+ ExtruderType = "MAIN",
+ Id = 0,
+ Usage = 0,
+ Temperature = 0
+ }
+ };
public byte HeatbedTemperature { get; set; }
public byte ChamberTemperature { get; set; }
public uint CommandCount { get; set; }
@@ -139,20 +151,18 @@ namespace UVtools.Core.FileFormats
#endregion
#region Properties
- public ResinMetadata ResinMetadataSettings { get; set; } = new ResinMetadata();
- public UserSettingsdata UserSettings { get; set; } = new UserSettingsdata();
- public ZCodeMetadata ZCodeMetadataSettings { get; set; } = new ZCodeMetadata();
+ public ResinMetadata ResinMetadataSettings { get; set; } = new();
+ public UserSettingsdata UserSettings { get; set; } = new();
+ public ZCodeMetadata ZCodeMetadataSettings { get; set; } = new();
- public List<LayerData> LayersSettings { get; } = new List<LayerData>();
+ public List<LayerData> LayersSettings { get; } = new();
public override FileFormatType FileType => FileFormatType.Archive;
public override FileExtension[] FileExtensions { get; } = {
- new FileExtension("zcodex", "Z-Suite ZCodex")
+ new("zcodex", "Z-Suite ZCodex")
};
- public override Type[] ConvertToFormats { get; } = null;
-
public override PrintParameterModifier[] PrintParameterModifiers { get; } = {
PrintParameterModifier.BottomLayerCount,
PrintParameterModifier.BottomExposureSeconds,
@@ -160,8 +170,9 @@ namespace UVtools.Core.FileFormats
PrintParameterModifier.LiftHeight,
- PrintParameterModifier.RetractSpeed,
PrintParameterModifier.LiftSpeed,
+ PrintParameterModifier.RetractSpeed,
+ PrintParameterModifier.LightOffDelay
};
public override PrintParameterModifier[] PrintParameterPerLayerModifiers { get; } = {
@@ -173,18 +184,18 @@ namespace UVtools.Core.FileFormats
public override byte ThumbnailsCount { get; } = 1;
- public override System.Drawing.Size[] ThumbnailsOriginalSize { get; } = {new System.Drawing.Size(320, 180)};
+ public override System.Drawing.Size[] ThumbnailsOriginalSize { get; } = {new(320, 180)};
public override uint ResolutionX
{
get => 1440;
- set => throw new NotImplementedException();
+ set { }
}
public override uint ResolutionY
{
get => 2560;
- set => throw new NotImplementedException();
+ set { }
}
public override float DisplayWidth
@@ -198,14 +209,30 @@ namespace UVtools.Core.FileFormats
set { }
}
- public override byte AntiAliasing => UserSettings.AntiAliasing;
+ public override bool MirrorDisplay
+ {
+ get => true;
+ set { }
+ }
+
+ public override byte AntiAliasing
+ {
+ get => UserSettings.AntiAliasing;
+ set
+ {
+ UserSettings.AntiAliasing = value.Clamp(1, 16);
+ RaisePropertyChanged();
+ }
+
+ }
public override float LayerHeight
{
get => ResinMetadataSettings.LayerThickness;
set
{
- ResinMetadataSettings.LayerThickness = value;
+ ResinMetadataSettings.LayerThickness = (float)Math.Round(value, 2);
+ UserSettings.LayerThickness = $"{ResinMetadataSettings.LayerThickness} mm";
RaisePropertyChanged();
}
}
@@ -214,8 +241,8 @@ namespace UVtools.Core.FileFormats
{
set
{
- UserSettings.MaxLayer = LastLayerIndex;
ResinMetadataSettings.TotalLayersCount = LayerCount;
+ UserSettings.MaxLayer = LastLayerIndex;
RaisePropertyChanged();
RaisePropertyChanged(nameof(NormalLayerCount));
}
@@ -226,7 +253,7 @@ namespace UVtools.Core.FileFormats
get => ResinMetadataSettings.BottomLayersNumber;
set
{
- ResinMetadataSettings.BottomLayersNumber = value;
+ ResinMetadataSettings.BottomLayersNumber = UserSettings.BottomLayersCount = value;
RaisePropertyChanged();
}
}
@@ -236,7 +263,7 @@ namespace UVtools.Core.FileFormats
get => (float) Math.Round(UserSettings.BottomLayerExposureTime / 1000f, 2);
set
{
- UserSettings.BottomLayerExposureTime = (uint) (value * 1000f);
+ ResinMetadataSettings.BottomLayersTime = UserSettings.BottomLayerExposureTime = (uint) (value * 1000f);
RaisePropertyChanged();
}
}
@@ -246,7 +273,7 @@ namespace UVtools.Core.FileFormats
get => (float) Math.Round(UserSettings.LayerExposureTime / 1000f, 2);
set
{
- UserSettings.LayerExposureTime = (uint) (value * 1000f);
+ ResinMetadataSettings.LayerTime = UserSettings.LayerExposureTime = (uint) (value * 1000f);
RaisePropertyChanged();
}
}
@@ -256,7 +283,7 @@ namespace UVtools.Core.FileFormats
get => UserSettings.ZLiftDistance;
set
{
- UserSettings.ZLiftDistance = value;
+ UserSettings.ZLiftDistance = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -266,7 +293,7 @@ namespace UVtools.Core.FileFormats
get => UserSettings.ZLiftFeedRate;
set
{
- UserSettings.ZLiftFeedRate = value;
+ UserSettings.ZLiftFeedRate = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -276,27 +303,50 @@ namespace UVtools.Core.FileFormats
get => UserSettings.ZLiftRetractRate;
set
{
- UserSettings.ZLiftRetractRate = value;
+ UserSettings.ZLiftRetractRate = (float)Math.Round(value, 2);
RaisePropertyChanged();
}
}
+ public override float LightOffDelay
+ {
+ get => (float) Math.Round(ResinMetadataSettings.BlankingLayerTime / 1000f, 2);
+ set
+ {
+ UserSettings.ExposureOffTime = ResinMetadataSettings.BlankingLayerTime = (uint)(value * 1000);
+ RaisePropertyChanged();
+ }
+ }
+
+
public override float PrintTime
{
get => ResinMetadataSettings.PrintTime;
set
{
+ TimeSpan ts = new TimeSpan(0, 0, (int)value);
ResinMetadataSettings.PrintTime = (uint) value;
+ UserSettings.PrintTime = $"{ts.Hours}h {ts.Minutes}m";
base.PrintTime = value;
}
}
- public override float UsedMaterial
+ public override float MaterialMilliliters
{
get => ResinMetadataSettings.TotalMaterialVolumeUsed;
set
{
- ResinMetadataSettings.TotalMaterialVolumeUsed = (float) Math.Round(value, 2);
+ UserSettings.MaterialVolume = ResinMetadataSettings.TotalMaterialVolumeUsed = (float) Math.Round(value, 2);
+ RaisePropertyChanged();
+ }
+ }
+
+ public override float MaterialGrams
+ {
+ get => ResinMetadataSettings.TotalMaterialWeightUsed;
+ set
+ {
+ ResinMetadataSettings.TotalMaterialWeightUsed = (float) Math.Round(value, 2);
RaisePropertyChanged();
}
}
@@ -334,7 +384,21 @@ namespace UVtools.Core.FileFormats
public override void Encode(string fileFullPath, OperationProgress progress = null)
{
+ progress ??= new OperationProgress();
+ progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
base.Encode(fileFullPath, progress);
+
+ float usedMaterial = MaterialMilliliters / LayerCount;
+ ResinMetadataSettings.Layers.Clear();
+ for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
+ {
+ ResinMetadataSettings.Layers.Add(new ResinMetadata.LayerData
+ {
+ Layer = layerIndex,
+ UsedMaterialVolume = usedMaterial
+ });
+ }
+
using (ZipArchive outputFile = ZipFile.Open(fileFullPath, ZipArchiveMode.Create))
{
outputFile.PutFileContent("ResinMetadata", JsonConvert.SerializeObject(ResinMetadataSettings), ZipArchiveMode.Create);
@@ -606,10 +670,6 @@ M106 S0
//Decode(FileFullPath, progress);
}
- public override bool Convert(Type to, string fileFullPath, OperationProgress progress = null)
- {
- throw new NotImplementedException();
- }
#endregion
}
}
diff --git a/UVtools.Core/Helpers.cs b/UVtools.Core/Helpers.cs
index faf36b9..a3f2d54 100644
--- a/UVtools.Core/Helpers.cs
+++ b/UVtools.Core/Helpers.cs
@@ -71,7 +71,7 @@ namespace UVtools.Core
return true;
case "boolean":
if(char.IsDigit(value[0]))
- attribute.SetValue(obj, !value.Equals(0));
+ attribute.SetValue(obj, !value.Equals("0"));
else
attribute.SetValue(obj, value.Equals("True", StringComparison.InvariantCultureIgnoreCase));
return true;
diff --git a/UVtools.Core/Layer/Layer.cs b/UVtools.Core/Layer/Layer.cs
index 568692b..ebec600 100644
--- a/UVtools.Core/Layer/Layer.cs
+++ b/UVtools.Core/Layer/Layer.cs
@@ -84,13 +84,13 @@ namespace UVtools.Core
/// <summary>
/// Gets or sets the layer off time in seconds
/// </summary>
- public float LayerOffTime
+ public float LightOffDelay
{
- get => _layerOffTime;
+ get => _lightOffDelay;
set
{
- if (value <= 0) value = SlicerFile.GetInitialLayerValueOrNormal(Index, SlicerFile.BottomLayerOffTime, SlicerFile.LayerOffTime);
- RaiseAndSetIfChanged(ref _layerOffTime, value);
+ if (value <= 0) value = SlicerFile.GetInitialLayerValueOrNormal(Index, SlicerFile.BottomLightOffDelay, SlicerFile.LightOffDelay);
+ RaiseAndSetIfChanged(ref _lightOffDelay, value);
}
}
@@ -162,7 +162,7 @@ namespace UVtools.Core
private uint _index;
private float _positionZ;
private float _exposureTime;
- private float _layerOffTime = FileFormat.DefaultLightOffDelay;
+ private float _lightOffDelay = FileFormat.DefaultLightOffDelay;
private float _liftHeight = FileFormat.DefaultLiftHeight;
private float _liftSpeed = FileFormat.DefaultLiftSpeed;
private float _retractSpeed = FileFormat.DefaultRetractSpeed;
@@ -348,7 +348,7 @@ namespace UVtools.Core
public override string ToString()
{
- return $"{nameof(Index)}: {Index}, {nameof(Filename)}: {Filename}, {nameof(NonZeroPixelCount)}: {NonZeroPixelCount}, {nameof(BoundingRectangle)}: {BoundingRectangle}, {nameof(IsBottomLayer)}: {IsBottomLayer}, {nameof(IsNormalLayer)}: {IsNormalLayer}, {nameof(PositionZ)}: {PositionZ}, {nameof(ExposureTime)}: {ExposureTime}, {nameof(LayerOffTime)}: {LayerOffTime}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(LightPWM)}: {LightPWM}, {nameof(IsModified)}: {IsModified}";
+ return $"{nameof(Index)}: {Index}, {nameof(Filename)}: {Filename}, {nameof(NonZeroPixelCount)}: {NonZeroPixelCount}, {nameof(BoundingRectangle)}: {BoundingRectangle}, {nameof(IsBottomLayer)}: {IsBottomLayer}, {nameof(IsNormalLayer)}: {IsNormalLayer}, {nameof(PositionZ)}: {PositionZ}, {nameof(ExposureTime)}: {ExposureTime}, {nameof(LightOffDelay)}: {LightOffDelay}, {nameof(LiftHeight)}: {LiftHeight}, {nameof(LiftSpeed)}: {LiftSpeed}, {nameof(RetractSpeed)}: {RetractSpeed}, {nameof(LightPWM)}: {LightPWM}, {nameof(IsModified)}: {IsModified}";
}
#endregion
@@ -410,9 +410,9 @@ namespace UVtools.Core
return true;
}
- if (ReferenceEquals(modifier, FileFormat.PrintParameterModifier.LayerOffTime))
+ if (ReferenceEquals(modifier, FileFormat.PrintParameterModifier.LightOffDelay))
{
- LayerOffTime = (float)value;
+ LightOffDelay = (float)value;
return true;
}
@@ -641,7 +641,7 @@ namespace UVtools.Core
LiftHeight = _liftHeight,
LiftSpeed = _liftSpeed,
RetractSpeed = _retractSpeed,
- LayerOffTime = _layerOffTime,
+ LightOffDelay = _lightOffDelay,
LightPWM = _lightPwm,
BoundingRectangle = _boundingRectangle,
NonZeroPixelCount = _nonZeroPixelCount,
diff --git a/UVtools.Core/Layer/LayerIssue.cs b/UVtools.Core/Layer/LayerIssue.cs
index 02ed9ce..fb55675 100644
--- a/UVtools.Core/Layer/LayerIssue.cs
+++ b/UVtools.Core/Layer/LayerIssue.cs
@@ -69,9 +69,9 @@ namespace UVtools.Core
public byte BinaryThreshold { get; set; } = 1;
/// <summary>
- /// Gets the required area size (x*y) to consider process a island (0-255)
+ /// Gets the required area size (x*y) to consider process a island (0-65535)
/// </summary>
- public byte RequiredAreaToProcessCheck { get; set; } = 1;
+ public ushort RequiredAreaToProcessCheck { get; set; } = 1;
/// <summary>
/// Gets the required brightness for check a pixel under a island (0-255)
diff --git a/UVtools.Core/Layer/LayerManager.cs b/UVtools.Core/Layer/LayerManager.cs
index 5a2924c..8095b3f 100644
--- a/UVtools.Core/Layer/LayerManager.cs
+++ b/UVtools.Core/Layer/LayerManager.cs
@@ -192,7 +192,7 @@ namespace UVtools.Core
layer.LiftSpeed = SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomLiftSpeed, SlicerFile.LiftSpeed);
layer.RetractSpeed = SlicerFile.RetractSpeed;
layer.LightPWM = SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomLightPWM, SlicerFile.LightPWM);
- layer.LayerOffTime = SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomLayerOffTime, SlicerFile.LayerOffTime);
+ layer.LightOffDelay = SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomLightOffDelay, SlicerFile.LightOffDelay);
if (recalculateZPos)
{
diff --git a/UVtools.Core/Operations/OperationCalculator.cs b/UVtools.Core/Operations/OperationCalculator.cs
index f5a086e..ec9b90e 100644
--- a/UVtools.Core/Operations/OperationCalculator.cs
+++ b/UVtools.Core/Operations/OperationCalculator.cs
@@ -31,6 +31,7 @@ namespace UVtools.Core.Operations
public MillimetersToPixels CalcMillimetersToPixels { get; set; }
public LightOffDelayC CalcLightOffDelay { get; set; }
+ public OptimalModelTilt CalcOptimalModelTilt { get; set; }
public OperationCalculator()
{
@@ -140,7 +141,7 @@ namespace UVtools.Core.Operations
private decimal _bottomWaitTime = 3m;
public override string Description =>
- "Calculates the required light-off delay (Moving time from the build plate + additional time for resin to stabilize) given The lifting height, speed and retract to wait x seconds before cure a new layer.\n" +
+ "Calculates the required light-off delay (Moving time from the build plate + additional time for resin to stabilize) given the lifting height, speed and retract to wait x seconds before cure a new layer.\n" +
"Light-off delay is crucial for gaining higher-resolution and sharper prints.\n" +
"When the build plate retracts, it is important to allow enough time for the resin to stabilize before the UV lights turn on. This would ideally be around 2-3s.";
@@ -295,5 +296,104 @@ namespace UVtools.Core.Operations
}
+
+ public sealed class OptimalModelTilt : Calculation
+ {
+ private uint _resolutionX;
+ private uint _resolutionY;
+ private decimal _displayWidth;
+ private decimal _displayHeight;
+ private decimal _layerHeight = 0.05m;
+
+ public override string Description => "Calculates the optimal model tilt angle for printing and to minimize the visual layer effect.";
+ public override string Formula => "Angleº = tanh(Layer height / XYResolution) * (180 / PI)";
+
+ public OptimalModelTilt(Size resolution, SizeF display, decimal layerHeight = 0.05m)
+ {
+ _resolutionX = (uint)resolution.Width;
+ _resolutionY = (uint)resolution.Height;
+
+ _displayWidth = (decimal)display.Width;
+ _displayHeight = (decimal)display.Height;
+
+ _layerHeight = layerHeight;
+ }
+
+ public uint ResolutionX
+ {
+ get => _resolutionX;
+ set
+ {
+ if (!RaiseAndSetIfChanged(ref _resolutionX, value)) return;
+ RaisePropertyChanged(nameof(XYResolution));
+ RaisePropertyChanged(nameof(XYResolutionUm));
+ RaisePropertyChanged(nameof(TiltAngleDegrees));
+ }
+ }
+
+ public uint ResolutionY
+ {
+ get => _resolutionY;
+ set
+ {
+ if (!RaiseAndSetIfChanged(ref _resolutionY, value)) return;
+ RaisePropertyChanged(nameof(XYResolution));
+ RaisePropertyChanged(nameof(XYResolutionUm));
+ RaisePropertyChanged(nameof(TiltAngleDegrees));
+ }
+ }
+
+ public decimal DisplayWidth
+ {
+ get => _displayWidth;
+ set
+ {
+ if (!RaiseAndSetIfChanged(ref _displayWidth, value)) return;
+ RaisePropertyChanged(nameof(XYResolution));
+ RaisePropertyChanged(nameof(XYResolutionUm));
+ RaisePropertyChanged(nameof(TiltAngleDegrees));
+ }
+ }
+
+ public decimal DisplayHeight
+ {
+ get => _displayHeight;
+ set
+ {
+ if (!RaiseAndSetIfChanged(ref _displayHeight, value)) return;
+ RaisePropertyChanged(nameof(XYResolution));
+ RaisePropertyChanged(nameof(XYResolutionUm));
+ RaisePropertyChanged(nameof(TiltAngleDegrees));
+ }
+ }
+
+ public decimal LayerHeight
+ {
+ get => _layerHeight;
+ set
+ {
+ if (!RaiseAndSetIfChanged(ref _layerHeight, value)) return;
+ RaisePropertyChanged(nameof(XYResolution));
+ RaisePropertyChanged(nameof(XYResolutionUm));
+ RaisePropertyChanged(nameof(TiltAngleDegrees));
+ }
+ }
+
+ public decimal XYResolution => DisplayWidth > 0 || DisplayHeight > 0 ?
+ Math.Max(
+ DisplayWidth / ResolutionX,
+ DisplayHeight / ResolutionY
+ )
+ : 0;
+
+ public decimal XYResolutionUm => Math.Round(XYResolution * 1000, 2);
+
+ public decimal TiltAngleDegrees =>
+ XYResolution > 0 ? (decimal) Math.Round(Math.Tanh((double) (_layerHeight / XYResolution)) * (180 / Math.PI), 3) : 0;
+
+
+
+
+ }
}
}
diff --git a/UVtools.Core/Operations/OperationRepairLayers.cs b/UVtools.Core/Operations/OperationRepairLayers.cs
index e46d3c2..9b48ab5 100644
--- a/UVtools.Core/Operations/OperationRepairLayers.cs
+++ b/UVtools.Core/Operations/OperationRepairLayers.cs
@@ -31,7 +31,7 @@ namespace UVtools.Core.Operations
private bool _repairIslands = true;
private bool _repairResinTraps = true;
private bool _removeEmptyLayers = true;
- private byte _removeIslandsBelowEqualPixelCount = 5;
+ private ushort _removeIslandsBelowEqualPixelCount = 5;
private ushort _removeIslandsRecursiveIterations = 4;
private uint _gapClosingIterations = 1;
private uint _noiseRemovalIterations;
@@ -83,7 +83,7 @@ namespace UVtools.Core.Operations
set => RaiseAndSetIfChanged(ref _removeEmptyLayers, value);
}
- public byte RemoveIslandsBelowEqualPixelCount
+ public ushort RemoveIslandsBelowEqualPixelCount
{
get => _removeIslandsBelowEqualPixelCount;
set => RaiseAndSetIfChanged(ref _removeIslandsBelowEqualPixelCount, value);
@@ -120,8 +120,6 @@ namespace UVtools.Core.Operations
{
progress ??= new OperationProgress();
-
-
// Remove islands
if (!ReferenceEquals(Issues, null)
&& !ReferenceEquals(IslandDetectionConfig, null)
@@ -144,7 +142,7 @@ namespace UVtools.Core.Operations
var emptyLayersConfig = false;
islandConfig.Enabled = true;
- islandConfig.RequiredAreaToProcessCheck = (byte)Math.Ceiling(RemoveIslandsBelowEqualPixelCount / 2m);
+ islandConfig.RequiredAreaToProcessCheck = (ushort) Math.Floor(RemoveIslandsBelowEqualPixelCount / 2m);
for (uint i = 0; i < limit; i++)
{
diff --git a/UVtools.Core/UVtools.Core.csproj b/UVtools.Core/UVtools.Core.csproj
index cd0664b..9fd54de 100644
--- a/UVtools.Core/UVtools.Core.csproj
+++ b/UVtools.Core/UVtools.Core.csproj
@@ -10,7 +10,7 @@
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<PackageProjectUrl>https://github.com/sn4k3/UVtools</PackageProjectUrl>
<Description>MSLA/DLP, file analysis, calibration, repair, conversion and manipulation</Description>
- <Version>2.2.0</Version>
+ <Version>2.3.0</Version>
<Copyright>Copyright © 2020 PTRTECH</Copyright>
<PackageIcon>UVtools.png</PackageIcon>
<Platforms>AnyCPU;x64</Platforms>
diff --git a/UVtools.WPF/App.axaml.cs b/UVtools.WPF/App.axaml.cs
index c4b717a..440cfff 100644
--- a/UVtools.WPF/App.axaml.cs
+++ b/UVtools.WPF/App.axaml.cs
@@ -241,7 +241,7 @@ namespace UVtools.WPF
string description = ((AssemblyDescriptionAttribute)attributes[0]).Description + $"{Environment.NewLine}{Environment.NewLine}Available File Formats:";
- return FileFormat.AvaliableFormats.SelectMany(fileFormat => fileFormat.FileExtensions).Aggregate(description, (current, fileExtension) => current + $"{Environment.NewLine}- {fileExtension.Description} (.{fileExtension.Extension})");
+ return FileFormat.AvailableFormats.SelectMany(fileFormat => fileFormat.FileExtensions).Aggregate(description, (current, fileExtension) => current + $"{Environment.NewLine}- {fileExtension.Description} (.{fileExtension.Extension})");
}
}
diff --git a/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon S.ini b/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon S.ini
deleted file mode 100644
index a0e3071..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon S.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:30:11 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 165
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon Zero.ini b/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon Zero.ini
deleted file mode 100644
index 3f312b4..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon Zero.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:11:02 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,55.4x0,55.4x98.6,0x98.6
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 98.6
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 480
-display_pixels_y = 854
-display_width = 55.4
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 150
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon.ini b/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon.ini
deleted file mode 100644
index 28922c3..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/AnyCubic Photon.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:09:41 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 155
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Creality LD-002H.ini b/UVtools.WPF/Assets/PrusaSlicer/Creality LD-002H.ini
deleted file mode 100644
index f64c265..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Creality LD-002H.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:00 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 130.56
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1620
-display_pixels_y = 2560
-display_width = 82.62
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 160
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_002H\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_50\nLiftSpeed_50\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Creality LD-002R.ini b/UVtools.WPF/Assets/PrusaSlicer/Creality LD-002R.ini
deleted file mode 100644
index e4bdfbd..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Creality LD-002R.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:06 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 160
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_002R\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Creality LD-006.ini b/UVtools.WPF/Assets/PrusaSlicer/Creality LD-006.ini
deleted file mode 100644
index 8a88238..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Creality LD-006.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:10 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2400
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 245
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_LD_006\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_80\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX E10 Mono.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX E10 Mono.ini
deleted file mode 100644
index 3d8c0c7..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX E10 Mono.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:14 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2400
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 250
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_E10_Mono\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX E6 Mono.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX E6 Mono.ini
deleted file mode 100644
index aab4ae4..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX E6 Mono.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:18 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,81x0,81x128,0x128
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 128
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1620
-display_pixels_y = 2560
-display_width = 81
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 155
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_E6_Mono\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX X1.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX X1.ini
deleted file mode 100644
index 80d13c0..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX X1.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:43:50 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 155
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX X10 4K Mono.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX X10 4K Mono.ini
deleted file mode 100644
index ca8583e..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX X10 4K Mono.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:24 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2400
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 250
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10_4KMONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX X10.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX X10.ini
deleted file mode 100644
index dae3c2d..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX X10.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:44:05 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,135.36x0,135.36x216.57,0x216.57
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 216.57
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1600
-display_pixels_y = 2560
-display_width = 135.36
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 250
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX X133 4K Mono.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX X133 4K Mono.ini
deleted file mode 100644
index 73ed4b5..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX X133 4K Mono.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:27 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,293.76x0,293.76x165.24,0x165.24
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 165.24
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 293.76
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X133_4KMONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX X156 4K Color.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX X156 4K Color.ini
deleted file mode 100644
index 6f47841..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX X156 4K Color.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:32 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,345.6x0,345.6x194.4,0x194.4
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 194.4
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 345.6
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X156_4KCOLOR\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/EPAX X1K 2K Mono.ini b/UVtools.WPF/Assets/PrusaSlicer/EPAX X1K 2K Mono.ini
deleted file mode 100644
index 611935f..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/EPAX X1K 2K Mono.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:38 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 130.56
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1620
-display_pixels_y = 2560
-display_width = 82.62
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 155
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1K_2K_MONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars 2 Pro.ini b/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars 2 Pro.ini
deleted file mode 100644
index c41ae9a..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars 2 Pro.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:49:49 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 130.56
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1620
-display_pixels_y = 2560
-display_width = 82.62
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 160
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS2_PRO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_80\nRetractSpeed_210\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars C.ini b/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars C.ini
deleted file mode 100644
index b01c79a..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars C.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:05:46 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 150
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS_C\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars.ini b/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars.ini
deleted file mode 100644
index dc243d1..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Mars.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:08:57 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 150
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Saturn.ini b/UVtools.WPF/Assets/PrusaSlicer/Elegoo Saturn.ini
deleted file mode 100644
index 33233c1..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Elegoo Saturn.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:50:06 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2400
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_SATURN\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_210\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Kelant S400.ini b/UVtools.WPF/Assets/PrusaSlicer/Kelant S400.ini
deleted file mode 100644
index 2e21c0c..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Kelant S400.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:20:36 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 2560
-display_pixels_y = 1600
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_KELANT\nPRINTER_MODEL_S400\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_15\nBottomLiftSpeed_30\nLiftSpeed_30\nRetractSpeed_300\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Longer Orange 10.ini b/UVtools.WPF/Assets/PrusaSlicer/Longer Orange 10.ini
deleted file mode 100644
index 4c923e0..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Longer Orange 10.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:21:14 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,55.44x0,55.44x98.64,0x98.64
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 98.64
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 480
-display_pixels_y = 854
-display_width = 55.44
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 140
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE10\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nBottomLightOffDelay_1\nBottomLiftHeight_4\nLiftHeight_2\nBottomLiftSpeed_90\nLiftSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Longer Orange 30.ini b/UVtools.WPF/Assets/PrusaSlicer/Longer Orange 30.ini
deleted file mode 100644
index 5e9bd7e..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Longer Orange 30.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:51:24 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 170
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE30\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nBottomLightOffDelay_1\nBottomLiftHeight_2\nLiftHeight_2\nBottomLiftSpeed_48\nLiftSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Longer Orange4K.ini b/UVtools.WPF/Assets/PrusaSlicer/Longer Orange4K.ini
deleted file mode 100644
index 7766383..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Longer Orange4K.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:52:58 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 6480
-display_pixels_y = 3840
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 170
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_LONGER\nPRINTER_MODEL_ORANGE30\n\nSTART_CUSTOM_VALUES\nLayerOffTime_1\nBottomLightOffDelay_1\nBottomLiftHeight_2\nLiftHeight_2\nBottomLiftSpeed_90\nLiftSpeed_150\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Nova3D Bene4 Mono.ini b/UVtools.WPF/Assets/PrusaSlicer/Nova3D Bene4 Mono.ini
deleted file mode 100644
index 8e11a37..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Nova3D Bene4 Mono.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:22:18 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,65.02x0,65.02x116,0x116
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 116
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1566
-display_pixels_y = 2549
-display_width = 65.02
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 130
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_NOVA3D\nPRINTER_MODEL_BENE4_MONO\n\nSTART_CUSTOM_VALUES\nXppm_19.608\nYppm_19.608\nWaitBeforeExpoMs_3000\nLiftHeight_4\nLiftSpeed_120\nRetractSpeed_120\nLiftWhenFinished_80\nBlankingLayerTime_0\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nNOVAMAKER_GRAY2RGB_ENCODE ; Required for Bene4 Mono as output images are in RGB\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Nova3D Elfin.ini b/UVtools.WPF/Assets/PrusaSlicer/Nova3D Elfin.ini
deleted file mode 100644
index 8786860..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Nova3D Elfin.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:22:45 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,73x0,73x131,0x131
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 131
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1410
-display_pixels_y = 2531
-display_width = 73
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 150
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_NOVA3D\nPRINTER_MODEL_ELFIN\n\nSTART_CUSTOM_VALUES\nXppm_19.324\nYppm_19.324\nWaitBeforeExpoMs_2000\nLiftHeight_4\nLiftSpeed_120\nRetractSpeed_120\nLiftWhenFinished_80\nBlankingLayerTime_0\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom L.ini b/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom L.ini
deleted file mode 100644
index 3a31a1d..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom L.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:26:28 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,345.6x0,345.6x194.4,0x194.4
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 194.4
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 345.6
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_L\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_12\nLiftHeight_9\nBottomLiftSpeed_32\nLiftSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom Noir.ini b/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom Noir.ini
deleted file mode 100644
index 11c53bf..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom Noir.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:23:00 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,293.76x0,293.76x165.24,0x165.24
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 165.24
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 293.76
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_NOIR\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_36\nLiftSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom.ini b/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom.ini
deleted file mode 100644
index 0b6fbd2..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Peopoly Phenom.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:22:52 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,276.48x0,276.48x155.52,0x155.52
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 155.52
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 276.48
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_36\nLiftSpeed_48\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 16.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 16.ini
deleted file mode 100644
index 4fd48c3..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 16.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:11:50 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,337.92x0,337.92x190.08,0x190.08
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 190.08
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 337.92
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_16\n\nSTART_CUSTOM_VALUES\nLayerOffTime_15\nBottomLightOffDelay_15\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 4K.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 4K.ini
deleted file mode 100644
index 1d78ca5..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle 4K.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:57:14 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 2160
-display_pixels_y = 3840
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 170
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle Lite.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle Lite.ini
deleted file mode 100644
index ae1b713..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle Lite.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:04:46 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 170
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_LITE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL Lite.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL Lite.ini
deleted file mode 100644
index bcc8bac..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL Lite.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:06:06 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 2560
-display_pixels_y = 1600
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_XL_LITE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL.ini
deleted file mode 100644
index 3240641..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle XL.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:06:01 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 2560
-display_pixels_y = 1600
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_XL\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_8\nLiftHeight_6\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle.ini
deleted file mode 100644
index 37ce48c..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Shuffle.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 02:56:59 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,67.68x0,67.68x120.32,0x120.32
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.32
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 67.68
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic 4K.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic 4K.ini
deleted file mode 100644
index f2255ce..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic 4K.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:13:52 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,134.4x0,134.4x75.6,0x75.6
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 75.6
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 134.4
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mighty 4K.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mighty 4K.ini
deleted file mode 100644
index c93d717..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mighty 4K.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:16:20 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,199.68x0,199.68x124.8,0x124.8
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 124.8
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2400
-display_width = 199.68
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 220
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MIGHTY_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_11\nBottomLightOffDelay_11\nBottomLiftHeight_8\nLiftHeight_6\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini 4K.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini 4K.ini
deleted file mode 100644
index 94a0c00..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini 4K.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:09:38 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,134.4x0,134.4x75.6,0x75.6
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 75.6
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 134.4
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 130
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini.ini
deleted file mode 100644
index cdcda19..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic Mini.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:26:16 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1080
-display_pixels_y = 1920
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 130
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI\n\nSTART_CUSTOM_VALUES\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic.ini
deleted file mode 100644
index f87a458..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Sonic.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:08:50 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1080
-display_pixels_y = 1920
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 170
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC\n\nSTART_CUSTOM_VALUES\nLayerOffTime_6\nBottomLightOffDelay_6\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Transform.ini b/UVtools.WPF/Assets/PrusaSlicer/Phrozen Transform.ini
deleted file mode 100644
index 1360d3f..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Phrozen Transform.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:41:58 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,291.84x0,291.84x164.16,0x164.16
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 164.16
-display_mirror_x = 0
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 291.84
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 400
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_TRANSFORM\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/QIDI S-Box.ini b/UVtools.WPF/Assets/PrusaSlicer/QIDI S-Box.ini
deleted file mode 100644
index 3014478..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/QIDI S-Box.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:21:39 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,135.36x0,135.36x216.576,0x216.576
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 216.576
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1600
-display_pixels_y = 2560
-display_width = 135.36
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 200
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_S-BOX\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_10\nLiftHeight_7\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow5.5.ini b/UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow5.5.ini
deleted file mode 100644
index abfdfb2..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow5.5.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:19:21 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 150
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW5.5\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow6.0 Pro.ini b/UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow6.0 Pro.ini
deleted file mode 100644
index 1cd2f97..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/QIDI Shadow6.0 Pro.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:20:10 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,74.52x0,74.52x132.48,0x132.48
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 132.48
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 74.52
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 150
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW6.0_PRO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_100\nLiftSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Heavy Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Heavy Supports.ini
deleted file mode 100644
index b50c910..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Heavy Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:37:18 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.025 UltraDetail
-layer_height = 0.025
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 1
-support_head_penetration = 0.6
-support_head_width = 2
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.5
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Medium Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Medium Supports.ini
deleted file mode 100644
index ed59379..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.025 UltraDetail - Medium Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:36:13 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.025 UltraDetail
-layer_height = 0.025
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 0.8
-support_head_penetration = 0.4
-support_head_width = 2
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.2
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Heavy Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Heavy Supports.ini
deleted file mode 100644
index a46b970..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Heavy Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:34:54 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.035 Detail
-layer_height = 0.035
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 1
-support_head_penetration = 0.6
-support_head_width = 3
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.5
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Medium Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Medium Supports.ini
deleted file mode 100644
index fa0c748..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.035 Detail - Medium Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:34:31 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.035 Detail
-layer_height = 0.035
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 0.8
-support_head_penetration = 0.4
-support_head_width = 3
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.2
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Heavy Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Heavy Supports.ini
deleted file mode 100644
index 10e334d..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Heavy Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:24:57 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.05 Normal
-layer_height = 0.05
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 1
-support_head_penetration = 0.6
-support_head_width = 3
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.5
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Medium Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Medium Supports.ini
deleted file mode 100644
index 79511c7..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.05 Normal - Medium Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:23:55 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.05 Normal
-layer_height = 0.05
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 0.8
-support_head_penetration = 0.4
-support_head_width = 3
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.2
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Heavy Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Heavy Supports.ini
deleted file mode 100644
index 825330a..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Heavy Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:30:54 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.1 Fast
-layer_height = 0.1
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 1
-support_head_penetration = 0.7
-support_head_width = 3
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.5
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Medium Supports.ini b/UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Medium Supports.ini
deleted file mode 100644
index c43832c..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Universal 0.1 Fast - Medium Supports.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-09-05 at 15:51:14 UTC
-compatible_printers =
-compatible_printers_condition =
-default_sla_print_profile =
-faded_layers = 10
-hollowing_closing_distance = 2
-hollowing_enable = 0
-hollowing_min_thickness = 3
-hollowing_quality = 0.5
-inherits = 0.1 Fast
-layer_height = 0.1
-output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1
-pad_around_object = 0
-pad_around_object_everywhere = 0
-pad_brim_size = 1.6
-pad_enable = 1
-pad_max_merge_distance = 50
-pad_object_connector_penetration = 0.3
-pad_object_connector_stride = 10
-pad_object_connector_width = 0.5
-pad_object_gap = 1
-pad_wall_height = 0
-pad_wall_slope = 90
-pad_wall_thickness = 1
-sla_print_settings_id =
-slice_closing_radius = 0.005
-support_base_diameter = 3
-support_base_height = 1
-support_base_safety_distance = 1
-support_buildplate_only = 0
-support_critical_angle = 45
-support_head_front_diameter = 0.9
-support_head_penetration = 0.5
-support_head_width = 3
-support_max_bridge_length = 10
-support_max_bridges_on_pillar = 3
-support_max_pillar_link_distance = 10
-support_object_elevation = 5
-support_pillar_connection_mode = zigzag
-support_pillar_diameter = 1.3
-support_pillar_widening_factor = 0
-support_points_density_relative = 100
-support_points_minimal_distance = 1
-supports_enable = 1
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Voxelab Polaris.ini b/UVtools.WPF/Assets/PrusaSlicer/Voxelab Polaris.ini
deleted file mode 100644
index 760a68a..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Voxelab Polaris.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:27:58 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120.96
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 68.04
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 155
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_POLARIS\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Voxelab Proxima.ini b/UVtools.WPF/Assets/PrusaSlicer/Voxelab Proxima.ini
deleted file mode 100644
index f661138..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Voxelab Proxima.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:18:23 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 130.56
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1620
-display_pixels_y = 2560
-display_width = 82.62
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 155
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_PROXIMA\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Wanhao D7.ini b/UVtools.WPF/Assets/PrusaSlicer/Wanhao D7.ini
deleted file mode 100644
index 9361237..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Wanhao D7.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:28:07 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,120.96x0,120.96x68.5,0x68.5
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 68.5
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 180
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_D7\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Wanhao D8.ini b/UVtools.WPF/Assets/PrusaSlicer/Wanhao D8.ini
deleted file mode 100644
index 2ced018..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Wanhao D8.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:28:11 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,192x0,192x120,0x120
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 120
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 2560
-display_pixels_y = 1600
-display_width = 192
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 180
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_WANHAO\nPRINTER_MODEL_D8\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Assets/PrusaSlicer/Zortrax Inkspire.ini b/UVtools.WPF/Assets/PrusaSlicer/Zortrax Inkspire.ini
deleted file mode 100644
index 879b5b9..0000000
--- a/UVtools.WPF/Assets/PrusaSlicer/Zortrax Inkspire.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:06:43 UTC
-absolute_correction = 0
-area_fill = 50
-bed_custom_model =
-bed_custom_texture =
-bed_shape = 0x0,74.67x0,74.67x132.88,0x132.88
-default_sla_material_profile = Prusa Orange Tough 0.05
-default_sla_print_profile = 0.05 Normal
-display_height = 132.88
-display_mirror_x = 1
-display_mirror_y = 0
-display_orientation = landscape
-display_pixels_x = 1440
-display_pixels_y = 2560
-display_width = 74.67
-elefant_foot_compensation = 0.2
-elefant_foot_min_width = 0.2
-fast_tilt_time = 5
-gamma_correction = 1
-inherits = Original Prusa SL1
-max_exposure_time = 120
-max_initial_exposure_time = 300
-max_print_height = 175
-min_exposure_time = 1
-min_initial_exposure_time = 1
-print_host =
-printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ZORTRAX\nPRINTER_MODEL_INKSPIRE\n\nSTART_CUSTOM_VALUES\nLayerOffTime_5\nLiftHeight_5\nLiftSpeed_100\nRetractSpeed_100\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nEND_CUSTOM_VALUES
-printer_settings_id =
-printer_technology = SLA
-printer_variant = default
-printer_vendor =
-printhost_apikey =
-printhost_cafile =
-relative_correction = 1,1
-slow_tilt_time = 8
-thumbnails = 400x400,800x480
diff --git a/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml
index 85e03db..8e3c9aa 100644
--- a/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml
+++ b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml
@@ -3,6 +3,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+ MaxWidth="720"
x:Class="UVtools.WPF.Controls.Tools.ToolCalculatorControl">
<TabControl>
<TabItem Header="Millimeters to pixels">
@@ -10,7 +11,8 @@
<Border
Background="White"
BorderBrush="Black" BorderThickness="1" Padding="10">
- <TextBlock VerticalAlignment="Center">
+ <TextBlock VerticalAlignment="Center"
+ TextWrapping="Wrap">
<TextBlock.Text>
<MultiBinding StringFormat="\{0\}&#x0a;&#x0a;Formula: \{1\}">
<Binding Path="Operation.CalcMillimetersToPixels.Description"/>
@@ -236,7 +238,8 @@
<Border
Background="White"
BorderBrush="Black" BorderThickness="1" Padding="10">
- <TextBlock VerticalAlignment="Center">
+ <TextBlock VerticalAlignment="Center"
+ TextWrapping="Wrap">
<TextBlock.Text>
<MultiBinding StringFormat="\{0\}&#x0a;&#x0a;Formula: \{1\}">
<Binding Path="Operation.CalcLightOffDelay.Description"/>
@@ -376,7 +379,7 @@
Grid.ColumnSpan="5"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- Text="{Binding SlicerFile.LayerOffTime, StringFormat=Current value: \{0\}}"/>
+ Text="{Binding SlicerFile.LightOffDelay, StringFormat=Current value: \{0\}}"/>
<TextBlock
Grid.Row="14"
@@ -497,13 +500,198 @@
Grid.ColumnSpan="5"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- Text="{Binding SlicerFile.BottomLayerOffTime, StringFormat=Current value: \{0\}}"/>
+ Text="{Binding SlicerFile.BottomLightOffDelay, StringFormat=Current value: \{0\}}"/>
</Grid>
</Grid>
</TabItem>
+
+ <TabItem Header="Optimal model tilt">
+ <Grid RowDefinitions="Auto,10,Auto,30,Auto">
+ <Border
+ Background="White"
+ BorderBrush="Black" BorderThickness="1" Padding="10">
+ <TextBlock VerticalAlignment="Center" TextWrapping="Wrap">
+ <TextBlock.Text>
+ <MultiBinding StringFormat="\{0\}&#x0a;&#x0a;Formula: \{1\}">
+ <Binding Path="Operation.CalcOptimalModelTilt.Description"/>
+ <Binding Path="Operation.CalcOptimalModelTilt.Formula"/>
+ </MultiBinding>
+ </TextBlock.Text>
+ </TextBlock>
+ </Border>
+
+
+ <Grid
+ Grid.Row="2"
+ RowDefinitions="Auto,10,Auto"
+ ColumnDefinitions="Auto,10,100,5,Auto,30,Auto,10,100,5,Auto"
+ >
+
+ <!-- Resolution -->
+ <TextBlock
+ Grid.Row="0"
+ Grid.Column="0"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ Text="Resolution X:"/>
+ <NumericUpDown
+ Grid.Row="0"
+ Grid.Column="2"
+ VerticalAlignment="Center"
+ Minimum="0"
+ Maximum="100000"
+ Value="{Binding Operation.CalcOptimalModelTilt.ResolutionX}"
+ />
+ <TextBlock
+ Grid.Row="0"
+ Grid.Column="4"
+ VerticalAlignment="Center"
+ Text="px"/>
+
+ <TextBlock
+ Grid.Row="2"
+ Grid.Column="0"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ Text="Resolution Y:"/>
+ <NumericUpDown
+ Grid.Row="2"
+ Grid.Column="2"
+ VerticalAlignment="Center"
+ Minimum="0"
+ Maximum="100000"
+ Value="{Binding Operation.CalcOptimalModelTilt.ResolutionY}"
+ />
+ <TextBlock
+ Grid.Row="2"
+ Grid.Column="4"
+ VerticalAlignment="Center"
+ Text="px"/>
+
+
+ <!-- Display -->
+ <TextBlock
+ Grid.Row="0"
+ Grid.Column="6"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ Text="Display width:"/>
+ <NumericUpDown
+ Grid.Row="0"
+ Grid.Column="8"
+ VerticalAlignment="Center"
+ Minimum="0"
+ Maximum="100000"
+ Increment="0.01"
+ FormatString="{}{0:0.00}"
+ Value="{Binding Operation.CalcOptimalModelTilt.DisplayWidth}"
+ />
+ <TextBlock
+ Grid.Row="0"
+ Grid.Column="10"
+ VerticalAlignment="Center"
+ Text="mm"/>
+
+ <TextBlock
+ Grid.Row="2"
+ Grid.Column="6"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ Text="Display height:"/>
+ <NumericUpDown
+ Grid.Row="2"
+ Grid.Column="8"
+ VerticalAlignment="Center"
+ Minimum="0"
+ Maximum="100000"
+ Increment="0.01"
+ FormatString="{}{0:0.00}"
+ Value="{Binding Operation.CalcOptimalModelTilt.DisplayHeight}"
+ />
+ <TextBlock
+ Grid.Row="2"
+ Grid.Column="10"
+ VerticalAlignment="Center"
+ Text="mm"/>
+
+ </Grid>
+
+ <Grid
+ Grid.Row="4"
+ RowDefinitions="Auto,10,Auto,10,Auto"
+ ColumnDefinitions="Auto,10,100,5,Auto"
+ >
+ <TextBlock
+ Grid.Row="0"
+ Grid.Column="0"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ Text="Layer height:"/>
+ <NumericUpDown
+ Grid.Row="0"
+ Grid.Column="2"
+ VerticalAlignment="Center"
+ Minimum="0.01"
+ Maximum="0.20"
+ Increment="0.01"
+ FormatString="{}{0:0.00}"
+ ClipValueToMinMax="True"
+ Value="{Binding Operation.CalcOptimalModelTilt.LayerHeight}"
+ />
+ <TextBlock
+ Grid.Row="0"
+ Grid.Column="4"
+ VerticalAlignment="Center"
+ Text="mm"/>
+
+ <TextBlock
+ Grid.Row="2"
+ Grid.Column="0"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ Text="XY resolution:"/>
+ <TextBox
+ Grid.Row="2"
+ Grid.Column="2"
+ VerticalAlignment="Center"
+ IsReadOnly="True"
+ Text="{Binding Operation.CalcOptimalModelTilt.XYResolutionUm}"
+ />
+ <TextBlock
+ Grid.Row="2"
+ Grid.Column="4"
+ VerticalAlignment="Center"
+ Text="µm"/>
+
+ <TextBlock
+ Grid.Row="4"
+ Grid.Column="0"
+ VerticalAlignment="Center"
+ HorizontalAlignment="Right"
+ FontWeight="Bold"
+ Text="Optimal tilt angle:"/>
+ <TextBox
+ Grid.Row="4"
+ Grid.Column="2"
+ VerticalAlignment="Center"
+ IsReadOnly="True"
+ FontWeight="Bold"
+ Text="{Binding Operation.CalcOptimalModelTilt.TiltAngleDegrees}"
+ />
+ <TextBlock
+ Grid.Row="4"
+ Grid.Column="4"
+ VerticalAlignment="Center"
+ FontWeight="Bold"
+ Text="º"/>
+ </Grid>
+
+ </Grid>
+
+ </TabItem>
</TabControl>
</UserControl>
diff --git a/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs
index 71c173d..f91d037 100644
--- a/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs
+++ b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs
@@ -27,7 +27,8 @@ namespace UVtools.WPF.Controls.Tools
CalcLightOffDelay = new OperationCalculator.LightOffDelayC(
(decimal)SlicerFile.LiftHeight, (decimal)SlicerFile.BottomLiftHeight,
(decimal)SlicerFile.LiftSpeed, (decimal)SlicerFile.BottomLiftSpeed,
- (decimal)SlicerFile.RetractSpeed, (decimal)SlicerFile.RetractSpeed)
+ (decimal)SlicerFile.RetractSpeed, (decimal)SlicerFile.RetractSpeed),
+ CalcOptimalModelTilt = new OperationCalculator.OptimalModelTilt(SlicerFile.Resolution, SlicerFile.Display)
};
Operation.CalcLightOffDelay.PropertyChanged += (sender, e) =>
@@ -56,14 +57,14 @@ namespace UVtools.WPF.Controls.Tools
SlicerFile.BottomLiftHeight = (float)Operation.CalcLightOffDelay.BottomLiftHeight;
SlicerFile.BottomLiftSpeed = (float)Operation.CalcLightOffDelay.BottomLiftSpeed;
SlicerFile.RetractSpeed = (float)Operation.CalcLightOffDelay.RetractSpeed;
- SlicerFile.BottomLayerOffTime = (float)Operation.CalcLightOffDelay.BottomLightOffDelay;
+ SlicerFile.BottomLightOffDelay = (float)Operation.CalcLightOffDelay.BottomLightOffDelay;
}
else // Normal layers
{
SlicerFile.LiftHeight = (float)Operation.CalcLightOffDelay.LiftHeight;
SlicerFile.LiftSpeed = (float)Operation.CalcLightOffDelay.LiftSpeed;
SlicerFile.RetractSpeed = (float)Operation.CalcLightOffDelay.RetractSpeed;
- SlicerFile.LayerOffTime = (float)Operation.CalcLightOffDelay.LightOffDelay;
+ SlicerFile.LightOffDelay = (float)Operation.CalcLightOffDelay.LightOffDelay;
}
LightOffDelayPrintTimeHours = (decimal)SlicerFile.PrintTimeHours;
diff --git a/UVtools.WPF/Controls/Tools/ToolLayerCloneControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolLayerCloneControl.axaml.cs
index bbc7776..644d023 100644
--- a/UVtools.WPF/Controls/Tools/ToolLayerCloneControl.axaml.cs
+++ b/UVtools.WPF/Controls/Tools/ToolLayerCloneControl.axaml.cs
@@ -24,7 +24,7 @@ namespace UVtools.WPF.Controls.Tools
get
{
float extraHeight = (float)Math.Round(ExtraLayers * App.SlicerFile.LayerHeight, 2);
- return $"Height: {App.SlicerFile.TotalHeight}mm → {Math.Round(App.SlicerFile.TotalHeight + extraHeight, 2)}mm (+ {extraHeight}mm)";
+ return $"Height: {App.SlicerFile.PrintHeight}mm → {Math.Round(App.SlicerFile.PrintHeight + extraHeight, 2)}mm (+ {extraHeight}mm)";
}
}
diff --git a/UVtools.WPF/Controls/Tools/ToolLayerRemoveControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolLayerRemoveControl.axaml.cs
index a2ada0e..f4be3b7 100644
--- a/UVtools.WPF/Controls/Tools/ToolLayerRemoveControl.axaml.cs
+++ b/UVtools.WPF/Controls/Tools/ToolLayerRemoveControl.axaml.cs
@@ -24,7 +24,7 @@ namespace UVtools.WPF.Controls.Tools
get
{
float extraHeight = (float)Math.Round(ExtraLayers * App.SlicerFile.LayerHeight, 2);
- return $"Height: {App.SlicerFile.TotalHeight}mm → {Math.Round(App.SlicerFile.TotalHeight - extraHeight, 2)}mm (- {extraHeight}mm)";
+ return $"Height: {App.SlicerFile.PrintHeight}mm → {Math.Round(App.SlicerFile.PrintHeight - extraHeight, 2)}mm (- {extraHeight}mm)";
}
}
diff --git a/UVtools.WPF/Controls/Tools/ToolRepairLayersControl.axaml b/UVtools.WPF/Controls/Tools/ToolRepairLayersControl.axaml
index e176d9d..5a71eb5 100644
--- a/UVtools.WPF/Controls/Tools/ToolRepairLayersControl.axaml
+++ b/UVtools.WPF/Controls/Tools/ToolRepairLayersControl.axaml
@@ -72,7 +72,7 @@
Grid.Column="2"
Increment="1"
Minimum="0"
- Maximum="255"
+ Maximum="65535"
Width="70"
Value="{Binding Operation.RemoveIslandsBelowEqualPixelCount}"
>
diff --git a/UVtools.WPF/MainWindow.Information.cs b/UVtools.WPF/MainWindow.Information.cs
index 7a8864d..1de8ac1 100644
--- a/UVtools.WPF/MainWindow.Information.cs
+++ b/UVtools.WPF/MainWindow.Information.cs
@@ -352,9 +352,9 @@ namespace UVtools.WPF
if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.RetractSpeed))
CurrentLayerProperties.Add(new StringTag(nameof(layer.RetractSpeed),
$"{layer.RetractSpeed.ToString(CultureInfo.InvariantCulture)}mm/min"));
- if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.LayerOffTime))
- CurrentLayerProperties.Add(new StringTag(nameof(layer.LayerOffTime),
- $"{layer.LayerOffTime.ToString(CultureInfo.InvariantCulture)}s"));
+ if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.LightOffDelay))
+ CurrentLayerProperties.Add(new StringTag(nameof(layer.LightOffDelay),
+ $"{layer.LightOffDelay.ToString(CultureInfo.InvariantCulture)}s"));
if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.LightPWM))
CurrentLayerProperties.Add(new StringTag(nameof(layer.LightPWM), layer.LightPWM.ToString()));
}
diff --git a/UVtools.WPF/MainWindow.LayerPreview.cs b/UVtools.WPF/MainWindow.LayerPreview.cs
index 4df7d8b..dc5f29f 100644
--- a/UVtools.WPF/MainWindow.LayerPreview.cs
+++ b/UVtools.WPF/MainWindow.LayerPreview.cs
@@ -275,7 +275,7 @@ namespace UVtools.WPF
}
public string MinimumLayerString => SlicerFile is null ? "???" : $"{SlicerFile.LayerHeight}mm\n0";
- public string MaximumLayerString => SlicerFile is null ? "???" : $"{SlicerFile.TotalHeight}mm\n{SlicerFile.LayerCount - 1}";
+ public string MaximumLayerString => SlicerFile is null ? "???" : $"{SlicerFile.PrintHeight}mm\n{SlicerFile.LayerCount - 1}";
public string ActualLayerTooltip => SlicerFile is null ? "???" : $"{LayerCache.Layer?.PositionZ:0.00}mm\n{ActualLayer}\n{(ActualLayer + 1) * 100 / (SlicerFile.LayerCount)}%";
public uint SliderMaximumValue => SlicerFile?.LastLayerIndex ?? 0;
diff --git a/UVtools.WPF/MainWindow.axaml b/UVtools.WPF/MainWindow.axaml
index ddbb019..70439b9 100644
--- a/UVtools.WPF/MainWindow.axaml
+++ b/UVtools.WPF/MainWindow.axaml
@@ -214,10 +214,12 @@
<Border Padding="5" DockPanel.Dock="Bottom" Background="WhiteSmoke" IsVisible="{Binding IsFileLoaded}">
<WrapPanel
Orientation="Horizontal"
- VerticalAlignment="Center"
- >
+ VerticalAlignment="Center">
<TextBlock Text="{Binding SlicerFile.LayerHeight, StringFormat=Layer height: \{0\}mm}"/>
+ <TextBlock Text=" | Bottom layers: "/>
+ <TextBlock Text="{Binding SlicerFile.BottomLayerCount}"/>
+
<TextBlock Text=" | Exposures: "/>
<TextBlock>
@@ -267,12 +269,12 @@
<TextBlock IsVisible="{Binding SlicerFile.RetractSpeed}"
Text="{Binding SlicerFile.RetractSpeed, StringFormat=Retract Speed: \{0\}mm/min}"/>
- <TextBlock IsVisible="{Binding SlicerFile.LayerOffTime}" Text=" | Light-off: "/>
- <TextBlock IsVisible="{Binding SlicerFile.LayerOffTime}">
+ <TextBlock IsVisible="{Binding SlicerFile.LightOffDelay}" Text=" | Light-off: "/>
+ <TextBlock IsVisible="{Binding SlicerFile.LightOffDelay}">
<TextBlock.Text>
<MultiBinding StringFormat="\{0\}s/\{1\}s">
- <Binding Path="SlicerFile.BottomLayerOffTime"/>
- <Binding Path="SlicerFile.LayerOffTime"/>
+ <Binding Path="SlicerFile.BottomLightOffDelay"/>
+ <Binding Path="SlicerFile.LightOffDelay"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
@@ -282,9 +284,9 @@
Text="{Binding SlicerFile.PrintTimeString, StringFormat=Print time: \{0\}}"/>
- <TextBlock IsVisible="{Binding SlicerFile.UsedMaterial}" Text=" | "/>
- <TextBlock IsVisible="{Binding SlicerFile.UsedMaterial}"
- Text="{Binding SlicerFile.UsedMaterial, StringFormat=Used material: \{0\}ml}"/>
+ <TextBlock IsVisible="{Binding SlicerFile.MaterialMilliliters}" Text=" | "/>
+ <TextBlock IsVisible="{Binding SlicerFile.MaterialMilliliters}"
+ Text="{Binding SlicerFile.MaterialMilliliters, StringFormat=Used material: \{0\}ml}"/>
<TextBlock IsVisible="{Binding SlicerFile.MaterialCost}" Text=" | "/>
diff --git a/UVtools.WPF/MainWindow.axaml.cs b/UVtools.WPF/MainWindow.axaml.cs
index 2c8d044..a4b8201 100644
--- a/UVtools.WPF/MainWindow.axaml.cs
+++ b/UVtools.WPF/MainWindow.axaml.cs
@@ -20,6 +20,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
+using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
@@ -950,15 +951,91 @@ namespace UVtools.WPF
return;
}
+ if (SlicerFile is SL1File sl1File && Settings.Automations.AutoConvertSL1Files)
+ {
+ string fileExtension = sl1File.LookupCustomValue<string>(SL1File.Keyword_FileFormat, null);
+ if (!string.IsNullOrWhiteSpace(fileExtension))
+ {
+ fileExtension = fileExtension.ToLower(CultureInfo.InvariantCulture);
+ var convertToFormat = FileFormat.FindByExtension(fileExtension);
+ if (convertToFormat is not null)
+ {
+ var directory = Path.GetDirectoryName(sl1File.FileFullPath);
+ var filename = PathExtensions.GetFileNameStripAllExtensions(sl1File.FileFullPath);
+ FileFormat convertedFile = null;
+
+ IsGUIEnabled = false;
+
+ task = await Task.Factory.StartNew(() =>
+ {
+ ShowProgressWindow($"Converting {Path.GetFileName(SlicerFile.FileFullPath)} to {fileExtension}");
+ try
+ {
+ convertedFile = sl1File.Convert(convertToFormat, Path.Combine(directory, $"{filename}.{fileExtension}"), ProgressWindow.RestartProgress());
+ return true;
+ }
+ catch (OperationCanceledException)
+ {
+ }
+ catch (Exception exception)
+ {
+ Dispatcher.UIThread.InvokeAsync(async () =>
+ await this.MessageBoxError(exception.ToString(), "Error while converting the file"));
+ }
+
+ return false;
+ });
+
+ IsGUIEnabled = true;
+
+ if (task && convertedFile is not null)
+ {
+ App.SlicerFile = convertedFile;
+ }
+ }
+ }
+ }
+
+ bool modified = false;
+ if (Settings.Automations.BottomLightOffDelay > 0 &&
+ SlicerFile.PrintParameterModifiers is not null &&
+ SlicerFile.PrintParameterModifiers.Contains(FileFormat.PrintParameterModifier.BottomLightOffDelay))
+ {
+ var lightOff = OperationCalculator.LightOffDelayC.CalculateSeconds(SlicerFile.BottomLiftHeight,
+ SlicerFile.BottomLiftSpeed, SlicerFile.RetractSpeed, (float)Settings.Automations.BottomLightOffDelay);
+ if (lightOff != SlicerFile.BottomLightOffDelay)
+ {
+ modified = true;
+ SlicerFile.BottomLightOffDelay = lightOff;
+ }
+ }
+
+ if (Settings.Automations.LightOffDelay > 0 &&
+ SlicerFile.PrintParameterModifiers is not null &&
+ SlicerFile.PrintParameterModifiers.Contains(FileFormat.PrintParameterModifier.LightOffDelay))
+ {
+ var lightOff = OperationCalculator.LightOffDelayC.CalculateSeconds(SlicerFile.LiftHeight,
+ SlicerFile.LiftSpeed, SlicerFile.RetractSpeed, (float)Settings.Automations.LightOffDelay);
+ if (lightOff != SlicerFile.LightOffDelay)
+ {
+ modified = true;
+ SlicerFile.LightOffDelay = lightOff;
+ }
+ }
+
+ if (modified)
+ {
+ await SaveFile(null, true);
+ }
+
ClipboardManager.Instance.Init(SlicerFile);
- if (SlicerFile.ConvertToFormats is not null)
+ if (SlicerFile is not ImageFile)
{
- List<MenuItem> menuItems = new List<MenuItem>();
- foreach (var fileFormatType in SlicerFile.ConvertToFormats)
+ List<MenuItem> menuItems = new();
+ foreach (var fileFormat in FileFormat.AvailableFormats)
{
- FileFormat fileFormat = FileFormat.FindByType(fileFormatType);
- if(fileFormat.FileExtensions is null) continue;
+ if(fileFormat is ImageFile) continue;
foreach (var fileExtension in fileFormat.FileExtensions)
{
var menuItem = new MenuItem
@@ -1074,7 +1151,7 @@ namespace UVtools.WPF
ShowProgressWindow($"Converting {Path.GetFileName(SlicerFile.FileFullPath)} to {Path.GetExtension(result)}");
try
{
- return SlicerFile.Convert(fileExtension.GetFileFormat(), result, ProgressWindow.RestartProgress());
+ return SlicerFile.Convert(fileExtension.GetFileFormat(), result, ProgressWindow.RestartProgress()) is not null;
}
catch (OperationCanceledException)
{
@@ -1124,13 +1201,13 @@ namespace UVtools.WPF
}
-
- public async Task<bool> SaveFile(string filepath = null)
+
+ public async Task<bool> SaveFile(string filepath = null, bool ignoreOverwriteWarning = false)
{
if (filepath is null)
{
- if (SavesCount == 0 && Settings.General.PromptOverwriteFileSave)
+ if (!ignoreOverwriteWarning && SavesCount == 0 && Settings.General.PromptOverwriteFileSave)
{
var result = await this.MessageBoxQuestion(
"Original input file will be overwritten. Do you wish to proceed?", "Overwrite file?");
diff --git a/UVtools.WPF/UVtools.WPF.csproj b/UVtools.WPF/UVtools.WPF.csproj
index 59ed6ce..e2630d6 100644
--- a/UVtools.WPF/UVtools.WPF.csproj
+++ b/UVtools.WPF/UVtools.WPF.csproj
@@ -12,7 +12,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
- <Version>2.2.0</Version>
+ <Version>2.3.0</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
diff --git a/UVtools.WPF/UserSettings.cs b/UVtools.WPF/UserSettings.cs
index 613f2d4..16b0ff5 100644
--- a/UVtools.WPF/UserSettings.cs
+++ b/UVtools.WPF/UserSettings.cs
@@ -12,7 +12,6 @@ using System.IO;
using System.Xml.Serialization;
using Avalonia.Media;
using JetBrains.Annotations;
-using ReactiveUI;
using UVtools.Core;
using UVtools.Core.Objects;
using Color=UVtools.WPF.Structures.Color;
@@ -23,7 +22,7 @@ namespace UVtools.WPF
public sealed class UserSettings : BindableBase
{
#region Constants
- public const ushort SETTINGS_VERSION = 1;
+ public const ushort SETTINGS_VERSION = 2;
#endregion
#region Sub classes
@@ -987,7 +986,7 @@ namespace UVtools.WPF
private bool _repairIslands = true;
private bool _repairResinTraps = true;
private bool _removeEmptyLayers = true;
- private byte _removeIslandsBelowEqualPixels = 5;
+ private ushort _removeIslandsBelowEqualPixels = 5;
private ushort _removeIslandsRecursiveIterations = 4;
private byte _closingIterations = 2;
private byte _openingIterations = 0;
@@ -1010,7 +1009,7 @@ namespace UVtools.WPF
set => RaiseAndSetIfChanged(ref _removeEmptyLayers, value);
}
- public byte RemoveIslandsBelowEqualPixels
+ public ushort RemoveIslandsBelowEqualPixels
{
get => _removeIslandsBelowEqualPixels;
set => RaiseAndSetIfChanged(ref _removeIslandsBelowEqualPixels, value);
@@ -1041,6 +1040,44 @@ namespace UVtools.WPF
}
#endregion
+ #region Automations
+
+ [Serializable]
+ public sealed class AutomationsUserSettings : BindableBase
+ {
+ private bool _saveFileAfterModifications = true;
+ private bool _autoConvertSl1Files = true;
+ private decimal _lightOffDelay = 2.5m;
+ private decimal _bottomLightOffDelay = 3m;
+
+ public bool SaveFileAfterModifications
+ {
+ get => _saveFileAfterModifications;
+ set => RaiseAndSetIfChanged(ref _saveFileAfterModifications, value);
+ }
+
+ public bool AutoConvertSL1Files
+ {
+ get => _autoConvertSl1Files;
+ set => RaiseAndSetIfChanged(ref _autoConvertSl1Files, value);
+ }
+
+
+ public decimal LightOffDelay
+ {
+ get => _lightOffDelay;
+ set => RaiseAndSetIfChanged(ref _lightOffDelay, value);
+ }
+
+ public decimal BottomLightOffDelay
+ {
+ get => _bottomLightOffDelay;
+ set => RaiseAndSetIfChanged(ref _bottomLightOffDelay, value);
+ }
+ }
+
+ #endregion
+
#endregion
#region Singleton
@@ -1088,6 +1125,7 @@ namespace UVtools.WPF
private IssuesUserSettings _issues;
private PixelEditorUserSettings _pixelEditor;
private LayerRepairUserSettings _layerRepair;
+ private AutomationsUserSettings _automations;
private ushort _settingsVersion = SETTINGS_VERSION;
private string _appVersion;
private uint _savesCount;
@@ -1128,6 +1166,12 @@ namespace UVtools.WPF
set => _layerRepair = value;
}
+ public AutomationsUserSettings Automations
+ {
+ get => _automations ??= new AutomationsUserSettings();
+ set => _automations = value;
+ }
+
/*
/// <summary>
/// Gets or sets the number of times this file has been reset to defaults
diff --git a/UVtools.WPF/Windows/SettingsWindow.axaml b/UVtools.WPF/Windows/SettingsWindow.axaml
index 5a15288..fe46049 100644
--- a/UVtools.WPF/Windows/SettingsWindow.axaml
+++ b/UVtools.WPF/Windows/SettingsWindow.axaml
@@ -1287,6 +1287,101 @@
</ScrollViewer>
</TabItem>
+ <TabItem Header="Automations" VerticalContentAlignment="Center">
+ <ScrollViewer MaxHeight="{Binding ScrollViewerMaxHeight}">
+ <StackPanel Orientation="Vertical" Spacing="5">
+ <Border
+ Margin="5"
+ BorderBrush="LightBlue"
+ BorderThickness="4"
+ >
+
+ <StackPanel Orientation="Vertical">
+ <TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="Common"/>
+ <StackPanel Margin="15" Orientation="Vertical" Spacing="15">
+ <CheckBox IsChecked="{Binding Settings.Automations.SaveFileAfterModifications}" Content="Auto save the file after apply any automation(s)"/>
+ </StackPanel>
+
+ </StackPanel>
+ </Border>
+
+ <Border
+ Margin="5"
+ BorderBrush="LightBlue"
+ BorderThickness="4"
+ >
+
+ <StackPanel Orientation="Vertical">
+ <TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="PrusaSlicer SL1 files"/>
+ <StackPanel Margin="15" Orientation="Vertical" Spacing="15">
+ <CheckBox IsChecked="{Binding Settings.Automations.AutoConvertSL1Files}"
+ ToolTip.Tip="Converts SL1 files to the format specified on 'PrusaSlicer - Printer - Notes' on 'FILEFORMAT_XXX' variable.
+&#x0a;A new file with same name but a new extension will be created and overwrite any previous file.
+&#x0a;After a successful conversion the new file will automatically load in instead of the loaded SL1 file."
+ Content="Auto convert SL1 files to the target format when possible and load it back"/>
+ </StackPanel>
+
+ </StackPanel>
+ </Border>
+
+
+ <Border
+ Margin="5"
+ BorderBrush="LightBlue"
+ BorderThickness="4">
+
+ <StackPanel Orientation="Vertical">
+ <TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="Light-off delay"/>
+ <Grid Margin="15"
+ RowDefinitions="Auto"
+ ColumnDefinitions="Auto,10,100,5,Auto,30,Auto,10,100,5,Auto">
+
+ <TextBlock Grid.Row="0" Grid.Column="0"
+ VerticalAlignment="Center"
+ ToolTip.Tip="Auto set the extra 'light-off delay' based on lift height and speed.
+&#x0a;Use '0' to ignore this automation."
+ Text="Light-off delay:" />
+
+ <NumericUpDown Grid.Row="0" Grid.Column="2"
+ ClipValueToMinMax="True"
+ Minimum="0"
+ Maximum="255"
+ Increment="0.5"
+ FormatString="{}{0:0.00}"
+ Value="{Binding Settings.Automations.LightOffDelay}"/>
+ <TextBlock Grid.Row="0" Grid.Column="4"
+ VerticalAlignment="Center"
+ Text="s" />
+
+
+ <TextBlock Grid.Row="0" Grid.Column="6"
+ VerticalAlignment="Center"
+ ToolTip.Tip="Auto set the extra 'bottom light-off delay' based on bottom lift height and speed.
+&#x0a;Use '0' to ignore this automation."
+ Text="Bottom light-off delay:" />
+ <NumericUpDown Grid.Row="0" Grid.Column="8"
+ ClipValueToMinMax="True"
+ Minimum="0"
+ Maximum="255"
+ Increment="0.5"
+ FormatString="{}{0:0.00}"
+ Value="{Binding Settings.Automations.BottomLightOffDelay}"/>
+ <TextBlock Grid.Row="0" Grid.Column="10"
+ VerticalAlignment="Center"
+ Text="s" />
+
+ </Grid>
+
+ </StackPanel>
+ </Border>
+
+
+
+
+ </StackPanel>
+ </ScrollViewer>
+ </TabItem>
+
</TabControl>
<Grid ColumnDefinitions="*,*" Background="LightGray">
diff --git a/UVtools.WPF/Windows/SettingsWindow.axaml.cs b/UVtools.WPF/Windows/SettingsWindow.axaml.cs
index de4a1b5..0110ca9 100644
--- a/UVtools.WPF/Windows/SettingsWindow.axaml.cs
+++ b/UVtools.WPF/Windows/SettingsWindow.axaml.cs
@@ -50,7 +50,7 @@ namespace UVtools.WPF.Windows
{
FileFormat.AllSlicerFiles.Replace("*", string.Empty)
};
- fileFormats.AddRange(from format in FileFormat.AvaliableFormats from extension in format.FileExtensions select $"{extension.Description} (.{extension.Extension})");
+ fileFormats.AddRange(from format in FileFormat.AvailableFormats from extension in format.FileExtensions select $"{extension.Description} (.{extension.Extension})");
FileOpenDialogFilters = fileFormats.ToArray();