diff --git a/CHANGELOG.md b/CHANGELOG.md index 45e38d59..2489d2ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 04/10/2024 - v4.4.3 + +- **File formats:** + - (Change) Rename file and class from `PhotonSFile` to `AnycubicPhotonSFile` + - (Change) Rename file and class from `PhotonWorkshopFile` to `AnycubicFile` + - (Change) Rename file and class from `CXDLPFile` to `CrealityCXDLPFile` + - (Change) Rename convert menu group from `CXDLP` to `Creality CXDLP` + - (Fix) CTB (Version 5): `NullReferenceException` when trying to convert from a file with a `null` MaterialName (#857) + - (Fix) Sanitize file version before convert the file to ensure capabilities (#934) + - (Fix) Unable to set the format version when converting from files with a version that match it own default version (#857) + ## 14/09/2024 - v4.4.2 - (Add) Tool - Redraw model: Add multiple operator modes (#926) diff --git a/Directory.Build.props b/Directory.Build.props index 32a9094c..2bb72c03 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -31,7 +31,7 @@ $(MSBuildThisFileDirectory)publish - 4.4.2 + 4.4.3 11.1.3 diff --git a/PrusaSlicer/printer/AnyCubic Photon D2.ini b/PrusaSlicer/printer/AnyCubic Photon D2.ini index 08106b6b..33372d8d 100644 --- a/PrusaSlicer/printer/AnyCubic Photon D2.ini +++ b/PrusaSlicer/printer/AnyCubic Photon D2.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.0+win64 on 2022-09-15 at 21:20:12 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:39:46 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,130.56x0,130.56x73.44,0x73.44 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_D2\nFILEFORMAT_DL2P\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\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_D2\nFILEFORMAT_DL2P\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini b/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini index 79a0039f..663bb387 100644 --- a/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini +++ b/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:01:30 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:50 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,298.08x0,298.08x165.6,0x165.6 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_MAX\nFILEVERSION_516\nFILEFORMAT_PM3M\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\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_M3_MAX\nFILEFORMAT_PM3M\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -37,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini b/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini index 584780f7..1f053778 100644 --- a/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini +++ b/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:15:53 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:56 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,198.15x0,198.15x123.84,0x123.84 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_PLUS\nFILEVERSION_516\nFILEFORMAT_PWMB\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\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_M3_PLUS\nFILEFORMAT_PWMB\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -37,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini b/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini index f91522e6..643b261f 100644 --- a/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini +++ b/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.0+win64 on 2022-10-20 at 13:33:45 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:06 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,218.88x0,218.88x123.12,0x123.12 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_PREMIUM\nFILEVERSION_517\nFILEFORMAT_PM3R\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\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_M3_PREMIUM\nFILEFORMAT_PM3R\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon M3.ini b/PrusaSlicer/printer/AnyCubic Photon M3.ini index 55bbfb03..4c850f4e 100644 --- a/PrusaSlicer/printer/AnyCubic Photon M3.ini +++ b/PrusaSlicer/printer/AnyCubic Photon M3.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:25:49 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:45 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,163.84x0,163.84x102.4,0x102.4 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3\nFILEVERSION_516\nFILEFORMAT_PM3\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\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_M3\nFILEFORMAT_PM3\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -37,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini b/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini index 18ba60b9..71249965 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.2+win64 on 2023-05-06 at 19:20:44 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:41:15 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,143.36x0,143.36x89.6,0x89.6 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_2\nFILEFORMAT_PM3N\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_2\nFILEFORMAT_PM3N\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini b/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini index d54a62ed..2948138c 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:08:09 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:16 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,134.4x0,134.4x84,0x84 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_4K\nFILEVERSION_516\nFILEFORMAT_PWMA\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_4K\nFILEFORMAT_PWMA\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -37,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini b/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini index e2bdf2d1..ddf446a7 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.2+win64 on 2023-05-30 at 18:53:02 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:20 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,218.88x0,218.88x122.88,0x122.88 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5\nFILEVERSION_517\nFILEFORMAT_PM5\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5\nFILEFORMAT_PM5\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini b/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini index f8c7045b..9d8a23d2 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.7.1+win64 on 2024-02-29 at 00:07:42 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:27 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,223.64x0,223.64x126.976,0x126.976 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S_PRO\nFILEVERSION_518\nFILEFORMAT_M5SP\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S_PRO\nFILEFORMAT_M5SP\nFILEVERSION_518\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini b/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini index 6173190d..8e353737 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.2+win64 on 2023-05-30 at 18:53:39 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:24 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,218.88x0,218.88x122.88,0x122.88 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S\nFILEVERSION_518\nFILEFORMAT_PM5S\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S\nFILEFORMAT_PM5S\nFILEVERSION_518\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini b/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini index 0b0514df..13e44b8d 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:28 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:04 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SE\nFILEFORMAT_PWMS\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SE\nFILEFORMAT_PWMS\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini b/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini index a609c94f..7c7414be 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:33 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:10 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,120x0,120x128,0x128 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SQ\nFILEFORMAT_PMSQ\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SQ\nFILEFORMAT_PMSQ\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini index da255634..56fa4192 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:16:26 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:28 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,198.15x0,198.15x123.84,0x123.84 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6K\nFILEVERSION_516\nFILEFORMAT_PWMB\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6K\nFILEFORMAT_PWMB\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -37,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini index fe8c30d6..a3af8c03 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.2+win64 on 2023-05-29 at 15:55:25 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:41 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,195.84x0,195.84x122.4,0x122.4 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6Ks\nFILEVERSION_517\nFILEFORMAT_PX6S\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6Ks\nFILEFORMAT_PX6S\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X.ini index f318c291..94fce8bf 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono X.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono X.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:37 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:17 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,192x0,192x120,0x120 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X\nFILEFORMAT_PWMX\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X\nFILEFORMAT_PWMX\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini index da830a3e..c2920163 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.5.0+win64 on 2022-10-20 at 13:33:53 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:01 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,196.61x0,196.61x122.88,0x122.88 @@ -27,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X2\nFILEVERSION_517\nFILEFORMAT_PMX2\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X2\nFILEFORMAT_PMX2\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -38,5 +37,7 @@ relative_correction = 1,1 relative_correction_x = 1 relative_correction_y = 1 relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono.ini b/PrusaSlicer/printer/AnyCubic Photon Mono.ini index d1edc0f8..d86cb8cb 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Mono.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Mono.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:18 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:40:48 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO\nFILEFORMAT_PWMO\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO\nFILEFORMAT_PWMO\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon S.ini b/PrusaSlicer/printer/AnyCubic Photon S.ini index 5a352a7a..2577cc32 100644 --- a/PrusaSlicer/printer/AnyCubic Photon S.ini +++ b/PrusaSlicer/printer/AnyCubic Photon S.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:49 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:10 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\nFILEFORMAT_PWS\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\nFILEFORMAT_PWS\nFILEVERSION_1\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Ultra.ini b/PrusaSlicer/printer/AnyCubic Photon Ultra.ini index 707f0498..1f04a466 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Ultra.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Ultra.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:53 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:21 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,102.4x0,102.4x57.6,0x57.6 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ULTRA\nFILEFORMAT_DLP\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\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_ULTRA\nFILEFORMAT_DLP\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon X.ini b/PrusaSlicer/printer/AnyCubic Photon X.ini index a267b747..064a2b18 100644 --- a/PrusaSlicer/printer/AnyCubic Photon X.ini +++ b/PrusaSlicer/printer/AnyCubic Photon X.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:58 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:27 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,192x0,192x120,0x120 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_X\nFILEFORMAT_PWX\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_X\nFILEFORMAT_PWX\nFILEVERSION_1\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/PrusaSlicer/printer/AnyCubic Photon Zero.ini b/PrusaSlicer/printer/AnyCubic Photon Zero.ini index 1627f91b..f61f55af 100644 --- a/PrusaSlicer/printer/AnyCubic Photon Zero.ini +++ b/PrusaSlicer/printer/AnyCubic Photon Zero.ini @@ -1,6 +1,5 @@ -# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:23:03 UTC +# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:33 UTC absolute_correction = 0 -area_fill = 50 bed_custom_model = bed_custom_texture = bed_shape = 0x0,55.4x0,55.4x98.63,0x98.63 @@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2 elefant_foot_min_width = 0.2 fast_tilt_time = 5 gamma_correction = 1 +high_viscosity_tilt_time = 10 host_type = octoprint inherits = Original Prusa SL1 max_exposure_time = 120 @@ -26,7 +26,7 @@ min_exposure_time = 1 min_initial_exposure_time = 1 print_host = printer_model = SL1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\nFILEFORMAT_PW0\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\nFILEFORMAT_PW0\nFILEVERSION_1\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES printer_settings_id = printer_technology = SLA printer_variant = default @@ -34,5 +34,10 @@ printer_vendor = printhost_apikey = printhost_cafile = relative_correction = 1,1 +relative_correction_x = 1 +relative_correction_y = 1 +relative_correction_z = 1 +sla_archive_format = SL1 +sla_output_precision = 0.001 slow_tilt_time = 8 -thumbnails = 224x168 +thumbnails = 224x168/PNG diff --git a/README.md b/README.md index 82945fce..06e3c699 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ But also, I need victims for test subject. Proceed at your own risk! - GR1 (GR1 Workshop) - CXDLP, CXDLPV4 (Creality Box) - GOO (Elegoo) +- PRZ (Phrozen Sonic Mini 8K S) - LGS (Longer Orange 10), LGS30 (Longer Orange 30), LGS120 (Longer Orange 120), LGS4K (Longer Orange 4K & mono) - Flashforge SVGX - Anet N4, Anet N7 diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 1ab91a1b..b4d23e58 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,7 +1,9 @@ -- (Add) Tool - Redraw model: Add multiple operator modes (#926) -- (Fix) Tool - Redraw model: Redo (Ctrl + Shift + Z) would cause a crash -- (Fix) Pixel Editor: Make the content scrollable when the window is resized to a smaller size -- (Fix) Calibration - Exposure time finder: When the "Multiple exposures" panel is collapsed it become disabled and unusable -- (Fix) Layer preview - Difference: Fixes the white background over black pixels -- (Fix) macOS: Change title "Avalonia Application" to "UVtools" on some app managers +- **File formats:** + - (Change) Rename file and class from `PhotonSFile` to `AnycubicPhotonSFile` + - (Change) Rename file and class from `PhotonWorkshopFile` to `AnycubicFile` + - (Change) Rename file and class from `CXDLPFile` to `CrealityCXDLPFile` + - (Change) Rename convert menu group from `CXDLP` to `Creality CXDLP` + - (Fix) CTB (Version 5): `NullReferenceException` when trying to convert from a file with a `null` MaterialName (#857) + - (Fix) Sanitize file version before convert the file to ensure capabilities (#934) + - (Fix) Unable to set the format version when converting from files with a version that match it own default version (#857) diff --git a/Scripts/010 Editor/FileFormats.1pj b/Scripts/010 Editor/FileFormats.1pj index d1a11aed..645c3545 100644 --- a/Scripts/010 Editor/FileFormats.1pj +++ b/Scripts/010 Editor/FileFormats.1pj @@ -19,6 +19,7 @@ goo.bt photons.bt PhotonWorkshop.bt + pwszScene.bt phz.bt svgx.bt diff --git a/Scripts/010 Editor/pwszScene.bt b/Scripts/010 Editor/pwszScene.bt new file mode 100644 index 00000000..94611f66 --- /dev/null +++ b/Scripts/010 Editor/pwszScene.bt @@ -0,0 +1,52 @@ +//------------------------------------------------ +//--- 010 Editor v13.0.2 Binary Template +// +// File: pwsz +// Authors: Tiago Conceição +//------------------------------------------------ + +LittleEndian(); + +enum BOOL { False, True }; + +struct HEADER { + char Magic[16] ; // ANYCUBIC-PWSZ + char Software[64] ; // Identifies the generated software, company, name, eg: AnycubicPhotonWorkshop Exports + uint BinaryType ; // 1: Pure Binary; 2: FPGA Debug; 3: FPGA Release. Firmware set to 3 (Default) + uint Version ; // 1 + uint SliceType ; // Currently fixed at 0 + uint ModelUnit ; // 0: mm; 1: cm; 2: m; Currently fixed at 0 + float PointRatio ; // Currently fixed at 1.0f + uint LayerCount ; + float MinX ; // + float MinY ; // + float MinZ ; // + float MaxX ; // + float MaxY ; // + float MaxZ ; // + uint ModelStats ; // Some status flags of the scene model + uint Padding[64] ; // + char Separator[4] ; // <--- + uint LayerCount ; +} header; + +struct LAYER_DEF { + float Height ; + float Area ; // mm^2 + float XMin ; + float YMin ; + float XMax ; + float YMax ; + uint ContourCount ; + float MaxContourArea ; // mm^2 + uint Padding[8] ; +}; + +struct LAYERSDATA{ + local uint i; + for( i = 0; i < header.LayerCount; i++ ){ + LAYER_DEF layer; + } + } layers; + +char EndMarker[4] ; // ---> \ No newline at end of file diff --git a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs b/UVtools.Core/FileFormats/AnycubicFile.cs similarity index 97% rename from UVtools.Core/FileFormats/PhotonWorkshopFile.cs rename to UVtools.Core/FileFormats/AnycubicFile.cs index e79d82e0..82142bbd 100644 --- a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs +++ b/UVtools.Core/FileFormats/AnycubicFile.cs @@ -23,7 +23,7 @@ namespace UVtools.Core.FileFormats; -public sealed class PhotonWorkshopFile : FileFormat +public sealed class AnycubicFile : FileFormat { #region Constants public const byte VERSION_1 = 1; // 0x1 @@ -715,7 +715,7 @@ public void CopyTo(Layer layer) layer.LiftSpeed = SpeedConverter.Convert(LiftSpeed, SpeedUnit.MillimetersPerSecond, CoreSpeedUnit); } - public Mat Decode(PhotonWorkshopFile slicerFile, bool consumeData = true) + public Mat Decode(AnycubicFile slicerFile, bool consumeData = true) { var result = slicerFile.RleFormat == PhotonRleFormat.PWS ? DecodePWS(slicerFile) : DecodePW0(slicerFile); if (consumeData) @@ -724,13 +724,13 @@ public Mat Decode(PhotonWorkshopFile slicerFile, bool consumeData = true) return result; } - public byte[] Encode(PhotonWorkshopFile slicerFile, Mat image) + public byte[] Encode(AnycubicFile slicerFile, Mat image) { EncodedRle = slicerFile.RleFormat == PhotonRleFormat.PWS ? EncodePWS(slicerFile, image) : EncodePW0(image); return EncodedRle; } - private unsafe Mat DecodePWS(PhotonWorkshopFile slicerFile) + private unsafe Mat DecodePWS(AnycubicFile slicerFile) { var image = EmguExtensions.InitMat(slicerFile.Resolution); var span = image.GetBytePointer(); @@ -786,7 +786,7 @@ private unsafe Mat DecodePWS(PhotonWorkshopFile slicerFile) return image; } - public unsafe byte[] EncodePWS(PhotonWorkshopFile slicerFile, Mat image) + public unsafe byte[] EncodePWS(AnycubicFile slicerFile, Mat image) { List rawData = new(); var span = image.GetBytePointer(); @@ -857,7 +857,7 @@ void AddRep() return rawData.ToArray(); } - private Mat DecodePW0(PhotonWorkshopFile slicerFile) + private Mat DecodePW0(AnycubicFile slicerFile) { var mat = slicerFile.CreateMat(); var imageLength = mat.GetLength(); @@ -1185,27 +1185,27 @@ public override string ToString() public override FileExtension[] FileExtensions { get; } = { - new(typeof(PhotonWorkshopFile), "pws", "Photon / Photon S (PWS)"), - new(typeof(PhotonWorkshopFile), "pw0", "Photon Zero (PW0)"), - new(typeof(PhotonWorkshopFile), "pwx", "Photon X (PWX)"), - new(typeof(PhotonWorkshopFile), "dlp", "Photon Ultra (DLP)"), - new(typeof(PhotonWorkshopFile), "dl2p", "Photon Photon D2 (DL2P)"), - new(typeof(PhotonWorkshopFile), "pwmx", "Photon Mono X (PWMX)"), - new(typeof(PhotonWorkshopFile), "pmx2", "Photon Mono X2 (PMX2)"), - new(typeof(PhotonWorkshopFile), "pwmb", "Photon Mono X 6K / Photon M3 Plus (PWMB)"), - new(typeof(PhotonWorkshopFile), "px6s", "Photon Mono X 6Ks (PX6S)"), - new(typeof(PhotonWorkshopFile), "pwmo", "Photon Mono (PWMO)"), - new(typeof(PhotonWorkshopFile), "pm3n", "Photon Mono 2 (PM3N)"), - new(typeof(PhotonWorkshopFile), "pwms", "Photon Mono SE (PWMS)"), - new(typeof(PhotonWorkshopFile), "pwma", "Photon Mono 4K (PWMA)"), - new(typeof(PhotonWorkshopFile), "pmsq", "Photon Mono SQ (PMSQ)"), - new(typeof(PhotonWorkshopFile), "pm3", "Photon M3 (PM3)"), - new(typeof(PhotonWorkshopFile), "pm3m", "Photon M3 Max (PM3M)"), - new(typeof(PhotonWorkshopFile), "pm3r", "Photon M3 Premium (PM3R)"), - new(typeof(PhotonWorkshopFile), "pm5", "Photon Mono M5 (PM5)"), - new(typeof(PhotonWorkshopFile), "pm5s", "Photon Mono M5s (PM5s)"), - new(typeof(PhotonWorkshopFile), "m5sp", "Photon Mono M5s Pro (M5sp)"), - new(typeof(PhotonWorkshopFile), "pwc", "Anycubic Custom Machine (PWC)"), + new(typeof(AnycubicFile), "pws", "Photon / Photon S (PWS)"), + new(typeof(AnycubicFile), "pw0", "Photon Zero (PW0)"), + new(typeof(AnycubicFile), "pwx", "Photon X (PWX)"), + new(typeof(AnycubicFile), "dlp", "Photon Ultra (DLP)"), + new(typeof(AnycubicFile), "dl2p", "Photon Photon D2 (DL2P)"), + new(typeof(AnycubicFile), "pwmx", "Photon Mono X (PWMX)"), + new(typeof(AnycubicFile), "pmx2", "Photon Mono X2 (PMX2)"), + new(typeof(AnycubicFile), "pwmb", "Photon Mono X 6K / Photon M3 Plus (PWMB)"), + new(typeof(AnycubicFile), "px6s", "Photon Mono X 6Ks (PX6S)"), + new(typeof(AnycubicFile), "pwmo", "Photon Mono (PWMO)"), + new(typeof(AnycubicFile), "pm3n", "Photon Mono 2 (PM3N)"), + new(typeof(AnycubicFile), "pwms", "Photon Mono SE (PWMS)"), + new(typeof(AnycubicFile), "pwma", "Photon Mono 4K (PWMA)"), + new(typeof(AnycubicFile), "pmsq", "Photon Mono SQ (PMSQ)"), + new(typeof(AnycubicFile), "pm3", "Photon M3 (PM3)"), + new(typeof(AnycubicFile), "pm3m", "Photon M3 Max (PM3M)"), + new(typeof(AnycubicFile), "pm3r", "Photon M3 Premium (PM3R)"), + new(typeof(AnycubicFile), "pm5", "Photon Mono M5 (PM5)"), + new(typeof(AnycubicFile), "pm5s", "Photon Mono M5s (PM5s)"), + new(typeof(AnycubicFile), "m5sp", "Photon Mono M5s Pro (M5sp)"), + new(typeof(AnycubicFile), "pwc", "Anycubic Custom Machine (PWC)"), //new(typeof(PhotonWorkshopFile), "pwmb", "Photon M3 Plus (PWMB)"), }; @@ -1906,7 +1906,7 @@ public AnyCubicMachine PrinterModel #endregion #region Constructors - public PhotonWorkshopFile() + public AnycubicFile() { } #endregion diff --git a/UVtools.Core/FileFormats/PhotonSFile.cs b/UVtools.Core/FileFormats/AnycubicPhotonSFile.cs similarity index 99% rename from UVtools.Core/FileFormats/PhotonSFile.cs rename to UVtools.Core/FileFormats/AnycubicPhotonSFile.cs index 42de5ddd..a6e32a3c 100644 --- a/UVtools.Core/FileFormats/PhotonSFile.cs +++ b/UVtools.Core/FileFormats/AnycubicPhotonSFile.cs @@ -20,7 +20,7 @@ namespace UVtools.Core.FileFormats; -public sealed class PhotonSFile : FileFormat +public sealed class AnycubicPhotonSFile : FileFormat { #region Constants public const byte RLEEncodingLimit = 128; @@ -250,7 +250,7 @@ public Mat Decode(bool consumeRle = true) public override string ConvertMenuGroup => "Chitubox"; public override FileExtension[] FileExtensions { get; } = { - new(typeof(PhotonSFile), "photons", "Chitubox PhotonS"), + new(typeof(AnycubicPhotonSFile), "photons", "Chitubox PhotonS"), }; public override PrintParameterModifier[] PrintParameterModifiers { get; } = @@ -384,7 +384,7 @@ public override float MaterialMilliliters #endregion #region Constructors - public PhotonSFile() + public AnycubicPhotonSFile() { ResolutionX = RESOLUTION_X; ResolutionY = RESOLUTION_Y; diff --git a/UVtools.Core/FileFormats/PWSZFile.cs b/UVtools.Core/FileFormats/AnycubicZipFile.cs similarity index 65% rename from UVtools.Core/FileFormats/PWSZFile.cs rename to UVtools.Core/FileFormats/AnycubicZipFile.cs index e5600c06..e6e8faeb 100644 --- a/UVtools.Core/FileFormats/PWSZFile.cs +++ b/UVtools.Core/FileFormats/AnycubicZipFile.cs @@ -6,6 +6,9 @@ * of this license document, but changing it is not allowed. */ +using BinarySerialization; +using Emgu.CV; +using Emgu.CV.CvEnum; using System; using System.Drawing; using System.IO; @@ -13,14 +16,17 @@ using System.Runtime.InteropServices; using System.Text.Json; using System.Text.Json.Serialization; +using System.Threading.Tasks; using UVtools.Core.Converters; +using UVtools.Core.EmguCV; using UVtools.Core.Extensions; using UVtools.Core.Layers; using UVtools.Core.Operations; +using static UVtools.Core.FileFormats.AnycubicFile; namespace UVtools.Core.FileFormats; -public sealed class PWSZFile : FileFormat +public sealed class AnycubicZipFile : FileFormat { #region Sub classes @@ -280,6 +286,117 @@ public void Update() OS = RuntimeInformation.RuntimeIdentifier; } } + + public sealed class SceneLayerDef + { + [FieldOrder(0)] public float Height { get; set; } + + [FieldOrder(1)] public float Area { get; set; } + + [FieldOrder(2)] public float XMin { get; set; } + + [FieldOrder(3)] public float YMin { get; set; } + + [FieldOrder(4)] public float XMax { get; set; } + + [FieldOrder(5)] public float YMax { get; set; } + + [FieldOrder(6)] public uint ContourCount { get; set; } + + [FieldOrder(7)] public float MaxContourArea { get; set; } + + [FieldOrder(8)] [FieldCount(8)] public uint[] Padding { get; set; } = new uint[8]; + + public override string ToString() + { + return + $"{nameof(Height)}: {Height}, {nameof(Area)}: {Area}, {nameof(XMin)}: {XMin}, {nameof(YMin)}: {YMin}, {nameof(XMax)}: {XMax}, {nameof(YMax)}: {YMax}, {nameof(ContourCount)}: {ContourCount}, {nameof(MaxContourArea)}: {MaxContourArea}, {nameof(Padding)}: {Padding}"; + } + } + + public sealed class SceneManifest + { + public const string MAGIC = "ANYCUBIC-PWSZ"; + + [FieldOrder(0)] + [FieldLength(16)] + [SerializeAs(SerializedType.TerminatedString)] + public string Magic { get; set; } = MAGIC; + + [FieldOrder(1)] + [FieldLength(64)] + [SerializeAs(SerializedType.TerminatedString)] + public string Software { get; set; } = About.SoftwareWithVersionArch; + + /// + /// 1: Pure Binary
+ /// 2: FPGA Debug
+ /// 3: FPGA Release. Firmware set to 3 (Default) + ///
+ [FieldOrder(2)] public uint BinaryType { get; set; } = 3; + + [FieldOrder(3)] public uint Version { get; set; } = 1; + + [FieldOrder(4)] public uint SliceType { get; set; } + + /// + /// 0: mm
+ /// 1: cm
+ /// 2: m + ///
+ [FieldOrder(5)] public uint ModelUnit { get; set; } + + [FieldOrder(6)] public float PointRatio { get; set; } = 1f; + + [FieldOrder(7)] public uint LayerCount { get; set; } + + [FieldOrder(8)] public float XMin { get; set; } + + [FieldOrder(9)] public float YMin { get; set; } + + [FieldOrder(10)] public float ZMin { get; set; } + + [FieldOrder(11)] public float XMax { get; set; } = 1; + + [FieldOrder(12)] public float YMax { get; set; } + + [FieldOrder(13)] public float ZMax { get; set; } + + /// + /// Some status flags of the scene model + /// + [FieldOrder(14)] public uint ModelStats { get; set; } + + [FieldOrder(15)] [FieldCount(64)] public uint[] Padding { get; set; } = new uint[64]; + + [FieldOrder(16)] [FieldLength(4)] public string Separator { get; set; } = "<---"; + + [FieldOrder(17)] public uint LayerDefCount { get; set; } + + [FieldOrder(18)][FieldCount(nameof(LayerDefCount))] public SceneLayerDef[] LayersDef { get; set; } = Array.Empty(); + + [FieldOrder(19)] [FieldLength(4)] public string EndMarker { get; set; } = "--->"; + + public void Update(FileFormat slicerFile) + { + Software = About.SoftwareWithVersionArch; + var rect = slicerFile.BoundingRectangleMillimeters; + rect.Offset(slicerFile.DisplayWidth / -2f, slicerFile.DisplayHeight / -2f); + XMin = (float)Math.Round(rect.X, 4); + YMin = (float)Math.Round(rect.Y, 4); + XMax = (float)Math.Round(rect.Right, 4); + YMax = (float)Math.Round(rect.Bottom, 4); + + ZMin = 0; + ZMax = slicerFile.PrintHeight; + } + + public override string ToString() + { + return + $"{nameof(Magic)}: {Magic}, {nameof(Software)}: {Software}, {nameof(BinaryType)}: {BinaryType}, {nameof(Version)}: {Version}, {nameof(SliceType)}: {SliceType}, {nameof(ModelUnit)}: {ModelUnit}, {nameof(PointRatio)}: {PointRatio}, {nameof(LayerCount)}: {LayerCount}, {nameof(XMin)}: {XMin}, {nameof(YMin)}: {YMin}, {nameof(ZMin)}: {ZMin}, {nameof(XMax)}: {XMax}, {nameof(YMax)}: {YMax}, {nameof(ZMax)}: {ZMax}, {nameof(ModelStats)}: {ModelStats}, {nameof(Padding)}: {Padding}, {nameof(Separator)}: {Separator}, {nameof(LayerDefCount)}: {LayerDefCount}, {nameof(LayersDef)}: {LayersDef}, {nameof(EndMarker)}: {EndMarker}"; + } + } #endregion #region Constants @@ -295,6 +412,7 @@ public void Update() public PrintInfoManifest PrintInfoSettings { get; set; } = new (); public LayersControllerManifest LayersSettings { get; set; } = new (); public SoftwareInfoManifest SoftwareInfoSettings { get; set; } = new (); + public SceneManifest SceneSettings { get; set; } = new (); public override FileFormatType FileType => FileFormatType.Archive; @@ -330,10 +448,24 @@ public override PrintParameterModifier[] PrintParameterModifiers public override string ConvertMenuGroup => "Anycubic Photon Workshop"; public override FileExtension[] FileExtensions { get; } = { - new(typeof(PWSZFile), "pm7", "Photon Mono M7 (PM7)"), - new(typeof(PWSZFile), "pwsz", "Photon Mono M7 Pro (PWSZ)") + new(typeof(AnycubicZipFile), "pm7", "Photon Mono M7 (PM7)"), + new(typeof(AnycubicZipFile), "pwsz", "Photon Mono M7 Pro (PWSZ)") }; + /*public override uint[] AvailableVersions { get; } = { 1 }; + + public override uint DefaultVersion => 1; + + public override uint Version + { + get => SceneSettings.Version; + set + { + base.Version = value; + SceneSettings.Version = base.Version; + } + }*/ + public override uint ResolutionX { get => Settings.MachineType.ResolutionX; @@ -364,6 +496,12 @@ public override float MachineZ set => base.MachineZ = Settings.MachineType.MachineZ = value; } + public override uint LayerCount + { + get => base.LayerCount; + set => base.LayerCount = SceneSettings.LayerCount = SceneSettings.LayerDefCount = base.LayerCount; + } + public override string MachineName { get => Settings.MachineType.Name; @@ -382,18 +520,94 @@ public override string MachineName public override object[] Configs => new object[] { - Settings, PrintInfoSettings, SoftwareInfoSettings + Settings, PrintInfoSettings, SoftwareInfoSettings, SceneSettings }; #endregion #region Constructor - public PWSZFile() + public AnycubicZipFile() { } #endregion #region Methods + // PW0 + private Mat DecodeLayerRle(byte[] encodedRle) + { + var mat = CreateMat(); + var imageLength = mat.GetLength(); + + int pixelPos = 0; + for (int i = 0; i < encodedRle.Length; i++) + { + byte b = encodedRle[i]; + int code = b >> 4; + int repeat = b & 0xf; + byte color; + switch (code) + { + case 0x0: + color = 0; + i++; + //reps = reps * 256 + EncodedRle[i]; + if (i >= encodedRle.Length) + { + repeat = imageLength - pixelPos; + break; + } + + repeat = (repeat << 8) + encodedRle[i]; + break; + case 0xf: + color = 255; + i++; + //reps = reps * 256 + EncodedRle[i]; + if (i >= encodedRle.Length) + { + repeat = imageLength - pixelPos; + break; + } + + repeat = (repeat << 8) + encodedRle[i]; + break; + default: + color = (byte)((code << 4) | code); + if (i >= encodedRle.Length) + { + repeat = imageLength - pixelPos; + } + break; + } + + //color &= 0xff; + + if (pixelPos + repeat > imageLength) + { + mat.Dispose(); + throw new FileLoadException($"Image ran off the end: {pixelPos} + {repeat} = {pixelPos + repeat}, expecting: {imageLength}"); + } + + // We only need to set the non-zero pixels + mat.FillSpan(ref pixelPos, repeat, color); + + + if (pixelPos == imageLength) + { + //i++; + break; + } + } + + if (pixelPos > 0 && pixelPos != imageLength) + { + mat.Dispose(); + throw new FileLoadException($"Image ended short: {pixelPos}, expecting: {imageLength}"); + } + + return mat; + } + protected override void OnBeforeEncode(bool isPartialEncode) { Settings.MachineType.PixelWidthMicrons = PixelWidthMicrons; @@ -439,6 +653,8 @@ protected override void OnBeforeEncode(bool isPartialEncode) minHeight += relativeZ; } + + SceneSettings.Update(this); } protected override void EncodeInternally(OperationProgress progress) @@ -446,12 +662,54 @@ protected override void EncodeInternally(OperationProgress progress) using var outputFile = ZipFile.Open(TemporaryOutputFileFullPath, ZipArchiveMode.Create); EncodeAllThumbnailsInZip(outputFile, "preview_images/preview_{0}.png", progress); - //EncodeLayersInZip(outputFile, IndexStartNumber.One, progress); - + outputFile.CreateEntryFromSerializeJson(SettingsFileName, Settings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent); outputFile.CreateEntryFromSerializeJson(PrintInfoFileName, PrintInfoSettings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent); outputFile.CreateEntryFromSerializeJson(LayersFileName, LayersSettings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent); outputFile.CreateEntryFromSerializeJson(SoftwareInfoFileName, SoftwareInfoSettings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent); + + SceneSettings.LayersDef = new SceneLayerDef[LayerCount]; + var pixelArea = PixelArea; + + progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount); + foreach (var batch in BatchLayersIndexes()) + { + Parallel.ForEach(batch, CoreSettings.GetParallelOptions(progress), layerIndex => + { + progress.PauseIfRequested(); + + var layer = this[layerIndex]; + using var mat = layer.LayerMatModelBoundingRectangle; + + var rect = layer.BoundingRectangleMillimeters; + rect.Offset(DisplayWidth / -2f, DisplayHeight / -2f); + + using var contours = new EmguContours(mat.RoiMat, RetrType.External); + + SceneSettings.LayersDef[layerIndex] = new SceneLayerDef + { + Height = this[layerIndex].PositionZ, + Area = layer.GetArea(), + XMin = (float)Math.Round(rect.X, 4), + YMin = (float)Math.Round(rect.Y, 4), + XMax = (float)Math.Round(rect.Right, 4), + YMax = (float)Math.Round(rect.Bottom, 4), + ContourCount = (uint)contours.ExternalContoursCount, + MaxContourArea = (float)Math.Round(contours.MaxSolidArea * pixelArea, 4) + }; + + progress.LockAndIncrement(); + }); + + foreach (var layerIndex in batch) + { + progress.PauseOrCancelIfRequested(); + } + } + + using var memoryStream = new MemoryStream(); + Helpers.Serializer.Serialize(memoryStream, SceneSettings); + outputFile.CreateEntryFromContent(SceneFileName, memoryStream, ZipArchiveMode.Create); } protected override void DecodeInternally(OperationProgress progress) @@ -527,9 +785,25 @@ protected override void DecodeInternally(OperationProgress progress) } } + entry = inputFile.GetEntry(SceneFileName); + if (entry is not null) + { + try + { + using var stream = entry.Open(); + SceneSettings = Helpers.Deserialize(stream); + } + catch (Exception e) + { + Clear(); + throw new FileLoadException($"Unable to deserialize '{entry.Name}'\n{e}", FileFullPath); + } + } + DecodeAllThumbnailsFromZip(inputFile, progress, "preview_"); Init((uint)LayersSettings.Count); + progress.Reset(OperationProgress.StatusDecodeLayers, LayerCount); float positionZ = 0; for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++) @@ -544,7 +818,30 @@ protected override void DecodeInternally(OperationProgress progress) LiftSpeed = SpeedConverter.Convert(LayersSettings.Layers[layerIndex].LiftSpeed, FormatSpeedUnit, CoreSpeedUnit) }; } - //DecodeLayersFromZip(inputFile, IndexStartNumber.One, progress); + + if (DecodeType == FileDecodeType.Full) + { + Parallel.For(0, LayerCount, CoreSettings.GetParallelOptions(progress), layerIndex => + { + progress.PauseIfRequested(); + byte[] encodedRle; + lock (Mutex) + { + entry = inputFile.GetEntry($"layer_images/layer_{layerIndex}.pwszImg"); + if (entry is null) + { + Clear(); + throw new FileLoadException($"Layer image {layerIndex} is missing in the file.", FileFullPath); + } + + using var stream = entry.Open(); + encodedRle = stream.ToArray(); + } + + this[layerIndex].LayerMat = DecodeLayerRle(encodedRle); + progress.LockAndIncrement(); + }); + } UpdateGlobalPropertiesFromLayers(); } diff --git a/UVtools.Core/FileFormats/CTBEncryptedFile.cs b/UVtools.Core/FileFormats/CTBEncryptedFile.cs index 69b47986..2a3765c7 100644 --- a/UVtools.Core/FileFormats/CTBEncryptedFile.cs +++ b/UVtools.Core/FileFormats/CTBEncryptedFile.cs @@ -1028,7 +1028,7 @@ public override float MaterialMilliliters public override string? MaterialName { get => ResinParametersSettings.ResinName; - set => base.MaterialName = ResinParametersSettings.ResinName = value!; + set => base.MaterialName = ResinParametersSettings.ResinName = value ?? string.Empty; } public override float MaterialGrams diff --git a/UVtools.Core/FileFormats/ChituboxFile.cs b/UVtools.Core/FileFormats/ChituboxFile.cs index 738cc680..9a6269c0 100644 --- a/UVtools.Core/FileFormats/ChituboxFile.cs +++ b/UVtools.Core/FileFormats/ChituboxFile.cs @@ -1620,7 +1620,7 @@ public override float MaterialMilliliters public override string? MaterialName { get => ResinParametersSettings.ResinName; - set => base.MaterialName = ResinParametersSettings.ResinName = value!; + set => base.MaterialName = ResinParametersSettings.ResinName = value ?? string.Empty; } public override float MaterialGrams @@ -1716,28 +1716,33 @@ private void SanitizeMagicVersion() if (FileEndsWith(".v2.ctb")) { HeaderSettings.Magic = MAGIC_CTB; - HeaderSettings.Version = 2; + Version = 2; } else if (FileEndsWith(".v3.ctb")) { HeaderSettings.Magic = MAGIC_CTB; - HeaderSettings.Version = 3; + Version = 3; } else if (FileEndsWith(".v4.ctb")) { HeaderSettings.Magic = MAGIC_CTBv4; - HeaderSettings.Version = 4; + Version = 4; + } + else if (FileEndsWith(".v5.ctb")) + { + HeaderSettings.Magic = MAGIC_CTBv4; + Version = 5; } else if (FileEndsWith(".gktwo.ctb")) { HeaderSettings.Magic = MAGIC_CTBv4_GKtwo; - HeaderSettings.Version = 4; + Version = 4; } } else if (FileEndsWith(".cbddlp") || FileEndsWith(".photon")) { HeaderSettings.Magic = MAGIC_CBDDLP; - if (HeaderSettings.Version > 2) HeaderSettings.Version = 2; + if (Version > 2) Version = 2; } } @@ -1786,7 +1791,7 @@ protected override void EncodeInternally(OperationProgress progress) } else // IsCbddlp { - //HeaderSettings.Version = 2; + //Version = 2; HeaderSettings.EncryptionKey = 0; // Force disable encryption HeaderSettings.SlicerOffset = 0; // Force remove SlicerInfo for cbddlp HeaderSettings.SlicerSize = 0; diff --git a/UVtools.Core/FileFormats/CXDLPFile.cs b/UVtools.Core/FileFormats/CrealityCXDLPFile.cs similarity index 99% rename from UVtools.Core/FileFormats/CXDLPFile.cs rename to UVtools.Core/FileFormats/CrealityCXDLPFile.cs index 3229c766..7041bf28 100644 --- a/UVtools.Core/FileFormats/CXDLPFile.cs +++ b/UVtools.Core/FileFormats/CrealityCXDLPFile.cs @@ -29,7 +29,7 @@ namespace UVtools.Core.FileFormats; -public sealed class CXDLPFile : FileFormat +public sealed class CrealityCXDLPFile : FileFormat { #region Constants @@ -391,10 +391,10 @@ public override string ToString() public override FileFormatType FileType => FileFormatType.Binary; - public override string ConvertMenuGroup => "CXDLP"; + public override string ConvertMenuGroup => "Creality CXDLP"; public override FileExtension[] FileExtensions { get; } = { - new(typeof(CXDLPFile), "cxdlp", "Creality CXDLP"), + new(typeof(CrealityCXDLPFile), "cxdlp", "Creality CXDLP"), }; public override SpeedUnit FormatSpeedUnit => SpeedUnit.MillimetersPerSecond; diff --git a/UVtools.Core/FileFormats/CXDLPv1File.cs b/UVtools.Core/FileFormats/CrealityCXDLPv1File.cs similarity index 99% rename from UVtools.Core/FileFormats/CXDLPv1File.cs rename to UVtools.Core/FileFormats/CrealityCXDLPv1File.cs index 5bcbdea8..e7096178 100644 --- a/UVtools.Core/FileFormats/CXDLPv1File.cs +++ b/UVtools.Core/FileFormats/CrealityCXDLPv1File.cs @@ -22,7 +22,7 @@ namespace UVtools.Core.FileFormats; -public sealed class CXDLPv1File : FileFormat +public sealed class CrealityCXDLPv1File : FileFormat { #region Constants private const byte HEADER_SIZE = 9; // CXSW3DV2 @@ -311,10 +311,10 @@ public void Validate() public override FileFormatType FileType => FileFormatType.Binary; - public override string ConvertMenuGroup => "CXDLP"; + public override string ConvertMenuGroup => "Creality CXDLP"; public override FileExtension[] FileExtensions { get; } = { - new(typeof(CXDLPv1File), "v1.cxdlp", "Creality CXDLPv1"), + new(typeof(CrealityCXDLPv1File), "v1.cxdlp", "Creality CXDLPv1"), }; public override PrintParameterModifier[] PrintParameterModifiers { get; } = diff --git a/UVtools.Core/FileFormats/CXDLPv4File.cs b/UVtools.Core/FileFormats/CrealityCXDLPv4File.cs similarity index 99% rename from UVtools.Core/FileFormats/CXDLPv4File.cs rename to UVtools.Core/FileFormats/CrealityCXDLPv4File.cs index fc01b3d5..eff2a86c 100644 --- a/UVtools.Core/FileFormats/CXDLPv4File.cs +++ b/UVtools.Core/FileFormats/CrealityCXDLPv4File.cs @@ -25,7 +25,7 @@ namespace UVtools.Core.FileFormats; -public sealed class CXDLPv4File : FileFormat +public sealed class CrealityCXDLPv4File : FileFormat { #region Constants @@ -477,7 +477,7 @@ public void CopyTo(Layer layer) layer.WaitTimeAfterLift = RestTimeAfterLift; } - public Mat Decode(CXDLPv4File parent, LayerDef layerDef, uint layerIndex) + public Mat Decode(CrealityCXDLPv4File parent, LayerDef layerDef, uint layerIndex) { if (layerDef.DataType > 0) { @@ -556,7 +556,7 @@ public Mat Decode(CXDLPv4File parent, LayerDef layerDef, uint layerIndex) return mat; } - public unsafe byte[] Encode(CXDLPv4File parent, Mat image, uint layerIndex) + public unsafe byte[] Encode(CrealityCXDLPv4File parent, Mat image, uint layerIndex) { List rawData = new(); byte color = byte.MaxValue >> 1; @@ -662,10 +662,10 @@ public override string ToString() public override FileFormatType FileType => FileFormatType.Binary; - public override string ConvertMenuGroup => "CXDLP"; + public override string ConvertMenuGroup => "Creality CXDLP"; public override FileExtension[] FileExtensions { get; } = { - new(typeof(CXDLPv4File), "cxdlpv4", "Creality CXDLPv4"), + new(typeof(CrealityCXDLPv4File), "cxdlpv4", "Creality CXDLPv4"), }; public override PrintParameterModifier[] PrintParameterModifiers => @@ -1068,7 +1068,7 @@ public override string MachineName #endregion #region Constructors - public CXDLPv4File() + public CrealityCXDLPv4File() { Previews = new Preview[ThumbnailCountFileShouldHave]; } diff --git a/UVtools.Core/FileFormats/FileFormat.cs b/UVtools.Core/FileFormats/FileFormat.cs index 8c3b4bb6..a312542e 100644 --- a/UVtools.Core/FileFormats/FileFormat.cs +++ b/UVtools.Core/FileFormats/FileFormat.cs @@ -483,11 +483,11 @@ public PrintParameterModifier Clone() new ChituboxZipFile(), // Zip new ChituboxFile(), // cbddlp, cbt, photon new CTBEncryptedFile(), // encrypted ctb - new PhotonSFile(), // photons + new AnycubicPhotonSFile(), // photons new PHZFile(), // phz - new PhotonWorkshopFile(), // PSW + new AnycubicFile(), // PSW #if DEBUG - new PWSZFile(), // PWSZ + new AnycubicZipFile(), // PWSZ #endif new CWSFile(), // CWS new AnetFile(), // Anet N4, N7 @@ -495,8 +495,8 @@ public PrintParameterModifier Clone() new VDAFile(), // VDA new VDTFile(), // VDT //new CXDLPv1File(), // Creality Box v1 - new CXDLPFile(), // Creality Box - new CXDLPv4File(), // Creality Box + new CrealityCXDLPFile(), // Creality Box + new CrealityCXDLPv4File(), // Creality Box new NanoDLPFile(), // NanoDLP new KlipperFile(), // Klipper @@ -4457,18 +4457,8 @@ public void Encode(string? fileFullPath, OperationProgress? progress = null) var tempFile = TemporaryOutputFileFullPath; if (File.Exists(tempFile)) File.Delete(tempFile); - // Sanitize Version - if (AvailableVersionsCount > 0) - { - var possibleVersions = GetAvailableVersionsForExtension(FileExtension); - if (possibleVersions.Length > 0) - { - if (!possibleVersions.Contains(Version)) // Version not found on possible versions, set to last - { - Version = possibleVersions[^1]; - } - } - } + // Sanitize Version after file name is set + SanitizeVersion(); // Make sure thumbnails are all set, otherwise clone/create them SanitizeThumbnails(FileType != FileFormatType.Archive); @@ -6279,11 +6269,13 @@ public void SaveAs(string? filePath = null, OperationProgress? progress = null) if (!convertSlicerFile.OnBeforeConvertFrom(this)) return null; if (!OnBeforeConvertTo(convertSlicerFile)) return null; - if (version > 0 && version != DefaultVersion) + if (version > 0 && version != convertSlicerFile.Version) { convertSlicerFile.Version = version; } + convertSlicerFile.SanitizeVersion(); + convertSlicerFile.SuppressRebuildPropertiesWork(() => { convertSlicerFile.Init(CloneLayers()); @@ -7420,6 +7412,29 @@ public bool Sanitize() return appliedCorrections; } + /// + /// Sanitize version and return true if a correction has been applied + /// + /// True if one or more corrections has been applied, otherwise false + public bool SanitizeVersion() + { + // Sanitize Version + if (AvailableVersionsCount > 0) + { + var possibleVersions = GetAvailableVersionsForExtension(FileExtension); + if (possibleVersions.Length > 0) + { + if (!possibleVersions.Contains(Version)) // Version not found on possible versions, set to last + { + Version = possibleVersions[^1]; + return true; + } + } + } + + return false; + } + /// /// Rebuild layer properties based on slice settings /// diff --git a/UVtools.Core/FileFormats/KlipperFile.cs b/UVtools.Core/FileFormats/KlipperFile.cs index 2398541a..55945daf 100644 --- a/UVtools.Core/FileFormats/KlipperFile.cs +++ b/UVtools.Core/FileFormats/KlipperFile.cs @@ -489,7 +489,7 @@ public override float MaterialCost public override string? MaterialName { get => HeaderSettings.MaterialName; - set => base.MaterialName = HeaderSettings.MaterialName = value; + set => base.MaterialName = HeaderSettings.MaterialName = value ?? string.Empty; } public override string MachineName diff --git a/UVtools.Core/FileFormats/VDTFile.cs b/UVtools.Core/FileFormats/VDTFile.cs index df42956c..38da7266 100644 --- a/UVtools.Core/FileFormats/VDTFile.cs +++ b/UVtools.Core/FileFormats/VDTFile.cs @@ -612,6 +612,8 @@ protected override bool OnBeforeConvertTo(FileFormat output) output.Version = (uint)fileVersion; } + output.LayerImageFormat = LookupCustomValue(SL1File.Keyword_LayerImageFormat, output.LayerImageFormat); + return true; } diff --git a/UVtools.Core/UVtools.Core.csproj b/UVtools.Core/UVtools.Core.csproj index 0b1de9a8..362bcd5e 100644 --- a/UVtools.Core/UVtools.Core.csproj +++ b/UVtools.Core/UVtools.Core.csproj @@ -22,8 +22,8 @@ - - + + diff --git a/UVtools.UI/UserSettings.cs b/UVtools.UI/UserSettings.cs index 92e093f8..ec79ba5f 100644 --- a/UVtools.UI/UserSettings.cs +++ b/UVtools.UI/UserSettings.cs @@ -1994,7 +1994,7 @@ public static void Load() }; foreach (var slicerFile in FileFormat.AvailableFormats) { - if (slicerFile is not PhotonWorkshopFile) continue; + if (slicerFile is not AnycubicFile) continue; application.CompatibleExtensions += slicerFile.GetFileExtensions(string.Empty, ";"); } diff --git a/documentation/UVtools.Core.xml b/documentation/UVtools.Core.xml index 8f92f340..103ef319 100644 --- a/documentation/UVtools.Core.xml +++ b/documentation/UVtools.Core.xml @@ -2345,6 +2345,277 @@ White pixels region (border including corner pixels) + + + Gets the file mark placeholder + Fixed to "ANYCUBIC" + + + + + Gets the file format version + + + + + Gets the area num + 4 for v1, 5 for v515, 8 for v516? + + + + + Gets the header start address + + + + + + + + + Gets the preview start offset + + + + + Spotted on version 515 only + + + + + Gets the layer definition start address + + + + + Spotted on version 516 only + + + + + Spotted on version 516 only + + + + + Gets layer image start address + + + + + Spotted on version 517 only + + + + + Spotted on version 518 only + + + + + Spotted on version 518 only + + + + + Gets or sets whatever to include the base table length into + + + + + Name of this table + + + + + Gets the section name placeholder + + + + + Gets the length of this section + + + + + Gets the absolute size of the table including base and derived + + + + + Gets the absolute size of the derived table + + + + + + Gets the absolute size to set in this table + + + + + + Validates this table + + True to validate the name, otherwise false + Offset to length + + + + + Validates this table + + Length to expect + True to validate the name, otherwise false + + + + + Layer height in mm + + + + + Gets the lift speed in mm/s + + + + + Gets the retract speed in mm/s + + + + + 24 00 00 00 $ or ¥ C2 A5 00 00 or € = E2 82 AC 00 + + + + + 80 + + + + + spotted on 516 + + + + + spotted on 516 + + + + + 0 = Basic mode | 1 = Advanced mode which allows TSMC + v516 + + + + + v517 + + + + + v517 + + + + + v517 + + + + + When true, normal exposure time will be auto set, use false for traditional way + v518 + + + + + The files contain two preview images. + These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch. + + + + + Gets the image width, in pixels. + + + + + Gets the operation mark 'x' + + + + + Gets the image height, in pixels. + + + + + Gets the image width, in pixels. + + + + + Gets the operation mark 'x' + + + + + Gets the image height, in pixels. + + + + + Gets the layer image offset to encoded layer data, and its length in bytes. + + + + + Gets the layer image length in bytes. + + + + + Gets the exposure time for this layer, in seconds. + + + + + Gets the layer height for this layer, measured in millimeters. + + + + + Gets the layer image offset to encoded layer data, and its length in bytes. + + + + + Gets the layer image length in bytes. + + + + + 1: Pure Binary
+ 2: FPGA Debug
+ 3: FPGA Release. Firmware set to 3 (Default) +
+
+ + + 0: mm
+ 1: cm
+ 2: m +
+
+ + + Some status flags of the scene model + + Gets a magic number identifying the file type. @@ -2648,372 +2919,372 @@ Gets the total size of ctbImageInfo and Image data - - - Checksum of unix timestamp - - - - - 7(0x7) [No AA] / 15(0x0F) [AA] - - - - - Not totally understood. 0 to not support, 0x40 to 0x50 to allow per layer parameters - - - - - The files contain two preview images. - These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch. - - - - - Gets the X dimension of the preview image, in pixels. - - - - - Gets the Y dimension of the preview image, in pixels. - - - - - Gets the image offset of the encoded data blob. - - - - - Gets the image length in bytes. - - - + Gets the size of the magic - + Gets the magic name - + Gets the printer model - + Gets the number of records in the layer table - + Gets the printer resolution along X axis, in pixels. This information is critical to correctly decoding layer images. - + Gets the printer resolution along Y axis, in pixels. This information is critical to correctly decoding layer images. - + Gets the size of the header - + Gets the header name - + Gets the size of the header - + Gets the header name - + Gets the number of records in the layer table - + Gets the printer resolution along X axis, in pixels. This information is critical to correctly decoding layer images. - + Gets the printer resolution along Y axis, in pixels. This information is critical to correctly decoding layer images. - + Gets the size of the header - + Gets the header name - + Gets the size of the magic - + Gets the magic name - + Gets the printer model - + Gets the printer resolution along X axis, in pixels. This information is critical to correctly decoding layer images. - + Gets the printer resolution along Y axis, in pixels. This information is critical to correctly decoding layer images. - + Gets dimensions of the printer’s X output volume, in millimeters. - + Gets dimensions of the printer’s Y output volume, in millimeters. - + Gets dimensions of the printer’s Z output volume, in millimeters. - + Gets the height of the model described by this file, in millimeters. - + Gets the layer height setting used at slicing, in millimeters. Actual height used by the machine is in the layer table. - + Gets number of layers configured as "bottom." Note that this field appears in both the file header and ExtConfig.. - + Gets the file offsets of ImageHeader records describing the smaller preview images. - + Gets the file offset of a table of LayerHeader records giving parameters for each printed layer. - + Gets the number of records in the layer table for the first level set. In ctb files, that’s equivalent to the total number of records, but records may be multiplied in antialiased cbddlp files. - + Gets the file offsets of ImageHeader records describing the larger preview images. - + Gets the estimated duration of print, in seconds. - + Gets the records whether this file was generated assuming normal (0) or mirrored (1) image projection. LCD printers are "mirrored" for this purpose. - + Gets the print parameters table offset - + Gets the print parameters table size in bytes. - + Gets the PWM duty cycle for the UV illumination source on normal levels, respectively. This appears to be an 8-bit quantity where 0xFF is fully on and 0x00 is fully off. - + Gets the PWM duty cycle for the UV illumination source on bottom levels, respectively. This appears to be an 8-bit quantity where 0xFF is fully on and 0x00 is fully off. - + Gets the key used to encrypt layer data, or 0 if encryption is not used. - + Gets the slicer tablet address - + Gets the slicer table size in bytes - + Gets the distance to lift the build platform away from the vat after bottom layers, in millimeters. - + Gets the speed at which to lift the build platform away from the vat after bottom layers, in millimeters per minute. - + Gets the distance to lift the build platform away from the vat after normal layers, in millimeters. - + Gets the speed at which to lift the build platform away from the vat after normal layers, in millimeters per minute. - + Gets the speed to use when the build platform re-approaches the vat after lift, in millimeters per minute. - + Gets the estimated required resin, measured in milliliters. The volume number is derived from the model. - + Gets the estimated grams, derived from volume using configured factors for density. - + Gets the estimated cost based on currency unit the user had configured. Derived from volume using configured factors for density and cost. - + Gets the light off time setting used at slicing, for bottom layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig. - + Gets the light off time setting used at slicing, for normal layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig. - + Gets number of layers configured as "bottom." Note that this field appears in both the file header and ExtConfig. - + Enable per layer settings, true or false - + Gets the minutes since Jan 1, 1970 UTC - + Gets the user-selected antialiasing level. - + Gets a version of software that generated this file, encoded with major, minor, and patch release in bytes starting from the MSB down. (No provision is made to name the software being used, so this assumes that only one software package can generate the files. Probably best to hardcode it at 0x01060300.) 17170480 - + The files contain two preview images. These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch. - + Gets the X dimension of the preview image, in pixels. - + Gets the Y dimension of the preview image, in pixels. - + Gets the image offset of the encoded data blob. - + Gets the image length in bytes. - + Gets the build platform Z position for this layer, measured in millimeters. - + Gets the exposure time for this layer, in seconds. - + Gets how long to keep the light off after exposing this layer, in seconds. - + Gets the layer image offset to encoded layer data, and its length in bytes. - + Gets the layer image length in bytes. + + + Checksum of unix timestamp + + + + + 7(0x7) [No AA] / 15(0x0F) [AA] + + + + + Not totally understood. 0 to not support, 0x40 to 0x50 to allow per layer parameters + + + + + The files contain two preview images. + These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch. + + + + + Gets the X dimension of the preview image, in pixels. + + + + + Gets the Y dimension of the preview image, in pixels. + + + + + Gets the image offset of the encoded data blob. + + + + + Gets the image length in bytes. + + Gets a magic number identifying the file type. @@ -5349,6 +5620,12 @@ True if one or more corrections has been applied, otherwise false + + + Sanitize version and return true if a correction has been applied + + True if one or more corrections has been applied, otherwise false + Rebuild layer properties based on slice settings @@ -5527,258 +5804,6 @@ Gets the image length in bytes. - - - Gets the file mark placeholder - Fixed to "ANYCUBIC" - - - - - Gets the file format version - - - - - Gets the area num - 4 for v1, 5 for v515, 8 for v516? - - - - - Gets the header start address - - - - - - - - - Gets the preview start offset - - - - - Spotted on version 515 only - - - - - Gets the layer definition start address - - - - - Spotted on version 516 only - - - - - Spotted on version 516 only - - - - - Gets layer image start address - - - - - Spotted on version 517 only - - - - - Spotted on version 518 only - - - - - Spotted on version 518 only - - - - - Gets or sets whatever to include the base table length into - - - - - Name of this table - - - - - Gets the section name placeholder - - - - - Gets the length of this section - - - - - Gets the absolute size of the table including base and derived - - - - - Gets the absolute size of the derived table - - - - - - Gets the absolute size to set in this table - - - - - - Validates this table - - True to validate the name, otherwise false - Offset to length - - - - - Validates this table - - Length to expect - True to validate the name, otherwise false - - - - - Layer height in mm - - - - - Gets the lift speed in mm/s - - - - - Gets the retract speed in mm/s - - - - - 24 00 00 00 $ or ¥ C2 A5 00 00 or € = E2 82 AC 00 - - - - - 80 - - - - - spotted on 516 - - - - - spotted on 516 - - - - - 0 = Basic mode | 1 = Advanced mode which allows TSMC - v516 - - - - - v517 - - - - - v517 - - - - - v517 - - - - - When true, normal exposure time will be auto set, use false for traditional way - v518 - - - - - The files contain two preview images. - These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch. - - - - - Gets the image width, in pixels. - - - - - Gets the operation mark 'x' - - - - - Gets the image height, in pixels. - - - - - Gets the image width, in pixels. - - - - - Gets the operation mark 'x' - - - - - Gets the image height, in pixels. - - - - - Gets the layer image offset to encoded layer data, and its length in bytes. - - - - - Gets the layer image length in bytes. - - - - - Gets the exposure time for this layer, in seconds. - - - - - Gets the layer height for this layer, measured in millimeters. - - - - - Gets the layer image offset to encoded layer data, and its length in bytes. - - - - - Gets the layer image length in bytes. - - Gets a magic number identifying the file type.