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

github.com/sn4k3/UVtools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Conceição <Tiago_caza@hotmail.com>2021-01-10 06:37:15 +0300
committerTiago Conceição <Tiago_caza@hotmail.com>2021-01-10 06:37:15 +0300
commit17bdece1b536013ae72213717311a0dcd389f97c (patch)
tree24e17bfc0d53cbc23aeaf505e6a9c57577bd155c
parent2f98eb600e268e3c2aa6ba3c4bb99dd3b29d0201 (diff)
v2.2.0v2.2.0
* (Add) FDG file format for Voxelab Printers (ezrec/uv3dp#129) * (Add) PrusaSlicer printer: Voxelab Ceres 8.9 * (Change) Print time display to hours and minutes: 00h00m
-rw-r--r--CHANGELOG.md6
-rw-r--r--ImportPrusaSlicerData.bat11
-rw-r--r--PrusaSlicer/printer/Voxelab Ceres 8.9.ini37
-rw-r--r--PrusaSlicer/printer/Voxelab Polaris 5.5.ini (renamed from PrusaSlicer/printer/Voxelab Polaris.ini)4
-rw-r--r--PrusaSlicer/printer/Voxelab Proxima 6.ini (renamed from PrusaSlicer/printer/Voxelab Proxima.ini)4
-rw-r--r--README.md14
-rw-r--r--UVtools.Core/FileFormats/FDGFile.cs6
-rw-r--r--UVtools.Core/FileFormats/FileFormat.cs3
-rw-r--r--UVtools.Core/FileFormats/IFileFormat.cs5
-rw-r--r--UVtools.Core/FileFormats/PhotonSFile.cs48
-rw-r--r--UVtools.Core/FileFormats/SL1File.cs27
-rw-r--r--UVtools.Core/UVtools.Core.csproj2
-rw-r--r--UVtools.InstallerMM/UVtools.InstallerMM.wxs11
-rw-r--r--UVtools.WPF/MainWindow.axaml2
-rw-r--r--UVtools.WPF/UVtools.WPF.csproj2
15 files changed, 150 insertions, 32 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1801cdf..2e873e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,10 @@
# Changelog
-## 07/01/2021 - v2.2.0
+## 10/01/2021 - v2.2.0
-* (Add) FDG file format for Voxelab Printers
+* (Add) FDG file format for Voxelab Printers (ezrec/uv3dp#129)
+* (Add) PrusaSlicer printer: Voxelab Ceres 8.9
+* (Change) Print time display to hours and minutes: 00h00m
## 07/01/2021 - v2.1.3
diff --git a/ImportPrusaSlicerData.bat b/ImportPrusaSlicerData.bat
index 98764e2..1efb9a9 100644
--- a/ImportPrusaSlicerData.bat
+++ b/ImportPrusaSlicerData.bat
@@ -56,11 +56,12 @@ SET files[46]=Wanhao CGR Mono.ini
SET files[47]=Creality LD-002R.ini
SET files[48]=Creality LD-002H.ini
SET files[49]=Creality LD-006.ini
-SET files[50]=Voxelab Polaris.ini
-SET files[51]=Voxelab Proxima.ini
-SET files[52]=Longer Orange 10.ini
-SET files[53]=Longer Orange 30.ini
-SET files[54]=Longer Orange4K.ini
+SET files[50]=Voxelab Polaris 5.5.ini
+SET files[51]=Voxelab Proxima 6.ini
+SET files[52]=Voxelab Ceres 8.9.ini
+SET files[53]=Longer Orange 10.ini
+SET files[54]=Longer Orange 30.ini
+SET files[55]=Longer Orange4K.ini
echo PrusaSlicer Printers Instalation
echo This will replace printers, all changes will be discarded
diff --git a/PrusaSlicer/printer/Voxelab Ceres 8.9.ini b/PrusaSlicer/printer/Voxelab Ceres 8.9.ini
new file mode 100644
index 0000000..20e560d
--- /dev/null
+++ b/PrusaSlicer/printer/Voxelab Ceres 8.9.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2021-01-09 at 22:10:08 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,192x0,192x120,0x120
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 120
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2400
+display_width = 192
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 200
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_CERES_8.9\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nFORMAT_FDG\nEND_CUSTOM_VALUES
+printer_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/Voxelab Polaris.ini b/PrusaSlicer/printer/Voxelab Polaris 5.5.ini
index 760a68a..7015849 100644
--- a/PrusaSlicer/printer/Voxelab Polaris.ini
+++ b/PrusaSlicer/printer/Voxelab Polaris 5.5.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 01:27:58 UTC
+# generated by PrusaSlicer 2.2.0+win64 on 2021-01-09 at 22:08:12 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_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_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_POLARIS_5.5\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_65\nLiftSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nFORMAT_FDG\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Voxelab Proxima.ini b/PrusaSlicer/printer/Voxelab Proxima 6.ini
index f661138..1c6e5d9 100644
--- a/PrusaSlicer/printer/Voxelab Proxima.ini
+++ b/PrusaSlicer/printer/Voxelab Proxima 6.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-10-01 at 03:18:23 UTC
+# generated by PrusaSlicer 2.2.0+win64 on 2021-01-09 at 22:08:28 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_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_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_VOXELAB\nPRINTER_MODEL_PROXIMA_6\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_60\nLiftSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nAntiAliasing_4 ; Use 0 or 1 for disable AntiAliasing with "printer gamma correction" set to 0, otherwise use multiples of 2 and "gamma correction" set to 1 for enable\nFORMAT_FDG\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/README.md b/README.md
index f5ab852..20a0d78 100644
--- a/README.md
+++ b/README.md
@@ -59,12 +59,13 @@ But also, i need victims for test subject. Proceed at your own risk!
* CBDDLP (Chitubox)
* CBT (Chitubox)
* PHZ (Chitubox)
+* FDG (Voxelab)
* PWS (Photon Workshop)
* PW0 (Photon Workshop)
-* PWX (Photon Workshop) [Not confirmed]
-* PWMO (Photon Workshop) [Not confirmed]
-* PWMS (Photon Workshop) [Not confirmed]
-* PWMX (Photon Workshop) [Not confirmed]
+* PWX (Photon Workshop)
+* PWMO (Photon Workshop)
+* PWMS (Photon Workshop)
+* PWMX (Photon Workshop)
* ZCodex (Z-Suite)
* CWS (NovaMaker)
* LGS (Longer Orange 10)
@@ -120,8 +121,9 @@ But also, i need victims for test subject. Proceed at your own risk!
* Creality LD-002R
* Creality LD-002H
* Creality LD-006
-* Voxelab Polaris
-* Voxelab Proxima
+* Voxelab Polaris 5.5
+* Voxelab Proxima 6
+* Voxelab Ceres 8.9
* Longer Orange 10
* Longer Orange 30
* Longer Orange4K
diff --git a/UVtools.Core/FileFormats/FDGFile.cs b/UVtools.Core/FileFormats/FDGFile.cs
index 71b9a4f..40ad1cd 100644
--- a/UVtools.Core/FileFormats/FDGFile.cs
+++ b/UVtools.Core/FileFormats/FDGFile.cs
@@ -661,7 +661,7 @@ namespace UVtools.Core.FileFormats
public override FileFormatType FileType => FileFormatType.Binary;
public override FileExtension[] FileExtensions { get; } = {
- new("fdg", "Chitubox FDG"),
+ new("fdg", "Voxelab FDG"),
};
public override Type[] ConvertToFormats { get; } =
@@ -985,9 +985,7 @@ namespace UVtools.Core.FileFormats
{
HeaderSettings.PreviewLargeOffsetAddress = currentOffset;
}
-
-
-
+
Preview preview = new Preview
{
ResolutionX = (uint) image.Width,
diff --git a/UVtools.Core/FileFormats/FileFormat.cs b/UVtools.Core/FileFormats/FileFormat.cs
index 36c02af..f0951ef 100644
--- a/UVtools.Core/FileFormats/FileFormat.cs
+++ b/UVtools.Core/FileFormats/FileFormat.cs
@@ -489,6 +489,7 @@ namespace UVtools.Core.FileFormats
RaisePropertyChanged(nameof(PrintTimeOrComputed));
RaisePropertyChanged(nameof(PrintTimeComputed));
RaisePropertyChanged(nameof(PrintTimeHours));
+ RaisePropertyChanged(nameof(PrintTimeString));
}
}
@@ -536,6 +537,8 @@ namespace UVtools.Core.FileFormats
public float PrintTimeHours => (float) Math.Round(PrintTimeOrComputed / 3600, 2);
+ public string PrintTimeString => TimeSpan.FromSeconds(PrintTimeOrComputed).ToString("hh\\hmm\\m");
+
public virtual float UsedMaterial { get; set; }
public virtual float MaterialCost { get; set; }
diff --git a/UVtools.Core/FileFormats/IFileFormat.cs b/UVtools.Core/FileFormats/IFileFormat.cs
index e690512..6b46b4f 100644
--- a/UVtools.Core/FileFormats/IFileFormat.cs
+++ b/UVtools.Core/FileFormats/IFileFormat.cs
@@ -254,6 +254,11 @@ namespace UVtools.Core.FileFormats
float PrintTimeHours { get; }
/// <summary>
+ /// Gets the estimate print time in hours and minutes formatted
+ /// </summary>
+ string PrintTimeString { get; }
+
+ /// <summary>
/// Gets the estimate used material in ml
/// </summary>
float UsedMaterial { get; set; }
diff --git a/UVtools.Core/FileFormats/PhotonSFile.cs b/UVtools.Core/FileFormats/PhotonSFile.cs
index f4a671a..e77b200 100644
--- a/UVtools.Core/FileFormats/PhotonSFile.cs
+++ b/UVtools.Core/FileFormats/PhotonSFile.cs
@@ -24,7 +24,7 @@ namespace UVtools.Core.FileFormats
{
public class PhotonSFile : FileFormat
{
- public const byte RLEEncodingLimit = 128; // 128;
+ public const byte RLEEncodingLimit = 0x7f - 2; // 128;
#region Sub Classes
@@ -101,13 +101,52 @@ namespace UVtools.Core.FileFormats
public unsafe byte[] Encode(Mat mat)
{
List<byte> rawData = new List<byte>();
- List<byte> chunk = new List<byte>();
var spanMat = mat.GetBytePointer();
var imageLength = mat.GetLength();
-
+ int rep = 0;
+ byte color = 0;
+
+ void AddRep()
+ {
+ if (rep <= 0) return;
+ rep--;
+ byte rle =
+ (byte) (((rep & 1) > 0 ? 128 : 0) |
+ ((rep & 2) > 0 ? 64 : 0) |
+ ((rep & 4) > 0 ? 32 : 0) |
+ ((rep & 8) > 0 ? 16 : 0) |
+ ((rep & 16) > 0 ? 8 : 0) |
+ ((rep & 32) > 0 ? 4 : 0) |
+ ((rep & 64) > 0 ? 2 : 0) | color);
+
+ rawData.Add(rle);
+ }
+
+ for (int i = 0; i < imageLength; i++)
+ {
+ color = color <= 127 ? 0 : 255; // Sanitize no AA
+ if (spanMat[i] != color)
+ {
+ AddRep();
+ color = spanMat[i];
+ rep = 1;
+ }
+ else
+ {
+ rep++;
+ if (rep == RLEEncodingLimit)
+ {
+ AddRep();
+ rep = 0;
+ }
+ }
+ }
+
+ AddRep();
+
EncodedRle = rawData.ToArray();
- DataSize = (uint)(EncodedRle.Length * 8 + 32);
+ DataSize = (uint)(EncodedRle.Length * 8 + 4);
return EncodedRle;
}
@@ -400,6 +439,7 @@ namespace UVtools.Core.FileFormats
{
outputFile.WriteSerialize(HeaderSettings);
outputFile.WriteBytes(PreviewEncode(Thumbnails[0]));
+ LayerSettings.LayerCount = LayerCount;
outputFile.WriteSerialize(LayerSettings);
LayerData[] layerData = new LayerData[LayerCount];
diff --git a/UVtools.Core/FileFormats/SL1File.cs b/UVtools.Core/FileFormats/SL1File.cs
index d44b408..e8e2230 100644
--- a/UVtools.Core/FileFormats/SL1File.cs
+++ b/UVtools.Core/FileFormats/SL1File.cs
@@ -298,6 +298,7 @@ namespace UVtools.Core.FileFormats
typeof(ChituboxZipFile),
typeof(PHZFile),
typeof(FDGFile),
+ typeof(PhotonSFile),
typeof(PhotonWorkshopFile),
typeof(ZCodexFile),
typeof(CWSFile),
@@ -1013,6 +1014,32 @@ namespace UVtools.Core.FileFormats
return true;
}
+ if (to == typeof(PhotonSFile))
+ {
+ PhotonSFile defaultFormat = (PhotonSFile)FindByType(typeof(PhotonSFile));
+ PhotonSFile file = new PhotonSFile
+ {
+ LayerManager = LayerManager,
+ HeaderSettings =
+ {
+ BottomExposureSeconds = MaterialSettings.InitialExposureTime,
+ BottomLayerCount = PrintSettings.FadedLayers,
+ ExposureSeconds = MaterialSettings.ExposureTime,
+ LayerHeight = PrintSettings.LayerHeight,
+ LayerOffSeconds = LookupCustomValue<double>(Keyword_LayerOffTime, DefaultLightOffDelay),
+ LiftHeight = LookupCustomValue<double>(Keyword_LiftHeight, DefaultLiftHeight),
+ LiftSpeed = LookupCustomValue<double>(Keyword_LiftSpeed, DefaultLiftSpeed),
+ RetractSpeed = LookupCustomValue<float>(Keyword_RetractSpeed, DefaultRetractSpeed),
+ Volume = OutputConfigSettings.UsedMaterial,
+ }
+ };
+
+ file.SetThumbnails(Thumbnails);
+ file.Encode(fileFullPath, progress);
+
+ return true;
+ }
+
if (to == typeof(ZCodexFile))
{
ZCodexFile defaultFormat = (ZCodexFile)FindByType(typeof(ZCodexFile));
diff --git a/UVtools.Core/UVtools.Core.csproj b/UVtools.Core/UVtools.Core.csproj
index 4986428..cd0664b 100644
--- a/UVtools.Core/UVtools.Core.csproj
+++ b/UVtools.Core/UVtools.Core.csproj
@@ -10,7 +10,7 @@
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<PackageProjectUrl>https://github.com/sn4k3/UVtools</PackageProjectUrl>
<Description>MSLA/DLP, file analysis, calibration, repair, conversion and manipulation</Description>
- <Version>2.1.3</Version>
+ <Version>2.2.0</Version>
<Copyright>Copyright © 2020 PTRTECH</Copyright>
<PackageIcon>UVtools.png</PackageIcon>
<Platforms>AnyCPU;x64</Platforms>
diff --git a/UVtools.InstallerMM/UVtools.InstallerMM.wxs b/UVtools.InstallerMM/UVtools.InstallerMM.wxs
index 4c32268..4bf4191 100644
--- a/UVtools.InstallerMM/UVtools.InstallerMM.wxs
+++ b/UVtools.InstallerMM/UVtools.InstallerMM.wxs
@@ -975,11 +975,14 @@
<Component Id="owc696F0AF8084A6AA7624CA0947E245A47" Guid="6aa7d092-d68b-a44d-f2c7-0a590404b19f">
<File Id="owf696F0AF8084A6AA7624CA0947E245A47" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\QIDI Shadow6.0 Pro.ini" KeyPath="yes" />
</Component>
- <Component Id="owcF90F5AD6941B0C5CF8C0CB134ED5C5D5" Guid="186b397e-cd3b-855a-524e-cd48a48d5758">
- <File Id="owfF90F5AD6941B0C5CF8C0CB134ED5C5D5" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\Voxelab Polaris.ini" KeyPath="yes" />
+ <Component Id="owc2D767EDC65A9490BE5587F5807220F67" Guid="1b34ea21-cadd-c887-3f4e-8655903ef11a">
+ <File Id="owf2D767EDC65A9490BE5587F5807220F67" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\Voxelab Ceres 8.9.ini" KeyPath="yes" />
</Component>
- <Component Id="owc7F9A29B71850B673CBE3B2BE64A68AAA" Guid="08fa14b5-632c-7453-8805-078ce4e7ef9d">
- <File Id="owf7F9A29B71850B673CBE3B2BE64A68AAA" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\Voxelab Proxima.ini" KeyPath="yes" />
+ <Component Id="owc90539A9197EF7BEC5C7BE8507C05CAB3" Guid="9dc6bfc4-de9d-312e-d562-bf3574c4f527">
+ <File Id="owf90539A9197EF7BEC5C7BE8507C05CAB3" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\Voxelab Polaris 5.5.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc1F3FB53972C06D8DF37D9F829AC83D16" Guid="d245e99b-d664-d9f6-351f-d8cf26532427">
+ <File Id="owf1F3FB53972C06D8DF37D9F829AC83D16" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\Voxelab Proxima 6.ini" KeyPath="yes" />
</Component>
<Component Id="owc7C7E45D1C452D2676768409E4CA9CC60" Guid="860c70fe-c0a8-cd0a-e957-f1a6a9430509">
<File Id="owf7C7E45D1C452D2676768409E4CA9CC60" Source="$(var.SourceDir)\Assets\PrusaSlicer\printer\Wanhao CGR Mini Mono.ini" KeyPath="yes" />
diff --git a/UVtools.WPF/MainWindow.axaml b/UVtools.WPF/MainWindow.axaml
index 1036ce3..ddbb019 100644
--- a/UVtools.WPF/MainWindow.axaml
+++ b/UVtools.WPF/MainWindow.axaml
@@ -279,7 +279,7 @@
<TextBlock IsVisible="{Binding SlicerFile.PrintTimeHours}" Text=" | "/>
<TextBlock IsVisible="{Binding SlicerFile.PrintTimeHours}"
- Text="{Binding SlicerFile.PrintTimeHours, StringFormat=Print time: \{0\}h}"/>
+ Text="{Binding SlicerFile.PrintTimeString, StringFormat=Print time: \{0\}}"/>
<TextBlock IsVisible="{Binding SlicerFile.UsedMaterial}" Text=" | "/>
diff --git a/UVtools.WPF/UVtools.WPF.csproj b/UVtools.WPF/UVtools.WPF.csproj
index 5d5ad09..59ed6ce 100644
--- a/UVtools.WPF/UVtools.WPF.csproj
+++ b/UVtools.WPF/UVtools.WPF.csproj
@@ -12,7 +12,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
- <Version>2.1.3</Version>
+ <Version>2.2.0</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">