mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-09 01:52:32 +02:00
957729525d
- **Tool - Morph:** - (Add) Operator: White tophat - Removes small isolated pixels and only return its affected pixels (Image - Noise removal) - (Add) Operator: Black tophat - Closes small holes inside the objects and only return its affected pixels (Gap closing - Image) - (Add) Operator: Hit or miss - Finds pixels in a given kernel pattern - (Remove) Operator: 'Isolate features' as that is the same as the 'White tophat' and is already inbuilt into OpenCV - **Kernels:** - (Add) Option: Use dynamic kernel to enhancement the quality of the borders (#367) - (Add) Kernels are now saved with the operation profile - **PrusaSlicer:** - (Add) Support to slice files to be converted for encrypted CTB format - (Add) Printer: Elegoo Mars 3 (#370) - (Add) Printer: EPAX E10 5K - (Add) Printer: EPAX X10 5K - (Add) Printer: Phrozen Sonic Mini 8K - (Add) Printer: Phrozen Sonic Mega 8K - (Fix) Printer: AnyCubic Photon Mono 4K - display size (#369) - (Fix) Printer: AnyCubic Photon Mono X 6K - display size (#369) - (Add) Tool - Double exposure: Kernel configuration - (Add) Tool - Pixel arithmetic: Kernel configuration - (Add) Calibration - Elephant foot: Use dynamic kernel to enhancement the quality of the borders (#367) - (Fix) Calibrate - Elephant foot: Redo (Ctrl + Z) the operation was crashing the application - (Fix) CTB, PHZ, FDG: Converting files with a null machine name would cause a exception - (Fix) Anycubic files: Bottom lift and speed were showing default values instead of real used value
203 lines
10 KiB
XML
203 lines
10 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:controls="clr-namespace:UVtools.WPF.Controls"
|
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
|
x:Class="UVtools.WPF.Controls.Tools.ToolDoubleExposureControl">
|
|
<StackPanel Spacing="10">
|
|
<Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto"
|
|
ColumnDefinitions="Auto,10,Auto,40,Auto">
|
|
<TextBlock Grid.Row="0" Grid.Column="2"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
FontWeight="Bold"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
|
|
Text="Bottom layers"/>
|
|
<TextBlock Grid.Row="0" Grid.Column="4"
|
|
VerticalAlignment="Center"
|
|
HorizontalAlignment="Center"
|
|
FontWeight="Bold"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
|
|
Text="Normal layers"/>
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="1º exposure:"/>
|
|
|
|
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_s"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
|
|
VerticalAlignment="Center"
|
|
Minimum="0.01"
|
|
Maximum="1000"
|
|
Increment="0.5"
|
|
Value="{Binding Operation.FirstBottomExposure}"/>
|
|
|
|
<NumericUpDown Grid.Row="2" Grid.Column="4"
|
|
Classes="ValueLabel ValueLabel_s"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
|
|
VerticalAlignment="Center"
|
|
Minimum="0.01"
|
|
Maximum="1000"
|
|
Increment="0.5"
|
|
Value="{Binding Operation.FirstNormalExposure}"/>
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="1º erode iterations:"/>
|
|
|
|
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
|
|
VerticalAlignment="Center"
|
|
Minimum="0"
|
|
Maximum="255"
|
|
Increment="1"
|
|
Value="{Binding Operation.FirstBottomErodeIterations}"/>
|
|
|
|
<NumericUpDown Grid.Row="4" Grid.Column="4"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
|
|
VerticalAlignment="Center"
|
|
Minimum="0"
|
|
Maximum="255"
|
|
Increment="1"
|
|
Value="{Binding Operation.FirstNormalErodeIterations}"/>
|
|
|
|
<TextBlock Grid.Row="6" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="2º exposure:"/>
|
|
|
|
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_s"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
|
|
VerticalAlignment="Center"
|
|
Minimum="0.01"
|
|
Maximum="1000"
|
|
Increment="0.5"
|
|
Value="{Binding Operation.SecondBottomExposure}"/>
|
|
|
|
<NumericUpDown Grid.Row="6" Grid.Column="4"
|
|
Classes="ValueLabel ValueLabel_s"
|
|
VerticalAlignment="Center"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
|
|
Minimum="0.01"
|
|
Maximum="1000"
|
|
Increment="0.5"
|
|
Value="{Binding Operation.SecondNormalExposure}"/>
|
|
|
|
<TextBlock Grid.Row="8" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
Text="2º erode iterations:"/>
|
|
|
|
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
|
|
VerticalAlignment="Center"
|
|
Minimum="0"
|
|
Maximum="255"
|
|
Increment="1"
|
|
Value="{Binding Operation.SecondBottomErodeIterations}"/>
|
|
|
|
<NumericUpDown Grid.Row="8" Grid.Column="4"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
VerticalAlignment="Center"
|
|
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
|
|
Minimum="0"
|
|
Maximum="255"
|
|
Increment="1"
|
|
Value="{Binding Operation.SecondNormalErodeIterations}"/>
|
|
</Grid>
|
|
|
|
<ToggleSwitch
|
|
OffContent="Exposure the whole image for the second layer"
|
|
OnContent="Exposure the difference between first and second layer for the second layer"
|
|
IsChecked="{Binding Operation.SecondLayerDifference}"/>
|
|
|
|
<Grid RowDefinitions="Auto"
|
|
ColumnDefinitions="Auto,10,Auto">
|
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
|
VerticalAlignment="Center"
|
|
IsEnabled="{Binding Operation.SecondLayerDifference}"
|
|
ToolTip.Tip="When the 'Exposure the difference between first and second layer for the second layer' is active,
|
|
this setting will further erode the layer producing a overlap of n pixel perimeters over the previous layer"
|
|
Text="Difference overlap by:"/>
|
|
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_px"
|
|
VerticalAlignment="Center"
|
|
IsEnabled="{Binding Operation.SecondLayerDifference}"
|
|
Minimum="0"
|
|
Maximum="255"
|
|
Increment="1"
|
|
Value="{Binding Operation.SecondLayerDifferenceOverlapErodeIterations}"/>
|
|
</Grid>
|
|
|
|
|
|
<CheckBox
|
|
ToolTip.Tip="Change some defined settings for the second layers"
|
|
Content="Use different settings for the second layer:"
|
|
IsChecked="{Binding Operation.DifferentSettingsForSecondLayer}"/>
|
|
|
|
<Grid RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,10,Auto"
|
|
IsEnabled="{Binding Operation.DifferentSettingsForSecondLayer}">
|
|
<CheckBox Grid.Row="0" Grid.Column="0"
|
|
ToolTip.Tip="Use a low value to speed up layers with same Z position, lift is not really required here.
|
|

Set no lift height (0mm) will not work on most of the printers, so far, only gcode printers are known/able to use no lifts.
|
|

However set 0mm on a not compatible printer will cause no harm, value will be contained inside a min-max inside firmware."
|
|
Content="Lift height:"
|
|
IsVisible="{Binding SlicerFile.CanUseLayerLiftHeight}"
|
|
IsChecked="{Binding Operation.SecondLayerLiftHeightEnabled}"
|
|
VerticalAlignment="Center"/>
|
|
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_mm"
|
|
Increment="0.5"
|
|
Minimum="0"
|
|
Maximum="1000"
|
|
FormatString="F2"
|
|
IsVisible="{Binding SlicerFile.CanUseLayerLiftHeight}"
|
|
IsEnabled="{Binding Operation.SecondLayerLiftHeightEnabled}"
|
|
Value="{Binding Operation.SecondLayerLiftHeight}"/>
|
|
|
|
<CheckBox Grid.Row="2" Grid.Column="0"
|
|
ToolTip.Tip="Use a low value to speed up layers with same Z position, a delay is not really required here.
|
|

Set no delay (0s) is not recommended for gcode printers, as most need some time to render the image before move to the next command, 2s is recommended as a safe-guard."
|
|
Content="Wait time before cure:"
|
|
IsChecked="{Binding Operation.SecondLayerWaitTimeBeforeCureEnabled}"
|
|
VerticalAlignment="Center">
|
|
<CheckBox.IsVisible>
|
|
<MultiBinding Converter="{x:Static BoolConverters.Or}">
|
|
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
|
|
<Binding Path="SlicerFile.CanUseLayerWaitTimeBeforeCure"/>
|
|
</MultiBinding>
|
|
</CheckBox.IsVisible>
|
|
</CheckBox>
|
|
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
|
Classes="ValueLabel ValueLabel_s"
|
|
Increment="0.5"
|
|
Minimum="0"
|
|
Maximum="1000"
|
|
FormatString="F2"
|
|
IsEnabled="{Binding Operation.SecondLayerWaitTimeBeforeCureEnabled}"
|
|
Value="{Binding Operation.SecondLayerWaitTimeBeforeCure}">
|
|
<NumericUpDown.IsVisible>
|
|
<MultiBinding Converter="{x:Static BoolConverters.Or}">
|
|
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
|
|
<Binding Path="SlicerFile.CanUseLayerWaitTimeBeforeCure"/>
|
|
</MultiBinding>
|
|
</NumericUpDown.IsVisible>
|
|
</NumericUpDown>
|
|
|
|
</Grid>
|
|
|
|
<Expander
|
|
Header="Kernel - Advanced options (Click to expand)" Margin="0,10,0,0">
|
|
<controls:KernelControl
|
|
Name="KernelCtrl"
|
|
Kernel="{Binding $parent[UserControl].DataContext.Operation.Kernel}"
|
|
Margin="0,10,0,0"/>
|
|
</Expander>
|
|
|
|
</StackPanel>
|
|
</UserControl>
|