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>2020-10-01 18:07:19 +0300
committerTiago Conceição <Tiago_caza@hotmail.com>2020-10-01 18:07:19 +0300
commit6d042d7165e7189cfea6090d3eb7319dbd0954ee (patch)
treed8d1940fe4c38c9f8d1fc49d15acea809ec0a84c
parent7ac20d7afae9f1f8d8f80a71534c0487c149c76c (diff)
v0.8.4.0v0.8.4.0
* (Add) Tool: Arithmetic operations * (Add) Allow convert chitubox zip to cbddlp, ctb, photon, phz, pws, pw0, cws, zcodex * (Add) When using filenames containing "bene4_mono" and when converting to cws it will use the GRAY2RGB encoding (#67) * (Add) Hint on how to use layer re-height tool when it fails to launch * (Add) PrusaSlicer Printer: Creality LD-006 * (Add) PrusaSlicer Printer: EPAX E6 Mono * (Add) PrusaSlicer Printer: EPAX E10 Mono * (Add) PrusaSlicer Printer: EPAX X1K 2K Mono * (Add) PrusaSlicer Printer: Elegoo Mars C * (Add) PrusaSlicer Printer: Longer 3D Orange4K * (Add) PrusaSlicer Printer: Phrozen Shuffle XL Lite * (Add) PrusaSlicer Printer: Phrozen Shuffle 16 * (Add) PrusaSlicer Printer: Phrozen Sonic 4K * (Add) PrusaSlicer Printer: Phrozen Sonic Mighty 4K * (Add) PrusaSlicer Printer: Voxelab Proxima * (Add) PrusaSlicer Printer: QIDI S-Box * (Fix) PrusaSlicer Printer: Elegoo Saturn - name and resolution * (Fix) PrusaSlicer Printer: AnyCubic Photon S - display width/height * (Fix) PrusaSlicer Printer: Epax X10 4K Mono - Y Resolution * (Fix) PrusaSlicer Printer: EPAX X133 4K Mono - display width/height * (Fix) PrusaSlicer Printer: Phrozen Shuffle Lite - display width/height * (Fix) All PrusaSlicer Printers were reviewed and some bugs were fixed * (Fix) Chitubox 3D preview when use files converted with UVtools (#68) * (Fix) Overhangs: False-positives when previous or current layer as draker pixels, it now threshold pixels before proceed (#64) * (Change) Tools: Placed "Threshold" menu item after "Morph"
-rw-r--r--CHANGELOG.md37
-rw-r--r--ImportPrusaSlicerData.bat82
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon S.ini20
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon Zero.ini20
-rw-r--r--PrusaSlicer/printer/AnyCubic Photon.ini20
-rw-r--r--PrusaSlicer/printer/Creality LD-002H.ini20
-rw-r--r--PrusaSlicer/printer/Creality LD-002R.ini20
-rw-r--r--PrusaSlicer/printer/Creality LD-006.ini37
-rw-r--r--PrusaSlicer/printer/EPAX E10 Mono.ini37
-rw-r--r--PrusaSlicer/printer/EPAX E6 Mono.ini37
-rw-r--r--PrusaSlicer/printer/EPAX X1.ini20
-rw-r--r--PrusaSlicer/printer/EPAX X10 4K Mono.ini6
-rw-r--r--PrusaSlicer/printer/EPAX X10.ini20
-rw-r--r--PrusaSlicer/printer/EPAX X133 4K Mono.ini10
-rw-r--r--PrusaSlicer/printer/EPAX X156 4K Color.ini4
-rw-r--r--PrusaSlicer/printer/EPAX X1K 2K Mono.ini37
-rw-r--r--PrusaSlicer/printer/Elegoo Mars 2 Pro.ini20
-rw-r--r--PrusaSlicer/printer/Elegoo Mars C.ini37
-rw-r--r--PrusaSlicer/printer/Elegoo Mars.ini20
-rw-r--r--PrusaSlicer/printer/Elegoo Saturn.ini (renamed from PrusaSlicer/printer/Elegoo Mars Saturn.ini)12
-rw-r--r--PrusaSlicer/printer/Kelant S400.ini6
-rw-r--r--PrusaSlicer/printer/Longer Orange 10.ini20
-rw-r--r--PrusaSlicer/printer/Longer Orange 30.ini20
-rw-r--r--PrusaSlicer/printer/Longer Orange4K.ini37
-rw-r--r--PrusaSlicer/printer/Nova3D Bene4 Mono.ini16
-rw-r--r--PrusaSlicer/printer/Nova3D Elfin.ini16
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom L.ini8
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom Noir.ini6
-rw-r--r--PrusaSlicer/printer/Peopoly Phenom.ini6
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle 16.ini37
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle 4K.ini16
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle Lite.ini16
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini37
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle XL.ini4
-rw-r--r--PrusaSlicer/printer/Phrozen Shuffle.ini16
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic 4K.ini37
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini37
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini8
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mini.ini16
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic.ini18
-rw-r--r--PrusaSlicer/printer/QIDI S-Box.ini37
-rw-r--r--PrusaSlicer/printer/QIDI Shadow5.5.ini20
-rw-r--r--PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini20
-rw-r--r--PrusaSlicer/printer/Voxelab Polaris.ini20
-rw-r--r--PrusaSlicer/printer/Voxelab Proxima.ini37
-rw-r--r--PrusaSlicer/printer/Wanhao D7.ini6
-rw-r--r--PrusaSlicer/printer/Wanhao D8.ini6
-rw-r--r--PrusaSlicer/printer/Zortrax Inkspire.ini16
-rw-r--r--UVtools.Core/FileFormats/ChituboxFile.cs4
-rw-r--r--UVtools.Core/FileFormats/ChituboxZipFile.cs263
-rw-r--r--UVtools.Core/FileFormats/FileFormat.cs2
-rw-r--r--UVtools.Core/FileFormats/IFileFormat.cs5
-rw-r--r--UVtools.Core/FileFormats/PHZFile.cs4
-rw-r--r--UVtools.Core/FileFormats/PWSFile.cs4
-rw-r--r--UVtools.Core/FileFormats/SL1File.cs12
-rw-r--r--UVtools.Core/Layer/Layer.cs2
-rw-r--r--UVtools.Core/Layer/LayerManager.cs63
-rw-r--r--UVtools.Core/Operations/Operation.cs7
-rw-r--r--UVtools.Core/Operations/OperationArithmetic.cs189
-rw-r--r--UVtools.Core/Operations/OperationMove.cs129
-rw-r--r--UVtools.Core/UVtools.Core.csproj4
-rw-r--r--UVtools.GUI/Controls/Tools/CtrlToolArithmetic.Designer.cs77
-rw-r--r--UVtools.GUI/Controls/Tools/CtrlToolArithmetic.cs42
-rw-r--r--UVtools.GUI/Controls/Tools/CtrlToolArithmetic.resx123
-rw-r--r--UVtools.GUI/Forms/FrmSettings.Designer.cs284
-rw-r--r--UVtools.GUI/Forms/FrmSettings.resx3
-rw-r--r--UVtools.GUI/FrmMain.Designer.cs28
-rw-r--r--UVtools.GUI/FrmMain.cs12
-rw-r--r--UVtools.GUI/FrmMain.resx58
-rw-r--r--UVtools.GUI/Images/square-root-16x16.pngbin0 -> 223 bytes
-rw-r--r--UVtools.GUI/Properties/AssemblyInfo.cs4
-rw-r--r--UVtools.GUI/Properties/Resources.Designer.cs10
-rw-r--r--UVtools.GUI/Properties/Resources.resx79
-rw-r--r--UVtools.GUI/UVtools.GUI.csproj10
-rw-r--r--UVtools.InstallerMM/UVtools.InstallerMM.wxs43
-rw-r--r--UVtools.WPF/Assets/Icons/square-root-16x16.pngbin0 -> 223 bytes
-rw-r--r--UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs3
-rw-r--r--UVtools.WPF/Controls/Tools/ToolMoveControl.axaml74
-rw-r--r--UVtools.WPF/Controls/Tools/ToolMoveControl.axaml.cs41
-rw-r--r--UVtools.WPF/MainWindow.axaml3
-rw-r--r--UVtools.WPF/MainWindow.axaml.cs53
-rw-r--r--UVtools.WPF/UserSettings.cs73
-rw-r--r--UVtools.WPF/Windows/SettingsWindow.axaml167
83 files changed, 2315 insertions, 615 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a977ea7..4206d0d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,42 @@
# Changelog
+## ??/??/2020 - v0.9.0.0
+
+* (Add) Multi-OS with Linux support
+* (Add) Themes support
+* (Add) Fullscreen support (F11)
+* (Change) GUI was rewritten from Windows Forms to WPF Avalonia, C#
+* (Improvement) GUI is now scalable
+* (Fix) Some bug found and fixed during convertion
+
+## 01/10/2020 - v0.8.4.0
+
+* (Add) Tool: Arithmetic operations
+* (Add) Allow convert chitubox zip to cbddlp, ctb, photon, phz, pws, pw0, cws, zcodex
+* (Add) When using filenames containing "bene4_mono" and when converting to cws it will use the GRAY2RGB encoding (#67)
+* (Add) Hint on how to use layer re-height tool when it fails to launch
+* (Add) PrusaSlicer Printer: Creality LD-006
+* (Add) PrusaSlicer Printer: EPAX E6 Mono
+* (Add) PrusaSlicer Printer: EPAX E10 Mono
+* (Add) PrusaSlicer Printer: EPAX X1K 2K Mono
+* (Add) PrusaSlicer Printer: Elegoo Mars C
+* (Add) PrusaSlicer Printer: Longer 3D Orange4K
+* (Add) PrusaSlicer Printer: Phrozen Shuffle XL Lite
+* (Add) PrusaSlicer Printer: Phrozen Shuffle 16
+* (Add) PrusaSlicer Printer: Phrozen Sonic 4K
+* (Add) PrusaSlicer Printer: Phrozen Sonic Mighty 4K
+* (Add) PrusaSlicer Printer: Voxelab Proxima
+* (Add) PrusaSlicer Printer: QIDI S-Box
+* (Fix) PrusaSlicer Printer: Elegoo Saturn - name and resolution
+* (Fix) PrusaSlicer Printer: AnyCubic Photon S - display width/height
+* (Fix) PrusaSlicer Printer: Epax X10 4K Mono - Y Resolution
+* (Fix) PrusaSlicer Printer: EPAX X133 4K Mono - display width/height
+* (Fix) PrusaSlicer Printer: Phrozen Shuffle Lite - display width/height
+* (Fix) All PrusaSlicer Printers were reviewed and some bugs were fixed
+* (Fix) Chitubox 3D preview when use files converted with UVtools (#68)
+* (Fix) Overhangs: False-positives when previous or current layer as draker pixels, it now threshold pixels before proceed (#64)
+* (Change) Tools: Placed "Threshold" menu item after "Morph"
+
## 30/09/2020 - v0.8.3.0
* (Add) Issue: Overhangs - Detects potential overhangs on layers (#64)
diff --git a/ImportPrusaSlicerData.bat b/ImportPrusaSlicerData.bat
index 60ec0f4..0197b13 100644
--- a/ImportPrusaSlicerData.bat
+++ b/ImportPrusaSlicerData.bat
@@ -6,41 +6,53 @@ SET OUTPUT_DIR=%~dp0PrusaSlicer
SET PRINT_DIR=sla_print
SET PRINTER_DIR=printer
-SET files[0]=EPAX X1.ini
-SET files[1]=EPAX X10.ini
-SET files[2]=EPAX X10 4K Mono.ini
-SET files[3]=EPAX X133 4K Mono.ini
-SET files[4]=EPAX X156 4K Color.ini
-SET files[5]=Zortrax Inkspire.ini
-SET files[6]=Nova3D Elfin.ini
-SET files[7]=Nova3D Bene4 Mono.ini
-SET files[8]=AnyCubic Photon.ini
-SET files[9]=AnyCubic Photon S.ini
-SET files[10]=AnyCubic Photon Zero.ini
-SET files[11]=Elegoo Mars.ini
-SET files[12]=Elegoo Mars 2 Pro.ini
-SET files[13]=Elegoo Mars Saturn.ini
-SET files[14]=Peopoly Phenom.ini
-SET files[15]=Peopoly Phenom L.ini
-SET files[16]=Peopoly Phenom Noir.ini
-SET files[17]=QIDI Shadow5.5.ini
-SET files[18]=QIDI Shadow6.0 Pro.ini
-SET files[19]=Phrozen Shuffle.ini
-SET files[20]=Phrozen Shuffle Lite.ini
-SET files[21]=Phrozen Shuffle XL.ini
-SET files[22]=Phrozen Shuffle 4K.ini
-SET files[23]=Phrozen Sonic.ini
-SET files[24]=Phrozen Sonic Mini.ini
-SET files[25]=Phrozen Sonic Mini 4K.ini
-SET files[26]=Phrozen Transform.ini
-SET files[27]=Kelant S400.ini
-SET files[28]=Wanhao D7.ini
-SET files[29]=Wanhao D8.ini
-SET files[30]=Creality LD-002R.ini
-SET files[31]=Creality LD-002H.ini
-SET files[32]=Voxelab Polaris.ini
-SET files[33]=Longer Orange 10.ini
-SET files[34]=Longer Orange 30.ini
+SET files[0]=EPAX E6 Mono.ini
+SET files[1]=EPAX E10 Mono.ini
+SET files[2]=EPAX X1.ini
+SET files[3]=EPAX X10.ini
+SET files[4]=EPAX X10 4K Mono.ini
+SET files[5]=EPAX X133 4K Mono.ini
+SET files[6]=EPAX X156 4K Color.ini
+SET files[7]=EPAX X1K 2K Mono.ini
+SET files[8]=Zortrax Inkspire.ini
+SET files[9]=Nova3D Elfin.ini
+SET files[10]=Nova3D Bene4 Mono.ini
+SET files[11]=AnyCubic Photon.ini
+SET files[12]=AnyCubic Photon S.ini
+SET files[13]=AnyCubic Photon Zero.ini
+SET files[14]=Elegoo Mars.ini
+SET files[15]=Elegoo Mars 2 Pro.ini
+SET files[16]=Elegoo Mars C.ini
+SET files[17]=Elegoo Saturn.ini
+SET files[18]=Peopoly Phenom.ini
+SET files[19]=Peopoly Phenom L.ini
+SET files[20]=Peopoly Phenom Noir.ini
+SET files[21]=QIDI Shadow5.5.ini
+SET files[22]=QIDI Shadow6.0 Pro.ini
+SET files[23]=QIDI S-Box.ini
+SET files[24]=Phrozen Shuffle.ini
+SET files[25]=Phrozen Shuffle Lite.ini
+SET files[26]=Phrozen Shuffle XL.ini
+SET files[27]=Phrozen Shuffle XL Lite.ini
+SET files[28]=Phrozen Shuffle 16.ini
+SET files[29]=Phrozen Shuffle 4K.ini
+SET files[30]=Phrozen Sonic.ini
+SET files[31]=Phrozen Sonic 4K.ini
+SET files[32]=Phrozen Sonic Mighty 4K.ini
+SET files[33]=Phrozen Sonic Mini.ini
+SET files[34]=Phrozen Sonic Mini 4K.ini
+SET files[35]=Phrozen Transform.ini
+SET files[36]=Kelant S400.ini
+SET files[37]=Wanhao D7.ini
+SET files[38]=Wanhao D8.ini
+SET files[39]=Creality LD-002R.ini
+SET files[40]=Creality LD-002H.ini
+SET files[41]=Creality LD-006.ini
+SET files[42]=Voxelab Polaris.ini
+SET files[43]=Voxelab Proxima.ini
+SET files[44]=Longer Orange 10.ini
+SET files[45]=Longer Orange 30.ini
+SET files[46]=Longer Orange4K.ini
echo PrusaSlicer Printers Instalation
echo This will replace printers, all changes will be discarded
diff --git a/PrusaSlicer/printer/AnyCubic Photon S.ini b/PrusaSlicer/printer/AnyCubic Photon S.ini
index 3b3babe..a0e3071 100644
--- a/PrusaSlicer/printer/AnyCubic Photon S.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon S.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:22:18 UTC
+# 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,121x0,121x68,0x68
+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 = 68
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 121
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/AnyCubic Photon Zero.ini b/PrusaSlicer/printer/AnyCubic Photon Zero.ini
index 59ff711..3f312b4 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Zero.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon Zero.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:22:23 UTC
+# 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,98.6x0,98.6x55.4,0x55.4
+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 = 55.4
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 854
-display_pixels_y = 480
-display_width = 98.6
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/AnyCubic Photon.ini b/PrusaSlicer/printer/AnyCubic Photon.ini
index b438e38..28922c3 100644
--- a/PrusaSlicer/printer/AnyCubic Photon.ini
+++ b/PrusaSlicer/printer/AnyCubic Photon.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:22:12 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Creality LD-002H.ini b/PrusaSlicer/printer/Creality LD-002H.ini
index 22c0ffd..f64c265 100644
--- a/PrusaSlicer/printer/Creality LD-002H.ini
+++ b/PrusaSlicer/printer/Creality LD-002H.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-07-13 at 23:26:09 UTC
+# 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,130.56x0,130.56x82.62,0x82.62
+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 = 82.62
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1620
-display_width = 130.56
+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
@@ -25,7 +25,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\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_7\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\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
diff --git a/PrusaSlicer/printer/Creality LD-002R.ini b/PrusaSlicer/printer/Creality LD-002R.ini
index 5a9fce4..e4bdfbd 100644
--- a/PrusaSlicer/printer/Creality LD-002R.ini
+++ b/PrusaSlicer/printer/Creality LD-002R.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:22:31 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Creality LD-006.ini b/PrusaSlicer/printer/Creality LD-006.ini
new file mode 100644
index 0000000..8a88238
--- /dev/null
+++ b/PrusaSlicer/printer/Creality LD-006.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/EPAX E10 Mono.ini b/PrusaSlicer/printer/EPAX E10 Mono.ini
new file mode 100644
index 0000000..3d8c0c7
--- /dev/null
+++ b/PrusaSlicer/printer/EPAX E10 Mono.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/EPAX E6 Mono.ini b/PrusaSlicer/printer/EPAX E6 Mono.ini
new file mode 100644
index 0000000..aab4ae4
--- /dev/null
+++ b/PrusaSlicer/printer/EPAX E6 Mono.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/EPAX X1.ini b/PrusaSlicer/printer/EPAX X1.ini
index 3407149..80d13c0 100644
--- a/PrusaSlicer/printer/EPAX X1.ini
+++ b/PrusaSlicer/printer/EPAX X1.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:22:36 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_2\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\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
diff --git a/PrusaSlicer/printer/EPAX X10 4K Mono.ini b/PrusaSlicer/printer/EPAX X10 4K Mono.ini
index c36afa4..ca8583e 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-06-30 at 23:52:31 UTC
+# 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 =
@@ -11,7 +11,7 @@ display_mirror_x = 1
display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 3840
-display_pixels_y = 2160
+display_pixels_y = 2400
display_width = 192
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
@@ -25,7 +25,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_10\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_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
diff --git a/PrusaSlicer/printer/EPAX X10.ini b/PrusaSlicer/printer/EPAX X10.ini
index 14e3cb3..dae3c2d 100644
--- a/PrusaSlicer/printer/EPAX X10.ini
+++ b/PrusaSlicer/printer/EPAX X10.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:22:43 UTC
+# 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,216.57x0,216.57x135.36,0x135.36
+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 = 135.36
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1600
-display_width = 216.57
+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
@@ -25,7 +25,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\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_12\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\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
diff --git a/PrusaSlicer/printer/EPAX X133 4K Mono.ini b/PrusaSlicer/printer/EPAX X133 4K Mono.ini
index 0345529..73ed4b5 100644
--- a/PrusaSlicer/printer/EPAX X133 4K Mono.ini
+++ b/PrusaSlicer/printer/EPAX X133 4K Mono.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:39:25 UTC
+# 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,216.576x0,216.576x135.36,0x135.36
+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 = 135.36
+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 = 216.576
+display_width = 293.76
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
@@ -25,7 +25,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_10\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\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
diff --git a/PrusaSlicer/printer/EPAX X156 4K Color.ini b/PrusaSlicer/printer/EPAX X156 4K Color.ini
index 93b5521..6f47841 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-06-12 at 00:39:31 UTC
+# 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 =
@@ -25,7 +25,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\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
diff --git a/PrusaSlicer/printer/EPAX X1K 2K Mono.ini b/PrusaSlicer/printer/EPAX X1K 2K Mono.ini
new file mode 100644
index 0000000..611935f
--- /dev/null
+++ b/PrusaSlicer/printer/EPAX X1K 2K Mono.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini b/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini
index d493fdf..c41ae9a 100644
--- a/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini
+++ b/PrusaSlicer/printer/Elegoo Mars 2 Pro.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-07-13 at 23:29:07 UTC
+# 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,130.56x0,130.56x82.62,0x82.62
+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 = 82.62
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1620
-display_width = 130.56
+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
@@ -25,7 +25,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\nFLIP_XY\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_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
diff --git a/PrusaSlicer/printer/Elegoo Mars C.ini b/PrusaSlicer/printer/Elegoo Mars C.ini
new file mode 100644
index 0000000..b01c79a
--- /dev/null
+++ b/PrusaSlicer/printer/Elegoo Mars C.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Elegoo Mars.ini b/PrusaSlicer/printer/Elegoo Mars.ini
index 5ab1c72..dc243d1 100644
--- a/PrusaSlicer/printer/Elegoo Mars.ini
+++ b/PrusaSlicer/printer/Elegoo Mars.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:31:58 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Elegoo Mars Saturn.ini b/PrusaSlicer/printer/Elegoo Saturn.ini
index 3bc0f71..33233c1 100644
--- a/PrusaSlicer/printer/Elegoo Mars Saturn.ini
+++ b/PrusaSlicer/printer/Elegoo Saturn.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:32:02 UTC
+# 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 =
@@ -7,11 +7,11 @@ 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 = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
-display_pixels_x = 2560
-display_pixels_y = 1600
+display_pixels_x = 3840
+display_pixels_y = 2400
display_width = 192
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
@@ -25,7 +25,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_5\nLiftHeight_7\nBottomLiftSpeed_70\nLiftSpeed_70\nRetractSpeed_70\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\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
diff --git a/PrusaSlicer/printer/Kelant S400.ini b/PrusaSlicer/printer/Kelant S400.ini
index 53b25a5..2e21c0c 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-09-05 at 19:03:56 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 2560
display_pixels_y = 1600
diff --git a/PrusaSlicer/printer/Longer Orange 10.ini b/PrusaSlicer/printer/Longer Orange 10.ini
index 7838689..4c923e0 100644
--- a/PrusaSlicer/printer/Longer Orange 10.ini
+++ b/PrusaSlicer/printer/Longer Orange 10.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-09-10 at 15:48:09 UTC
+# 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,98.64x0,98.64x55.44,0x55.44
+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 = 55.44
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 854
-display_pixels_y = 480
-display_width = 98.64
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Longer Orange 30.ini b/PrusaSlicer/printer/Longer Orange 30.ini
index 22dd691..5e9bd7e 100644
--- a/PrusaSlicer/printer/Longer Orange 30.ini
+++ b/PrusaSlicer/printer/Longer Orange 30.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-09-10 at 15:36:45 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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_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
diff --git a/PrusaSlicer/printer/Longer Orange4K.ini b/PrusaSlicer/printer/Longer Orange4K.ini
new file mode 100644
index 0000000..7766383
--- /dev/null
+++ b/PrusaSlicer/printer/Longer Orange4K.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Nova3D Bene4 Mono.ini b/PrusaSlicer/printer/Nova3D Bene4 Mono.ini
index 583d56d..8e11a37 100644
--- a/PrusaSlicer/printer/Nova3D Bene4 Mono.ini
+++ b/PrusaSlicer/printer/Nova3D Bene4 Mono.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-09-04 at 20:31:20 UTC
+# 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,116x0,116x65.02,0x65.02
+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 = 65.02
+display_height = 116
display_mirror_x = 0
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 2549
-display_pixels_y = 1566
-display_width = 116
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Nova3D Elfin.ini b/PrusaSlicer/printer/Nova3D Elfin.ini
index b9375de..8786860 100644
--- a/PrusaSlicer/printer/Nova3D Elfin.ini
+++ b/PrusaSlicer/printer/Nova3D Elfin.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-09-04 at 22:08:49 UTC
+# 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,131x0,131x73,0x73
+bed_shape = 0x0,73x0,73x131,0x131
default_sla_material_profile = Prusa Orange Tough 0.05
default_sla_print_profile = 0.05 Normal
-display_height = 73
+display_height = 131
display_mirror_x = 0
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 2531
-display_pixels_y = 1410
-display_width = 131
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Peopoly Phenom L.ini b/PrusaSlicer/printer/Peopoly Phenom L.ini
index 50a835f..3a31a1d 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-06-29 at 20:32:29 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 0
-display_mirror_y = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 3840
display_pixels_y = 2160
@@ -25,7 +25,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_15\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\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
diff --git a/PrusaSlicer/printer/Peopoly Phenom Noir.ini b/PrusaSlicer/printer/Peopoly Phenom Noir.ini
index 23933e3..11c53bf 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-06-29 at 20:32:33 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 0
-display_mirror_y = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 3840
display_pixels_y = 2160
diff --git a/PrusaSlicer/printer/Peopoly Phenom.ini b/PrusaSlicer/printer/Peopoly Phenom.ini
index b6d72b0..0b6fbd2 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-06-29 at 20:32:25 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 0
-display_mirror_y = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 3840
display_pixels_y = 2160
diff --git a/PrusaSlicer/printer/Phrozen Shuffle 16.ini b/PrusaSlicer/printer/Phrozen Shuffle 16.ini
new file mode 100644
index 0000000..4fd48c3
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Shuffle 16.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Phrozen Shuffle 4K.ini b/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
index 3c24780..1d78ca5 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:41:28 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
+display_height = 120.96
display_mirror_x = 0
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 3840
-display_pixels_y = 2160
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Phrozen Shuffle Lite.ini b/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
index c9ee486..ae1b713 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:41:32 UTC
+# 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,120.32x0,120.32x67.68,0x67.68
+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 = 67.68
+display_height = 120.96
display_mirror_x = 0
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.32
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini b/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini
new file mode 100644
index 0000000..bcc8bac
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Shuffle XL Lite.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Phrozen Shuffle XL.ini b/PrusaSlicer/printer/Phrozen Shuffle XL.ini
index 8f2ea49..3240641 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-06-12 at 00:41:36 UTC
+# 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 =
@@ -25,7 +25,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_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
diff --git a/PrusaSlicer/printer/Phrozen Shuffle.ini b/PrusaSlicer/printer/Phrozen Shuffle.ini
index 41b8055..37ce48c 100644
--- a/PrusaSlicer/printer/Phrozen Shuffle.ini
+++ b/PrusaSlicer/printer/Phrozen Shuffle.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:41:24 UTC
+# 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,120.32x0,120.32x67.68,0x67.68
+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 = 67.68
+display_height = 120.32
display_mirror_x = 0
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.32
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Phrozen Sonic 4K.ini b/PrusaSlicer/printer/Phrozen Sonic 4K.ini
new file mode 100644
index 0000000..f2255ce
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Sonic 4K.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini b/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini
new file mode 100644
index 0000000..c93d717
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Sonic Mighty 4K.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini b/PrusaSlicer/printer/Phrozen Sonic Mini 4K.ini
index f2cd3c4..94a0c00 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-09-23 at 19:41:00 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 0
-display_mirror_y = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 3840
display_pixels_y = 2160
@@ -25,7 +25,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_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_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
diff --git a/PrusaSlicer/printer/Phrozen Sonic Mini.ini b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
index 3cd5088..cdcda19 100644
--- a/PrusaSlicer/printer/Phrozen Sonic Mini.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-20 at 15:15:00 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
+display_height = 120.96
display_mirror_x = 0
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 1920
-display_pixels_y = 1080
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/Phrozen Sonic.ini b/PrusaSlicer/printer/Phrozen Sonic.ini
index b4e44da..f87a458 100644
--- a/PrusaSlicer/printer/Phrozen Sonic.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:41:40 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
+display_height = 120.96
+display_mirror_x = 1
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 1920
-display_pixels_y = 1080
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\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\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
diff --git a/PrusaSlicer/printer/QIDI S-Box.ini b/PrusaSlicer/printer/QIDI S-Box.ini
new file mode 100644
index 0000000..3014478
--- /dev/null
+++ b/PrusaSlicer/printer/QIDI S-Box.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/QIDI Shadow5.5.ini b/PrusaSlicer/printer/QIDI Shadow5.5.ini
index bc68866..abfdfb2 100644
--- a/PrusaSlicer/printer/QIDI Shadow5.5.ini
+++ b/PrusaSlicer/printer/QIDI Shadow5.5.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:32:51 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_80\nLiftHeight_5\nBottomLiftSpeed_65\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\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
diff --git a/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini b/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
index 23dee47..1cd2f97 100644
--- a/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
+++ b/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-29 at 20:32:56 UTC
+# 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,132.48x0,132.48x74.52,0x74.52
+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 = 74.52
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 132.48
+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
@@ -25,7 +25,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.0PRO\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_80\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\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
diff --git a/PrusaSlicer/printer/Voxelab Polaris.ini b/PrusaSlicer/printer/Voxelab Polaris.ini
index b65418b..760a68a 100644
--- a/PrusaSlicer/printer/Voxelab Polaris.ini
+++ b/PrusaSlicer/printer/Voxelab Polaris.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-07-13 at 23:30:41 UTC
+# 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,120.96x0,120.96x68.04,0x68.04
+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 = 68.04
-display_mirror_x = 0
-display_mirror_y = 1
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 120.96
+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
@@ -25,7 +25,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\n\nSTART_CUSTOM_VALUES\nFLIP_XY\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_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
diff --git a/PrusaSlicer/printer/Voxelab Proxima.ini b/PrusaSlicer/printer/Voxelab Proxima.ini
new file mode 100644
index 0000000..f661138
--- /dev/null
+++ b/PrusaSlicer/printer/Voxelab Proxima.ini
@@ -0,0 +1,37 @@
+# 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/PrusaSlicer/printer/Wanhao D7.ini b/PrusaSlicer/printer/Wanhao D7.ini
index a4088d5..9361237 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-06-29 at 20:33:00 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 0
-display_mirror_y = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 2560
display_pixels_y = 1440
diff --git a/PrusaSlicer/printer/Wanhao D8.ini b/PrusaSlicer/printer/Wanhao D8.ini
index 9d74056..2ced018 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-06-29 at 20:33:04 UTC
+# 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 =
@@ -7,8 +7,8 @@ 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 = 1
+display_mirror_x = 1
+display_mirror_y = 0
display_orientation = landscape
display_pixels_x = 2560
display_pixels_y = 1600
diff --git a/PrusaSlicer/printer/Zortrax Inkspire.ini b/PrusaSlicer/printer/Zortrax Inkspire.ini
index a999a68..879b5b9 100644
--- a/PrusaSlicer/printer/Zortrax Inkspire.ini
+++ b/PrusaSlicer/printer/Zortrax Inkspire.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-20 at 15:23:41 UTC
+# 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,132.88x0,132.88x74.67,0x74.67
+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 = 74.67
+display_height = 132.88
display_mirror_x = 1
display_mirror_y = 0
-display_orientation = portrait
-display_pixels_x = 2560
-display_pixels_y = 1440
-display_width = 132.88
+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
@@ -25,7 +25,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_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\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
diff --git a/UVtools.Core/FileFormats/ChituboxFile.cs b/UVtools.Core/FileFormats/ChituboxFile.cs
index 2b003fa..b190edd 100644
--- a/UVtools.Core/FileFormats/ChituboxFile.cs
+++ b/UVtools.Core/FileFormats/ChituboxFile.cs
@@ -1817,7 +1817,9 @@ namespace UVtools.Core.FileFormats
file.OutputSettings.AntiAliasingValue = ValidateAntiAliasingLevel();
file.OutputSettings.AntiAliasing = file.OutputSettings.AntiAliasingValue > 1;
- file.Printer = MachineName.Contains("Bene4 Mono") ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;
+ file.Printer = MachineName.Contains("Bene4 Mono") ||
+ FileFullPath.Contains("bene4_mono")
+ ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;
file.Encode(fileFullPath, progress);
diff --git a/UVtools.Core/FileFormats/ChituboxZipFile.cs b/UVtools.Core/FileFormats/ChituboxZipFile.cs
index 7760b1a..4397735 100644
--- a/UVtools.Core/FileFormats/ChituboxZipFile.cs
+++ b/UVtools.Core/FileFormats/ChituboxZipFile.cs
@@ -7,6 +7,7 @@
*/
using System;
+using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
@@ -96,6 +97,11 @@ namespace UVtools.Core.FileFormats
};
public override Type[] ConvertToFormats { get; } = {
+ typeof(ChituboxFile),
+ typeof(PHZFile),
+ typeof(PWSFile),
+ typeof(CWSFile),
+ typeof(ZCodexFile),
typeof(UVJFile)
};
@@ -538,6 +544,263 @@ 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
+ =
+ {
+ 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,
+ 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,
+ BottomLayerCount = 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(PWSFile))
+ {
+ PWSFile file = new PWSFile
+ {
+ 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.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 = 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));
diff --git a/UVtools.Core/FileFormats/FileFormat.cs b/UVtools.Core/FileFormats/FileFormat.cs
index e95634e..0bdd541 100644
--- a/UVtools.Core/FileFormats/FileFormat.cs
+++ b/UVtools.Core/FileFormats/FileFormat.cs
@@ -361,6 +361,8 @@ namespace UVtools.Core.FileFormats
public float TotalHeight => LayerCount == 0 ? 0 : this[LayerCount - 1].PositionZ; //(float)Math.Round(LayerCount * LayerHeight, 2);
+ public uint LastLayerIndex => LayerCount - 1;
+
public virtual uint LayerCount
{
get => LayerManager?.Count ?? 0;
diff --git a/UVtools.Core/FileFormats/IFileFormat.cs b/UVtools.Core/FileFormats/IFileFormat.cs
index a8e6e84..c3a5885 100644
--- a/UVtools.Core/FileFormats/IFileFormat.cs
+++ b/UVtools.Core/FileFormats/IFileFormat.cs
@@ -115,6 +115,11 @@ namespace UVtools.Core.FileFormats
#region Universal Properties
/// <summary>
+ /// Gets the last layer index
+ /// </summary>
+ uint LastLayerIndex { get; }
+
+ /// <summary>
/// Gets the number of layers present in this file
/// </summary>
uint LayerCount { get; set; }
diff --git a/UVtools.Core/FileFormats/PHZFile.cs b/UVtools.Core/FileFormats/PHZFile.cs
index 8a68196..0debddd 100644
--- a/UVtools.Core/FileFormats/PHZFile.cs
+++ b/UVtools.Core/FileFormats/PHZFile.cs
@@ -1400,6 +1400,10 @@ namespace UVtools.Core.FileFormats
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;
diff --git a/UVtools.Core/FileFormats/PWSFile.cs b/UVtools.Core/FileFormats/PWSFile.cs
index 56a1a7b..883892e 100644
--- a/UVtools.Core/FileFormats/PWSFile.cs
+++ b/UVtools.Core/FileFormats/PWSFile.cs
@@ -1337,6 +1337,10 @@ namespace UVtools.Core.FileFormats
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;
diff --git a/UVtools.Core/FileFormats/SL1File.cs b/UVtools.Core/FileFormats/SL1File.cs
index d8de750..a7f32fc 100644
--- a/UVtools.Core/FileFormats/SL1File.cs
+++ b/UVtools.Core/FileFormats/SL1File.cs
@@ -720,6 +720,9 @@ namespace UVtools.Core.FileFormats
{
file.HeaderSettings.ResolutionX = PrinterSettings.DisplayPixelsY;
file.HeaderSettings.ResolutionY = PrinterSettings.DisplayPixelsX;
+
+ file.HeaderSettings.BedSizeX = PrinterSettings.DisplayHeight;
+ file.HeaderSettings.BedSizeY = PrinterSettings.DisplayWidth;
}
file.SetThumbnails(Thumbnails);
@@ -871,6 +874,9 @@ namespace UVtools.Core.FileFormats
{
file.HeaderSettings.ResolutionX = ResolutionY;
file.HeaderSettings.ResolutionY = ResolutionX;
+
+ file.HeaderSettings.BedSizeX = PrinterSettings.DisplayHeight;
+ file.HeaderSettings.BedSizeY = PrinterSettings.DisplayWidth;
}
file.SetThumbnails(Thumbnails);
@@ -1013,8 +1019,10 @@ namespace UVtools.Core.FileFormats
}
file.Printer = LookupCustomValue<bool>("NOVAMAKER_GRAY2RGB_ENCODE", false, true) ||
- MachineName.Contains("Bene4 Mono") ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;
-
+ MachineName.Contains("Bene4 Mono") ||
+ FileFullPath.Contains("bene4_mono")
+ ? CWSFile.PrinterType.BeneMono : CWSFile.PrinterType.Elfin;
+
file.Encode(fileFullPath, progress);
return true;
diff --git a/UVtools.Core/Layer/Layer.cs b/UVtools.Core/Layer/Layer.cs
index 6b83ac5..716a12f 100644
--- a/UVtools.Core/Layer/Layer.cs
+++ b/UVtools.Core/Layer/Layer.cs
@@ -235,7 +235,7 @@ namespace UVtools.Core
return BoundingRectangle;
}
bool needDispose = false;
- if (ReferenceEquals(mat, null))
+ if (mat is null)
{
mat = LayerMat;
needDispose = true;
diff --git a/UVtools.Core/Layer/LayerManager.cs b/UVtools.Core/Layer/LayerManager.cs
index bf47a76..a869141 100644
--- a/UVtools.Core/Layer/LayerManager.cs
+++ b/UVtools.Core/Layer/LayerManager.cs
@@ -504,7 +504,6 @@ namespace UVtools.Core
}
});
progress.Token.ThrowIfCancellationRequested();
-
}
/*public void MutateErode(uint startLayerIndex, uint endLayerIndex, int iterationsStart = 1, int iterationsEnd = 1, bool isFade = false, OperationProgress progress = null,
@@ -658,6 +657,62 @@ namespace UVtools.Core
progress.Token.ThrowIfCancellationRequested();
}*/
+ public void Arithmetic(OperationArithmetic operation, OperationProgress progress = null)
+ {
+ if (!operation.IsValid) return;
+ if (progress is null) progress = new OperationProgress();
+ progress.Reset(operation.ProgressAction, (uint)operation.Operations.Count);
+
+ using (Mat result = this[operation.Operations[0].LayerIndex].LayerMat)
+ {
+ Mat resultRoi = operation.GetRoiOrDefault(result);
+ for (int i = 1; i < operation.Operations.Count; i++)
+ {
+ using (var image = this[operation.Operations[i].LayerIndex].LayerMat)
+ {
+ Mat imageRoi = operation.GetRoiOrDefault(image);
+ switch (operation.Operations[i - 1].Operator)
+ {
+ case OperationArithmetic.ArithmeticOperators.Add:
+ CvInvoke.Add(resultRoi, imageRoi, resultRoi);
+ break;
+ case OperationArithmetic.ArithmeticOperators.Subtract:
+ CvInvoke.Subtract(resultRoi, imageRoi, resultRoi);
+ break;
+ case OperationArithmetic.ArithmeticOperators.Multiply:
+ CvInvoke.Multiply(resultRoi, imageRoi, resultRoi);
+ break;
+ case OperationArithmetic.ArithmeticOperators.Divide:
+ CvInvoke.Divide(resultRoi, imageRoi, resultRoi);
+ break;
+ case OperationArithmetic.ArithmeticOperators.BitwiseAnd:
+ CvInvoke.BitwiseAnd(resultRoi, imageRoi, resultRoi);
+ break;
+ case OperationArithmetic.ArithmeticOperators.BitwiseOr:
+ CvInvoke.BitwiseOr(resultRoi, imageRoi, resultRoi);
+ break;
+ case OperationArithmetic.ArithmeticOperators.BitwiseXor:
+ CvInvoke.BitwiseXor(resultRoi, imageRoi, resultRoi);
+ break;
+ }
+ }
+ }
+
+ Parallel.ForEach(operation.SetLayers, layerIndex =>
+ {
+ if (operation.Operations.Count == 1 && operation.HaveROI)
+ {
+ var mat = this[layerIndex].LayerMat;
+ var matRoi = operation.GetRoiOrDefault(mat);
+ resultRoi.CopyTo(matRoi);
+ this[layerIndex].LayerMat = mat;
+ return;
+ }
+ this[layerIndex].LayerMat = result;
+ });
+ }
+ }
+
public void ThresholdPixels(OperationThreshold operation, OperationProgress progress)
{
if (progress is null) progress = new OperationProgress();
@@ -929,6 +984,7 @@ namespace UVtools.Core
{
var anchor = new Point(-1, -1);
CvInvoke.Subtract(imageRoi, previousImageRoi, subtractedImage);
+ CvInvoke.Threshold(subtractedImage, subtractedImage, 127, 255, ThresholdType.Binary);
CvInvoke.Erode(subtractedImage, subtractedImage, CvInvoke.GetStructuringElement(ElementShape.Rectangle,
new Size(3, 3), anchor),
@@ -988,7 +1044,10 @@ namespace UVtools.Core
using (var vecPoints = new VectorOfPoint())
{
var anchor = new Point(-1, -1);
+
+
CvInvoke.Subtract(image, previousImage, subtractedImage);
+ CvInvoke.Threshold(subtractedImage, subtractedImage, 127, 255, ThresholdType.Binary);
//subtractedImage.Save($"D:\\subtracted_image\\subtracted{layer.Index}.png");
@@ -1901,5 +1960,7 @@ namespace UVtools.Core
#endregion
+
+
}
}
diff --git a/UVtools.Core/Operations/Operation.cs b/UVtools.Core/Operations/Operation.cs
index ce979d1..ff7f177 100644
--- a/UVtools.Core/Operations/Operation.cs
+++ b/UVtools.Core/Operations/Operation.cs
@@ -14,6 +14,7 @@ namespace UVtools.Core.Operations
{
public abstract class Operation : BindableBase
{
+ private Rectangle _roi = Rectangle.Empty;
public const byte ClassNameLength = 9;
/// <summary>
@@ -95,7 +96,11 @@ namespace UVtools.Core.Operations
/// <summary>
/// Gets or sets an ROI to process this operation
/// </summary>
- public Rectangle ROI { get; set; } = Rectangle.Empty;
+ public Rectangle ROI
+ {
+ get => _roi;
+ set => RaiseAndSetIfChanged(ref _roi, value);
+ }
public bool HaveROI => !ROI.IsEmpty;
diff --git a/UVtools.Core/Operations/OperationArithmetic.cs b/UVtools.Core/Operations/OperationArithmetic.cs
new file mode 100644
index 0000000..3a2a3ca
--- /dev/null
+++ b/UVtools.Core/Operations/OperationArithmetic.cs
@@ -0,0 +1,189 @@
+/*
+ * 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.Collections.Generic;
+using System.Text;
+using Emgu.CV;
+using UVtools.Core.Objects;
+
+namespace UVtools.Core.Operations
+{
+ public class OperationArithmetic : Operation
+ {
+ private string _sentence;
+
+ public enum ArithmeticOperators : byte
+ {
+ None,
+ Add,
+ Subtract,
+ Multiply,
+ Divide,
+ BitwiseAnd,
+ BitwiseOr,
+ BitwiseXor
+ }
+
+ public sealed class ArithmeticOperation
+ {
+ public uint LayerIndex { get; }
+ public ArithmeticOperators Operator { get; }
+
+ public ArithmeticOperation(uint layerIndex, ArithmeticOperators arithmeticOperator)
+ {
+ LayerIndex = layerIndex;
+ Operator = arithmeticOperator;
+ }
+ }
+
+ public override string Title => "Arithmetic";
+ public override string Description =>
+ "Perform arithmetic operations over the layers pixels.\n\n" +
+ "Available operators:\n" +
+ " + - * / = Add, Subtract, Multiply, Divide\n" +
+ " && | ^ = Bitwise AND, OR, XOR\n\n" +
+ "Syntax: <set_to_layer_indexes> = <layer_index> <operator> <layer_index>\n" +
+ "When: \"<set_to_layer_indexes> =\" is omitted, the result will assign to the first layer on the sentence.\n\n" +
+ "Example 1: 10+11\n" +
+ "Example 2: 10,11,12 = 11+12-10*5\n" +
+ "On example 1 the layer 10 will be set with the result of layer 10 plus layer 11.\n" +
+ "On example 2 the layers 10,11,12 will be set with the result of layer 11 plus 12 minus 10 all multiplied by layer 5.\n\n" +
+ "Note: Calculation are made sequential, math order rules wont apply here.";
+
+ public override string ConfirmationText =>
+ $"perform this arithmetic operation";
+
+ public override string ProgressTitle =>
+ $"performing the arithmetic operations";
+
+ public override string ProgressAction => "Calculated layers";
+
+ public override StringTag Validate(params object[] parameters)
+ {
+ var sb = new StringBuilder();
+ if (string.IsNullOrWhiteSpace(_sentence))
+ sb.AppendLine("The sentence is empty.");
+ else if(!Parse())
+ sb.AppendLine("Unable to parse the sentence, malformed or incomplete.");
+ else if (SetLayers.Count == 0)
+ sb.AppendLine("No layers to assign.");
+ else if (Operations.Count == 0)
+ sb.AppendLine("No operations to perform.");
+
+ return new StringTag(sb.ToString());
+ }
+
+ public string Sentence
+ {
+ get => _sentence;
+ set => RaiseAndSetIfChanged(ref _sentence, value);
+ }
+
+ public List<ArithmeticOperation> Operations { get; } = new List<ArithmeticOperation>();
+
+ public List<uint> SetLayers { get; } = new List<uint>();
+
+ public bool IsValid => SetLayers.Count > 0 & Operations.Count > 0;
+
+ public bool Parse()
+ {
+ if (string.IsNullOrEmpty(_sentence)) return false;
+ SetLayers.Clear();
+ Operations.Clear();
+
+ var splitSentence = _sentence.Split('=');
+ var operations = splitSentence[0];
+ if (splitSentence.Length >= 2)
+ {
+ operations = splitSentence[1];
+ var setLayers = splitSentence[0].Replace(" ", string.Empty).Split(',');
+ foreach (var layer in setLayers)
+ {
+ if (!uint.TryParse(layer.Trim(), out var layerIndex)) continue;
+ if (SetLayers.Contains(layerIndex)) continue;
+ SetLayers.Add(layerIndex);
+ }
+ }
+
+ operations = operations.Replace(" ", string.Empty);
+ if (string.IsNullOrWhiteSpace(operations)) return false;
+
+ string layerIndexStr = string.Empty;
+ foreach (char c in operations)
+ {
+ if (c >= '0' && c <= '9')
+ {
+ layerIndexStr += c;
+ continue;
+ }
+
+ ArithmeticOperators op = ArithmeticOperators.None;
+ switch (c)
+ {
+ case '+':
+ op = ArithmeticOperators.Add;
+ break;
+ case '-':
+ op = ArithmeticOperators.Subtract;
+ break;
+ case '*':
+ op = ArithmeticOperators.Multiply;
+ break;
+ case '/':
+ op = ArithmeticOperators.Divide;
+ break;
+ case '&':
+ op = ArithmeticOperators.BitwiseAnd;
+ break;
+ case '|':
+ op = ArithmeticOperators.BitwiseOr;
+ break;
+ case '^':
+ op = ArithmeticOperators.BitwiseXor;
+ break;
+ }
+
+ if (op == ArithmeticOperators.None // No valid operator
+ || string.IsNullOrWhiteSpace(layerIndexStr) // Started with a operator instead of layer
+ ) continue;
+
+
+ if (uint.TryParse(layerIndexStr, out var layerIndex))
+ {
+ Operations.Add(new ArithmeticOperation(layerIndex, op));
+ }
+
+ // Reset layer string
+ layerIndexStr = string.Empty;
+ }
+
+ // Append the left over
+ if (!string.IsNullOrWhiteSpace(layerIndexStr))
+ {
+ if (uint.TryParse(layerIndexStr, out var layerIndex))
+ {
+ Operations.Add(new ArithmeticOperation(layerIndex, ArithmeticOperators.None));
+ }
+ }
+
+ if (Operations.Count == 0) return false;
+ if (SetLayers.Count == 0)
+ {
+ SetLayers.Add(Operations[0].LayerIndex);
+ }
+
+ return true;
+ }
+
+ public OperationArithmetic()
+ {
+
+ }
+ }
+}
diff --git a/UVtools.Core/Operations/OperationMove.cs b/UVtools.Core/Operations/OperationMove.cs
index 4258517..93deb5d 100644
--- a/UVtools.Core/Operations/OperationMove.cs
+++ b/UVtools.Core/Operations/OperationMove.cs
@@ -6,6 +6,7 @@
* of this license document, but changing it is not allowed.
*/
using System;
+using System.Diagnostics;
using System.Drawing;
using System.Text;
using UVtools.Core.Objects;
@@ -41,13 +42,22 @@ namespace UVtools.Core.Operations
}
private Rectangle _dstRoi = Rectangle.Empty;
+ private uint _imageWidth;
+ private uint _imageHeight;
+ private Enumerations.Anchor _anchor = Enumerations.Anchor.MiddleCenter;
+ private int _marginLeft;
+ private int _marginTop;
+ private int _marginRight;
+ private int _marginBottom;
+ private bool _isCutMove = true;
+ private bool _isWithinBoundary;
+
public Rectangle DstRoi
{
get
{
if(!_dstRoi.IsEmpty) return _dstRoi;
CalculateDstRoi();
-
return _dstRoi;
}
}
@@ -94,20 +104,102 @@ namespace UVtools.Core.Operations
_dstRoi.X -= MarginRight;
_dstRoi.Y += MarginTop;
_dstRoi.Y -= MarginBottom;
+
+ IsWithinBoundary = !(DstRoi.IsEmpty || DstRoi.X < 0 || DstRoi.Y < 0 ||
+ DstRoi.Width == 0 || DstRoi.Right > ImageWidth ||
+ DstRoi.Height == 0 || DstRoi.Bottom > ImageHeight);
+
+ RaisePropertyChanged(nameof(DstRoi));
+ RaisePropertyChanged(nameof(LocationXStr));
+ RaisePropertyChanged(nameof(LocationYStr));
}
- public uint ImageWidth { get; set; }
- public uint ImageHeight { get; set; }
+ public uint ImageWidth
+ {
+ get => _imageWidth;
+ set => RaiseAndSetIfChanged(ref _imageWidth, value);
+ }
+
+ public uint ImageHeight
+ {
+ get => _imageHeight;
+ set => RaiseAndSetIfChanged(ref _imageHeight, value);
+ }
- public Enumerations.Anchor Anchor { get; set; }
+ public Enumerations.Anchor Anchor
+ {
+ get => _anchor;
+ set
+ {
+ RaiseAndSetIfChanged(ref _anchor, value);
+ CalculateDstRoi();
+ }
+ }
- public int MarginLeft { get; set; } = 0;
- public int MarginTop { get; set; } = 0;
- public int MarginRight { get; set; } = 0;
- public int MarginBottom { get; set; } = 0;
+ public int MarginLeft
+ {
+ get => _marginLeft;
+ set
+ {
+ RaiseAndSetIfChanged(ref _marginLeft, value);
+ CalculateDstRoi();
+ }
+ }
- public bool IsCutMove { get; set; } = true;
+ public int MarginTop
+ {
+ get => _marginTop;
+ set
+ {
+ RaiseAndSetIfChanged(ref _marginTop, value);
+ CalculateDstRoi();
+ }
+ }
+
+ public int MarginRight
+ {
+ get => _marginRight;
+ set
+ {
+ RaiseAndSetIfChanged(ref _marginRight, value);
+ CalculateDstRoi();
+ }
+ }
+
+ public int MarginBottom
+ {
+ get => _marginBottom;
+ set
+ {
+ RaiseAndSetIfChanged(ref _marginBottom, value);
+ CalculateDstRoi();
+ }
+ }
+
+ public bool IsCutMove
+ {
+ get => _isCutMove;
+ set => RaiseAndSetIfChanged(ref _isCutMove, value);
+ }
+
+ public string LocationXStr => $"X: {DstRoi.X} / {ImageWidth - ROI.Width}";
+ public string LocationYStr => $"Y: {DstRoi.Y} / {ImageHeight - ROI.Height}";
+
+ public string LocationWidthStr => $"Width: {ROI.Width} / {ImageWidth}";
+ public string LocationHeightStr => $"Height: {ROI.Height} / {ImageHeight}";
+
+ public bool IsWithinBoundary
+ {
+ get => _isWithinBoundary;
+ set
+ {
+ if (!RaiseAndSetIfChanged(ref _isWithinBoundary, value)) return;
+ RaisePropertyChanged(nameof(IsWithinBoundaryStr));
+ }
+ }
+
+ public string IsWithinBoundaryStr => "Model within boundary: " + (_isWithinBoundary ? "Yes" : "No");
public OperationMove()
{
@@ -121,16 +213,25 @@ namespace UVtools.Core.Operations
Anchor = anchor;
}
+ public void Reset()
+ {
+ MarginLeft = MarginTop = MarginRight = MarginBottom = 0;
+ Anchor = Enumerations.Anchor.MiddleCenter;
+ IsCutMove = true;
+ }
+
+
+ public void SetAnchor(byte value)
+ {
+ Anchor = (Enumerations.Anchor)value;
+ }
+
public bool ValidateBounds()
{
CalculateDstRoi();
- if (DstRoi.IsEmpty || DstRoi.X < 0 || DstRoi.Y < 0) return false;
- if (DstRoi.Width == 0 || DstRoi.Right > ImageWidth) return false;
- if (DstRoi.Height == 0 || DstRoi.Bottom > ImageHeight) return false;
-
- return true;
+ return IsWithinBoundary;
}
}
}
diff --git a/UVtools.Core/UVtools.Core.csproj b/UVtools.Core/UVtools.Core.csproj
index 81ae27f..7dc626f 100644
--- a/UVtools.Core/UVtools.Core.csproj
+++ b/UVtools.Core/UVtools.Core.csproj
@@ -14,8 +14,8 @@
<Copyright>Copyright © 2020 PTRTECH</Copyright>
<PackageIcon>UVtools.png</PackageIcon>
<Platforms>AnyCPU;x64</Platforms>
- <AssemblyVersion>0.8.3.0</AssemblyVersion>
- <FileVersion>0.8.3.0</FileVersion>
+ <AssemblyVersion>0.8.4.0</AssemblyVersion>
+ <FileVersion>0.8.4.0</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
diff --git a/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.Designer.cs b/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.Designer.cs
new file mode 100644
index 0000000..61b6c7a
--- /dev/null
+++ b/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.Designer.cs
@@ -0,0 +1,77 @@
+namespace UVtools.GUI.Controls.Tools
+{
+ partial class CtrlToolArithmetic
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.label1 = new System.Windows.Forms.Label();
+ this.tbSentence = new System.Windows.Forms.TextBox();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.label1.Location = new System.Drawing.Point(0, 0);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(82, 20);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Sentence:";
+ //
+ // tbSentence
+ //
+ this.tbSentence.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tbSentence.Location = new System.Drawing.Point(0, 20);
+ this.tbSentence.Multiline = true;
+ this.tbSentence.Name = "tbSentence";
+ this.tbSentence.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.tbSentence.Size = new System.Drawing.Size(668, 239);
+ this.tbSentence.TabIndex = 1;
+ //
+ // CtrlToolArithmetic
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CanROI = true;
+ this.Controls.Add(this.tbSentence);
+ this.Controls.Add(this.label1);
+ this.Description = "";
+ this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.LayerRangeVisible = false;
+ this.Name = "CtrlToolArithmetic";
+ this.Size = new System.Drawing.Size(668, 273);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox tbSentence;
+ }
+}
diff --git a/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.cs b/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.cs
new file mode 100644
index 0000000..f5b104e
--- /dev/null
+++ b/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.cs
@@ -0,0 +1,42 @@
+/*
+ * 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 UVtools.Core.Operations;
+
+namespace UVtools.GUI.Controls.Tools
+{
+ public partial class CtrlToolArithmetic : CtrlToolWindowContent
+ {
+ public OperationArithmetic Operation { get; }
+
+
+ public CtrlToolArithmetic()
+ {
+ InitializeComponent();
+ Operation = new OperationArithmetic();
+ SetOperation(Operation);
+ }
+
+ public override bool UpdateOperation()
+ {
+ base.UpdateOperation();
+ Operation.Sentence = tbSentence.Text;
+
+ foreach (var operation in Operation.Operations)
+ {
+ if(operation.LayerIndex < 0 || operation.LayerIndex > Program.SlicerFile.LastLayerIndex)
+ {
+ return ValidateFormFromString($"Layer {operation.LayerIndex} does not exists, please fix your sentence.");
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.resx b/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.resx
new file mode 100644
index 0000000..8766f29
--- /dev/null
+++ b/UVtools.GUI/Controls/Tools/CtrlToolArithmetic.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+</root> \ No newline at end of file
diff --git a/UVtools.GUI/Forms/FrmSettings.Designer.cs b/UVtools.GUI/Forms/FrmSettings.Designer.cs
index 296c4bf..21e6fb1 100644
--- a/UVtools.GUI/Forms/FrmSettings.Designer.cs
+++ b/UVtools.GUI/Forms/FrmSettings.Designer.cs
@@ -61,13 +61,13 @@
this.label8 = new System.Windows.Forms.Label();
this.nmIslandRequiredPixelBrightnessToProcessCheck = new System.Windows.Forms.NumericUpDown();
this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cbComputeOverhangs = new System.Windows.Forms.CheckBox();
this.cbComputeEmptyLayers = new System.Windows.Forms.CheckBox();
this.label42 = new System.Windows.Forms.Label();
this.cbComputeTouchingBounds = new System.Windows.Forms.CheckBox();
this.cbAutoComputeIssuesClickOnTab = new System.Windows.Forms.CheckBox();
this.tabSettings = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
- this.groupBox4 = new System.Windows.Forms.GroupBox();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.btnFileExtractDefaultDirectoryClear = new System.Windows.Forms.Button();
this.btnFileExtractDefaultDirectorySearch = new System.Windows.Forms.Button();
@@ -92,6 +92,7 @@
this.tbFileSaveNameSuffix = new System.Windows.Forms.TextBox();
this.label27 = new System.Windows.Forms.Label();
this.tbFileSaveNamePreffix = new System.Windows.Forms.TextBox();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.groupBox9 = new System.Windows.Forms.GroupBox();
this.cbLayerAutoRotateBestView = new System.Windows.Forms.CheckBox();
@@ -113,6 +114,9 @@
this.label38 = new System.Windows.Forms.Label();
this.cbZoomLockLevel = new System.Windows.Forms.ComboBox();
this.groupBox6 = new System.Windows.Forms.GroupBox();
+ this.btnOverhangColor = new System.Windows.Forms.Button();
+ this.btnOverhangHLColor = new System.Windows.Forms.Button();
+ this.label47 = new System.Windows.Forms.Label();
this.cbLayerTooltipOverlay = new System.Windows.Forms.CheckBox();
this.label46 = new System.Windows.Forms.Label();
this.nmLayerTooltipOverlayOpacity = new System.Windows.Forms.NumericUpDown();
@@ -151,6 +155,10 @@
this.nmOutlinePrintVolumeBoundsLineThickness = new System.Windows.Forms.NumericUpDown();
this.btnCrosshairColor = new System.Windows.Forms.Button();
this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.groupBox11 = new System.Windows.Forms.GroupBox();
+ this.nmOverhangErodeIterations = new System.Windows.Forms.NumericUpDown();
+ this.label48 = new System.Windows.Forms.Label();
+ this.cbOverhangIndependentFromIslands = new System.Windows.Forms.CheckBox();
this.tabPage4 = new System.Windows.Forms.TabPage();
this.cbCloseEditOnApply = new System.Windows.Forms.CheckBox();
this.groupBox10 = new System.Windows.Forms.GroupBox();
@@ -179,14 +187,6 @@
this.cbLayerRepairLayersIslands = new System.Windows.Forms.CheckBox();
this.pnActions = new System.Windows.Forms.Panel();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
- this.cbComputeOverhangs = new System.Windows.Forms.CheckBox();
- this.btnOverhangColor = new System.Windows.Forms.Button();
- this.btnOverhangHLColor = new System.Windows.Forms.Button();
- this.label47 = new System.Windows.Forms.Label();
- this.groupBox11 = new System.Windows.Forms.GroupBox();
- this.cbOverhangIndependentFromIslands = new System.Windows.Forms.CheckBox();
- this.nmOverhangErodeIterations = new System.Windows.Forms.NumericUpDown();
- this.label48 = new System.Windows.Forms.Label();
this.groupBox3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nmResinTrapBinaryThreshold)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmResinTrapMaximumPixelBrightnessToDrain)).BeginInit();
@@ -201,8 +201,8 @@
this.groupBox1.SuspendLayout();
this.tabSettings.SuspendLayout();
this.tabPage1.SuspendLayout();
- this.groupBox4.SuspendLayout();
this.groupBox5.SuspendLayout();
+ this.groupBox4.SuspendLayout();
this.tabPage2.SuspendLayout();
this.groupBox9.SuspendLayout();
this.groupBox8.SuspendLayout();
@@ -215,6 +215,8 @@
((System.ComponentModel.ISupportInitialize)(this.nmOutlineLayerBoundsLineThickness)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmOutlinePrintVolumeBoundsLineThickness)).BeginInit();
this.tabPage3.SuspendLayout();
+ this.groupBox11.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.nmOverhangErodeIterations)).BeginInit();
this.tabPage4.SuspendLayout();
this.groupBox10.SuspendLayout();
this.tabPage5.SuspendLayout();
@@ -222,8 +224,6 @@
((System.ComponentModel.ISupportInitialize)(this.nmLayerRepairDefaultOpeningIterations)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmLayerRepairDefaultClosingIterations)).BeginInit();
this.pnActions.SuspendLayout();
- this.groupBox11.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.nmOverhangErodeIterations)).BeginInit();
this.SuspendLayout();
//
// colorDialog
@@ -371,8 +371,8 @@
this.label20.TabIndex = 27;
this.label20.Text = "Pixel intensity threshold for resin trap detection";
this.toolTip.SetToolTip(this.label20, "Pixels below this threshold will be considered black during resin trap detection." +
- " \r\nPixels equal to or above this theshold will be considred white during resin " +
- "trap detection.\r\n0 to disable");
+ "\r\nPixels equal to or above this theshold will be considred white during resin tr" +
+ "ap detection.\r\n0 to disable");
//
// nmResinTrapMaximumPixelBrightnessToDrain
//
@@ -681,6 +681,16 @@
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Common";
//
+ // cbComputeOverhangs
+ //
+ this.cbComputeOverhangs.AutoSize = true;
+ this.cbComputeOverhangs.Location = new System.Drawing.Point(164, 79);
+ this.cbComputeOverhangs.Name = "cbComputeOverhangs";
+ this.cbComputeOverhangs.Size = new System.Drawing.Size(99, 22);
+ this.cbComputeOverhangs.TabIndex = 22;
+ this.cbComputeOverhangs.Text = "Overhangs";
+ this.cbComputeOverhangs.UseVisualStyleBackColor = true;
+ //
// cbComputeEmptyLayers
//
this.cbComputeEmptyLayers.AutoSize = true;
@@ -746,18 +756,6 @@
this.tabPage1.Text = "General";
this.tabPage1.UseVisualStyleBackColor = true;
//
- // groupBox4
- //
- this.groupBox4.Controls.Add(this.cbStartMaximized);
- this.groupBox4.Controls.Add(this.cbCheckForUpdatesOnStartup);
- this.groupBox4.Dock = System.Windows.Forms.DockStyle.Top;
- this.groupBox4.Location = new System.Drawing.Point(3, 3);
- this.groupBox4.Name = "groupBox4";
- this.groupBox4.Size = new System.Drawing.Size(655, 90);
- this.groupBox4.TabIndex = 15;
- this.groupBox4.TabStop = false;
- this.groupBox4.Text = "Startup";
- //
// groupBox5
//
this.groupBox5.Controls.Add(this.btnFileExtractDefaultDirectoryClear);
@@ -1020,6 +1018,18 @@
this.tbFileSaveNamePreffix.Size = new System.Drawing.Size(184, 24);
this.tbFileSaveNamePreffix.TabIndex = 58;
//
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.cbStartMaximized);
+ this.groupBox4.Controls.Add(this.cbCheckForUpdatesOnStartup);
+ this.groupBox4.Dock = System.Windows.Forms.DockStyle.Top;
+ this.groupBox4.Location = new System.Drawing.Point(3, 3);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(655, 90);
+ this.groupBox4.TabIndex = 15;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Text = "Startup";
+ //
// tabPage2
//
this.tabPage2.Controls.Add(this.groupBox9);
@@ -1332,6 +1342,49 @@
this.groupBox6.TabStop = false;
this.groupBox6.Text = "Layer Colors";
//
+ // btnOverhangColor
+ //
+ this.btnOverhangColor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnOverhangColor.BackColor = System.Drawing.Color.White;
+ this.btnOverhangColor.FlatAppearance.BorderColor = System.Drawing.Color.Black;
+ this.btnOverhangColor.FlatAppearance.BorderSize = 2;
+ this.btnOverhangColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btnOverhangColor.Location = new System.Drawing.Point(589, 187);
+ this.btnOverhangColor.Margin = new System.Windows.Forms.Padding(4);
+ this.btnOverhangColor.Name = "btnOverhangColor";
+ this.btnOverhangColor.Size = new System.Drawing.Size(24, 24);
+ this.btnOverhangColor.TabIndex = 70;
+ this.toolTip.SetToolTip(this.btnOverhangColor, "Islands on the layer that are not currently selected.");
+ this.btnOverhangColor.UseVisualStyleBackColor = false;
+ this.btnOverhangColor.Click += new System.EventHandler(this.EventClick);
+ //
+ // btnOverhangHLColor
+ //
+ this.btnOverhangHLColor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnOverhangHLColor.BackColor = System.Drawing.Color.White;
+ this.btnOverhangHLColor.FlatAppearance.BorderColor = System.Drawing.Color.Black;
+ this.btnOverhangHLColor.FlatAppearance.BorderSize = 2;
+ this.btnOverhangHLColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btnOverhangHLColor.Location = new System.Drawing.Point(620, 187);
+ this.btnOverhangHLColor.Margin = new System.Windows.Forms.Padding(4);
+ this.btnOverhangHLColor.Name = "btnOverhangHLColor";
+ this.btnOverhangHLColor.Size = new System.Drawing.Size(24, 24);
+ this.btnOverhangHLColor.TabIndex = 71;
+ this.toolTip.SetToolTip(this.btnOverhangHLColor, "Islands on the layer that are currently selected in the issue list.");
+ this.btnOverhangHLColor.UseVisualStyleBackColor = false;
+ this.btnOverhangHLColor.Click += new System.EventHandler(this.EventClick);
+ //
+ // label47
+ //
+ this.label47.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label47.AutoSize = true;
+ this.label47.Location = new System.Drawing.Point(371, 190);
+ this.label47.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.label47.Name = "label47";
+ this.label47.Size = new System.Drawing.Size(210, 18);
+ this.label47.TabIndex = 69;
+ this.label47.Text = "Overhang / Selected overhang:";
+ //
// cbLayerTooltipOverlay
//
this.cbLayerTooltipOverlay.AutoSize = true;
@@ -1848,6 +1901,64 @@
this.tabPage3.Text = "Issues";
this.tabPage3.UseVisualStyleBackColor = true;
//
+ // groupBox11
+ //
+ this.groupBox11.Controls.Add(this.nmOverhangErodeIterations);
+ this.groupBox11.Controls.Add(this.label48);
+ this.groupBox11.Controls.Add(this.cbOverhangIndependentFromIslands);
+ this.groupBox11.Dock = System.Windows.Forms.DockStyle.Top;
+ this.groupBox11.Location = new System.Drawing.Point(3, 331);
+ this.groupBox11.Name = "groupBox11";
+ this.groupBox11.Size = new System.Drawing.Size(655, 93);
+ this.groupBox11.TabIndex = 25;
+ this.groupBox11.TabStop = false;
+ this.groupBox11.Text = "Overhangs";
+ //
+ // nmOverhangErodeIterations
+ //
+ this.nmOverhangErodeIterations.Location = new System.Drawing.Point(10, 51);
+ this.nmOverhangErodeIterations.Maximum = new decimal(new int[] {
+ 255,
+ 0,
+ 0,
+ 0});
+ this.nmOverhangErodeIterations.Minimum = new decimal(new int[] {
+ 2,
+ 0,
+ 0,
+ 0});
+ this.nmOverhangErodeIterations.Name = "nmOverhangErodeIterations";
+ this.nmOverhangErodeIterations.Size = new System.Drawing.Size(57, 24);
+ this.nmOverhangErodeIterations.TabIndex = 31;
+ this.toolTip.SetToolTip(this.nmOverhangErodeIterations, "Range 2-255");
+ this.nmOverhangErodeIterations.Value = new decimal(new int[] {
+ 2,
+ 0,
+ 0,
+ 0});
+ //
+ // label48
+ //
+ this.label48.AutoSize = true;
+ this.label48.Location = new System.Drawing.Point(73, 54);
+ this.label48.Name = "label48";
+ this.label48.Size = new System.Drawing.Size(174, 18);
+ this.label48.TabIndex = 32;
+ this.label48.Text = "Minimum overhang depth";
+ this.toolTip.SetToolTip(this.label48, "The number of pixels that an overhang can protrude from the previous layer before" +
+ " it is detected and reported as an overhang.");
+ //
+ // cbOverhangIndependentFromIslands
+ //
+ this.cbOverhangIndependentFromIslands.AutoSize = true;
+ this.cbOverhangIndependentFromIslands.Location = new System.Drawing.Point(10, 23);
+ this.cbOverhangIndependentFromIslands.Name = "cbOverhangIndependentFromIslands";
+ this.cbOverhangIndependentFromIslands.Size = new System.Drawing.Size(298, 22);
+ this.cbOverhangIndependentFromIslands.TabIndex = 31;
+ this.cbOverhangIndependentFromIslands.Text = "Include islands when detecting overhangs";
+ this.toolTip.SetToolTip(this.cbOverhangIndependentFromIslands, resources.GetString("cbOverhangIndependentFromIslands.ToolTip"));
+ this.cbOverhangIndependentFromIslands.UseVisualStyleBackColor = true;
+ //
// tabPage4
//
this.tabPage4.Controls.Add(this.cbCloseEditOnApply);
@@ -2221,117 +2332,6 @@
this.toolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
this.toolTip.ToolTipTitle = "Information";
//
- // cbComputeOverhangs
- //
- this.cbComputeOverhangs.AutoSize = true;
- this.cbComputeOverhangs.Location = new System.Drawing.Point(164, 79);
- this.cbComputeOverhangs.Name = "cbComputeOverhangs";
- this.cbComputeOverhangs.Size = new System.Drawing.Size(99, 22);
- this.cbComputeOverhangs.TabIndex = 22;
- this.cbComputeOverhangs.Text = "Overhangs";
- this.cbComputeOverhangs.UseVisualStyleBackColor = true;
- //
- // btnOverhangColor
- //
- this.btnOverhangColor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnOverhangColor.BackColor = System.Drawing.Color.White;
- this.btnOverhangColor.FlatAppearance.BorderColor = System.Drawing.Color.Black;
- this.btnOverhangColor.FlatAppearance.BorderSize = 2;
- this.btnOverhangColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.btnOverhangColor.Location = new System.Drawing.Point(589, 187);
- this.btnOverhangColor.Margin = new System.Windows.Forms.Padding(4);
- this.btnOverhangColor.Name = "btnOverhangColor";
- this.btnOverhangColor.Size = new System.Drawing.Size(24, 24);
- this.btnOverhangColor.TabIndex = 70;
- this.toolTip.SetToolTip(this.btnOverhangColor, "Islands on the layer that are not currently selected.");
- this.btnOverhangColor.UseVisualStyleBackColor = false;
- this.btnOverhangColor.Click += new System.EventHandler(this.EventClick);
- //
- // btnOverhangHLColor
- //
- this.btnOverhangHLColor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btnOverhangHLColor.BackColor = System.Drawing.Color.White;
- this.btnOverhangHLColor.FlatAppearance.BorderColor = System.Drawing.Color.Black;
- this.btnOverhangHLColor.FlatAppearance.BorderSize = 2;
- this.btnOverhangHLColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.btnOverhangHLColor.Location = new System.Drawing.Point(620, 187);
- this.btnOverhangHLColor.Margin = new System.Windows.Forms.Padding(4);
- this.btnOverhangHLColor.Name = "btnOverhangHLColor";
- this.btnOverhangHLColor.Size = new System.Drawing.Size(24, 24);
- this.btnOverhangHLColor.TabIndex = 71;
- this.toolTip.SetToolTip(this.btnOverhangHLColor, "Islands on the layer that are currently selected in the issue list.");
- this.btnOverhangHLColor.UseVisualStyleBackColor = false;
- this.btnOverhangHLColor.Click += new System.EventHandler(this.EventClick);
- //
- // label47
- //
- this.label47.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.label47.AutoSize = true;
- this.label47.Location = new System.Drawing.Point(371, 190);
- this.label47.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
- this.label47.Name = "label47";
- this.label47.Size = new System.Drawing.Size(210, 18);
- this.label47.TabIndex = 69;
- this.label47.Text = "Overhang / Selected overhang:";
- //
- // groupBox11
- //
- this.groupBox11.Controls.Add(this.nmOverhangErodeIterations);
- this.groupBox11.Controls.Add(this.label48);
- this.groupBox11.Controls.Add(this.cbOverhangIndependentFromIslands);
- this.groupBox11.Dock = System.Windows.Forms.DockStyle.Top;
- this.groupBox11.Location = new System.Drawing.Point(3, 331);
- this.groupBox11.Name = "groupBox11";
- this.groupBox11.Size = new System.Drawing.Size(655, 93);
- this.groupBox11.TabIndex = 25;
- this.groupBox11.TabStop = false;
- this.groupBox11.Text = "Overhangs";
- //
- // cbOverhangIndependentFromIslands
- //
- this.cbOverhangIndependentFromIslands.AutoSize = true;
- this.cbOverhangIndependentFromIslands.Location = new System.Drawing.Point(10, 23);
- this.cbOverhangIndependentFromIslands.Name = "cbOverhangIndependentFromIslands";
- this.cbOverhangIndependentFromIslands.Size = new System.Drawing.Size(298, 22);
- this.cbOverhangIndependentFromIslands.TabIndex = 31;
- this.cbOverhangIndependentFromIslands.Text = "Include islands when detecting overhangs";
- this.toolTip.SetToolTip(this.cbOverhangIndependentFromIslands, resources.GetString("cbOverhangIndependentFromIslands.ToolTip"));
- this.cbOverhangIndependentFromIslands.UseVisualStyleBackColor = true;
- //
- // nmOverhangErodeIterations
- //
- this.nmOverhangErodeIterations.Location = new System.Drawing.Point(10, 51);
- this.nmOverhangErodeIterations.Maximum = new decimal(new int[] {
- 255,
- 0,
- 0,
- 0});
- this.nmOverhangErodeIterations.Minimum = new decimal(new int[] {
- 2,
- 0,
- 0,
- 0});
- this.nmOverhangErodeIterations.Name = "nmOverhangErodeIterations";
- this.nmOverhangErodeIterations.Size = new System.Drawing.Size(57, 24);
- this.nmOverhangErodeIterations.TabIndex = 31;
- this.toolTip.SetToolTip(this.nmOverhangErodeIterations, "Range 2-255");
- this.nmOverhangErodeIterations.Value = new decimal(new int[] {
- 2,
- 0,
- 0,
- 0});
- //
- // label48
- //
- this.label48.AutoSize = true;
- this.label48.Location = new System.Drawing.Point(73, 54);
- this.label48.Name = "label48";
- this.label48.Size = new System.Drawing.Size(174, 18);
- this.label48.TabIndex = 32;
- this.label48.Text = "Minimum overhang depth";
- this.toolTip.SetToolTip(this.label48, "The number of pixels that an overhang can protrude from the previous layer before" +
- " it is detected and reported as an overhang.");
- //
// FrmSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
@@ -2366,10 +2366,10 @@
this.groupBox1.PerformLayout();
this.tabSettings.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
- this.groupBox4.ResumeLayout(false);
- this.groupBox4.PerformLayout();
this.groupBox5.ResumeLayout(false);
this.groupBox5.PerformLayout();
+ this.groupBox4.ResumeLayout(false);
+ this.groupBox4.PerformLayout();
this.tabPage2.ResumeLayout(false);
this.groupBox9.ResumeLayout(false);
this.groupBox9.PerformLayout();
@@ -2386,6 +2386,9 @@
((System.ComponentModel.ISupportInitialize)(this.nmOutlineLayerBoundsLineThickness)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmOutlinePrintVolumeBoundsLineThickness)).EndInit();
this.tabPage3.ResumeLayout(false);
+ this.groupBox11.ResumeLayout(false);
+ this.groupBox11.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.nmOverhangErodeIterations)).EndInit();
this.tabPage4.ResumeLayout(false);
this.tabPage4.PerformLayout();
this.groupBox10.ResumeLayout(false);
@@ -2396,9 +2399,6 @@
((System.ComponentModel.ISupportInitialize)(this.nmLayerRepairDefaultOpeningIterations)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmLayerRepairDefaultClosingIterations)).EndInit();
this.pnActions.ResumeLayout(false);
- this.groupBox11.ResumeLayout(false);
- this.groupBox11.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.nmOverhangErodeIterations)).EndInit();
this.ResumeLayout(false);
}
diff --git a/UVtools.GUI/Forms/FrmSettings.resx b/UVtools.GUI/Forms/FrmSettings.resx
index a49c541..69fa483 100644
--- a/UVtools.GUI/Forms/FrmSettings.resx
+++ b/UVtools.GUI/Forms/FrmSettings.resx
@@ -123,9 +123,6 @@
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 17</value>
</metadata>
- <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>131, 17</value>
- </metadata>
<data name="cbIslandAllowDiagonalBonds.ToolTip" xml:space="preserve">
<value>If enabled, components touching by even a single diagonal bond will be considered a single component for the purposes of island detection.
Enabling this will result in faster island detection. but some potential islands with weak bonds to other components may not be detected.</value>
diff --git a/UVtools.GUI/FrmMain.Designer.cs b/UVtools.GUI/FrmMain.Designer.cs
index fcf7481..3201660 100644
--- a/UVtools.GUI/FrmMain.Designer.cs
+++ b/UVtools.GUI/FrmMain.Designer.cs
@@ -152,6 +152,7 @@ namespace UVtools.GUI
this.tsIssueRemove = new System.Windows.Forms.ToolStripButton();
this.tsIssuesDetect = new System.Windows.Forms.ToolStripSplitButton();
this.tsIssuesDetectIslands = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsIssuesDetectOverhangs = new System.Windows.Forms.ToolStripMenuItem();
this.tsIssuesDetectResinTraps = new System.Windows.Forms.ToolStripMenuItem();
this.tsIssuesDetectTouchingBounds = new System.Windows.Forms.ToolStripMenuItem();
this.tsIssuesDetectEmptyLayers = new System.Windows.Forms.ToolStripMenuItem();
@@ -260,7 +261,6 @@ namespace UVtools.GUI
this.toolTipInformation = new System.Windows.Forms.ToolTip(this.components);
this.layerScrollTimer = new System.Windows.Forms.Timer(this.components);
this.mouseHoldTimer = new System.Windows.Forms.Timer(this.components);
- this.tsIssuesDetectOverhangs = new System.Windows.Forms.ToolStripMenuItem();
this.menu.SuspendLayout();
this.mainTable.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.scCenter)).BeginInit();
@@ -1582,16 +1582,25 @@ namespace UVtools.GUI
this.tsIssuesDetectIslands.CheckOnClick = true;
this.tsIssuesDetectIslands.CheckState = System.Windows.Forms.CheckState.Checked;
this.tsIssuesDetectIslands.Name = "tsIssuesDetectIslands";
- this.tsIssuesDetectIslands.Size = new System.Drawing.Size(180, 22);
+ this.tsIssuesDetectIslands.Size = new System.Drawing.Size(166, 22);
this.tsIssuesDetectIslands.Text = "&Islands";
//
+ // tsIssuesDetectOverhangs
+ //
+ this.tsIssuesDetectOverhangs.Checked = true;
+ this.tsIssuesDetectOverhangs.CheckOnClick = true;
+ this.tsIssuesDetectOverhangs.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.tsIssuesDetectOverhangs.Name = "tsIssuesDetectOverhangs";
+ this.tsIssuesDetectOverhangs.Size = new System.Drawing.Size(166, 22);
+ this.tsIssuesDetectOverhangs.Text = "&Overhangs";
+ //
// tsIssuesDetectResinTraps
//
this.tsIssuesDetectResinTraps.Checked = true;
this.tsIssuesDetectResinTraps.CheckOnClick = true;
this.tsIssuesDetectResinTraps.CheckState = System.Windows.Forms.CheckState.Checked;
this.tsIssuesDetectResinTraps.Name = "tsIssuesDetectResinTraps";
- this.tsIssuesDetectResinTraps.Size = new System.Drawing.Size(180, 22);
+ this.tsIssuesDetectResinTraps.Size = new System.Drawing.Size(166, 22);
this.tsIssuesDetectResinTraps.Text = "&Resin traps";
//
// tsIssuesDetectTouchingBounds
@@ -1600,7 +1609,7 @@ namespace UVtools.GUI
this.tsIssuesDetectTouchingBounds.CheckOnClick = true;
this.tsIssuesDetectTouchingBounds.CheckState = System.Windows.Forms.CheckState.Checked;
this.tsIssuesDetectTouchingBounds.Name = "tsIssuesDetectTouchingBounds";
- this.tsIssuesDetectTouchingBounds.Size = new System.Drawing.Size(180, 22);
+ this.tsIssuesDetectTouchingBounds.Size = new System.Drawing.Size(166, 22);
this.tsIssuesDetectTouchingBounds.Text = "&Touching Bounds";
//
// tsIssuesDetectEmptyLayers
@@ -1609,7 +1618,7 @@ namespace UVtools.GUI
this.tsIssuesDetectEmptyLayers.CheckOnClick = true;
this.tsIssuesDetectEmptyLayers.CheckState = System.Windows.Forms.CheckState.Checked;
this.tsIssuesDetectEmptyLayers.Name = "tsIssuesDetectEmptyLayers";
- this.tsIssuesDetectEmptyLayers.Size = new System.Drawing.Size(180, 22);
+ this.tsIssuesDetectEmptyLayers.Size = new System.Drawing.Size(166, 22);
this.tsIssuesDetectEmptyLayers.Text = "&Empty Layers";
//
// toolStripSeparator12
@@ -2876,15 +2885,6 @@ namespace UVtools.GUI
this.mouseHoldTimer.Interval = 1000;
this.mouseHoldTimer.Tick += new System.EventHandler(this.EventTimerTick);
//
- // tsIssuesDetectOverhangs
- //
- this.tsIssuesDetectOverhangs.Checked = true;
- this.tsIssuesDetectOverhangs.CheckOnClick = true;
- this.tsIssuesDetectOverhangs.CheckState = System.Windows.Forms.CheckState.Checked;
- this.tsIssuesDetectOverhangs.Name = "tsIssuesDetectOverhangs";
- this.tsIssuesDetectOverhangs.Size = new System.Drawing.Size(180, 22);
- this.tsIssuesDetectOverhangs.Text = "&Overhangs";
- //
// FrmMain
//
this.AllowDrop = true;
diff --git a/UVtools.GUI/FrmMain.cs b/UVtools.GUI/FrmMain.cs
index 0628a99..40d7353 100644
--- a/UVtools.GUI/FrmMain.cs
+++ b/UVtools.GUI/FrmMain.cs
@@ -55,9 +55,10 @@ namespace UVtools.GUI
new OperationMenuItem(new OperationRotate(), Resources.sync_16x16),
new OperationMenuItem(new OperationSolidify(), Resources.square_solid_16x16),
new OperationMenuItem(new OperationMorph(), Resources.Geometry_16x16),
+ new OperationMenuItem(new OperationThreshold(), Resources.th_16x16),
+ new OperationMenuItem(new OperationArithmetic(), Resources.square_root_16x16),
new OperationMenuItem(new OperationMask(), Resources.mask_16x16),
new OperationMenuItem(new OperationPixelDimming(), Resources.pixel_16x16),
- new OperationMenuItem(new OperationThreshold(), Resources.th_16x16),
new OperationMenuItem(new OperationBlur(), Resources.blur_16x16),
new OperationMenuItem(new OperationPattern(), Resources.pattern_16x16),
new OperationMenuItem(new OperationLayerReHeight(), Resources.ladder_16x16),
@@ -4254,15 +4255,18 @@ namespace UVtools.GUI
case OperationMorph operation:
SlicerFile.LayerManager.Morph(operation, BorderType.Default, new MCvScalar(), FrmLoading.RestartProgress(operation.CanCancel));
break;
+ case OperationThreshold operation:
+ SlicerFile.LayerManager.ThresholdPixels(operation, FrmLoading.RestartProgress(operation.CanCancel));
+ break;
+ case OperationArithmetic operation:
+ SlicerFile.LayerManager.Arithmetic(operation, FrmLoading.RestartProgress(operation.CanCancel));
+ break;
case OperationMask operation:
SlicerFile.LayerManager.Mask(operation, FrmLoading.RestartProgress(operation.CanCancel));
break;
case OperationPixelDimming operation:
SlicerFile.LayerManager.PixelDimming(operation, FrmLoading.RestartProgress(operation.CanCancel));
break;
- case OperationThreshold operation:
- SlicerFile.LayerManager.ThresholdPixels(operation, FrmLoading.RestartProgress(operation.CanCancel));
- break;
case OperationBlur operation:
SlicerFile.LayerManager.Blur(operation, FrmLoading.RestartProgress(operation.CanCancel));
break;
diff --git a/UVtools.GUI/FrmMain.resx b/UVtools.GUI/FrmMain.resx
index 6a2d784..9e23cb7 100644
--- a/UVtools.GUI/FrmMain.resx
+++ b/UVtools.GUI/FrmMain.resx
@@ -129,6 +129,12 @@
<metadata name="tsLayerInfo.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1773, 17</value>
</metadata>
+ <metadata name="tsThumbnails.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>297, 17</value>
+ </metadata>
+ <metadata name="tsProperties.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>695, 17</value>
+ </metadata>
<metadata name="tsGCode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1040, 17</value>
</metadata>
@@ -144,6 +150,22 @@
<metadata name="tsLog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1587, 17</value>
</metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="btnLogVerbose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
<metadata name="imageList16x16.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>811, 17</value>
</metadata>
@@ -152,7 +174,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk
- FAAAAk1TRnQBSQFMAgEBBgEAASABDAEgAQwBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+ FAAAAk1TRnQBSQFMAgEBBgEAASgBDAEoAQwBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIC4AAxgBIgMwAUsDMAFMAzIBUDMAAQEDJAE2AysBQqwAAyIBMQNWAbkDXQHi
AwAB/wMAAf8BKgEtASgB/gNTAawDTQGVAwABARgAAwkBDAMzAVIDUAGdA1cB6AMAAf4DKwH8Ay8BSqQA
AyEBMANZAewBKwEuASkB+gNRAfcDUgH0A1MB8QNIAfYDQQH5AwAB/wNPAZsDAAEBCAADFQEdAz8BbgNV
@@ -242,37 +264,6 @@
AfwBPws=
</value>
</data>
- <metadata name="tsThumbnails.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>297, 17</value>
- </metadata>
- <metadata name="tsProperties.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>695, 17</value>
- </metadata>
- <metadata name="tsGCode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>1040, 17</value>
- </metadata>
- <metadata name="tsPixelEditorHistory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>1430, 17</value>
- </metadata>
- <metadata name="tsLog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>1587, 17</value>
- </metadata>
- <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <data name="btnLogVerbose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
-</value>
- </data>
<metadata name="toolTipInformation.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1138, 17</value>
</metadata>
@@ -282,9 +273,6 @@
<metadata name="issueScrollTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>158, 17</value>
</metadata>
- <metadata name="toolTipInformation.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>1138, 17</value>
- </metadata>
<metadata name="layerScrollTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1292, 17</value>
</metadata>
diff --git a/UVtools.GUI/Images/square-root-16x16.png b/UVtools.GUI/Images/square-root-16x16.png
new file mode 100644
index 0000000..4aa398b
--- /dev/null
+++ b/UVtools.GUI/Images/square-root-16x16.png
Binary files differ
diff --git a/UVtools.GUI/Properties/AssemblyInfo.cs b/UVtools.GUI/Properties/AssemblyInfo.cs
index b792015..fbeb5fe 100644
--- a/UVtools.GUI/Properties/AssemblyInfo.cs
+++ b/UVtools.GUI/Properties/AssemblyInfo.cs
@@ -35,5 +35,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.8.3.0")]
-[assembly: AssemblyFileVersion("0.8.3.0")]
+[assembly: AssemblyVersion("0.8.4.0")]
+[assembly: AssemblyFileVersion("0.8.4.0")]
diff --git a/UVtools.GUI/Properties/Resources.Designer.cs b/UVtools.GUI/Properties/Resources.Designer.cs
index 95170c1..bd91085 100644
--- a/UVtools.GUI/Properties/Resources.Designer.cs
+++ b/UVtools.GUI/Properties/Resources.Designer.cs
@@ -833,6 +833,16 @@ namespace UVtools.GUI.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
+ internal static System.Drawing.Bitmap square_root_16x16 {
+ get {
+ object obj = ResourceManager.GetObject("square-root-16x16", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
internal static System.Drawing.Bitmap square_solid_16x16 {
get {
object obj = ResourceManager.GetObject("square-solid-16x16", resourceCulture);
diff --git a/UVtools.GUI/Properties/Resources.resx b/UVtools.GUI/Properties/Resources.resx
index d5dc417..82e40fa 100644
--- a/UVtools.GUI/Properties/Resources.resx
+++ b/UVtools.GUI/Properties/Resources.resx
@@ -133,20 +133,29 @@
<data name="island-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\island-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
+ <data name="ladder-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\ladder-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="filter-filled-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\filter-filled-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
<data name="layers-alt-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\layers-alt-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mask-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\mask-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
+ <data name="Back-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\Back-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
<data name="move-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\move-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cursor-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\cursor-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="Cancel-32x32" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\Cancel-32x32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="undo-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\undo-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Lock-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\Lock-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -238,30 +247,30 @@
<data name="pattern-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\pattern-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="pixel-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\pixel-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="Extract-object-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\Extract-object-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="checkbox-marked-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\checkbox-marked-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="burn-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\burn-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
<data name="minus_16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\minus_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
+ <data name="Cancel-32x32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\Cancel-32x32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
<data name="sort-alpha-up-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\sort-alpha-up-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="trash-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\trash-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
+ <data name="accept-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\accept-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
<data name="file-image-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\file-image-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="Geometry-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\Geometry-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
<data name="refresh-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\refresh-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -283,23 +292,11 @@
<data name="bowling-ball-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\bowling-ball-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="Extract-object-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\Extract-object-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
- <data name="file-import-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\file-import-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
- <data name="undo-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\undo-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
<data name="square-solid-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\square-solid-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="chessboard-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\chessboard-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
- <data name="filter-filled-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\filter-filled-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="burn-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\burn-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow-down-double-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\arrow-down-double-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -310,11 +307,17 @@
<data name="Button-Info-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\Button-Info-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
+ <data name="plus-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\plus-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
<data name="Global-Network-icon-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\Global-Network-icon-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="plus-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\plus-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="file-import-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\file-import-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="pixel_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Resources\pixel_edit.cur;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="photo-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\photo-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -343,8 +346,8 @@
<data name="expand-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\expand-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="accept-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\accept-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="Geometry-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\Geometry-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="copy_16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\copy_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -364,19 +367,19 @@
<data name="eye-24x24" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\eye-24x24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="ladder-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\ladder-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
- <data name="Back-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\Back-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="pixel-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\pixel-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="expand-alt-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Images\expand-alt-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ <data name="chessboard-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\chessboard-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="object-group-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Images\object-group-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
- <data name="pixel_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>..\Resources\pixel_edit.cur;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name="expand-alt-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\expand-alt-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="square-root-16x16" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Images\square-root-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
-</root>
+</root> \ No newline at end of file
diff --git a/UVtools.GUI/UVtools.GUI.csproj b/UVtools.GUI/UVtools.GUI.csproj
index a11ba2f..f165784 100644
--- a/UVtools.GUI/UVtools.GUI.csproj
+++ b/UVtools.GUI/UVtools.GUI.csproj
@@ -198,6 +198,12 @@
<Compile Include="Controls\Tools\CtrlToolRepairLayers.Designer.cs">
<DependentUpon>CtrlToolRepairLayers.cs</DependentUpon>
</Compile>
+ <Compile Include="Controls\Tools\CtrlToolArithmetic.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Controls\Tools\CtrlToolArithmetic.Designer.cs">
+ <DependentUpon>CtrlToolArithmetic.cs</DependentUpon>
+ </Compile>
<Compile Include="Controls\Tools\CtrlToolSolidify.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -365,6 +371,9 @@
<EmbeddedResource Include="Controls\Tools\CtrlToolRepairLayers.resx">
<DependentUpon>CtrlToolRepairLayers.cs</DependentUpon>
</EmbeddedResource>
+ <EmbeddedResource Include="Controls\Tools\CtrlToolArithmetic.resx">
+ <DependentUpon>CtrlToolArithmetic.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="Controls\Tools\CtrlToolSolidify.resx">
<DependentUpon>CtrlToolSolidify.cs</DependentUpon>
</EmbeddedResource>
@@ -512,6 +521,7 @@
<None Include="Images\minus_16x16.png" />
<None Include="Images\sync-16x16.png" />
<None Include="Images\object-group-16x16.png" />
+ <None Include="Images\square-root-16x16.png" />
<Content Include="Resources\pixel_edit.cur" />
<Content Include="UVtools.ico" />
<None Include="UVtools.png" />
diff --git a/UVtools.InstallerMM/UVtools.InstallerMM.wxs b/UVtools.InstallerMM/UVtools.InstallerMM.wxs
index 0c49d4c..feb0c5d 100644
--- a/UVtools.InstallerMM/UVtools.InstallerMM.wxs
+++ b/UVtools.InstallerMM/UVtools.InstallerMM.wxs
@@ -32,9 +32,6 @@
<Component Id="owcBBB242A927A3E56E02090CCA2E90BA92" Guid="741e1eb2-a7ed-c349-50a0-88544797620f">
<File Id="owfBBB242A927A3E56E02090CCA2E90BA92" Source="$(var.SourceDir)\Emgu.CV.Bitmap.xml" KeyPath="yes" />
</Component>
- <Component Id="owc0F288E77993D555E272ECFA1DF023DDA" Guid="ad374cb5-9215-37cb-d59d-88e4b3bc61bb">
- <File Id="owf0F288E77993D555E272ECFA1DF023DDA" Source="$(var.SourceDir)\Emgu.CV.Platform.NetCore.dll" KeyPath="yes" />
- </Component>
<Component Id="owc63D81B12D4DED477220E84E2AEBD7DBE" Guid="b08152e4-c420-0b27-69c4-3f58ac0a5fc7">
<File Id="owf63D81B12D4DED477220E84E2AEBD7DBE" Source="$(var.SourceDir)\Emgu.CV.Platform.NetStandard.dll" KeyPath="yes" />
</Component>
@@ -142,15 +139,27 @@
<Component Id="owc7EDB8251A3EA203AF2B7D4CA7ACE2CD2" Guid="ee32d320-1828-deba-29ca-a05a60720cfc">
<File Id="owf7EDB8251A3EA203AF2B7D4CA7ACE2CD2" Source="$(var.SourceDir)\PrusaSlicer\printer\Creality LD-002R.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc7BA7D4FCDDEF70FBBCEF1F90C14B1F60" Guid="53721bb3-9851-f5b1-ad0f-2c759915e79f">
+ <File Id="owf7BA7D4FCDDEF70FBBCEF1F90C14B1F60" Source="$(var.SourceDir)\PrusaSlicer\printer\Creality LD-006.ini" KeyPath="yes" />
+ </Component>
<Component Id="owc9F847F8652D12A49A3141CEED1453FBE" Guid="94d9a62e-4dd1-7b92-a5cd-2ba6b168a7fa">
<File Id="owf9F847F8652D12A49A3141CEED1453FBE" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Mars 2 Pro.ini" KeyPath="yes" />
</Component>
- <Component Id="owc260A3135FA730F1E8324D011F6A1C4B0" Guid="7a4e2e49-81f9-7ad2-786a-4b4434c0707f">
- <File Id="owf260A3135FA730F1E8324D011F6A1C4B0" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Mars Saturn.ini" KeyPath="yes" />
+ <Component Id="owcCB3AD91E177F80F7BCCF178752A083F7" Guid="76cb8819-5436-c720-120a-b9dcef3f966d">
+ <File Id="owfCB3AD91E177F80F7BCCF178752A083F7" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Mars C.ini" KeyPath="yes" />
</Component>
<Component Id="owc4D5073ED375E0DF9EFA87FDD048B32C6" Guid="d8c3b91c-2830-d4b2-0813-0cbcfbdc272d">
<File Id="owf4D5073ED375E0DF9EFA87FDD048B32C6" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Mars.ini" KeyPath="yes" />
</Component>
+ <Component Id="owcD356A901EAF1AE721204F999DB785790" Guid="e44af69f-6168-4558-e97d-7432474782fc">
+ <File Id="owfD356A901EAF1AE721204F999DB785790" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Saturn.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc19F234AE201F75426410EFD420A3CBB1" Guid="c03a027a-5105-9223-b2ac-bb7f46ec54cd">
+ <File Id="owf19F234AE201F75426410EFD420A3CBB1" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX E10 Mono.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcC5A030FF488FD3D246425D95DF2507E4" Guid="da19c0d2-f6a9-92ea-72e1-baae669802ca">
+ <File Id="owfC5A030FF488FD3D246425D95DF2507E4" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX E6 Mono.ini" KeyPath="yes" />
+ </Component>
<Component Id="owc76AABDF1DF0C1F5E05FF1F07A1630357" Guid="e472beae-9800-814f-adcb-846954b58041">
<File Id="owf76AABDF1DF0C1F5E05FF1F07A1630357" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X1.ini" KeyPath="yes" />
</Component>
@@ -166,6 +175,9 @@
<Component Id="owcBDCC55E8DE3569F9053A05EA9D764EF5" Guid="a25864cd-e8db-0b68-21f8-3624b9ed3c66">
<File Id="owfBDCC55E8DE3569F9053A05EA9D764EF5" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X156 4K Color.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc865AAD6B00A81712785000011C07A4BB" Guid="d867e50b-1c82-d3ce-8ebf-5b8ed8471c90">
+ <File Id="owf865AAD6B00A81712785000011C07A4BB" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X1K 2K Mono.ini" KeyPath="yes" />
+ </Component>
<Component Id="owc5C3D57BA78B3FB633FE137C11ABFF046" Guid="a58b5655-abbc-1a7e-e875-ddb174b93fae">
<File Id="owf5C3D57BA78B3FB633FE137C11ABFF046" Source="$(var.SourceDir)\PrusaSlicer\printer\Kelant S400.ini" KeyPath="yes" />
</Component>
@@ -175,6 +187,9 @@
<Component Id="owcCD3FA8F4F716D59DDA660C2C9FB0BB8A" Guid="8ef9b770-8922-5402-8ceb-50a241c13cde">
<File Id="owfCD3FA8F4F716D59DDA660C2C9FB0BB8A" Source="$(var.SourceDir)\PrusaSlicer\printer\Longer Orange 30.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc3B553567EB7790179844621DC7E38010" Guid="35a48265-0635-f831-5671-23f1efc3f7c3">
+ <File Id="owf3B553567EB7790179844621DC7E38010" Source="$(var.SourceDir)\PrusaSlicer\printer\Longer Orange4K.ini" KeyPath="yes" />
+ </Component>
<Component Id="owcC2B2D27208C6B67DB65F8BDEBC49EF5E" Guid="f97bbee5-4b5d-c8b5-ba5c-4d50b21cef66">
<File Id="owfC2B2D27208C6B67DB65F8BDEBC49EF5E" Source="$(var.SourceDir)\PrusaSlicer\printer\Nova3D Bene4 Mono.ini" KeyPath="yes" />
</Component>
@@ -190,18 +205,30 @@
<Component Id="owc4DA3CE0E7C9E7FD0420BC98008CE61A5" Guid="842b1dda-c430-b658-0171-98317cda4b73">
<File Id="owf4DA3CE0E7C9E7FD0420BC98008CE61A5" Source="$(var.SourceDir)\PrusaSlicer\printer\Peopoly Phenom.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc0BF6983F624A20B3AA39441CCEA38D61" Guid="d9f107b3-afbb-a2a3-208b-99a636ba9ab9">
+ <File Id="owf0BF6983F624A20B3AA39441CCEA38D61" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle 16.ini" KeyPath="yes" />
+ </Component>
<Component Id="owcECDE9AFF31975330B052BE067CBF7747" Guid="59279739-67c2-e878-98e4-8a6fd7228af7">
<File Id="owfECDE9AFF31975330B052BE067CBF7747" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle 4K.ini" KeyPath="yes" />
</Component>
<Component Id="owc068BB7319947EA7DE29B950E2A6D568E" Guid="07cdd63b-4ff0-45bb-6bc8-a06e7d4d2d65">
<File Id="owf068BB7319947EA7DE29B950E2A6D568E" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle Lite.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc2F2CCD96C838CC00EEA7B6CF9058BAA9" Guid="3e763f36-0ce2-b765-63d1-386943fe22b9">
+ <File Id="owf2F2CCD96C838CC00EEA7B6CF9058BAA9" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle XL Lite.ini" KeyPath="yes" />
+ </Component>
<Component Id="owc4F7DA68FBE5404E7947C6E57D830BD18" Guid="b8861542-b10b-6c76-61d1-cfe9c2ef6c1e">
<File Id="owf4F7DA68FBE5404E7947C6E57D830BD18" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle XL.ini" KeyPath="yes" />
</Component>
<Component Id="owcE3C5EB6B6F0C3F57765457D6609A1347" Guid="c6a7b466-f370-61cb-6ea8-4f58e1a1ae4f">
<File Id="owfE3C5EB6B6F0C3F57765457D6609A1347" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc739836FD830C1821DE31F3798C6D4C98" Guid="95cf2e0a-6c60-8c58-ef59-41a29b58558d">
+ <File Id="owf739836FD830C1821DE31F3798C6D4C98" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Sonic 4K.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc4E6CA96FA8F08FAE13350280E0DA9E7B" Guid="320c610d-b350-eee6-cc92-4233416d0545">
+ <File Id="owf4E6CA96FA8F08FAE13350280E0DA9E7B" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Sonic Mighty 4K.ini" KeyPath="yes" />
+ </Component>
<Component Id="owc0C95EB1AA908390B033CF556246859BD" Guid="ee5430e3-60de-f716-a55e-0726c7138bf6">
<File Id="owf0C95EB1AA908390B033CF556246859BD" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Sonic Mini 4K.ini" KeyPath="yes" />
</Component>
@@ -214,6 +241,9 @@
<Component Id="owcF1C81BD9CF13A9B24A54441843BC646E" Guid="fcb5bbfe-5ddb-c7da-a07b-b72f1dcfcae5">
<File Id="owfF1C81BD9CF13A9B24A54441843BC646E" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Transform.ini" KeyPath="yes" />
</Component>
+ <Component Id="owcA1F8D23CE191722B73B87151DDD24A67" Guid="8d065a43-f022-0837-7445-0b5f99df43de">
+ <File Id="owfA1F8D23CE191722B73B87151DDD24A67" Source="$(var.SourceDir)\PrusaSlicer\printer\QIDI S-Box.ini" KeyPath="yes" />
+ </Component>
<Component Id="owcB4A5F5F4294ED25C4B87C67D8C33B83E" Guid="d3660efe-4e98-ff85-c0a0-8338b8af02f0">
<File Id="owfB4A5F5F4294ED25C4B87C67D8C33B83E" Source="$(var.SourceDir)\PrusaSlicer\printer\QIDI Shadow5.5.ini" KeyPath="yes" />
</Component>
@@ -223,6 +253,9 @@
<Component Id="owcA2B1227B6887F96BE420BAA2A0E92921" Guid="74a541bf-cf28-0f5f-60f4-7196cc1880ce">
<File Id="owfA2B1227B6887F96BE420BAA2A0E92921" Source="$(var.SourceDir)\PrusaSlicer\printer\Voxelab Polaris.ini" KeyPath="yes" />
</Component>
+ <Component Id="owc1C9AD057389FF91246638EFAF633C191" Guid="cde67087-b133-6eb9-f26a-fbd1f14838d8">
+ <File Id="owf1C9AD057389FF91246638EFAF633C191" Source="$(var.SourceDir)\PrusaSlicer\printer\Voxelab Proxima.ini" KeyPath="yes" />
+ </Component>
<Component Id="owcB527CA38F45FBB0A2DD46961788AE79C" Guid="743425a9-38e2-6c9a-c52e-f64281bf0ec5">
<File Id="owfB527CA38F45FBB0A2DD46961788AE79C" Source="$(var.SourceDir)\PrusaSlicer\printer\Wanhao D7.ini" KeyPath="yes" />
</Component>
diff --git a/UVtools.WPF/Assets/Icons/square-root-16x16.png b/UVtools.WPF/Assets/Icons/square-root-16x16.png
new file mode 100644
index 0000000..4aa398b
--- /dev/null
+++ b/UVtools.WPF/Assets/Icons/square-root-16x16.png
Binary files differ
diff --git a/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs
index aa96ac7..226ce4d 100644
--- a/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs
+++ b/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs
@@ -21,7 +21,8 @@ namespace UVtools.WPF.Controls.Tools
if (Presets.Length == 0)
{
- App.MainWindow.MessageBoxInfo("No valid configuration to be able to re-height, closing this tool now.", "Not possible to re-height");
+ App.MainWindow.MessageBoxInfo("No valid configuration to be able to re-height.\n" +
+ "As workaround clone first or last layer and try re run this tool.", "Not possible to re-height");
CanRun = false;
}
else
diff --git a/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml b/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml
index 5cce380..56a87eb 100644
--- a/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml
+++ b/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml
@@ -9,18 +9,20 @@
VerticalAlignment="Center"
Orientation="Vertical"
Spacing="5">
- <TextBlock Text="X:"/>
- <TextBlock Text="Y:"/>
+ <TextBlock Text="{Binding Operation.LocationXStr}"/>
+ <TextBlock Text="{Binding Operation.LocationYStr}"/>
- <TextBlock Margin="0,10,0,0" Text="Width:"/>
- <TextBlock Text="Height:"/>
+ <TextBlock Text="{Binding Operation.LocationWidthStr}"/>
+ <TextBlock Text="{Binding Operation.LocationHeightStr}"/>
- <TextBlock Margin="0,10,0,0" Text="Model within boundary:"/>
+ <TextBlock Margin="0,10,0,0" Text="{Binding Operation.IsWithinBoundaryStr}"/>
- <StackPanel Orientation="Horizontal" Spacing="10">
- <TextBlock VerticalAlignment="Center" Text="Move type:"/>
- <ComboBox MinWidth="70" />
- </StackPanel>
+ <CheckBox
+ Margin="0,5,0,0"
+ Content="Do a cut move"
+ ToolTip.Tip="When selected, the object will be cutted and pasted on the new location.
+&#x0a;Otherwise a copy will be performed to the new location."
+ IsChecked="{Binding Operation.IsCutMove}" />
</StackPanel>
@@ -36,6 +38,7 @@
VerticalAlignment="Center"
ButtonSpinnerLocation="Left"
Width="80"
+ Value="{Binding Operation.MarginLeft}"
/>
<StackPanel>
@@ -48,6 +51,7 @@
<NumericUpDown
VerticalAlignment="Center"
Width="80"
+ Value="{Binding Operation.MarginTop}"
/>
<Grid RowDefinitions="Auto,Auto,Auto"
@@ -60,59 +64,86 @@
ToolTip.Tip="Top Left"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="0"
+ />
<RadioButton
Grid.Row="0" Grid.Column="1"
ToolTip.Tip="Top Center"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="1"
+ />
<RadioButton
Grid.Row="0" Grid.Column="2"
ToolTip.Tip="Top Right"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="2"
+ />
<RadioButton
Grid.Row="1" Grid.Column="0"
ToolTip.Tip="Middle Left"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="3"
+ />
<RadioButton
Grid.Row="1" Grid.Column="1"
ToolTip.Tip="Middle Center"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Margin="5"
- IsChecked="true"
- GroupName="Anchor"/>
+ IsChecked="{Binding IsMiddleCenterChecked}"
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="4"
+ />
<RadioButton
Grid.Row="1" Grid.Column="2"
ToolTip.Tip="Middle Right"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="5"
+ />
<RadioButton
Grid.Row="2" Grid.Column="0"
ToolTip.Tip="Bottom Left"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="6"
+ />
<RadioButton
Grid.Row="2" Grid.Column="1"
ToolTip.Tip="Bottom Center"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="7"
+ />
<RadioButton
Grid.Row="2" Grid.Column="2"
ToolTip.Tip="Bottom Right"
VerticalAlignment="Center"
HorizontalAlignment="Center"
- GroupName="Anchor"/>
+ GroupName="Anchor"
+ Command="{Binding Operation.SetAnchor}"
+ CommandParameter="8"
+ />
</Grid>
@@ -120,6 +151,7 @@
<NumericUpDown
VerticalAlignment="Center"
Width="80"
+ Value="{Binding Operation.MarginBottom}"
/>
<TextBlock
VerticalAlignment="Center"
@@ -133,12 +165,14 @@
<NumericUpDown
VerticalAlignment="Center"
Width="80"
+ Value="{Binding Operation.MarginRight}"
/>
<TextBlock
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
- Text="Right"/>
+ Text="Right"
+ />
</StackPanel>
diff --git a/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml.cs
index 97de121..04e91f5 100644
--- a/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml.cs
+++ b/UVtools.WPF/Controls/Tools/ToolMoveControl.axaml.cs
@@ -1,22 +1,59 @@
-using Avalonia.Markup.Xaml;
+using System;
+using Avalonia.Markup.Xaml;
using UVtools.Core.Operations;
+using UVtools.WPF.Windows;
namespace UVtools.WPF.Controls.Tools
{
public class ToolMoveControl : ToolControl
{
+ private bool _isMiddleCenterChecked = true;
public OperationMove Operation { get; }
+ public bool IsMiddleCenterChecked
+ {
+ get => _isMiddleCenterChecked;
+ set => RaiseAndSetIfChanged(ref _isMiddleCenterChecked, value);
+ }
+
public ToolMoveControl()
{
InitializeComponent();
- BaseOperation = Operation = new OperationMove();
+ var roi = App.MainWindow.ROI;
+ BaseOperation = Operation = new OperationMove(roi.IsEmpty ? App.SlicerFile.LayerManager.BoundingRectangle : roi, (uint)App.MainWindow.LayerCache.Image.Width,
+ (uint)App.MainWindow.LayerCache.Image.Height);
DataContext = this;
+
+ Operation.PropertyChanged += (sender, e) =>
+ {
+ if (e.PropertyName.Equals(nameof(Operation.IsWithinBoundary)))
+ {
+ ParentWindow.ButtonOkEnabled = Operation.IsWithinBoundary;
+ }
+ };
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
+
+ public override void Callback(ToolWindow.Callbacks callback)
+ {
+ switch (callback)
+ {
+ case ToolWindow.Callbacks.Init:
+ ParentWindow.IsButton1Visible = true;
+ break;
+ case ToolWindow.Callbacks.ClearROI:
+ Operation.ROI = App.SlicerFile.LayerManager.BoundingRectangle;
+ Operation.Reset();
+ break;
+ case ToolWindow.Callbacks.Button1:
+ Operation.Reset();
+ IsMiddleCenterChecked = true;
+ break;
+ }
+ }
}
}
diff --git a/UVtools.WPF/MainWindow.axaml b/UVtools.WPF/MainWindow.axaml
index 42174e3..978b17e 100644
--- a/UVtools.WPF/MainWindow.axaml
+++ b/UVtools.WPF/MainWindow.axaml
@@ -569,6 +569,9 @@
IsChecked="{Binding Settings.Issues.ComputeIslands}"
Content="Islands"/>
<CheckBox
+ IsChecked="{Binding Settings.Issues.ComputeOverhangs}"
+ Content="Overhangs"/>
+ <CheckBox
IsChecked="{Binding Settings.Issues.ComputeResinTraps}"
Content="Resin traps"/>
<CheckBox
diff --git a/UVtools.WPF/MainWindow.axaml.cs b/UVtools.WPF/MainWindow.axaml.cs
index 414d652..b0e4f7f 100644
--- a/UVtools.WPF/MainWindow.axaml.cs
+++ b/UVtools.WPF/MainWindow.axaml.cs
@@ -714,25 +714,27 @@ namespace UVtools.WPF
}
if (Settings.PixelEditor.PartialUpdateIslandsOnEditing)
- {
- UpdateIslands(whiteListLayers);
+ {
+ UpdateIslandsOverhangs(whiteListLayers);
}
ShowLayer(); // It will call latter so its a extra call
CanSave = true;
}
- private async void UpdateIslands(List<uint> whiteListLayers)
+ private async void UpdateIslandsOverhangs(List<uint> whiteListLayers)
{
if (whiteListLayers.Count == 0) return;
var islandConfig = GetIslandDetectionConfiguration();
- var overhangConfig = new OverhangDetectionConfiguration { Enabled = false };
+ var overhangConfig = GetOverhangDetectionConfiguration();
var resinTrapConfig = new ResinTrapDetectionConfiguration { Enabled = false };
var touchingBoundConfig = new TouchingBoundDetectionConfiguration { Enabled = false };
islandConfig.Enabled = true;
islandConfig.WhiteListLayers = whiteListLayers;
+ overhangConfig.Enabled = true;
+ overhangConfig.WhiteListLayers = whiteListLayers;
+
-
IsGUIEnabled = false;
ProgressWindow.SetTitle("Updating Issues");
@@ -742,7 +744,7 @@ namespace UVtools.WPF
{
foreach (var issue in Issues)
{
- if(issue.LayerIndex != layerIndex || issue.Type != LayerIssue.IssueType.Island) continue;
+ if(issue.LayerIndex != layerIndex && (issue.Type == LayerIssue.IssueType.Island || issue.Type == LayerIssue.IssueType.Overhang)) continue;
toRemove.Add(issue);
}
}
@@ -757,7 +759,7 @@ namespace UVtools.WPF
touchingBoundConfig, false,
ProgressWindow.RestartProgress());
- issues.RemoveAll(issue => issue.Type != LayerIssue.IssueType.Island); // Remove all non islands
+ issues.RemoveAll(issue => issue.Type != LayerIssue.IssueType.Island && issue.Type != LayerIssue.IssueType.Overhang); // Remove all non islands and overhangs
return issues;
}
@@ -867,12 +869,14 @@ namespace UVtools.WPF
if (!IsFileLoaded) return;
ComputeIssues(
GetIslandDetectionConfiguration(),
+ GetOverhangDetectionConfiguration(),
GetResinTrapDetectionConfiguration(),
GetTouchingBoundsDetectionConfiguration(),
Settings.Issues.ComputeEmptyLayers);
}
private async void ComputeIssues(IslandDetectionConfiguration islandConfig = null,
+ OverhangDetectionConfiguration overhangConfig = null,
ResinTrapDetectionConfiguration resinTrapConfig = null,
TouchingBoundDetectionConfiguration touchingBoundConfig = null, bool emptyLayersConfig = true)
{
@@ -887,7 +891,7 @@ namespace UVtools.WPF
ShowProgressWindow();
try
{
- var issues = SlicerFile.LayerManager.GetAllIssues(islandConfig, resinTrapConfig, touchingBoundConfig,
+ var issues = SlicerFile.LayerManager.GetAllIssues(islandConfig, overhangConfig, resinTrapConfig, touchingBoundConfig,
emptyLayersConfig, ProgressWindow.RestartProgress());
return issues;
}
@@ -929,6 +933,16 @@ namespace UVtools.WPF
};
}
+ public OverhangDetectionConfiguration GetOverhangDetectionConfiguration()
+ {
+ return new OverhangDetectionConfiguration
+ {
+ Enabled = Settings.Issues.ComputeOverhangs,
+ IndependentFromIslands = Settings.Issues.OverhangIndependentFromIslands,
+ ErodeIterations = Settings.Issues.OverhangErodeIterations,
+ };
+ }
+
public ResinTrapDetectionConfiguration GetResinTrapDetectionConfiguration()
{
return new ResinTrapDetectionConfiguration
@@ -1347,6 +1361,7 @@ namespace UVtools.WPF
if (SlicerFile is null) return;
SlicerFile?.Dispose();
App.SlicerFile = null;
+ TabSelectedIndex = 0;
CanSave = false;
_actualLayer = 0;
@@ -1785,11 +1800,25 @@ namespace UVtools.WPF
}
break;
+ case LayerIssue.IssueType.Overhang:
+ color = selectedIssues.Contains(issue)
+ ? Settings.LayerPreview.OverhangHighlightColor
+ : Settings.LayerPreview.OverhangColor;
+ if (_showLayerImageCrosshairs &&
+ !Settings.LayerPreview.CrosshairShowOnlyOnSelectedIssues &&
+ LayerImageBox.Zoom <= AppSettings.CrosshairFadeLevel)
+ {
+ DrawCrosshair(issue.BoundingRectangle);
+ }
+
+ break;
case LayerIssue.IssueType.TouchingBound:
color = Settings.LayerPreview.TouchingBoundsColor;
break;
}
+ if(color.IsEmpty) continue;
+
foreach (var pixel in issue)
{
int pixelPos = LayerCache.Image.GetPixelPos(pixel);
@@ -2440,18 +2469,18 @@ namespace UVtools.WPF
return false;
case OperationRepairLayers operation:
- if (ReferenceEquals(Issues, null))
+ if (Issues is null)
{
var islandConfig = GetIslandDetectionConfiguration();
- islandConfig.Enabled =
- operation.RepairIslands && operation.RemoveIslandsBelowEqualPixelCount > 0;
+ islandConfig.Enabled = operation.RepairIslands && operation.RemoveIslandsBelowEqualPixelCount > 0;
+ var overhangConfig = new OverhangDetectionConfiguration { Enabled = false };
var resinTrapConfig = GetResinTrapDetectionConfiguration();
resinTrapConfig.Enabled = operation.RepairResinTraps;
var touchingBoundConfig = new TouchingBoundDetectionConfiguration { Enabled = false };
if (islandConfig.Enabled || resinTrapConfig.Enabled)
{
- ComputeIssues(islandConfig, resinTrapConfig, touchingBoundConfig, Settings.Issues.ComputeEmptyLayers);
+ ComputeIssues(islandConfig, overhangConfig, resinTrapConfig, touchingBoundConfig, Settings.Issues.ComputeEmptyLayers);
}
}
diff --git a/UVtools.WPF/UserSettings.cs b/UVtools.WPF/UserSettings.cs
index 4ada331..1607311 100644
--- a/UVtools.WPF/UserSettings.cs
+++ b/UVtools.WPF/UserSettings.cs
@@ -25,6 +25,8 @@ namespace UVtools.WPF
#endregion
#region Sub classes
+
+ #region General
[Serializable]
public sealed class GeneralUserSettings : ReactiveObject
{
@@ -119,7 +121,9 @@ namespace UVtools.WPF
return MemberwiseClone() as GeneralUserSettings;
}
}
+ #endregion
+ #region Layer Preview
[Serializable]
public sealed class LayerPreviewUserSettings : ReactiveObject
{
@@ -138,10 +142,12 @@ namespace UVtools.WPF
private Color _nextLayerDifferenceColor = new Color(255, 0, 255, 255);
private Color _bothLayerDifferenceColor = new Color(255, 255, 0, 0);
private bool _showLayerDifference = false;
- private Color _islandColor = new Color(255, 255,215, 0);
- private Color _islandHighlightColor = new Color(255, 255,255, 0);
- private Color _resinTrapColor = new Color(255, 244, 164, 96);
- private Color _resinTrapHighlightColor = new Color(255, 255, 165, 0);
+ private Color _islandColor = new Color(255, 255, 255, 0);
+ private Color _islandHighlightColor = new Color(255, 255, 215, 0);
+ private Color _overhangColor = new Color(255, 255, 105, 180);
+ private Color _overhangHighlightColor = new Color(255, 255, 20, 147);
+ private Color _resinTrapColor = new Color(255, 255, 165, 0);
+ private Color _resinTrapHighlightColor = new Color(255, 244, 164, 96);
private Color _touchingBoundsColor = new Color(255, 255, 0, 0);
private Color _crosshairColor = new Color(255, 255, 0, 0);
private bool _zoomToFitPrintVolumeBounds = true;
@@ -335,7 +341,7 @@ namespace UVtools.WPF
public SolidColorBrush IslandBrush
{
get => new SolidColorBrush(_islandColor.ToAvalonia());
- set => IslandHighlightColor = new Color(value);
+ set => IslandColor = new Color(value);
}
public Color IslandHighlightColor
@@ -355,6 +361,40 @@ namespace UVtools.WPF
set => IslandHighlightColor = new Color(value);
}
+ public Color OverhangColor
+ {
+ get => _overhangColor;
+ set
+ {
+ this.RaiseAndSetIfChanged(ref _overhangColor, value);
+ this.RaisePropertyChanged(nameof(OverhangBrush));
+ }
+ }
+
+ [XmlIgnore]
+ public SolidColorBrush OverhangBrush
+ {
+ get => new SolidColorBrush(_overhangColor.ToAvalonia());
+ set => OverhangColor = new Color(value);
+ }
+
+ public Color OverhangHighlightColor
+ {
+ get => _overhangHighlightColor;
+ set
+ {
+ this.RaiseAndSetIfChanged(ref _overhangHighlightColor, value);
+ this.RaisePropertyChanged(nameof(OverhangHighlightBrush));
+ }
+ }
+
+ [XmlIgnore]
+ public SolidColorBrush OverhangHighlightBrush
+ {
+ get => new SolidColorBrush(_overhangHighlightColor.ToAvalonia());
+ set => OverhangHighlightColor = new Color(value);
+ }
+
public Color ResinTrapColor
{
get => _resinTrapColor;
@@ -482,13 +522,16 @@ namespace UVtools.WPF
}
}
+ #endregion
+ #region Issues
[Serializable]
public sealed class IssuesUserSettings : ReactiveObject
{
private bool _computeIssuesOnLoad = false;
private bool _computeIssuesOnClickTab = true;
private bool _computeIslands = true;
+ private bool _computeOverhangs = true;
private bool _computeResinTraps = true;
private bool _computeTouchingBounds = true;
private bool _computeEmptyLayers = true;
@@ -498,6 +541,8 @@ namespace UVtools.WPF
private byte _islandRequiredPixelBrightnessToProcessCheck = 1;
private byte _islandRequiredPixelsToSupport = 10;
private byte _islandRequiredPixelBrightnessToSupport = 150;
+ private bool _overhangIndependentFromIslands = true;
+ private byte _overhangErodeIterations = 49;
private byte _resinTrapBinaryThreshold = 127;
private byte _resinTrapRequiredAreaToProcessCheck = 17;
private byte _resinTrapRequiredBlackPixelsToDrain = 10;
@@ -521,6 +566,12 @@ namespace UVtools.WPF
set => this.RaiseAndSetIfChanged(ref _computeIslands, value);
}
+ public bool ComputeOverhangs
+ {
+ get => _computeOverhangs;
+ set => this.RaiseAndSetIfChanged(ref _computeOverhangs, value);
+ }
+
public bool ComputeResinTraps
{
get => _computeResinTraps;
@@ -575,7 +626,18 @@ namespace UVtools.WPF
set => this.RaiseAndSetIfChanged(ref _islandRequiredPixelBrightnessToSupport, value);
}
+ public bool OverhangIndependentFromIslands
+ {
+ get => _overhangIndependentFromIslands;
+ set => this.RaiseAndSetIfChanged(ref _overhangIndependentFromIslands, value);
+ }
+ public byte OverhangErodeIterations
+ {
+ get => _overhangErodeIterations;
+ set => this.RaiseAndSetIfChanged(ref _overhangErodeIterations, value);
+ }
+
public byte ResinTrapBinaryThreshold
{
get => _resinTrapBinaryThreshold;
@@ -606,6 +668,7 @@ namespace UVtools.WPF
}
}
+ #endregion
[Serializable]
public sealed class PixelEditorUserSettings : ReactiveObject
diff --git a/UVtools.WPF/Windows/SettingsWindow.axaml b/UVtools.WPF/Windows/SettingsWindow.axaml
index fb27ed8..b65d4c9 100644
--- a/UVtools.WPF/Windows/SettingsWindow.axaml
+++ b/UVtools.WPF/Windows/SettingsWindow.axaml
@@ -283,9 +283,9 @@
</Grid>
- <Grid Margin="15,0,15,15" RowDefinitions="Auto,10,Auto,10,Auto,10,Auto" ColumnDefinitions="Auto,Auto,*,Auto,Auto">
+ <Grid Margin="15,0,15,15" RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto" ColumnDefinitions="Auto,Auto,*,Auto,Auto">
- <!--Previous layer difference & island-->
+ <!--Previous layer difference & Island-->
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Text="Previous layer difference:"/>
@@ -325,7 +325,7 @@
CommandParameter="IslandHighlightColor"
/>
- <!--Next layer difference & Resin trap-->
+ <!--Next layer difference & Overhang-->
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Text="Next layer difference:"/>
@@ -339,33 +339,34 @@
Command="{Binding SelectColor}"
CommandParameter="NextLayerDifferenceColor"
/>
+
<TextBlock Grid.Row="2" Grid.Column="2"
Margin="10,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
- Text="Resin trap / Selected Resin trap:"/>
+ Text="Overhang / Selected overhang:"/>
<Button Grid.Row="2" Grid.Column="3"
Margin="10,0,0,0"
Padding="10"
BorderBrush="Black"
BorderThickness="2"
VerticalAlignment="Center"
- Background="{Binding Settings.LayerPreview.ResinTrapBrush}"
+ Background="{Binding Settings.LayerPreview.OverhangBrush}"
Command="{Binding SelectColor}"
- CommandParameter="ResinTrapColor"
+ CommandParameter="OverhangColor"
/>
<Button Grid.Row="2" Grid.Column="4"
Margin="10,0,0,0"
Padding="10"
BorderBrush="Black"
BorderThickness="2"
- VerticalAlignment="Center"
- Background="{Binding Settings.LayerPreview.ResinTrapHighlightBrush}"
+ VerticalAlignment="Center"
+ Background="{Binding Settings.LayerPreview.OverhangHighlightBrush}"
Command="{Binding SelectColor}"
- CommandParameter="ResinTrapHighlightColor"
+ CommandParameter="OverhangHighlightColor"
/>
- <!--Next&prev layer difference & Touching boundary-->
+ <!--Next&prev layer difference & Resin traps-->
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Text="Prev &amp; next layer difference:"/>
@@ -379,39 +380,68 @@
Command="{Binding SelectColor}"
CommandParameter="BothLayerDifferenceColor"
/>
+
<TextBlock Grid.Row="4" Grid.Column="2"
Margin="10,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
- Text="Touching boundary:"/>
+ Text="Resin trap / Selected Resin trap:"/>
<Button Grid.Row="4" Grid.Column="3"
Margin="10,0,0,0"
Padding="10"
BorderBrush="Black"
BorderThickness="2"
VerticalAlignment="Center"
- Background="{Binding Settings.LayerPreview.TouchingBoundsBrush}"
+ Background="{Binding Settings.LayerPreview.ResinTrapBrush}"
Command="{Binding SelectColor}"
- CommandParameter="TouchingBoundsColor"
+ CommandParameter="ResinTrapColor"
/>
-
- <!--Diff & Crosshair-->
+ <Button Grid.Row="4" Grid.Column="4"
+ Margin="10,0,0,0"
+ Padding="10"
+ BorderBrush="Black"
+ BorderThickness="2"
+ VerticalAlignment="Center"
+ Background="{Binding Settings.LayerPreview.ResinTrapHighlightBrush}"
+ Command="{Binding SelectColor}"
+ CommandParameter="ResinTrapHighlightColor"
+ />
+
+
+ <!--Diff & Touching bounds-->
<CheckBox Grid.Row="6" Grid.Column="0"
Grid.ColumnSpan="3"
Content="Show layer diff colors by default"
IsChecked="{Binding Settings.LayerPreview.ShowLayerDifference}"
/>
-
+
<TextBlock Grid.Row="6" Grid.Column="2"
Margin="10,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
- Text="Crosshair:"/>
+ Text="Touching boundary:"/>
<Button Grid.Row="6" Grid.Column="3"
Margin="10,0,0,0"
Padding="10"
BorderBrush="Black"
BorderThickness="2"
+ VerticalAlignment="Center"
+ Background="{Binding Settings.LayerPreview.TouchingBoundsBrush}"
+ Command="{Binding SelectColor}"
+ CommandParameter="TouchingBoundsColor"
+ />
+
+ <!-- Crosshair -->
+ <TextBlock Grid.Row="8" Grid.Column="2"
+ Margin="10,0,0,0"
+ HorizontalAlignment="Right"
+ VerticalAlignment="Center"
+ Text="Crosshair:"/>
+ <Button Grid.Row="8" Grid.Column="3"
+ Margin="10,0,0,0"
+ Padding="10"
+ BorderBrush="Black"
+ BorderThickness="2"
VerticalAlignment="Center"
Background="{Binding Settings.LayerPreview.CrosshairBrush}"
Command="{Binding SelectColor}"
@@ -480,7 +510,7 @@
<StackPanel Orientation="Vertical">
<TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="Crosshairs"/>
- <Grid Margin="15" RowDefinitions="Auto,10,Auto,10,Auto,10,Auto" ColumnDefinitions="Auto,100,*,Auto,Auto">
+ <Grid Margin="15" RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,100,*,Auto,Auto">
<CheckBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
VerticalAlignment="Center"
Content="Show crosshairs for selected issues only"
@@ -592,6 +622,8 @@
<TextBlock Text="Compute:"/>
<CheckBox Content="Islands"
IsChecked="{Binding Settings.Issues.ComputeIslands}"/>
+ <CheckBox Content="Overhangs"
+ IsChecked="{Binding Settings.Issues.ComputeOverhangs}"/>
<CheckBox Content="Resin traps"
IsChecked="{Binding Settings.Issues.ComputeResinTraps}"/>
<CheckBox Content="Touching boundary"
@@ -610,8 +642,11 @@
<StackPanel Orientation="Vertical">
<TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="Islands"/>
- <CheckBox Margin="15" Content="Allow diagonal bonds during island detection"
+ <CheckBox Margin="15"
+ Content="Allow diagonal bonds during island detection"
IsChecked="{Binding Settings.Issues.IslandAllowDiagonalBonds}"
+ ToolTip.Tip="If enabled, components touching by even a single diagonal bond will be considered a single component for the purposes of island detection.
+&#x0a;Enabling this will result in faster island detection. but some potential islands with weak bonds to other components may not be detected."
/>
@@ -621,7 +656,13 @@
Maximum="254"
Value="{Binding Settings.Issues.IslandBinaryThreshold}"
/>
- <TextBlock VerticalAlignment="Center" Text="Pixel intensity threshold for island detection"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Pixel intensity threshold for island detection"
+ ToolTip.Tip="Pixels below this threshold will be considered black during island detection.
+&#x0a;Pixels equal to or above this theshold will be considred white during island detection.
+&#x0a;0 to disable."
+ />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
@@ -630,7 +671,11 @@
Maximum="255"
Value="{Binding Settings.Issues.IslandRequiredAreaToProcessCheck}"
/>
- <TextBlock VerticalAlignment="Center" Text="Bounding area required for an object to be considered an island"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Bounding area required for an object to be considered an island"
+ ToolTip.Tip="Objects with bounding area smaller than this value will not be considered an island even if unsupported."
+ />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
@@ -639,16 +684,25 @@
Maximum="255"
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToProcessCheck}"
/>
- <TextBlock VerticalAlignment="Center" Text="Minimum pixel intensity to consider a pixel part of an island"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Minimum pixel intensity to consider a pixel part of an island"
+ ToolTip.Tip="Pixels with an intensity below this threshold will not be considerd as part of an island."
+ />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
<NumericUpDown Width="60"
Minimum="1"
Maximum="255"
- Value="{Binding Settings.Issues.IslandRequiredPixelsToSupport}"
+ Value="{Binding Settings.Issues.IslandRequiredPixelsToSupport}"
/>
- <TextBlock VerticalAlignment="Center" Text="Supporting safe pixels required to considerer an island supported"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Supporting safe pixels required to considerer an island supported"
+ ToolTip.Tip="An island supported by at least this number of safe pixels will always be considered supported.
+&#x0a;An island supported by less than this number of pixels will only be considered supported if the number of supporting pixels is at least half the area of the island itself."
+ />
</StackPanel>
@@ -658,8 +712,44 @@
Maximum="255"
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToSupport}"
/>
- <TextBlock VerticalAlignment="Center" Text="Minimum intensity of a supporting pixel before it is considered safe"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Minimum intensity of a supporting pixel before it is considered safe"
+ ToolTip.Tip="Pixels below this threshold will not be considered when counting supporting pixels for an island."
+ />
+ </StackPanel>
+ </StackPanel>
+ </Border>
+
+ <Border
+ Margin="5"
+ BorderBrush="LightBlue"
+ BorderThickness="4">
+
+ <StackPanel Orientation="Vertical">
+ <TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="Overhangs"/>
+
+ <CheckBox
+ Margin="15"
+ Content="Include islands when detecting overhangs"
+ ToolTip.Tip="If enabled, overhangs will be computed everywhere, including on islands. An overhang on an island will always be detected and reported. (Faster)
+&#x0a;If disabled, islands are disregarded when computing overhangs. An overhang that is on an island will never be detected or reported. (Slower)
+&#x0a;When island detection is disabled and overhang detection is enabled, overhangs will always be computed everywhere."
+ IsChecked="{Binding Settings.Issues.OverhangIndependentFromIslands}"/>
+
+ <StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
+ <NumericUpDown Width="60"
+ Minimum="2"
+ Maximum="255"
+ Value="{Binding Settings.Issues.OverhangErodeIterations}"
+ />
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Minimum overhang depth"
+ ToolTip.Tip="The number of pixels that an overhang can protrude from the previous layer before it is detected and reported as an overhang."
+ />
</StackPanel>
+
</StackPanel>
</Border>
@@ -677,7 +767,14 @@
Maximum="254"
Value="{Binding Settings.Issues.ResinTrapBinaryThreshold}"
/>
- <TextBlock VerticalAlignment="Center" Text="Pixel intensity threshold for resin trap detection"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Pixel intensity threshold for resin trap detection"
+ ToolTip.Tip="Pixels below this threshold will be considered black during resin trap detection.
+&#x0a;Pixels equal to or above this theshold will be considred white during resin trap detection.
+&#x0a;0 to disable."
+ />
+
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
@@ -686,7 +783,11 @@
Maximum="255"
Value="{Binding Settings.Issues.ResinTrapRequiredAreaToProcessCheck}"
/>
- <TextBlock VerticalAlignment="Center" Text="Bounding area required for an object to be processed during resin trap detection"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Bounding area required for an object to be processed during resin trap detection"
+ ToolTip.Tip="Objects with bounding area smaller than this value will not be processed during resin trip detection."
+ />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
@@ -695,7 +796,11 @@
Maximum="255"
Value="{Binding Settings.Issues.ResinTrapRequiredBlackPixelsToDrain}"
/>
- <TextBlock VerticalAlignment="Center" Text="Number of drain pixels required to disqualify a potential resin trap"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Number of drain pixels required to disqualify a potential resin trap"
+ ToolTip.Tip="The drain pixel area required to consider a potential resin trap sufficiently drained (no longer a resin trap)."
+ />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="15,0,15,15" Spacing="10">
@@ -704,7 +809,11 @@
Maximum="150"
Value="{Binding Settings.Issues.ResinTrapMaximumPixelBrightnessToDrain}"
/>
- <TextBlock VerticalAlignment="Center" Text="Maximum pixel intensity for a pixel to be considered a drain pixel"/>
+ <TextBlock
+ VerticalAlignment="Center"
+ Text="Maximum pixel intensity for a pixel to be considered a drain pixel"
+ ToolTip.Tip="Pixels below this intensity threshold will not be counted when evaluating if a potential resin trap is sufficiently drained."
+ />
</StackPanel>
</StackPanel>
</Border>