* (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)
This commit is contained in:
Tiago Conceição
2020-12-04 01:00:37 +00:00
parent 7a5c9061ed
commit 5c5670f0b1
34 changed files with 579 additions and 98 deletions
+12
View File
@@ -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.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
+1 -1
View File
@@ -20,7 +20,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20427.1" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20574.7" />
</ItemGroup>
<ItemGroup>
+34
View File
@@ -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);
}
}
}
@@ -268,6 +268,11 @@ namespace UVtools.Core.FileFormats
/// </summary>
[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);
+12 -1
View File
@@ -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);
+13 -5
View File
@@ -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,
@@ -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<OperationLayerReHeightItem> list = new List<OperationLayerReHeightItem>();
for (byte i = 2; i < 255; i++) // Lower
var list = new List<OperationLayerReHeightItem>();
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);
}
+7 -7
View File
@@ -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;
}
}
@@ -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<byte> _pattern;
private Matrix<byte> _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);
}
/// <summary>
/// Use the alternate pattern every <see cref="AlternatePatternPerLayers"/> layers
/// </summary>
@@ -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();
}
}
+1 -1
View File
@@ -10,7 +10,7 @@
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<PackageProjectUrl>https://github.com/sn4k3/UVtools</PackageProjectUrl>
<Description>MSLA/DLP, file analysis, repair, conversion and manipulation</Description>
<Version>1.3.4</Version>
<Version>1.3.5</Version>
<Copyright>Copyright © 2020 PTRTECH</Copyright>
<PackageIcon>UVtools.png</PackageIcon>
<Platforms>AnyCPU;x64</Platforms>
+1 -1
View File
@@ -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();
@@ -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;
+40 -16
View File
@@ -1003,29 +1003,53 @@
</Component>
</Directory>
<Directory Id="owd324203F33CD6B2D491618D3D363F997F" Name="sla_print">
<Component Id="owc41FE63F25880E5E4D3CEA71EBD852385" Guid="1ba12bdd-a46f-fc86-8cc3-7da5b8f14609">
<File Id="owf41FE63F25880E5E4D3CEA71EBD852385" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.025 UltraDetail - Heavy Supports.ini" KeyPath="yes" />
<Component Id="owc988205CB4C2FC6EA3D41704B657C5681" Guid="5dd3f394-0e58-76db-f891-78c219b5339e">
<File Id="owf988205CB4C2FC6EA3D41704B657C5681" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.01 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owcA0B8FBCBD1A4173B45BA94F0E1E1C67E" Guid="0128c1a1-a9c4-ee47-bf69-56e64bdbf266">
<File Id="owfA0B8FBCBD1A4173B45BA94F0E1E1C67E" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.025 UltraDetail - Medium Supports.ini" KeyPath="yes" />
<Component Id="owc4F3C7BA82787F7CE088482EF33C78BC7" Guid="93f4648f-2a87-6bb3-7307-e3b2fe27591f">
<File Id="owf4F3C7BA82787F7CE088482EF33C78BC7" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.01 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owcF7480920216B5D545244DAD3B157F915" Guid="37497b06-511e-8000-454b-f6cc91ad8e3c">
<File Id="owfF7480920216B5D545244DAD3B157F915" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.035 Detail - Heavy Supports.ini" KeyPath="yes" />
<Component Id="owc32F3B55EC604E72AB3E2CBF3284ED826" Guid="064f01a1-52a6-8f88-a160-13fee848444c">
<File Id="owf32F3B55EC604E72AB3E2CBF3284ED826" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.02 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc3EC82AA8BBA5F58285C6B572699C3EEA" Guid="51996820-0c91-375a-d43a-a71610706d06">
<File Id="owf3EC82AA8BBA5F58285C6B572699C3EEA" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.035 Detail - Medium Supports.ini" KeyPath="yes" />
<Component Id="owc43A40112BBFB048562D12C4E2E58C8B5" Guid="01e92245-916a-7b5a-e545-a7c6394041f5">
<File Id="owf43A40112BBFB048562D12C4E2E58C8B5" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.02 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owcC4EC407B090C47EBE3ABDE911C434B63" Guid="4bcff130-af1a-1715-f04f-8b22e50680dd">
<File Id="owfC4EC407B090C47EBE3ABDE911C434B63" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.05 Normal - Heavy Supports.ini" KeyPath="yes" />
<Component Id="owcA27D4D8B15C011B3790643C4A1B00661" Guid="249c6c1e-5613-e22c-fd9f-36d549071815">
<File Id="owfA27D4D8B15C011B3790643C4A1B00661" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.03 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc5C47C07A27D86292990E17E9F5C68987" Guid="57884306-5184-0776-b0be-5aaf576ff822">
<File Id="owf5C47C07A27D86292990E17E9F5C68987" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.05 Normal - Medium Supports.ini" KeyPath="yes" />
<Component Id="owc34F74C04D60157E217A40D1B948F4B62" Guid="1016acd9-7e5e-6764-1511-e4dba988d3f2">
<File Id="owf34F74C04D60157E217A40D1B948F4B62" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.03 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owcB8B31F13E6BE0274BB89D48BB3C5DA65" Guid="3eaaf9a4-3327-7d66-a578-42c8a53214de">
<File Id="owfB8B31F13E6BE0274BB89D48BB3C5DA65" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.1 Fast - Heavy Supports.ini" KeyPath="yes" />
<Component Id="owc7904A21F5D16A27BDCBF240575031DE0" Guid="46bbf031-1607-56f4-3b51-f8f627a1f7f4">
<File Id="owf7904A21F5D16A27BDCBF240575031DE0" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.04 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owcD02936F8537D5E1A8838BA53E493CA0B" Guid="05d01723-d21f-c5de-e159-54d916c4865c">
<File Id="owfD02936F8537D5E1A8838BA53E493CA0B" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.1 Fast - Medium Supports.ini" KeyPath="yes" />
<Component Id="owc2B441689691FEC00B7B263EAD5C86002" Guid="36d4eee3-4ef4-135a-78b3-22e7daa37092">
<File Id="owf2B441689691FEC00B7B263EAD5C86002" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.04 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc815E6AD1B21376FEEF54113695A5C221" Guid="08a67749-8d90-9d25-d535-d5a0c8b2b7dd">
<File Id="owf815E6AD1B21376FEEF54113695A5C221" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.05 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owcB7DCBF9D6771C07DED7DFD3475A2B942" Guid="2b6a6b3b-cc19-fb01-850e-2b82c9959d05">
<File Id="owfB7DCBF9D6771C07DED7DFD3475A2B942" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.05 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc0D8987D85101CB001DC4DC10FA5289AD" Guid="8b33c25d-8466-ad61-abdd-485fdf1b686e">
<File Id="owf0D8987D85101CB001DC4DC10FA5289AD" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.10 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc50D2BF90F467F36608822CBBEA7AAD24" Guid="7816893f-d916-c266-286e-c305755f4274">
<File Id="owf50D2BF90F467F36608822CBBEA7AAD24" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.10 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc4ED39C8A5521E8D8F652122F1391BEE7" Guid="f5d525d9-36a8-8f20-7132-a3837ac667c8">
<File Id="owf4ED39C8A5521E8D8F652122F1391BEE7" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.15 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc67CE50B90C2334EE96FD81F894C657CE" Guid="91a69bac-800a-7280-0763-0a907778bbea">
<File Id="owf67CE50B90C2334EE96FD81F894C657CE" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.15 - Medium Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc4EBB2288E3F6027567BCA149BD247731" Guid="c36f9208-8fe7-e520-313f-eac6f7487c10">
<File Id="owf4EBB2288E3F6027567BCA149BD247731" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.20 - Heavy Supports.ini" KeyPath="yes" />
</Component>
<Component Id="owc33EDBA249FAD8C66CFD67EF0812F9D99" Guid="7b49a51b-8a43-11c8-de4c-4e82552700fc">
<File Id="owf33EDBA249FAD8C66CFD67EF0812F9D99" Source="$(var.SourceDir)\Assets\PrusaSlicer\sla_print\Universal 0.20 - Medium Supports.ini" KeyPath="yes" />
</Component>
</Directory>
</Directory>
@@ -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);
@@ -10,7 +10,7 @@
<Grid RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,10,*">
<TextBlock
ToolTip.Tip="Selects the number of iterations/passes to perform on each layer using this mutator.
&#x0a;Enable the 'Fade in/out' to fade the iteration over layers, you can use a start iteration higher than end to perform a inverse fade.
&#x0a;Enable the 'Chamfer' to chamfer the iteration over layers, you can use a start iteration higher than end to perform a inverse chamfer.
&#x0a;WARNING: Using high iteration values can destroy your model depending on the mutator being used, please use low values or with caution!"
VerticalAlignment="Center"
Text="Iterations:"/>
@@ -30,19 +30,19 @@
<TextBlock
VerticalAlignment="Center"
Text="To:"
IsEnabled="{Binding Operation.FadeInOut}"/>
IsEnabled="{Binding Operation.Chamfer}"/>
<NumericUpDown
Minimum="1"
Width="70"
Value="{Binding Operation.IterationsEnd}"
IsEnabled="{Binding Operation.FadeInOut}"
IsEnabled="{Binding Operation.Chamfer}"
/>
<CheckBox
ToolTip.Tip="Allow the number of iterations to be gradually varied as the operation progresses from the starting layer to the ending layer."
Content="Fade in/out"
IsChecked="{Binding Operation.FadeInOut}"
Content="Chamfer"
IsChecked="{Binding Operation.Chamfer}"
/>
</StackPanel>
@@ -14,11 +14,33 @@
Minimum="0"
Maximum="1000"
Width="80"
Value="{Binding Operation.WallThickness}"
Value="{Binding Operation.WallThicknessStart}"
/>
<TextBlock
VerticalAlignment="Center"
Text="To:"
IsEnabled="{Binding Operation.Chamfer}"
/>
<NumericUpDown
Minimum="0"
Maximum="1000"
Width="80"
Value="{Binding Operation.WallThicknessEnd}"
IsEnabled="{Binding Operation.Chamfer}"
/>
<TextBlock
VerticalAlignment="Center"
Text="px"
IsEnabled="{Binding Operation.Chamfer}"
/>
<CheckBox
Margin="20,0,0,0"
Content="Chamfer walls"
ToolTip.Tip="Allow the number of walls pixels to be gradually varied as the operation progresses from the starting layer to the ending layer."
IsChecked="{Binding Operation.Chamfer}"
/>
<CheckBox
+9 -3
View File
@@ -342,13 +342,19 @@ namespace UVtools.WPF
//CurrentLayerProperties.Add(new StringTag(nameof(layer.BoundingRectangle), layer.BoundingRectangle.ToString()));
//CurrentLayerProperties.Add(new StringTag(nameof(layer.NonZeroPixelCount), layer.NonZeroPixelCount.ToString()));
CurrentLayerProperties.Add(new StringTag(nameof(layer.ExposureTime), $"{layer.ExposureTime.ToString(CultureInfo.InvariantCulture)}s"));
if (ReferenceEquals(SlicerFile.PrintParameterPerLayerModifiers, null)) return;
if (SlicerFile.PrintParameterPerLayerModifiers.Contains(FileFormat.PrintParameterModifier.LiftHeight))
CurrentLayerProperties.Add(new StringTag(nameof(layer.LiftHeight), $"{layer.LiftHeight.ToString(CultureInfo.InvariantCulture)}mm @ {layer.LiftSpeed.ToString(CultureInfo.InvariantCulture)}mm/min"));
CurrentLayerProperties.Add(new StringTag(nameof(layer.LiftHeight),
$"{layer.LiftHeight.ToString(CultureInfo.InvariantCulture)}mm @ {layer.LiftSpeed.ToString(CultureInfo.InvariantCulture)}mm/min"));
//CurrentLayerProperties.Adnew StringTagg>(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()));
}
+1 -1
View File
@@ -12,7 +12,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<Version>1.3.4</Version>
<Version>1.3.5</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">