From 5c5670f0b123c98ec2a343caf84fa0a96fd2eac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Concei=C3=A7=C3=A3o?= Date: Fri, 4 Dec 2020 01:00:37 +0000 Subject: [PATCH] v1.3.5 * (Add) Pixel Dimming: Chamfer - Allow the number of walls pixels to be gradually varied as the operation progresses from the starting layer to the ending layer (#106) * (Add) PrusaSlicer print profiles: 0.01, 0.02, 0.03, 0.04, 0.15, 0.2 * (Change) Morph: "Fade" to "Chamfer" naming, created profiles need redo * (Change) Pixel Dimming: Allow start with 0px walls when using "Walls Only" * (Change) PrusaSlicer print profiles names, reduced bottom layers and raft height * (Remove) PrusaSlicer print profiles with 3 digit z precision (0.025 and 0.035) * (Fix) PW0, PWS, PWMX, PWMO, PWMS, PWX file formats, where 4 offsets (16 bytes) were missing on preview image, leading to wrong table size. Previous converted files with UVtools wont open from now on, you need to reconvert them. (ezrec/uv3dp#124) * (Fix) Unable to run Re-Height tool due a rounding problem on some cases (#101) * (Fix) Layer preview end with exception when no per layer settings are available (SL1 case) --- CHANGELOG.md | 12 ++++ ...ni => Universal 0.01 - Heavy Supports.ini} | 6 +- ...i => Universal 0.01 - Medium Supports.ini} | 6 +- .../Universal 0.02 - Heavy Supports.ini | 44 +++++++++++++++ .../Universal 0.02 - Medium Supports.ini | 44 +++++++++++++++ ...ni => Universal 0.03 - Heavy Supports.ini} | 8 +-- ...i => Universal 0.03 - Medium Supports.ini} | 8 +-- .../Universal 0.04 - Heavy Supports.ini | 44 +++++++++++++++ .../Universal 0.04 - Medium Supports.ini | 44 +++++++++++++++ ...ni => Universal 0.05 - Heavy Supports.ini} | 6 +- ...i => Universal 0.05 - Medium Supports.ini} | 6 +- ...ni => Universal 0.10 - Heavy Supports.ini} | 6 +- ...i => Universal 0.10 - Medium Supports.ini} | 6 +- .../Universal 0.15 - Heavy Supports.ini | 44 +++++++++++++++ .../Universal 0.15 - Medium Supports.ini | 44 +++++++++++++++ .../Universal 0.20 - Heavy Supports.ini | 44 +++++++++++++++ .../Universal 0.20 - Medium Supports.ini | 44 +++++++++++++++ UVtools.Cmd/UVtools.Cmd.csproj | 2 +- UVtools.Core/Extensions/MathExtensions.cs | 34 +++++++++++ .../FileFormats/PhotonWorkshopFile.cs | 7 ++- UVtools.Core/Layer/Layer.cs | 13 ++++- UVtools.Core/Layer/LayerManager.cs | 18 ++++-- .../Operations/OperationLayerReHeight.cs | 27 ++++----- UVtools.Core/Operations/OperationMorph.cs | 14 ++--- .../Operations/OperationPixelDimming.cs | 32 ++++++++--- UVtools.Core/UVtools.Core.csproj | 2 +- UVtools.GUI/Controls/Tools/CtrlToolMorph.cs | 2 +- .../Controls/Tools/CtrlToolPixelDimming.cs | 2 +- UVtools.InstallerMM/UVtools.InstallerMM.wxs | 56 +++++++++++++------ .../Tools/ToolLayerReHeightControl.axaml.cs | 2 +- .../Controls/Tools/ToolMorphControl.axaml | 10 ++-- .../Tools/ToolPixelDimmingControl.axaml | 24 +++++++- UVtools.WPF/MainWindow.Information.cs | 14 +++-- UVtools.WPF/UVtools.WPF.csproj | 2 +- 34 files changed, 579 insertions(+), 98 deletions(-) rename PrusaSlicer/sla_print/{Universal 0.025 UltraDetail - Heavy Supports.ini => Universal 0.01 - Heavy Supports.ini} (91%) rename PrusaSlicer/sla_print/{Universal 0.025 UltraDetail - Medium Supports.ini => Universal 0.01 - Medium Supports.ini} (91%) create mode 100644 PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini create mode 100644 PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini rename PrusaSlicer/sla_print/{Universal 0.035 Detail - Heavy Supports.ini => Universal 0.03 - Heavy Supports.ini} (90%) rename PrusaSlicer/sla_print/{Universal 0.035 Detail - Medium Supports.ini => Universal 0.03 - Medium Supports.ini} (90%) create mode 100644 PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini create mode 100644 PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini rename PrusaSlicer/sla_print/{Universal 0.05 Normal - Heavy Supports.ini => Universal 0.05 - Heavy Supports.ini} (92%) rename PrusaSlicer/sla_print/{Universal 0.05 Normal - Medium Supports.ini => Universal 0.05 - Medium Supports.ini} (92%) rename PrusaSlicer/sla_print/{Universal 0.1 Fast - Heavy Supports.ini => Universal 0.10 - Heavy Supports.ini} (92%) rename PrusaSlicer/sla_print/{Universal 0.1 Fast - Medium Supports.ini => Universal 0.10 - Medium Supports.ini} (92%) create mode 100644 PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini create mode 100644 PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini create mode 100644 PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini create mode 100644 PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini diff --git a/CHANGELOG.md b/CHANGELOG.md index 002984f..c2d3ba6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 04/11/2020 - v1.3.5 + +* (Add) Pixel Dimming: Chamfer - Allow the number of walls pixels to be gradually varied as the operation progresses from the starting layer to the ending layer (#106) +* (Add) PrusaSlicer print profiles: 0.01, 0.02, 0.03, 0.04, 0.15, 0.2 +* (Change) Morph: "Fade" to "Chamfer" naming, created profiles need redo +* (Change) Pixel Dimming: Allow start with 0px walls when using "Walls Only" +* (Change) PrusaSlicer print profiles names, reduced bottom layers and raft height +* (Remove) PrusaSlicer print profiles with 3 digit z precision (0.025 and 0.035) +* (Fix) PW0, PWS, PWMX, PWMO, PWMS, PWX file formats, where 4 offsets (16 bytes) were missing on preview image, leading to wrong table size. Previous converted files with UVtools wont open from now on, you need to reconvert them. (ezrec/uv3dp#124) +* (Fix) Unable to run Re-Height tool due a rounding problem on some cases (#101) +* (Fix) Layer preview end with exception when no per layer settings are available (SL1 case) + ## 26/11/2020 - v1.3.4 * (Add) Infill: CubicDynamicLink - Alternates centers with lateral links, consume same resin as center linked and make model/infill stronger. diff --git a/PrusaSlicer/sla_print/Universal 0.025 UltraDetail - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini similarity index 91% rename from PrusaSlicer/sla_print/Universal 0.025 UltraDetail - Heavy Supports.ini rename to PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini index b50c910..f488711 100644 --- a/PrusaSlicer/sla_print/Universal 0.025 UltraDetail - Heavy Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.01 - Heavy Supports.ini @@ -1,4 +1,4 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:37:18 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:44 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = @@ -8,7 +8,7 @@ hollowing_enable = 0 hollowing_min_thickness = 3 hollowing_quality = 0.5 inherits = 0.025 UltraDetail -layer_height = 0.025 +layer_height = 0.01 output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 pad_around_object = 0 pad_around_object_everywhere = 0 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.025 UltraDetail - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini similarity index 91% rename from PrusaSlicer/sla_print/Universal 0.025 UltraDetail - Medium Supports.ini rename to PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini index ed59379..9601136 100644 --- a/PrusaSlicer/sla_print/Universal 0.025 UltraDetail - Medium Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.01 - Medium Supports.ini @@ -1,4 +1,4 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:36:13 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:52 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = @@ -8,7 +8,7 @@ hollowing_enable = 0 hollowing_min_thickness = 3 hollowing_quality = 0.5 inherits = 0.025 UltraDetail -layer_height = 0.025 +layer_height = 0.01 output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 pad_around_object = 0 pad_around_object_everywhere = 0 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini new file mode 100644 index 0000000..4ea1a87 --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.02 - Heavy Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:51:04 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 6 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.025 UltraDetail +layer_height = 0.02 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 1 +support_head_penetration = 0.6 +support_head_width = 2 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.5 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini new file mode 100644 index 0000000..687dcce --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.02 - Medium Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:50:13 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 6 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.025 UltraDetail +layer_height = 0.02 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 0.8 +support_head_penetration = 0.4 +support_head_width = 2 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.2 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.035 Detail - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini similarity index 90% rename from PrusaSlicer/sla_print/Universal 0.035 Detail - Heavy Supports.ini rename to PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini index a46b970..328c178 100644 --- a/PrusaSlicer/sla_print/Universal 0.035 Detail - Heavy Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.03 - Heavy Supports.ini @@ -1,14 +1,14 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:34:54 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:05 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = -faded_layers = 10 +faded_layers = 4 hollowing_closing_distance = 2 hollowing_enable = 0 hollowing_min_thickness = 3 hollowing_quality = 0.5 inherits = 0.035 Detail -layer_height = 0.035 +layer_height = 0.03 output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 pad_around_object = 0 pad_around_object_everywhere = 0 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.035 Detail - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini similarity index 90% rename from PrusaSlicer/sla_print/Universal 0.035 Detail - Medium Supports.ini rename to PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini index fa0c748..0d6956f 100644 --- a/PrusaSlicer/sla_print/Universal 0.035 Detail - Medium Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.03 - Medium Supports.ini @@ -1,14 +1,14 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:34:31 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:52:15 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = -faded_layers = 10 +faded_layers = 4 hollowing_closing_distance = 2 hollowing_enable = 0 hollowing_min_thickness = 3 hollowing_quality = 0.5 inherits = 0.035 Detail -layer_height = 0.035 +layer_height = 0.03 output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 pad_around_object = 0 pad_around_object_everywhere = 0 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini new file mode 100644 index 0000000..083e3d8 --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.04 - Heavy Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:53:43 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 4 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.05 Normal +layer_height = 0.04 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 1 +support_head_penetration = 0.6 +support_head_width = 3 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.5 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini new file mode 100644 index 0000000..ffcc1ff --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.04 - Medium Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:53:55 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 4 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.05 Normal +layer_height = 0.04 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 0.8 +support_head_penetration = 0.4 +support_head_width = 3 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.2 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.05 Normal - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini similarity index 92% rename from PrusaSlicer/sla_print/Universal 0.05 Normal - Heavy Supports.ini rename to PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini index 10e334d..8acc0c9 100644 --- a/PrusaSlicer/sla_print/Universal 0.05 Normal - Heavy Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.05 - Heavy Supports.ini @@ -1,8 +1,8 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:24:57 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:54:04 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = -faded_layers = 10 +faded_layers = 3 hollowing_closing_distance = 2 hollowing_enable = 0 hollowing_min_thickness = 3 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.05 Normal - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini similarity index 92% rename from PrusaSlicer/sla_print/Universal 0.05 Normal - Medium Supports.ini rename to PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini index 79511c7..8db1a15 100644 --- a/PrusaSlicer/sla_print/Universal 0.05 Normal - Medium Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.05 - Medium Supports.ini @@ -1,8 +1,8 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:23:55 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:54:10 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = -faded_layers = 10 +faded_layers = 3 hollowing_closing_distance = 2 hollowing_enable = 0 hollowing_min_thickness = 3 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.1 Fast - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini similarity index 92% rename from PrusaSlicer/sla_print/Universal 0.1 Fast - Heavy Supports.ini rename to PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini index 825330a..99826a8 100644 --- a/PrusaSlicer/sla_print/Universal 0.1 Fast - Heavy Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.10 - Heavy Supports.ini @@ -1,8 +1,8 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-06-11 at 02:30:54 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:55:43 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = -faded_layers = 10 +faded_layers = 3 hollowing_closing_distance = 2 hollowing_enable = 0 hollowing_min_thickness = 3 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.1 Fast - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini similarity index 92% rename from PrusaSlicer/sla_print/Universal 0.1 Fast - Medium Supports.ini rename to PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini index c43832c..675a61b 100644 --- a/PrusaSlicer/sla_print/Universal 0.1 Fast - Medium Supports.ini +++ b/PrusaSlicer/sla_print/Universal 0.10 - Medium Supports.ini @@ -1,8 +1,8 @@ -# generated by PrusaSlicer 2.2.0+win64 on 2020-09-05 at 15:51:14 UTC +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:55:50 UTC compatible_printers = compatible_printers_condition = default_sla_print_profile = -faded_layers = 10 +faded_layers = 3 hollowing_closing_distance = 2 hollowing_enable = 0 hollowing_min_thickness = 3 @@ -21,7 +21,7 @@ pad_object_connector_width = 0.5 pad_object_gap = 1 pad_wall_height = 0 pad_wall_slope = 90 -pad_wall_thickness = 1 +pad_wall_thickness = 0.4 sla_print_settings_id = slice_closing_radius = 0.005 support_base_diameter = 3 diff --git a/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini new file mode 100644 index 0000000..acdf018 --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.15 - Heavy Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:57:42 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 3 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.1 Fast +layer_height = 0.15 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 1 +support_head_penetration = 0.7 +support_head_width = 3 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.5 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini new file mode 100644 index 0000000..5a6b036 --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.15 - Medium Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:57:49 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 3 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.1 Fast +layer_height = 0.15 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 0.9 +support_head_penetration = 0.5 +support_head_width = 3 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.3 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini b/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini new file mode 100644 index 0000000..bd5f3b4 --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.20 - Heavy Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:58:16 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 3 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.1 Fast +layer_height = 0.2 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 1 +support_head_penetration = 0.7 +support_head_width = 3 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.5 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini b/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini new file mode 100644 index 0000000..4996e9f --- /dev/null +++ b/PrusaSlicer/sla_print/Universal 0.20 - Medium Supports.ini @@ -0,0 +1,44 @@ +# generated by PrusaSlicer 2.2.0+win64 on 2020-11-29 at 22:58:26 UTC +compatible_printers = +compatible_printers_condition = +default_sla_print_profile = +faded_layers = 3 +hollowing_closing_distance = 2 +hollowing_enable = 0 +hollowing_min_thickness = 3 +hollowing_quality = 0.5 +inherits = 0.1 Fast +layer_height = 0.2 +output_filename_format = {input_filename_base}_{material_type}{layer_height}mm_{printer_model}_{print_time}.sl1 +pad_around_object = 0 +pad_around_object_everywhere = 0 +pad_brim_size = 1.6 +pad_enable = 1 +pad_max_merge_distance = 50 +pad_object_connector_penetration = 0.3 +pad_object_connector_stride = 10 +pad_object_connector_width = 0.5 +pad_object_gap = 1 +pad_wall_height = 0 +pad_wall_slope = 90 +pad_wall_thickness = 0.4 +sla_print_settings_id = +slice_closing_radius = 0.005 +support_base_diameter = 3 +support_base_height = 1 +support_base_safety_distance = 1 +support_buildplate_only = 0 +support_critical_angle = 45 +support_head_front_diameter = 0.9 +support_head_penetration = 0.5 +support_head_width = 3 +support_max_bridge_length = 10 +support_max_bridges_on_pillar = 3 +support_max_pillar_link_distance = 10 +support_object_elevation = 5 +support_pillar_connection_mode = zigzag +support_pillar_diameter = 1.3 +support_pillar_widening_factor = 0 +support_points_density_relative = 100 +support_points_minimal_distance = 1 +supports_enable = 1 diff --git a/UVtools.Cmd/UVtools.Cmd.csproj b/UVtools.Cmd/UVtools.Cmd.csproj index 20b4889..9e25a50 100644 --- a/UVtools.Cmd/UVtools.Cmd.csproj +++ b/UVtools.Cmd/UVtools.Cmd.csproj @@ -20,7 +20,7 @@ - + diff --git a/UVtools.Core/Extensions/MathExtensions.cs b/UVtools.Core/Extensions/MathExtensions.cs index df90b77..2020744 100644 --- a/UVtools.Core/Extensions/MathExtensions.cs +++ b/UVtools.Core/Extensions/MathExtensions.cs @@ -7,6 +7,7 @@ */ using System; +using System.Globalization; namespace UVtools.Core.Extensions { @@ -76,5 +77,38 @@ namespace UVtools.Core.Extensions return value; } + + public static uint DecimalDigits(this float val) + { + var valStr = val.ToString(CultureInfo.InvariantCulture).TrimEnd('0'); + if (string.IsNullOrEmpty(valStr)) return 0; + + var index = valStr.IndexOf('.'); + if (index < 0) return 0; + + return (uint) (valStr.Substring(index).Length - 1); + } + + public static uint DecimalDigits(this double val) + { + var valStr = val.ToString(CultureInfo.InvariantCulture).TrimEnd('0'); + if (string.IsNullOrEmpty(valStr)) return 0; + + var index = valStr.IndexOf('.'); + if (index < 0) return 0; + + return (uint)(valStr.Substring(index).Length - 1); + } + + public static uint DecimalDigits(this decimal val) + { + var valStr = val.ToString(CultureInfo.InvariantCulture).TrimEnd('0'); + if (string.IsNullOrEmpty(valStr) || valStr[valStr.Length-1] == '.') return 0; + + var index = valStr.IndexOf('.'); + if (index < 0) return 0; + + return (uint)(valStr.Substring(index).Length - 1); + } } } diff --git a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs b/UVtools.Core/FileFormats/PhotonWorkshopFile.cs index 617c92f..80b3f81 100644 --- a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs +++ b/UVtools.Core/FileFormats/PhotonWorkshopFile.cs @@ -268,6 +268,11 @@ namespace UVtools.Core.FileFormats /// [FieldOrder(3)] public uint Height { get; set; } = 168; + [FieldOrder(4)] public uint Offset1 { get; set; } + [FieldOrder(5)] public uint Offset2 { get; set; } + [FieldOrder(6)] public uint Offset3 { get; set; } + [FieldOrder(7)] public uint Offset4 { get; set; } + [Ignore] public uint DataSize => Width * Height * 2; // little-endian 16bit colors, RGB 565 encoded. @@ -1133,7 +1138,7 @@ namespace UVtools.Core.FileFormats Debug.Write("Preview -> "); Debug.WriteLine(PreviewSettings); - //PreviewSettings.Validate((int) PreviewSettings.DataSize); + PreviewSettings.Validate((int) PreviewSettings.DataSize); PreviewSettings.Data = new byte[PreviewSettings.DataSize]; inputFile.ReadBytes(PreviewSettings.Data); diff --git a/UVtools.Core/Layer/Layer.cs b/UVtools.Core/Layer/Layer.cs index 55db86d..4ae83a8 100644 --- a/UVtools.Core/Layer/Layer.cs +++ b/UVtools.Core/Layer/Layer.cs @@ -839,13 +839,24 @@ namespace UVtools.Core alternatePatternMask = patternMask; } + int wallThickness = LayerManager.MutateGetIterationChamfer( + Index, + operation.LayerIndexStart, + operation.LayerIndexEnd, + (int)operation.WallThicknessStart, + (int)operation.WallThicknessEnd, + operation.Chamfer + ); + + using (Mat dst = LayerMat) using (Mat erode = new Mat()) using (Mat diff = new Mat()) { Mat target = operation.GetRoiOrDefault(dst); - CvInvoke.Erode(target, erode, kernel, anchor, (int) operation.WallThickness, BorderType.Reflect101, default); + + CvInvoke.Erode(target, erode, kernel, anchor, wallThickness, BorderType.Reflect101, default); CvInvoke.Subtract(target, erode, diff); diff --git a/UVtools.Core/Layer/LayerManager.cs b/UVtools.Core/Layer/LayerManager.cs index 79cf506..95f41a4 100644 --- a/UVtools.Core/Layer/LayerManager.cs +++ b/UVtools.Core/Layer/LayerManager.cs @@ -494,7 +494,7 @@ namespace UVtools.Core }); } - private void MutateGetVarsIterationFade(uint startLayerIndex, uint endLayerIndex, int iterationsStart, int iterationsEnd, ref bool isFade, out float iterationSteps, out int maxIteration) + public static void MutateGetVarsIterationChamfer(uint startLayerIndex, uint endLayerIndex, int iterationsStart, int iterationsEnd, ref bool isFade, out float iterationSteps, out int maxIteration) { iterationSteps = 0; maxIteration = 0; @@ -504,7 +504,7 @@ namespace UVtools.Core maxIteration = Math.Max(iterationsStart, iterationsEnd); } - private int MutateGetIterationVar(bool isFade, int iterationsStart, int iterationsEnd, float iterationSteps, int maxIteration, uint startLayerIndex, uint layerIndex) + public static int MutateGetIterationVar(bool isFade, int iterationsStart, int iterationsEnd, float iterationSteps, int maxIteration, uint startLayerIndex, uint layerIndex) { if (!isFade) return iterationsStart; // calculate iterations based on range @@ -513,7 +513,15 @@ namespace UVtools.Core : iterationsStart - (layerIndex - startLayerIndex) * iterationSteps); // constrain - return Math.Min(Math.Max(1, iterations), maxIteration); + return Math.Min(Math.Max(0, iterations), maxIteration); + } + + public static int MutateGetIterationChamfer(uint layerIndex, uint startLayerIndex, uint endLayerIndex, int iterationsStart, + int iterationsEnd, bool isFade) + { + MutateGetVarsIterationChamfer(startLayerIndex, endLayerIndex, iterationsStart, iterationsEnd, ref isFade, + out float iterationSteps, out int maxIteration); + return MutateGetIterationVar(isFade, iterationsStart, iterationsEnd, iterationSteps, maxIteration, startLayerIndex, layerIndex); } public void Morph(OperationMorph operation, BorderType borderType = BorderType.Default, MCvScalar borderValue = default, OperationProgress progress = null) @@ -521,8 +529,8 @@ namespace UVtools.Core if (progress is null) progress = new OperationProgress(); progress.Reset(operation.ProgressAction, operation.LayerRangeCount); - var isFade = operation.FadeInOut; - MutateGetVarsIterationFade( + var isFade = operation.Chamfer; + MutateGetVarsIterationChamfer( operation.LayerIndexStart, operation.LayerIndexEnd, (int) operation.IterationsStart, diff --git a/UVtools.Core/Operations/OperationLayerReHeight.cs b/UVtools.Core/Operations/OperationLayerReHeight.cs index f92c7ce..aa9dea2 100644 --- a/UVtools.Core/Operations/OperationLayerReHeight.cs +++ b/UVtools.Core/Operations/OperationLayerReHeight.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Text; +using UVtools.Core.Extensions; using UVtools.Core.Objects; namespace UVtools.Core.Operations @@ -65,32 +66,24 @@ namespace UVtools.Core.Operations public static OperationLayerReHeightItem[] GetItems(uint layerCount, decimal layerHeight) { - List list = new List(); - for (byte i = 2; i < 255; i++) // Lower + var list = new List(); + for (byte i = 2; i < 255; i++) // Go lower heights { if (layerHeight / i < 0.01m) break; - var countStr = (layerCount / (decimal)i).ToString(CultureInfo.InvariantCulture); - if (countStr.IndexOf(".", StringComparison.Ordinal) >= 0) continue; // Cant multiply layers - countStr = (layerHeight / i).ToString(CultureInfo.InvariantCulture); - int decimalCount = countStr.Substring(countStr.IndexOf(".", StringComparison.Ordinal)).Length - 1; - if (decimalCount > 2) continue; // Cant multiply height + if ((layerCount * (decimal)i).DecimalDigits() > 0) continue; // Cant multiply layers, no half layers! + if ((layerHeight / i).DecimalDigits() > 2) continue; // Cant divide height, more than 2 digits - var item = new OperationLayerReHeightItem(false, i, layerHeight / i, layerCount * i); + var item = new OperationLayerReHeightItem(false, i, Math.Round(layerHeight / i, 2), layerCount * i); list.Add(item); } - for (byte i = 2; i < 255; i++) // Higher + for (byte i = 2; i < 255; i++) // Go higher heights { if (layerHeight * i > 0.2m) break; - var countStr = (layerCount / (decimal)i).ToString(CultureInfo.InvariantCulture); - if (countStr.IndexOf(".", StringComparison.Ordinal) >= 0) continue; // Cant multiply layers + if ((layerCount / (decimal)i).DecimalDigits() > 0) continue; // Cant divide layers, no half layers! + if ((layerHeight * i).DecimalDigits() > 2) continue; // Cant multiply height, more than 2 digits - - countStr = (layerHeight * i).ToString(CultureInfo.InvariantCulture); - int decimalCount = countStr.Substring(countStr.IndexOf(".", StringComparison.Ordinal)).Length - 1; - if (decimalCount > 2) continue; // Cant multiply height - - var item = new OperationLayerReHeightItem(true, i, layerHeight * i, layerCount / i); + var item = new OperationLayerReHeightItem(true, i, Math.Round(layerHeight * i, 2), layerCount / i); list.Add(item); } diff --git a/UVtools.Core/Operations/OperationMorph.cs b/UVtools.Core/Operations/OperationMorph.cs index a16d92c..116c658 100644 --- a/UVtools.Core/Operations/OperationMorph.cs +++ b/UVtools.Core/Operations/OperationMorph.cs @@ -19,7 +19,7 @@ namespace UVtools.Core.Operations private MorphOp _morphOperation = MorphOp.Erode; private uint _iterationsStart = 1; private uint _iterationsEnd = 1; - private bool _fadeInOut; + private bool _chamfer; #region Overrides @@ -80,10 +80,10 @@ namespace UVtools.Core.Operations set => RaiseAndSetIfChanged(ref _iterationsEnd, value); } - public bool FadeInOut + public bool Chamfer { - get => _fadeInOut; - set => RaiseAndSetIfChanged(ref _fadeInOut, value); + get => _chamfer; + set => RaiseAndSetIfChanged(ref _chamfer, value); } [XmlIgnore] @@ -91,7 +91,7 @@ namespace UVtools.Core.Operations public override string ToString() { - var result = $"[{_morphOperation}] [Iterations: {_iterationsStart}/{_iterationsEnd}] [Fade: {_fadeInOut}]" + LayerRangeString; + var result = $"[{_morphOperation}] [Iterations: {_iterationsStart}/{_iterationsEnd}] [Chamfer: {_chamfer}]" + LayerRangeString; if (!string.IsNullOrEmpty(ProfileName)) result = $"{ProfileName}: {result}"; return result; } @@ -102,7 +102,7 @@ namespace UVtools.Core.Operations private bool Equals(OperationMorph other) { - return _morphOperation == other._morphOperation && _iterationsStart == other._iterationsStart && _iterationsEnd == other._iterationsEnd && _fadeInOut == other._fadeInOut; + return _morphOperation == other._morphOperation && _iterationsStart == other._iterationsStart && _iterationsEnd == other._iterationsEnd && _chamfer == other._chamfer; } public override bool Equals(object obj) @@ -117,7 +117,7 @@ namespace UVtools.Core.Operations var hashCode = (int) _morphOperation; hashCode = (hashCode * 397) ^ (int) _iterationsStart; hashCode = (hashCode * 397) ^ (int) _iterationsEnd; - hashCode = (hashCode * 397) ^ _fadeInOut.GetHashCode(); + hashCode = (hashCode * 397) ^ _chamfer.GetHashCode(); return hashCode; } } diff --git a/UVtools.Core/Operations/OperationPixelDimming.cs b/UVtools.Core/Operations/OperationPixelDimming.cs index c099e15..182227b 100644 --- a/UVtools.Core/Operations/OperationPixelDimming.cs +++ b/UVtools.Core/Operations/OperationPixelDimming.cs @@ -17,8 +17,10 @@ namespace UVtools.Core.Operations [Serializable] public class OperationPixelDimming : Operation { - private uint _wallThickness = 5; + private uint _wallThicknessStart = 5; + private uint _wallThicknessEnd = 5; private bool _wallsOnly; + private bool _chamfer; private Matrix _pattern; private Matrix _alternatePattern; private ushort _alternatePatternPerLayers = 1; @@ -44,10 +46,10 @@ namespace UVtools.Core.Operations public override StringTag Validate(params object[] parameters) { var sb = new StringBuilder(); - if (WallThickness == 0 && WallsOnly) + /*if (WallThicknessStart == 0 && WallsOnly) { sb.AppendLine("Border size must be positive in order to use \"Dim only borders\" function."); - } + }*/ if (Pattern is null && AlternatePattern is null) { @@ -60,10 +62,16 @@ namespace UVtools.Core.Operations #region Properties - public uint WallThickness + public uint WallThicknessStart { - get => _wallThickness; - set => RaiseAndSetIfChanged(ref _wallThickness, value); + get => _wallThicknessStart; + set => RaiseAndSetIfChanged(ref _wallThicknessStart, value); + } + + public uint WallThicknessEnd + { + get => _wallThicknessEnd; + set => RaiseAndSetIfChanged(ref _wallThicknessEnd, value); } public bool WallsOnly @@ -72,6 +80,12 @@ namespace UVtools.Core.Operations set => RaiseAndSetIfChanged(ref _wallsOnly, value); } + public bool Chamfer + { + get => _chamfer; + set => RaiseAndSetIfChanged(ref _chamfer, value); + } + /// /// Use the alternate pattern every layers /// @@ -108,7 +122,7 @@ namespace UVtools.Core.Operations public override string ToString() { - var result = $"[Border: {_wallThickness}px] [Only borders: {_wallsOnly}] [Alternate every: {_alternatePatternPerLayers}]" + LayerRangeString; + var result = $"[Border: {_wallThicknessStart}px to {_wallThicknessEnd}px] [Chamfer: {_chamfer}] [Only borders: {_wallsOnly}] [Alternate every: {_alternatePatternPerLayers}]" + LayerRangeString; if (!string.IsNullOrEmpty(ProfileName)) result = $"{ProfileName}: {result}"; return result; } @@ -119,7 +133,7 @@ namespace UVtools.Core.Operations protected bool Equals(OperationPixelDimming other) { - return _wallThickness == other._wallThickness && _wallsOnly == other._wallsOnly; + return _wallThicknessStart == other._wallThicknessStart && _wallsOnly == other._wallsOnly; } public override bool Equals(object obj) @@ -134,7 +148,7 @@ namespace UVtools.Core.Operations { unchecked { - return ((int) _wallThickness * 397) ^ _wallsOnly.GetHashCode(); + return ((int) _wallThicknessStart * 397) ^ _wallsOnly.GetHashCode(); } } diff --git a/UVtools.Core/UVtools.Core.csproj b/UVtools.Core/UVtools.Core.csproj index d7b51a1..566debb 100644 --- a/UVtools.Core/UVtools.Core.csproj +++ b/UVtools.Core/UVtools.Core.csproj @@ -10,7 +10,7 @@ https://github.com/sn4k3/UVtools https://github.com/sn4k3/UVtools MSLA/DLP, file analysis, repair, conversion and manipulation - 1.3.4 + 1.3.5 Copyright © 2020 PTRTECH UVtools.png AnyCPU;x64 diff --git a/UVtools.GUI/Controls/Tools/CtrlToolMorph.cs b/UVtools.GUI/Controls/Tools/CtrlToolMorph.cs index 991f382..84f38a7 100644 --- a/UVtools.GUI/Controls/Tools/CtrlToolMorph.cs +++ b/UVtools.GUI/Controls/Tools/CtrlToolMorph.cs @@ -36,7 +36,7 @@ namespace UVtools.GUI.Controls.Tools base.UpdateOperation(); Operation.IterationsStart = (uint) nmIterationsStart.Value; Operation.IterationsEnd = (uint) nmIterationsEnd.Value; - Operation.FadeInOut = cbIterationsFade.Checked; + Operation.Chamfer = cbIterationsFade.Checked; Operation.MorphOperation = (MorphOp)((StringTag) cbMorphOperation.SelectedItem).Tag; Operation.Kernel.Anchor = ctrlKernel.KernelAnchor; Operation.Kernel.Matrix = ctrlKernel.GetMatrix(); diff --git a/UVtools.GUI/Controls/Tools/CtrlToolPixelDimming.cs b/UVtools.GUI/Controls/Tools/CtrlToolPixelDimming.cs index f9cfbf3..0b22734 100644 --- a/UVtools.GUI/Controls/Tools/CtrlToolPixelDimming.cs +++ b/UVtools.GUI/Controls/Tools/CtrlToolPixelDimming.cs @@ -43,7 +43,7 @@ namespace UVtools.GUI.Controls.Tools public override bool UpdateOperation() { base.UpdateOperation(); - Operation.WallThickness = (uint) nmBorderSize.Value; + Operation.WallThicknessStart = (uint) nmBorderSize.Value; Operation.WallsOnly = cbDimsOnlyBorders.Checked; diff --git a/UVtools.InstallerMM/UVtools.InstallerMM.wxs b/UVtools.InstallerMM/UVtools.InstallerMM.wxs index ad09b47..2d577ec 100644 --- a/UVtools.InstallerMM/UVtools.InstallerMM.wxs +++ b/UVtools.InstallerMM/UVtools.InstallerMM.wxs @@ -1003,29 +1003,53 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs index feb5e56..09d3ebb 100644 --- a/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs +++ b/UVtools.WPF/Controls/Tools/ToolLayerReHeightControl.axaml.cs @@ -8,7 +8,7 @@ namespace UVtools.WPF.Controls.Tools { public OperationLayerReHeight Operation => BaseOperation as OperationLayerReHeight; - public OperationLayerReHeight.OperationLayerReHeightItem[] Presets { get; } = OperationLayerReHeight.GetItems( + public OperationLayerReHeight.OperationLayerReHeightItem[] Presets => OperationLayerReHeight.GetItems( App.SlicerFile.LayerCount, (decimal)App.SlicerFile.LayerHeight); diff --git a/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml b/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml index 27f5d8f..f9297f2 100644 --- a/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml +++ b/UVtools.WPF/Controls/Tools/ToolMorphControl.axaml @@ -10,7 +10,7 @@ @@ -30,19 +30,19 @@ + IsEnabled="{Binding Operation.Chamfer}"/> diff --git a/UVtools.WPF/Controls/Tools/ToolPixelDimmingControl.axaml b/UVtools.WPF/Controls/Tools/ToolPixelDimmingControl.axaml index 2dd9dbe..9119b55 100644 --- a/UVtools.WPF/Controls/Tools/ToolPixelDimmingControl.axaml +++ b/UVtools.WPF/Controls/Tools/ToolPixelDimmingControl.axaml @@ -14,11 +14,33 @@ Minimum="0" Maximum="1000" Width="80" - Value="{Binding Operation.WallThickness}" + Value="{Binding Operation.WallThicknessStart}" + /> + + + + + + (nameof(layer.LiftSpeed), $"{layer.LiftSpeed.ToString(CultureInfo.InvariantCulture)}mm/min")); if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.RetractSpeed)) - CurrentLayerProperties.Add(new StringTag(nameof(layer.RetractSpeed), $"{layer.RetractSpeed.ToString(CultureInfo.InvariantCulture)}mm/min")); + CurrentLayerProperties.Add(new StringTag(nameof(layer.RetractSpeed), + $"{layer.RetractSpeed.ToString(CultureInfo.InvariantCulture)}mm/min")); if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.LayerOffTime)) - CurrentLayerProperties.Add(new StringTag(nameof(layer.LayerOffTime), $"{layer.LayerOffTime.ToString(CultureInfo.InvariantCulture)}s")); + CurrentLayerProperties.Add(new StringTag(nameof(layer.LayerOffTime), + $"{layer.LayerOffTime.ToString(CultureInfo.InvariantCulture)}s")); if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.LightPWM)) CurrentLayerProperties.Add(new StringTag(nameof(layer.LightPWM), layer.LightPWM.ToString())); } diff --git a/UVtools.WPF/UVtools.WPF.csproj b/UVtools.WPF/UVtools.WPF.csproj index bbc8ed9..70be849 100644 --- a/UVtools.WPF/UVtools.WPF.csproj +++ b/UVtools.WPF/UVtools.WPF.csproj @@ -12,7 +12,7 @@ LICENSE https://github.com/sn4k3/UVtools Git - 1.3.4 + 1.3.5