diff options
author | Tiago Conceição <Tiago_caza@hotmail.com> | 2021-01-10 06:37:15 +0300 |
---|---|---|
committer | Tiago Conceição <Tiago_caza@hotmail.com> | 2021-01-10 06:37:15 +0300 |
commit | 17bdece1b536013ae72213717311a0dcd389f97c (patch) | |
tree | 24e17bfc0d53cbc23aeaf505e6a9c57577bd155c | |
parent | 2f98eb600e268e3c2aa6ba3c4bb99dd3b29d0201 (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.md | 6 | ||||
-rw-r--r-- | ImportPrusaSlicerData.bat | 11 | ||||
-rw-r--r-- | PrusaSlicer/printer/Voxelab Ceres 8.9.ini | 37 | ||||
-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.md | 14 | ||||
-rw-r--r-- | UVtools.Core/FileFormats/FDGFile.cs | 6 | ||||
-rw-r--r-- | UVtools.Core/FileFormats/FileFormat.cs | 3 | ||||
-rw-r--r-- | UVtools.Core/FileFormats/IFileFormat.cs | 5 | ||||
-rw-r--r-- | UVtools.Core/FileFormats/PhotonSFile.cs | 48 | ||||
-rw-r--r-- | UVtools.Core/FileFormats/SL1File.cs | 27 | ||||
-rw-r--r-- | UVtools.Core/UVtools.Core.csproj | 2 | ||||
-rw-r--r-- | UVtools.InstallerMM/UVtools.InstallerMM.wxs | 11 | ||||
-rw-r--r-- | UVtools.WPF/MainWindow.axaml | 2 | ||||
-rw-r--r-- | UVtools.WPF/UVtools.WPF.csproj | 2 |
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 @@ -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'"> |