Layout & Overlap resin trap

This commit is contained in:
Tiago Conceição
2021-09-15 06:13:54 +01:00
parent 90d2f911c1
commit fe18398e11
32 changed files with 916 additions and 1099 deletions
+3 -3
View File
@@ -1228,9 +1228,9 @@ namespace UVtools.Core
{
matCache[i] = this[i].LayerMat;
matTargetCache[i] = new Mat(matCache[i], BoundingRectangle);
if (resinTrapConfig.BinaryThreshold > 0)
if (resinTrapConfig.MaximumPixelBrightnessToDrain > 0)
{
CvInvoke.Threshold(matTargetCache[i], matTargetCache[i], resinTrapConfig.BinaryThreshold, byte.MaxValue, ThresholdType.Binary);
CvInvoke.Threshold(matTargetCache[i], matTargetCache[i], resinTrapConfig.MaximumPixelBrightnessToDrain, byte.MaxValue, ThresholdType.Binary);
}
});
}
@@ -1349,7 +1349,7 @@ namespace UVtools.Core
currentAirMap = null;
}
for (var layerIndex = resinTraps.Length - 1; layerIndex >= resinTrapConfig.StartLayerIndex; layerIndex--)
for (int layerIndex = (int)(LayerCount - 1); layerIndex >= resinTrapConfig.StartLayerIndex; layerIndex--)
{
if (progress.Token.IsCancellationRequested) return result.OrderBy(issue => issue.Type).ThenBy(issue => issue.LayerIndex).ThenBy(issue => issue.Area).ToList();
@@ -15,7 +15,6 @@ using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using UVtools.Core.Extensions;
using UVtools.Core.FileFormats;
using UVtools.Core.Objects;
namespace UVtools.Core.Operations
{
@@ -20,6 +20,13 @@ namespace UVtools.Core.Operations
public sealed class OperationDynamicLifts : Operation
{
#region Enums
public enum DynamicLiftsSetMethod : byte
{
Traditional,
FullRange
}
public enum DynamicLiftsLightOffDelaySetMode : byte
{
[Description("Set the light-off with an extra delay")]
@@ -34,6 +41,8 @@ namespace UVtools.Core.Operations
#endregion
#region Members
private DynamicLiftsSetMethod _setMethod;
private float _minBottomLiftHeight;
private float _maxBottomLiftHeight;
private float _minLiftHeight;
@@ -115,7 +124,8 @@ namespace UVtools.Core.Operations
public override string ToString()
{
var result =
$"[Bottom height: {_minBottomLiftHeight}/{_maxBottomLiftHeight}mm]" +
$"[Method: {_setMethod}]" +
$" [Bottom height: {_minBottomLiftHeight}/{_maxBottomLiftHeight}mm]" +
$" [Bottom speed: {_minBottomLiftSpeed}/{_maxBottomLiftSpeed}mm/min]" +
$" [Height: {_minLiftHeight}/{_maxLiftHeight}mm]" +
$" [Speed: {_minLiftSpeed}/{_maxLiftSpeed}mm/min]" +
@@ -129,6 +139,12 @@ namespace UVtools.Core.Operations
#region Properties
public DynamicLiftsSetMethod SetMethod
{
get => _setMethod;
set => RaiseAndSetIfChanged(ref _setMethod, value);
}
public float MinBottomLiftHeight
{
get => _minBottomLiftHeight;
@@ -296,10 +312,10 @@ namespace UVtools.Core.Operations
{
}
float liftHeight;
float liftSpeed;
float liftHeight = 0;
float liftSpeed = 0;
uint max = (from layer in SlicerFile where !layer.IsBottomLayer where !layer.IsEmpty where layer.Index >= LayerIndexStart where layer.Index <= LayerIndexEnd select layer).Aggregate<Layer, uint>(0, (current, layer) => Math.Max(layer.NonZeroPixelCount, current));
//uint max = (from layer in SlicerFile where !layer.IsBottomLayer where !layer.IsEmpty where layer.Index >= LayerIndexStart where layer.Index <= LayerIndexEnd select layer).Aggregate<Layer, uint>(0, (current, layer) => Math.Max(layer.NonZeroPixelCount, current));
for (uint layerIndex = LayerIndexStart; layerIndex <= LayerIndexEnd; layerIndex++)
{
@@ -316,13 +332,34 @@ namespace UVtools.Core.Operations
if (layer.IsBottomLayer)
{
liftHeight = (_maxBottomLiftHeight * layer.NonZeroPixelCount / maxBottomPixels).Clamp(_minBottomLiftHeight, _maxBottomLiftHeight);
liftSpeed = (_maxBottomLiftSpeed - (_maxBottomLiftSpeed * layer.NonZeroPixelCount / maxNormalPixels)).Clamp(_minBottomLiftSpeed, _maxBottomLiftSpeed);
switch (_setMethod)
{
case DynamicLiftsSetMethod.Traditional:
liftHeight = (_maxBottomLiftHeight * layer.NonZeroPixelCount / maxBottomPixels).Clamp(_minBottomLiftHeight, _maxBottomLiftHeight);
liftSpeed = (_maxBottomLiftSpeed - (_maxBottomLiftSpeed * layer.NonZeroPixelCount / maxBottomPixels)).Clamp(_minBottomLiftSpeed, _maxBottomLiftSpeed);
break;
case DynamicLiftsSetMethod.FullRange:
var pixelRatio = (layer.NonZeroPixelCount - minBottomPixels) / (float)(maxBottomPixels - minBottomPixels); // pixel_ratio is between 0 and 1
liftHeight = (_minBottomLiftHeight + ((_maxBottomLiftHeight - _minBottomLiftHeight) * pixelRatio)).Clamp(_minBottomLiftHeight, _maxBottomLiftHeight);
liftSpeed = (_maxBottomLiftSpeed - ((_maxBottomLiftSpeed - _minBottomLiftSpeed) * pixelRatio)).Clamp(_minBottomLiftSpeed, _maxBottomLiftSpeed);
break;
}
}
else
{
liftHeight = (_maxLiftHeight * layer.NonZeroPixelCount / maxNormalPixels).Clamp(_minLiftHeight, _maxLiftHeight);
liftSpeed = (_maxLiftSpeed - (_maxLiftSpeed * layer.NonZeroPixelCount / maxNormalPixels)).Clamp(_minLiftSpeed, _maxLiftSpeed);
switch (_setMethod)
{
case DynamicLiftsSetMethod.Traditional:
liftHeight = (_maxLiftHeight * layer.NonZeroPixelCount / maxNormalPixels).Clamp(_minLiftHeight, _maxLiftHeight);
liftSpeed = (_maxLiftSpeed - (_maxLiftSpeed * layer.NonZeroPixelCount / maxNormalPixels)).Clamp(_minLiftSpeed, _maxLiftSpeed);
break;
case DynamicLiftsSetMethod.FullRange:
var pixelRatio = (layer.NonZeroPixelCount - minNormalPixels) / (float)(maxNormalPixels - minNormalPixels); // pixel_ratio is between 0 and 1
liftHeight = (_minLiftHeight + ((_maxLiftHeight - _minLiftHeight) * pixelRatio)).Clamp(_minLiftHeight, _maxLiftHeight);
liftSpeed = (_maxLiftSpeed - ((_maxLiftSpeed - _minLiftSpeed) * pixelRatio)).Clamp(_minLiftSpeed, _maxLiftSpeed);
break;
}
}
layer.RetractHeight2 = 0;
@@ -365,9 +402,10 @@ namespace UVtools.Core.Operations
#region Equality
private bool Equals(OperationDynamicLifts other)
{
return _minBottomLiftHeight.Equals(other._minBottomLiftHeight) && _maxBottomLiftHeight.Equals(other._maxBottomLiftHeight) && _minLiftHeight.Equals(other._minLiftHeight) && _maxLiftHeight.Equals(other._maxLiftHeight) && _minBottomLiftSpeed.Equals(other._minBottomLiftSpeed) && _maxBottomLiftSpeed.Equals(other._maxBottomLiftSpeed) && _minLiftSpeed.Equals(other._minLiftSpeed) && _maxLiftSpeed.Equals(other._maxLiftSpeed) && _lightOffDelayBottomExtraTime.Equals(other._lightOffDelayBottomExtraTime) && _lightOffDelayExtraTime.Equals(other._lightOffDelayExtraTime) && _lightOffDelaySetMode == other._lightOffDelaySetMode;
return _setMethod == other._setMethod && _minBottomLiftHeight.Equals(other._minBottomLiftHeight) && _maxBottomLiftHeight.Equals(other._maxBottomLiftHeight) && _minLiftHeight.Equals(other._minLiftHeight) && _maxLiftHeight.Equals(other._maxLiftHeight) && _minBottomLiftSpeed.Equals(other._minBottomLiftSpeed) && _maxBottomLiftSpeed.Equals(other._maxBottomLiftSpeed) && _minLiftSpeed.Equals(other._minLiftSpeed) && _maxLiftSpeed.Equals(other._maxLiftSpeed) && _lightOffDelayBottomExtraTime.Equals(other._lightOffDelayBottomExtraTime) && _lightOffDelayExtraTime.Equals(other._lightOffDelayExtraTime) && _lightOffDelaySetMode == other._lightOffDelaySetMode;
}
public override bool Equals(object obj)
@@ -378,6 +416,7 @@ namespace UVtools.Core.Operations
public override int GetHashCode()
{
var hashCode = new HashCode();
hashCode.Add((int)_setMethod);
hashCode.Add(_minBottomLiftHeight);
hashCode.Add(_maxBottomLiftHeight);
hashCode.Add(_minLiftHeight);
@@ -388,7 +427,7 @@ namespace UVtools.Core.Operations
hashCode.Add(_maxLiftSpeed);
hashCode.Add(_lightOffDelayBottomExtraTime);
hashCode.Add(_lightOffDelayExtraTime);
hashCode.Add((int) _lightOffDelaySetMode);
hashCode.Add((int)_lightOffDelaySetMode);
return hashCode.ToHashCode();
}
@@ -34,6 +34,7 @@ namespace UVtools.Core.Operations
private ushort _removeIslandsBelowEqualPixelCount = 5;
private ushort _removeIslandsRecursiveIterations = 4;
private ushort _attachIslandsBelowLayers = 2;
private byte _resinTrapsOverlapBy = 5;
private uint _gapClosingIterations = 1;
private uint _noiseRemovalIterations;
@@ -111,6 +112,12 @@ namespace UVtools.Core.Operations
set => RaiseAndSetIfChanged(ref _attachIslandsBelowLayers, value);
}
public byte ResinTrapsOverlapBy
{
get => _resinTrapsOverlapBy;
set => RaiseAndSetIfChanged(ref _resinTrapsOverlapBy, value);
}
public uint GapClosingIterations
{
get => _gapClosingIterations;
@@ -360,6 +367,10 @@ namespace UVtools.Core.Operations
initImage();
using var vec = new VectorOfVectorOfPoint(issue.Contours);
CvInvoke.DrawContours(image, vec, -1, EmguExtensions.WhiteColor, -1);
if (_resinTrapsOverlapBy > 0)
{
CvInvoke.DrawContours(image, vec, -1, EmguExtensions.WhiteColor, _resinTrapsOverlapBy * 2 + 1);
}
}
}
}
+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, calibration, repair, conversion and manipulation</Description>
<Version>2.21.2</Version>
<Version>2.22.0</Version>
<Copyright>Copyright © 2020 PTRTECH</Copyright>
<PackageIcon>UVtools.png</PackageIcon>
<Platforms>AnyCPU;x64</Platforms>
+154 -3
View File
@@ -29,14 +29,165 @@
<Setter Property="AcceptsTab" Value="True" />
</Style>
<Style Selector="TextBox.NumericUpDownValueLabel">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="CaretBrush" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="MinWidth" Value="40" />
<Setter Property="CornerRadius" Value="0" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Padding" Value="5,0" />
</Style>
<Style Selector="NumericUpDown.ValueLabel /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_percent /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="%" ToolTip.Tip="Percent" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_deg /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="º" ToolTip.Tip="Degree(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_s /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="s" ToolTip.Tip="Second(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_mm /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="mm" ToolTip.Tip="Millimeter(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_mm2 /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="mm²" ToolTip.Tip="Square Millimeter(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_mm3 /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="mm³" ToolTip.Tip="Cubic Millimeter(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_mmmin /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="mm/min" ToolTip.Tip="Millimeters per minute" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_px /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="px" ToolTip.Tip="Pixel(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_px2 /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="px²" ToolTip.Tip="Squared Pixel(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_px3 /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="px³" ToolTip.Tip="Cubic Pixel(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_sun /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="☀" ToolTip.Tip="Brightness" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_GB /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="GB" ToolTip.Tip="Gigabyte(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_g /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="g" ToolTip.Tip="Gram(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_gml /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="g/ml" ToolTip.Tip="Grams per milliliter" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown.ValueLabel_ml /template/ TextBox">
<Setter Property="InnerRightContent">
<Template>
<TextBox Classes="NumericUpDownValueLabel" Text="ml" ToolTip.Tip="Milliliter(s)" />
</Template>
</Setter>
</Style>
<Style Selector="NumericUpDown">
<Setter Property="MinWidth" Value="130"></Setter>
<Setter Property="ClipValueToMinMax" Value="True"></Setter>
<Setter Property="MinWidth" Value="130"/>
<Setter Property="ClipValueToMinMax" Value="True"/>
</Style>
<Style Selector="NumericUpDown.ValueLabel">
<Setter Property="MinWidth" Value="180"/>
</Style>
<Style Selector="TabControl">
<Setter Property="Padding" Value="0"></Setter>
<Setter Property="Padding" Value="0"/>
</Style>
<Style Selector="Expander /template/ ToggleButton">
@@ -8,23 +8,19 @@
<StackPanel Spacing="10">
<Grid
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,150,5,Auto,20,Auto,10,150,5,Auto"
ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto"
>
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Text="Layer height:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="0.01"
Minimum="0.01"
Maximum="0.30"
FormatString="F3"
Value="{Binding Operation.LayerHeight}"
/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
Value="{Binding Operation.LayerHeight}"/>
<StackPanel Grid.Row="0" Grid.Column="6"
VerticalAlignment="Center"
@@ -59,8 +55,7 @@
Increment="1"
Minimum="1"
Maximum="1000"
Value="{Binding Operation.BottomLayers}"
/>
Value="{Binding Operation.BottomLayers}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="{Binding Operation.BottomHeight, StringFormat=\{0:F3\}mm}"/>
@@ -70,7 +65,6 @@
ToolTip.Tip="Number of layers at normal exposure between bottom and normal layers"
Text="Interface layers:"/>
<NumericUpDown Grid.Row="2" Grid.Column="8"
Increment="1"
Minimum="0"
Maximum="1000"
@@ -83,7 +77,6 @@
VerticalAlignment="Center"
Text="Normal layers:"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
Increment="1"
Minimum="1"
Maximum="1000"
@@ -96,56 +89,43 @@
VerticalAlignment="Center"
Text="Bottom exposure:"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0.1"
Maximum="200"
FormatString="F2"
Value="{Binding Operation.BottomExposure}"/>
<TextBlock Grid.Row="6" Grid.Column="4"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="6" Grid.Column="6"
VerticalAlignment="Center"
Text="Normal exposure:"/>
<NumericUpDown Grid.Row="6" Grid.Column="8"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0.1"
Maximum="200"
FormatString="F2"
Value="{Binding Operation.NormalExposure}"/>
<TextBlock Grid.Row="6" Grid.Column="10"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
Text="Outer margin:"/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="0"
Maximum="10000"
Value="{Binding Operation.OuterMargin}"/>
<TextBlock Grid.Row="8" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
<TextBlock Grid.Row="8" Grid.Column="6"
VerticalAlignment="Center"
Text="Inner margin:"/>
<NumericUpDown Grid.Row="8" Grid.Column="8"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="0"
Maximum="10000"
Value="{Binding Operation.InnerMargin}"/>
<TextBlock Grid.Row="8" Grid.Column="10"
VerticalAlignment="Center"
Text="px"/>
<CheckBox Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="4"
VerticalAlignment="Center"
@@ -175,14 +155,14 @@
<Grid
Margin="0,10,0,0"
RowDefinitions="Auto,0,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,Auto,5,Auto,5,Auto,5,Auto,20,Auto,10,Auto">
ColumnDefinitions="Auto,10,Auto,5,Auto,5,Auto,10,Auto,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Text="Brightness range:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_sun"
Increment="1"
Minimum="1"
Maximum="254"
@@ -195,18 +175,18 @@
Text="-"/>
<NumericUpDown Grid.Row="0" Grid.Column="6"
Classes="ValueLabel ValueLabel_sun"
Increment="1"
Minimum="2"
Maximum="255"
Value="{Binding Operation.EndBrightness}"/>
<TextBlock Grid.Row="0" Grid.Column="10"
<TextBlock Grid.Row="0" Grid.Column="8"
VerticalAlignment="Center"
Text="Step increment(s):"/>
<NumericUpDown Grid.Row="0" Grid.Column="12"
<NumericUpDown Grid.Row="0" Grid.Column="10"
Classes="ValueLabel ValueLabel_sun"
Increment="1"
Minimum="2"
Maximum="254"
@@ -228,72 +208,64 @@
Text="Center hole diameter:"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="2"
Maximum="10000"
IsEnabled="{Binding Operation.EnableCenterHoleRelief}"
Value="{Binding Operation.CenterHoleDiameter}"/>
<CheckBox Grid.Row="4" Grid.Column="6" Grid.ColumnSpan="7"
<CheckBox Grid.Row="4" Grid.Column="6" Grid.ColumnSpan="5"
VerticalAlignment="Center"
Margin="10,0,0,0"
Content="Enable center hole relief"
IsChecked="{Binding Operation.EnableCenterHoleRelief}"/>
<TextBlock Grid.Row="4" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
<StackPanel Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="9"
Orientation="Horizontal" Spacing="20">
<CheckBox VerticalAlignment="Center"
ToolTip.Tip="Convert the raw brightness text value to exposure time in seconds and intrude on divisions"
Content="Convert brightness to exposure time"
IsChecked="{Binding Operation.ConvertBrightnessToExposureTime}"/>
<CheckBox VerticalAlignment="Center"
Content="Enable division lines"
IsChecked="{Binding Operation.EnableLineDivisions}"/>
</StackPanel>
<CheckBox Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="6"
VerticalAlignment="Center"
ToolTip.Tip="Convert the raw brightness text value to exposure time in seconds and intrude on divisions"
Content="Convert brightness to exposure time"
IsChecked="{Binding Operation.ConvertBrightnessToExposureTime}"/>
<CheckBox Grid.Row="6" Grid.Column="10" Grid.ColumnSpan="3"
VerticalAlignment="Center"
Content="Enable division lines"
IsChecked="{Binding Operation.EnableLineDivisions}"/>
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Text="Division thickness:"/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="0"
Maximum="255"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Value="{Binding Operation.LineDivisionThickness}"/>
<TextBlock Grid.Row="8" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Text="px"/>
<TextBlock Grid.Row="8" Grid.Column="6"
VerticalAlignment="Center"
HorizontalAlignment="Right"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Text="Div. brightness:"/>
<NumericUpDown Grid.Row="8" Grid.Column="9"
Grid.ColumnSpan="2"
Increment="1"
Minimum="0"
Maximum="255"
<StackPanel Grid.Row="8" Grid.Column="6" Grid.ColumnSpan="5"
Spacing="10" Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Value="{Binding Operation.LineDivisionBrightness}"/>
Text="Div. brightness:"/>
<TextBlock Grid.Row="8" Grid.Column="12"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Text="{Binding Operation.LineDivisionBrightnessPercent, StringFormat=(\{0\}%)}"/>
<NumericUpDown Classes="ValueLabel ValueLabel_sun"
Increment="1"
Minimum="0"
Maximum="255"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Value="{Binding Operation.LineDivisionBrightness}"/>
<TextBlock
VerticalAlignment="Center"
IsEnabled="{Binding Operation.EnableLineDivisions}"
Text="{Binding Operation.LineDivisionBrightnessPercent, StringFormat=(\{0\}%)}"/>
</StackPanel>
<TextBlock Grid.Row="10" Grid.Column="0"
VerticalAlignment="Center"
@@ -301,15 +273,12 @@
Text="X text offset:"/>
<NumericUpDown Grid.Row="10" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="-10000"
Maximum="10000"
Value="{Binding Operation.TextXOffset}"/>
<TextBlock Grid.Row="10" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
</Grid>
</Expander>
@@ -6,23 +6,19 @@
x:Class="UVtools.WPF.Controls.Calibrators.CalibrateLiftHeightControl">
<Grid ColumnDefinitions="Auto,10,350">
<StackPanel Spacing="10">
<Grid
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,150,5,Auto,20,Auto,10,150,5,Auto"
>
<Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,200,5,Auto,20,Auto,10,200,5,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Text="Layer height:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="0.01"
Minimum="0.01"
Maximum="0.30"
FormatString="F3"
Value="{Binding Operation.LayerHeight}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="0" Grid.Column="6"
@@ -72,119 +68,99 @@
VerticalAlignment="Center"
Text="Bottom exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0.1"
Maximum="200"
Value="{Binding Operation.BottomExposure}"/>
<TextBlock Grid.Row="4" Grid.Column="4"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="4" Grid.Column="6"
VerticalAlignment="Center"
Text="Normal exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="8"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0.1"
Maximum="200"
Value="{Binding Operation.NormalExposure}"/>
<TextBlock Grid.Row="4" Grid.Column="10"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="6" Grid.Column="0"
VerticalAlignment="Center"
Text="Bottom lift height:"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="0.5"
Minimum="0.5"
Maximum="50"
FormatString="F2"
Value="{Binding Operation.BottomLiftHeight}"/>
<TextBlock Grid.Row="6" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="6" Grid.Column="6"
VerticalAlignment="Center"
Text="Normal lift height:"/>
<NumericUpDown Grid.Row="6" Grid.Column="8"
Classes="ValueLabel ValueLabel_mm"
Increment="0.5"
Minimum="0.5"
Maximum="50"
FormatString="F2"
Value="{Binding Operation.LiftHeight}"/>
<TextBlock Grid.Row="6" Grid.Column="10"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
Text="Bottom lift speed:"/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_mmmin"
Increment="0.5"
Minimum="0.5"
Maximum="1000"
FormatString="F2"
Value="{Binding Operation.BottomLiftSpeed}"/>
<TextBlock Grid.Row="8" Grid.Column="4"
VerticalAlignment="Center"
Text="mm/min"/>
<TextBlock Grid.Row="8" Grid.Column="6"
VerticalAlignment="Center"
Text="Normal lift speed:"/>
<NumericUpDown Grid.Row="8" Grid.Column="8"
Classes="ValueLabel ValueLabel_mmmin"
Increment="0.5"
Minimum="0.5"
Maximum="1000"
FormatString="F2"
Value="{Binding Operation.LiftSpeed}"/>
<TextBlock Grid.Row="8" Grid.Column="10"
VerticalAlignment="Center"
Text="mm/min"/>
<TextBlock Grid.Row="10" Grid.Column="0"
VerticalAlignment="Center"
Text="Retract speed:"/>
<NumericUpDown Grid.Row="10" Grid.Column="2"
Classes="ValueLabel ValueLabel_mmmin"
Increment="0.5"
Minimum="0.5"
Maximum="1000"
FormatString="F2"
Value="{Binding Operation.RetractSpeed}"/>
<TextBlock Grid.Row="10" Grid.Column="4"
VerticalAlignment="Center"
Text="mm/min"/>
<TextBlock Grid.Row="12" Grid.Column="0"
VerticalAlignment="Center"
Text="Left/right margin:"/>
<NumericUpDown Grid.Row="12" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="5"
Minimum="0"
Maximum="{Binding Operation.MaxLeftRightMargin}"
Value="{Binding Operation.LeftRightMargin}"/>
<TextBlock Grid.Row="12" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
<TextBlock Grid.Row="12" Grid.Column="6"
VerticalAlignment="Center"
Text="Top/right margin:"/>
<NumericUpDown Grid.Row="12" Grid.Column="8"
Classes="ValueLabel ValueLabel_px"
Increment="5"
Minimum="0"
Maximum="{Binding Operation.MaxTopBottomMargin}"
Value="{Binding Operation.TopBottomMargin}"/>
<TextBlock Grid.Row="12" Grid.Column="10"
VerticalAlignment="Center"
Text="px"/>
<CheckBox Grid.Row="14" Grid.Column="2"
Grid.ColumnSpan="9"
@@ -196,15 +172,12 @@
VerticalAlignment="Center"
Text="Decreasing factor:"/>
<NumericUpDown Grid.Row="16" Grid.Column="2"
Classes="ValueLabel ValueLabel_percent"
IsEnabled="{Binding Operation.DecreaseImage}"
Increment="1"
Minimum="1"
Maximum="99"
Value="{Binding Operation.DecreaseImageFactor}"/>
<TextBlock Grid.Row="16" Grid.Column="4"
IsEnabled="{Binding Operation.DecreaseImage}"
VerticalAlignment="Center"
Text="%"/>
<TextBlock Grid.Row="16" Grid.Column="6"
IsEnabled="{Binding Operation.DecreaseImage}"
@@ -212,16 +185,12 @@
HorizontalAlignment="Right"
Text="Decrease down to:"/>
<NumericUpDown Grid.Row="16" Grid.Column="8"
Classes="ValueLabel ValueLabel_percent"
IsEnabled="{Binding Operation.DecreaseImage}"
Increment="1"
Minimum="1"
Maximum="99"
Value="{Binding Operation.MinimumImageFactor}"/>
<TextBlock Grid.Row="16" Grid.Column="10"
IsEnabled="{Binding Operation.DecreaseImage}"
VerticalAlignment="Center"
Text="%"/>
</Grid>
@@ -13,7 +13,7 @@
<Grid
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto">
ColumnDefinitions="Auto,10,Auto,20,Auto,10,Auto">
<TextBlock
Grid.Row="0" Grid.Column="0"
@@ -21,145 +21,112 @@
ToolTip.Tip="The printer display width. Required to calculate the pixels per mm."
Text="Display width:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="0.1"
Minimum="0"
Maximum="10000"
FormatString="F2"
Value="{Binding Operation.DisplayWidth}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="0" Grid.Column="6"
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
ToolTip.Tip="The printer display height. Required to calculate the pixels per mm."
Text="Display height:"/>
<NumericUpDown Grid.Row="0" Grid.Column="8"
<NumericUpDown Grid.Row="0" Grid.Column="6"
Classes="ValueLabel ValueLabel_mm"
Increment="0.1"
Minimum="0"
Maximum="10000"
FormatString="F2"
Value="{Binding Operation.DisplayHeight}"/>
<TextBlock Grid.Row="0" Grid.Column="10"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Text="Layer height:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="0.01"
Minimum="0.01"
Maximum="0.30"
FormatString="F3"
Value="{Binding Operation.LayerHeight}"
/>
Value="{Binding Operation.LayerHeight}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="2" Grid.Column="6"
VerticalAlignment="Center"
Text="Bottom layers:"/>
<NumericUpDown Grid.Row="2" Grid.Column="8"
<NumericUpDown Grid.Row="2" Grid.Column="6"
Increment="1"
Minimum="1"
Maximum="1000"
Value="{Binding Operation.BottomLayers}"/>
<TextBlock Grid.Row="2" Grid.Column="8"
VerticalAlignment="Center"
Text="{Binding Operation.BottomHeight, StringFormat=\{0:F3\}mm}"/>
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Text="Bottom exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0.1"
Maximum="200"
FormatString="F2"
Value="{Binding Operation.BottomExposure}"/>
<TextBlock Grid.Row="4" Grid.Column="4"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="4" Grid.Column="6"
VerticalAlignment="Center"
Text="Normal exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="8"
<NumericUpDown Grid.Row="4" Grid.Column="6"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0.1"
Maximum="200"
FormatString="F2"
Value="{Binding Operation.NormalExposure}"/>
<TextBlock Grid.Row="4" Grid.Column="10"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="6" Grid.Column="0"
VerticalAlignment="Center"
Text="Base height:"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="1"
Minimum="0"
Maximum="100"
FormatString="F2"
Value="{Binding Operation.BaseHeight}"/>
<TextBlock Grid.Row="6" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="6" Grid.Column="6"
VerticalAlignment="Center"
Text="Base diameter:"/>
<NumericUpDown Grid.Row="6" Grid.Column="8"
<NumericUpDown Grid.Row="6" Grid.Column="6"
Classes="ValueLabel ValueLabel_mm"
Increment="1"
Minimum="1"
Maximum="10000"
FormatString="F2"
Value="{Binding Operation.BaseDiameter}"/>
<TextBlock Grid.Row="6" Grid.Column="10"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
Text="Ceil height:"/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="1"
Minimum="0"
Maximum="100"
FormatString="F2"
Value="{Binding Operation.CeilHeight}"/>
<TextBlock Grid.Row="8" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="8" Grid.Column="6"
VerticalAlignment="Center"
Text="Body height:"/>
<NumericUpDown Grid.Row="8" Grid.Column="8"
<NumericUpDown Grid.Row="8" Grid.Column="6"
Classes="ValueLabel ValueLabel_mm"
Increment="1"
Minimum="0"
Maximum="10000"
FormatString="F2"
Value="{Binding Operation.BodyHeight}"/>
<TextBlock Grid.Row="8" Grid.Column="10"
VerticalAlignment="Center"
Text="mm"/>
<StackPanel Grid.Row="10" Grid.Column="6"
<StackPanel Grid.Row="10" Grid.Column="4"
VerticalAlignment="Center"
Spacing="0">
<TextBlock
@@ -170,7 +137,7 @@
Text="Total height:"/>
</StackPanel>
<StackPanel Grid.Row="10" Grid.Column="8"
<StackPanel Grid.Row="10" Grid.Column="6"
VerticalAlignment="Center"
Spacing="0">
<TextBlock
@@ -203,7 +170,7 @@
IsChecked="{Binding Operation.EnableAntiAliasing}"
Content="Enable Anti-Aliasing"/>
<CheckBox Grid.Row="12" Grid.Column="8"
<CheckBox Grid.Row="12" Grid.Column="4"
Grid.ColumnSpan="3"
ToolTip.Tip="Most of the printers requires a mirror output to print with the correct orientation"
IsChecked="{Binding Operation.MirrorOutput}"
@@ -217,7 +184,7 @@
IsExpanded="True">
<Grid RowDefinitions="Auto,5,Auto"
ColumnDefinitions="Auto,10,170,5,Auto,20,Auto,10,170,5,Auto">
ColumnDefinitions="Auto,10,Auto,20,Auto,10,Auto,5,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
@@ -230,13 +197,13 @@
Maximum="10"
Value="{Binding Operation.Spirals}"/>
<TextBlock Grid.Row="0" Grid.Column="6"
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
ToolTip.Tip="Clockwise: All spirals turn clockwise.
&#x0a;Alternate: Each spiral turn into opposite direction.
&#x0a;Both: Each spiral will turn in both directions, clockwise and counter-clockwise."
Text="Spiral direction:"/>
<ComboBox Grid.Row="0" Grid.Column="8"
<ComboBox Grid.Row="0" Grid.Column="6"
Items="{Binding Operation.SpiralDirectionsItems}"
SelectedItem="{Binding Operation.SpiralDirection}"
HorizontalAlignment="Stretch"/>
@@ -245,29 +212,26 @@
Text="Spiral diameter:"
VerticalAlignment="Center"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="1"
Minimum="0.1"
Maximum="10000"
FormatString="F2"
Value="{Binding Operation.SpiralDiameter}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
Text="mm"
VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="6"
<TextBlock Grid.Row="2" Grid.Column="4"
Text="Step angle:"
ToolTip.Tip="Spirals will turn this angle per layer."
VerticalAlignment="Center"/>
<NumericUpDown Grid.Row="2" Grid.Column="8"
<NumericUpDown Grid.Row="2" Grid.Column="6"
Classes="ValueLabel ValueLabel_deg"
Increment="1"
Minimum="0.01"
Maximum="359.99"
FormatString="F2"
Value="{Binding Operation.SpiralAngleStepPerLayer}"/>
<TextBlock Grid.Row="2" Grid.Column="10"
Text="º/layer"
<TextBlock Grid.Row="2" Grid.Column="8"
Text="/layer"
VerticalAlignment="Center"/>
</Grid>
@@ -6,14 +6,14 @@
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,5,Auto,40,Auto,5,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="6"
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
@@ -24,121 +24,89 @@
VerticalAlignment="Center"
Text="1º exposure:"/>
<NumericUpDown
Grid.Row="2" Grid.Column="2"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="0.01"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.FirstBottomExposure}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
Text="s"/>
<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="6"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Minimum="0.01"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.FirstNormalExposure}"/>
<TextBlock Grid.Row="2" Grid.Column="8"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
Text="s"/>
<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"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="0"
Maximum="255"
Increment="1"
Value="{Binding Operation.FirstBottomErodeIterations}"/>
<TextBlock Grid.Row="4" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
Text="px"/>
<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="6"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Minimum="0"
Maximum="255"
Increment="1"
Value="{Binding Operation.FirstNormalErodeIterations}"/>
<TextBlock Grid.Row="4" Grid.Column="8"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
Text="px"/>
<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"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="0.01"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.SecondBottomExposure}"/>
<TextBlock Grid.Row="6" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
Text="s"/>
<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="6"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
Minimum="0.01"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.SecondNormalExposure}"/>
<TextBlock Grid.Row="6" Grid.Column="8"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
Text="s"/>
<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"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="0"
Maximum="255"
Increment="1"
Value="{Binding Operation.SecondBottomErodeIterations}"/>
<TextBlock Grid.Row="8" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
Text="px"/>
<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="6"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
Minimum="0"
Maximum="255"
Increment="1"
Value="{Binding Operation.SecondNormalErodeIterations}"/>
<TextBlock Grid.Row="8" Grid.Column="8"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
Text="px"/>
<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
@@ -147,25 +115,21 @@
IsChecked="{Binding Operation.SecondLayerDifference}"/>
<Grid RowDefinitions="Auto"
ColumnDefinitions="Auto,10,Auto,5,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"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.SecondLayerDifference}"
Minimum="0"
Maximum="255"
Increment="1"
Value="{Binding Operation.SecondLayerDifferenceOverlapErodeIterations}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.SecondLayerDifference}"
Text="px"/>
<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>
@@ -174,7 +138,8 @@ this setting will further erode the layer producing a overlap of n pixel perimet
Content="Use different settings for the second layer:"
IsChecked="{Binding Operation.DifferentSettingsForSecondLayer}"/>
<Grid RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,10,Auto,5,Auto" IsEnabled="{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.
&#x0a;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.
@@ -184,6 +149,7 @@ this setting will further erode the layer producing a overlap of n pixel perimet
IsChecked="{Binding Operation.SecondLayerLiftHeightEnabled}"
VerticalAlignment="Center"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
Increment="0.5"
Minimum="0"
Maximum="1000"
@@ -191,10 +157,6 @@ this setting will further erode the layer producing a overlap of n pixel perimet
IsVisible="{Binding SlicerFile.CanUseLayerLiftHeight}"
IsEnabled="{Binding Operation.SecondLayerLiftHeightEnabled}"
Value="{Binding Operation.SecondLayerLiftHeight}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
Text="mm"
IsVisible="{Binding SlicerFile.CanUseLayerLiftHeight}"
VerticalAlignment="Center"/>
<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.
@@ -210,6 +172,7 @@ this setting will further erode the layer producing a overlap of n pixel perimet
</CheckBox.IsVisible>
</CheckBox>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
Increment="0.5"
Minimum="0"
Maximum="1000"
@@ -223,16 +186,6 @@ this setting will further erode the layer producing a overlap of n pixel perimet
</MultiBinding>
</NumericUpDown.IsVisible>
</NumericUpDown>
<TextBlock Grid.Row="2" Grid.Column="4"
Text="s"
VerticalAlignment="Center">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.Or}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="SlicerFile.CanUseLayerWaitTimeBeforeCure"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
</Grid>
@@ -8,7 +8,7 @@
<StackPanel Spacing="10">
<Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,150,5,Auto,20,Auto,10,150,5,Auto">
ColumnDefinitions="Auto,10,Auto,20,Auto,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
@@ -19,6 +19,7 @@
Text="Cache RAM:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_GB"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Minimum="0.5"
@@ -28,15 +29,11 @@
Value="{Binding Operation.CacheRAMSize}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="GB"/>
<TextBlock Grid.Row="0" Grid.Column="6"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Text="Cache layers:"/>
<TextBlock Grid.Row="0" Grid.Column="8"
<TextBlock Grid.Row="0" Grid.Column="6"
VerticalAlignment="Center"
Text="{Binding Operation.CacheObjectCount, StringFormat=±\{0\}}"/>
@@ -46,6 +43,7 @@
Text="Minimum layer height:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Minimum="{Binding SlicerFile.LayerHeight}"
@@ -53,16 +51,14 @@
Increment="0.01"
FormatString="F3"
Value="{Binding Operation.MinimumLayerHeight}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"/>
<TextBlock Grid.Row="2" Grid.Column="6"
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
ToolTip.Tip="Allow to stack layers up to a maximum of this height"
Text="Maximum layer height:"/>
<NumericUpDown Grid.Row="2" Grid.Column="8"
<NumericUpDown Grid.Row="2" Grid.Column="6"
Classes="ValueLabel ValueLabel_mm"
Name="MaximumLayerHeight"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
@@ -71,9 +67,6 @@
Increment="0.01"
FormatString="F3"
Value="{Binding Operation.MaximumLayerHeight}"/>
<TextBlock Grid.Row="2" Grid.Column="10"
VerticalAlignment="Center"
Text="mm"/>
<CheckBox Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="3"
VerticalAlignment="Center"
@@ -81,7 +74,7 @@
Content="Strip anti-aliasing"
IsChecked="{Binding Operation.StripAntiAliasing}"/>
<CheckBox Grid.Row="4" Grid.Column="6" Grid.ColumnSpan="3"
<CheckBox Grid.Row="4" Grid.Column="4" Grid.ColumnSpan="3"
VerticalAlignment="Center"
ToolTip.Tip="Use this option with 'Strip anti-aliasing' to reconstruct the layer anti-aliasing via an gaussian blur."
Content="Reconstruct anti-aliasing"
@@ -95,15 +88,13 @@
&#x0a;n = Stack equal layers or with a n perimeter of difference between the sum of the stack."
Text="Maximum wide difference:"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Minimum="0"
Maximum="30"
Increment="1"
Value="{Binding Operation.MaximumErodes}"/>
<TextBlock Grid.Row="6" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
@@ -118,7 +109,7 @@ Manual: User defined exposure per layer height"
Items="{Binding Operation.ExposureSetTypeItems}"
SelectedItem="{Binding Operation.ExposureSetType}"/>
<ToggleSwitch Grid.Row="8" Grid.Column="6" Grid.ColumnSpan="5"
<ToggleSwitch Grid.Row="8" Grid.Column="4" Grid.ColumnSpan="3"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
OffContent="Set the same base time for all bottoms"
OnContent="Calculate and iterate bottom exposures"
@@ -130,6 +121,7 @@ Manual: User defined exposure per layer height"
Text="Bottom exposure:"/>
<NumericUpDown Grid.Row="10" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
@@ -138,18 +130,15 @@ Manual: User defined exposure per layer height"
Maximum="200"
FormatString="F2"
Value="{Binding Operation.BottomExposureTime}"/>
<TextBlock Grid.Row="10" Grid.Column="4"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="10" Grid.Column="6"
<TextBlock Grid.Row="10" Grid.Column="4"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Text="Normal exposure:"/>
<NumericUpDown Grid.Row="10" Grid.Column="8"
<NumericUpDown Grid.Row="10" Grid.Column="6"
Classes="ValueLabel ValueLabel_s"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
@@ -158,10 +147,6 @@ Manual: User defined exposure per layer height"
Maximum="200"
FormatString="F2"
Value="{Binding Operation.ExposureTime}"/>
<TextBlock Grid.Row="10" Grid.Column="10"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="12" Grid.Column="0"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
@@ -170,6 +155,7 @@ Manual: User defined exposure per layer height"
Text="Bottom exposure step:"/>
<NumericUpDown Grid.Row="12" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
@@ -178,19 +164,16 @@ Manual: User defined exposure per layer height"
Increment="0.01"
FormatString="F2"
Value="{Binding Operation.BottomExposureStep}"/>
<TextBlock Grid.Row="12" Grid.Column="4"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
Text="s"/>
<TextBlock Grid.Row="12" Grid.Column="6"
<TextBlock Grid.Row="12" Grid.Column="4"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
HorizontalAlignment="Right"
VerticalAlignment="Center"
ToolTip.Tip="Exposure increment per layer height"
Text="Exposure step:"/>
<NumericUpDown Grid.Row="12" Grid.Column="8"
<NumericUpDown Grid.Row="12" Grid.Column="6"
Classes="ValueLabel ValueLabel_s"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
@@ -200,12 +183,7 @@ Manual: User defined exposure per layer height"
FormatString="F2"
Value="{Binding Operation.ExposureStep}"/>
<TextBlock Grid.Row="12" Grid.Column="10"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
Text="s"/>
<Button Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="7"
<Button Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="5"
IsVisible="{Binding !Operation.IsExposureSetTypeManual}"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
@@ -6,115 +6,74 @@
x:Class="UVtools.WPF.Controls.Tools.ToolDynamicLiftsControl">
<StackPanel Spacing="10">
<!--
<Grid RowDefinitions="Auto,5,Auto"
ColumnDefinitions="Auto,5,Auto,5,Auto"
HorizontalAlignment="Center">
<Grid RowDefinitions="Auto,20,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,5,Auto"
ColumnDefinitions="Auto,10,180,Auto,210,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
FontWeight="Bold"
Text="View smallest:"/>
Text="Set method:"/>
<ComboBox Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="5"
HorizontalAlignment="Stretch"
Items="{Binding Operation.SetMethod, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
SelectedItem="{Binding Operation.SetMethod, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="View largest:"/>
Text="Property"/>
<Button Grid.Row="0" Grid.Column="2"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
Content="Bottom"/>
<Button Grid.Row="0" Grid.Column="4"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
Content="Normal"/>
<Button Grid.Row="2" Grid.Column="2"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
Content="Bottom"/>
<Button Grid.Row="2" Grid.Column="4"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
Content="Normal"/>
</Grid>
-->
<Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,5,Auto"
ColumnDefinitions="Auto,10,150,20,150,5,Auto,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
<TextBlock Grid.Row="2" Grid.Column="2"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Property"/>
Text="Height"/>
<TextBlock Grid.Row="0" Grid.Column="2"
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Minimum"/>
Text="Speed"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Maximum"/>
<TextBlock Grid.Row="0" Grid.Column="6"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Unit"/>
<TextBlock Grid.Row="0" Grid.Column="8"
<TextBlock Grid.Row="2" Grid.Column="6"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="View"/>
<TextBlock Grid.Row="2" Grid.Column="0"
<TextBlock Grid.Row="4" Grid.Column="0"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Text="Bottom lift height:"/>
Text="Minimum bottom lift:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="1"
Maximum="100"
Increment="0.5"
FormatString="F2"
Value="{Binding Operation.MinBottomLiftHeight}"/>
<TextBlock Grid.Row="2" Grid.Column="3"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="/"/>
<NumericUpDown Grid.Row="2" Grid.Column="4"
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="1"
Maximum="100"
Increment="0.5"
FormatString="F2"
Value="{Binding Operation.MaxBottomLiftHeight}"/>
Value="{Binding Operation.MinBottomLiftHeight}"/>
<TextBlock Grid.Row="2" Grid.Column="6"
<TextBlock Grid.Row="4" Grid.Column="3"
Margin="5,0"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Text="mm"/>
Text="@"/>
<Button Grid.Row="2" Grid.Column="8"
<NumericUpDown Grid.Row="4" Grid.Column="4"
Classes="ValueLabel ValueLabel_mmmin"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="5"
Maximum="1000"
Increment="1"
FormatString="F2"
Value="{Binding Operation.MaxBottomLiftSpeed}"/>
<Button Grid.Row="4" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
@@ -124,12 +83,29 @@
CommandParameter="True"
Content="Smallest"/>
<TextBlock Grid.Row="4" Grid.Column="0"
<TextBlock Grid.Row="6" Grid.Column="0"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Text="Bottom lift speed:"/>
Text="Maximum bottom lift:"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="1"
Maximum="100"
Increment="0.5"
FormatString="F2"
Value="{Binding Operation.MaxBottomLiftHeight}"/>
<TextBlock Grid.Row="6" Grid.Column="3"
Margin="5,0"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Text="@"/>
<NumericUpDown Grid.Row="6" Grid.Column="4"
Classes="ValueLabel ValueLabel_mmmin"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="5"
@@ -138,27 +114,7 @@
FormatString="F2"
Value="{Binding Operation.MinBottomLiftSpeed}"/>
<TextBlock Grid.Row="4" Grid.Column="3"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="/"/>
<NumericUpDown Grid.Row="4" Grid.Column="4"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Minimum="5"
Maximum="1000"
Increment="1"
FormatString="F2"
Value="{Binding Operation.MaxBottomLiftSpeed}"/>
<TextBlock Grid.Row="4" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
Text="mm/min"/>
<Button Grid.Row="4" Grid.Column="8"
<Button Grid.Row="6" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
@@ -168,13 +124,13 @@
ToolTip.Tip="View the largest bottom layer for the selected layer range"
Content="Largest"/>
<TextBlock Grid.Row="6" Grid.Column="0"
<TextBlock Grid.Row="8" Grid.Column="0"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Text="Lift height:"/>
Text="Minimum lift:"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Minimum="1"
@@ -183,27 +139,23 @@
FormatString="F2"
Value="{Binding Operation.MinLiftHeight}"/>
<TextBlock Grid.Row="6" Grid.Column="3"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
<TextBlock Grid.Row="8" Grid.Column="3"
Margin="5,0"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="/"/>
Text="@"/>
<NumericUpDown Grid.Row="6" Grid.Column="4"
<NumericUpDown Grid.Row="8" Grid.Column="4"
Classes="ValueLabel ValueLabel_mmmin"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Minimum="1"
Maximum="100"
Increment="0.5"
Minimum="5"
Maximum="1000"
Increment="1"
FormatString="F2"
Value="{Binding Operation.MaxLiftHeight}"/>
Value="{Binding Operation.MinLiftSpeed}"/>
<TextBlock Grid.Row="6" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Text="mm"/>
<Button Grid.Row="6" Grid.Column="8"
<Button Grid.Row="8" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
@@ -213,27 +165,29 @@
ToolTip.Tip="View the smallest normal layer for the selected layer range"
Content="Smallest"/>
<TextBlock Grid.Row="8" Grid.Column="0"
<TextBlock Grid.Row="10" Grid.Column="0"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Text="Lift speed:"/>
Text="Maximum lift:"/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
<NumericUpDown Grid.Row="10" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Minimum="5"
Maximum="1000"
Increment="1"
Minimum="1"
Maximum="100"
Increment="0.5"
FormatString="F2"
Value="{Binding Operation.MinLiftSpeed}"/>
Value="{Binding Operation.MaxLiftHeight}"/>
<TextBlock Grid.Row="8" Grid.Column="3"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
<TextBlock Grid.Row="10" Grid.Column="3"
Margin="5,0"
IsEnabled="{Binding Operation.LayerRangeHaveBottoms}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="/"/>
Text="@"/>
<NumericUpDown Grid.Row="8" Grid.Column="4"
<NumericUpDown Grid.Row="10" Grid.Column="4"
Classes="ValueLabel ValueLabel_mmmin"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Minimum="5"
@@ -242,12 +196,7 @@
FormatString="F2"
Value="{Binding Operation.MaxLiftSpeed}"/>
<TextBlock Grid.Row="8" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Center"
Text="mm/min"/>
<Button Grid.Row="8" Grid.Column="8"
<Button Grid.Row="10" Grid.Column="6"
IsEnabled="{Binding Operation.LayerRangeHaveNormals}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
@@ -257,59 +206,59 @@
ToolTip.Tip="View the largest normal layer for the selected layer range"
Content="Largest"/>
<TextBlock Grid.Row="10" Grid.Column="0"
IsVisible="{Binding SlicerFile.CanUseLayerLightOffDelay}"
VerticalAlignment="Center"
Text="Light-off mode:"/>
<TextBlock Grid.Row="12" Grid.Column="0"
IsVisible="{Binding SlicerFile.CanUseLayerLightOffDelay}"
VerticalAlignment="Center"
Text="Light-off mode:"/>
<ComboBox Grid.Row="10" Grid.Column="2"
Grid.ColumnSpan="3"
IsVisible="{Binding SlicerFile.CanUseLayerLightOffDelay}"
HorizontalAlignment="Stretch"
Items="{Binding Operation.LightOffDelaySetMode, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
SelectedItem="{Binding Operation.LightOffDelaySetMode, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
<ComboBox Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="3"
IsVisible="{Binding SlicerFile.CanUseLayerLightOffDelay}"
HorizontalAlignment="Stretch"
Items="{Binding Operation.LightOffDelaySetMode, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
SelectedItem="{Binding Operation.LightOffDelaySetMode, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
<TextBlock Grid.Row="12" Grid.Column="2"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Bottom extra time">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
<TextBlock Grid.Row="14" Grid.Column="2"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Bottom extra time">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
<TextBlock Grid.Row="14" Grid.Column="4"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Normal extra time">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
<TextBlock Grid.Row="16" Grid.Column="0"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
Text="Light-off delay:">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
<TextBlock Grid.Row="12" Grid.Column="4"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="Normal extra time">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
<TextBlock Grid.Row="14" Grid.Column="0"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
Text="Light-off delay:">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
<NumericUpDown Grid.Row="14" Grid.Column="2"
<NumericUpDown Grid.Row="16" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
Minimum="0"
@@ -317,29 +266,30 @@
Increment="1"
FormatString="F2"
Value="{Binding Operation.LightOffDelayBottomExtraTime}">
<NumericUpDown.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</NumericUpDown.IsVisible>
<NumericUpDown.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</NumericUpDown.IsVisible>
</NumericUpDown>
<TextBlock Grid.Row="14" Grid.Column="3"
<TextBlock Grid.Row="16" Grid.Column="3"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontWeight="Bold"
Text="/">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
<NumericUpDown Grid.Row="14" Grid.Column="4"
<NumericUpDown Grid.Row="16" Grid.Column="4"
Classes="ValueLabel ValueLabel_s"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
Minimum="0"
@@ -347,26 +297,14 @@
Increment="1"
FormatString="F2"
Value="{Binding Operation.LightOffDelayExtraTime}">
<NumericUpDown.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</NumericUpDown.IsVisible>
<NumericUpDown.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</NumericUpDown.IsVisible>
</NumericUpDown>
<TextBlock Grid.Row="14" Grid.Column="6"
IsEnabled="{Binding !Operation.LightOffDelaySetMode}"
VerticalAlignment="Center"
Text="s">
<TextBlock.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="SlicerFile.CanUseLayerLightOffDelay"/>
<Binding Path="!Operation.LightOffDelaySetMode"/>
</MultiBinding>
</TextBlock.IsVisible>
</TextBlock>
</Grid>
</Grid>
</StackPanel>
</UserControl>
@@ -20,37 +20,35 @@
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Text="Exposure time:"/>
<NumericUpDown
Grid.Row="2" Grid.Column="2"
Minimum="0.1"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.FromExposureTime}"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
Minimum="0.1"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.FromExposureTime}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="->"/>
<NumericUpDown
Grid.Row="2" Grid.Column="6"
Minimum="0.1"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.ToExposureTime}"/>
<TextBlock Grid.Row="2" Grid.Column="8"
VerticalAlignment="Center"
Text="s"/>
<NumericUpDown Grid.Row="2" Grid.Column="6"
Classes="ValueLabel ValueLabel_s"
Minimum="0.1"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.ToExposureTime}"/>
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Text="Time increment:"/>
<NumericUpDown
Grid.Row="4" Grid.Column="2"
IsReadOnly="True"
ShowButtonSpinner="False"
AllowSpin="False"
Value="{Binding Operation.IncrementValue}"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
IsReadOnly="True"
ShowButtonSpinner="False"
AllowSpin="False"
Value="{Binding Operation.IncrementValue}"/>
<TextBlock Grid.Row="4" Grid.Column="4" Grid.ColumnSpan="5"
VerticalAlignment="Center"
Text="s / per layer"/>
Text="/ per layer"/>
</Grid>
</UserControl>
@@ -15,8 +15,7 @@
Text="Pattern:"
/>
<ComboBox
Grid.Column="2"
<ComboBox Grid.Row="0" Grid.Column="2"
Items="{Binding Operation.InfillAlgorithmTypes}"
SelectedItem="{Binding Operation.InfillType}"
HorizontalAlignment="Stretch"
@@ -30,91 +29,50 @@
Text="Wall thickness:"
/>
<NumericUpDown
Grid.Row="2"
Grid.Column="2"
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="0"
Maximum="65535"
Increment="1"
Value="{Binding Operation.WallThickness}"
/>
<TextBlock
Grid.Row="2"
Grid.Column="4"
VerticalAlignment="Center"
Text="px"
/>
Value="{Binding Operation.WallThickness}"/>
<!--Infill brightness-->
<TextBlock
Grid.Row="4"
Grid.Column="0"
VerticalAlignment="Center"
Text="Infill brightness:"
/>
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Text="Infill brightness:"/>
<NumericUpDown
Grid.Row="4"
Grid.Column="2"
Minimum="0"
Maximum="255"
Increment="1"
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
Increment="1"
Value="{Binding Operation.InfillBrightness}"
/>
Value="{Binding Operation.InfillBrightness}"/>
<!--Infill thickness-->
<TextBlock
Grid.Row="6"
Grid.Column="0"
VerticalAlignment="Center"
Text="Infill thickness:"
/>
<TextBlock Grid.Row="6" Grid.Column="0"
VerticalAlignment="Center"
Text="Infill thickness:"/>
<NumericUpDown
Grid.Row="6"
Grid.Column="2"
Name="InfillThickness"
Minimum="0"
Maximum="65535"
Increment="1"
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Name="InfillThickness"
Minimum="0"
Maximum="65535"
Increment="1"
Value="{Binding Operation.InfillThickness}"
/>
<TextBlock
Grid.Row="6"
Grid.Column="4"
VerticalAlignment="Center"
Text="px"
/>
Value="{Binding Operation.InfillThickness}"/>
<!--Infill spacing-->
<TextBlock
Grid.Row="8"
Grid.Column="0"
VerticalAlignment="Center"
Text="Infill spacing:"
/>
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
Text="Infill spacing:"/>
<NumericUpDown
Grid.Row="8"
Grid.Column="2"
Minimum="{Binding #InfillThickness.Value}"
Maximum="65535"
Increment="1"
Value="{Binding Operation.InfillSpacing}"
/>
<TextBlock
Grid.Row="8"
Grid.Column="4"
VerticalAlignment="Center"
Text="px"
/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="{Binding #InfillThickness.Value}"
Maximum="65535"
Increment="1"
Value="{Binding Operation.InfillSpacing}"/>
</Grid>
</UserControl>
@@ -10,40 +10,42 @@
<TextBlock VerticalAlignment="Center" Text="{Binding CurrentLayers}"/>
<Grid RowDefinitions="Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto">
ColumnDefinitions="Auto,10,Auto,20,Auto,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Text="Modifier:"/>
<ComboBox
Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="9"
Width="430"
Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="5"
Width="505"
SelectedItem="{Binding Operation.SelectedItem}"
Items="{Binding Operation.Presets}"/>
<TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Text="Anti-Aliasing:"/>
<ComboBox Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="9"
Width="430"
<ComboBox Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="5"
Width="505"
IsEnabled="{Binding Operation.CanAntiAliasing}"
Items="{Binding Operation.AntiAliasingType, Converter={StaticResource EnumToCollectionConverter}, Mode=OneTime}"
SelectedItem="{Binding Operation.AntiAliasingType, Converter={StaticResource FromValueDescriptionToEnumConverter}}">
</ComboBox>
<TextBlock Grid.Row="4" Grid.Column="0" VerticalAlignment="Center" Text="Bottom exposure:"/>
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Text="Bottom exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
VerticalAlignment="Center"
Minimum="0.01"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.BottomExposure}"/>
<TextBlock Grid.Row="4" Grid.Column="4" VerticalAlignment="Center" Text="s"/>
<TextBlock Grid.Row="4" Grid.Column="6" VerticalAlignment="Center" Text="Normal exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="8"
<TextBlock Grid.Row="4" Grid.Column="4" VerticalAlignment="Center" Text="Normal exposure:"/>
<NumericUpDown Grid.Row="4" Grid.Column="6"
Classes="ValueLabel ValueLabel_s"
VerticalAlignment="Center"
Minimum="0.01"
Maximum="1000"
Increment="0.5"
Value="{Binding Operation.NormalExposure}"/>
<TextBlock Grid.Row="4" Grid.Column="10" VerticalAlignment="Center" Text="s"/>
</Grid>
</StackPanel>
@@ -38,44 +38,33 @@
<TextBlock
VerticalAlignment="Center"
Text="Minimum brightness:"/>
<NumericUpDown
Grid.Row="0"
Grid.Column="2"
Minimum="0"
Maximum="255"
Value="{Binding GenMinimumBrightness}"
/>
<TextBlock
Grid.Row="0"
Grid.Column="4"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="(0-255)"/>
<TextBlock
Grid.Row="0"
Grid.Column="6"
VerticalAlignment="Center"
Text="Maximum brightness:"
/>
<NumericUpDown
Grid.Row="0"
Grid.Column="8"
Minimum="0"
Maximum="255"
Value="{Binding GenMaximumBrightness}"
/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
Value="{Binding GenMinimumBrightness}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="(0-255)"/>
<TextBlock Grid.Row="0" Grid.Column="6"
VerticalAlignment="Center"
Text="Maximum brightness:"/>
<NumericUpDown Grid.Row="0" Grid.Column="8"
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
Value="{Binding GenMaximumBrightness}"
/>
<TextBlock
Grid.Row="2"
VerticalAlignment="Center"
Text="Diameter in pixels:"/>
<NumericUpDown
Grid.Row="2"
Grid.Column="2"
Minimum="0"
Maximum="10000"
Value="{Binding GenDiameter}"
/>
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Text="Diameter in pixels:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="0"
Maximum="10000"
Value="{Binding GenDiameter}"/>
<Button
Grid.Row="2"
Grid.Column="4"
@@ -42,6 +42,7 @@
FontWeight="Bold"
Text="Left"/>
<NumericUpDown
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
ButtonSpinnerLocation="Left"
Width="150"
@@ -57,7 +58,8 @@
FontWeight="Bold"
Margin="0,0,0,5"
Text="Top"/>
<NumericUpDown
<NumericUpDown
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
Width="150"
Minimum="-100000"
@@ -70,6 +72,7 @@
VerticalAlignment="Center"
Spacing="5">
<NumericUpDown
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
Width="150"
Minimum="-100000"
@@ -82,7 +85,8 @@
</StackPanel>
<StackPanel Grid.Row="2" Grid.Column="1">
<NumericUpDown
<NumericUpDown
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
Width="150"
Minimum="-100000"
@@ -81,8 +81,9 @@
Orientation="Horizontal" Spacing="5"
IsVisible="{Binding Operation.ValueEnabled}"
IsEnabled="{Binding Operation.ValueEnabled}">
<NumericUpDown
<NumericUpDown
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
IsEnabled="{Binding !Operation.UsePattern}"
@@ -370,30 +371,24 @@
Text="Warning: This function can generate a large number of resin traps. (Use with caution)"/>
<Grid RowDefinitions="Auto,10,Auto"
ColumnDefinitions="Auto,10,150,5,Auto">
ColumnDefinitions="Auto,10,180">
<TextBlock
VerticalAlignment="Center"
Text="Thickness:"/>
<NumericUpDown
Grid.Row="0" Grid.Column="2"
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="5"
Maximum="10000"
Value="{Binding Operation.PatternGenInfillThickness}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Text="Spacing:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="5"
Maximum="10000"
Value="{Binding Operation.PatternGenInfillSpacing}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
</Grid>
<StackPanel Orientation="Horizontal" Spacing="10">
@@ -7,7 +7,7 @@
<Grid
ColumnDefinitions="Auto,10,150,5,Auto"
ColumnDefinitions="Auto,10,200,5,Auto"
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
>
@@ -60,6 +60,7 @@ you must manually input the layer index of the last raft where it ends and suppo
Text="Pixel brightness:" VerticalAlignment="Center"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
IsVisible="{Binding !Operation.IsDecimate}"
@@ -72,73 +73,61 @@ you must manually input the layer index of the last raft where it ends and suppo
<TextBlock
Grid.Row="8"
Grid.Row="8" Grid.Column="0"
IsVisible="{Binding !Operation.IsDecimate}"
Text="Supports margin:" VerticalAlignment="Center"/>
<TextBlock
Grid.Row="8"
Grid.Row="8" Grid.Column="0"
IsVisible="{Binding Operation.IsDecimate}"
ToolTip.Tip="Raft will be replaced by the present supports and then dilated by this value to thicken the supports and increase the adhesion.
&#x0a;Use large numbers with tiny supports for best adhesion."
Text="Dilate supports by:" VerticalAlignment="Center"/>
<NumericUpDown Grid.Row="8" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="0"
Maximum="255"
Value="{Binding Operation.DilateIterations}"/>
<TextBlock
Grid.Row="8" Grid.Column="4"
Text="px" VerticalAlignment="Center"/>
<TextBlock
Grid.Row="10"
Grid.Row="10" Grid.Column="0"
Text="Wall margin:" VerticalAlignment="Center"
IsVisible="{Binding !Operation.IsDecimate}"
/>
<NumericUpDown Grid.Row="10" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="1"
Maximum="255"
Value="{Binding Operation.WallMargin}"
IsVisible="{Binding !Operation.IsDecimate}"/>
<TextBlock
Grid.Row="10" Grid.Column="4"
Text="px" VerticalAlignment="Center"
IsVisible="{Binding !Operation.IsDecimate}"/>
<TextBlock
Grid.Row="12"
Text="Hole diameter:" VerticalAlignment="Center"
IsVisible="{Binding Operation.IsRelief}"
/>
IsVisible="{Binding Operation.IsRelief}"/>
<NumericUpDown Grid.Row="12" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="10"
Maximum="255"
Value="{Binding Operation.HoleDiameter}"
IsVisible="{Binding Operation.IsRelief}"/>
<TextBlock
Grid.Row="12" Grid.Column="4"
Text="px" VerticalAlignment="Center"
IsVisible="{Binding Operation.IsRelief}"/>
<TextBlock
Grid.Row="14"
Grid.Row="14" Grid.Column="0"
Text="Hole spacing:" VerticalAlignment="Center"
IsVisible="{Binding Operation.IsRelief}"
/>
<NumericUpDown Grid.Row="14" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="10"
Maximum="255"
Value="{Binding Operation.HoleSpacing}"
IsVisible="{Binding Operation.IsRelief}"/>
<TextBlock
Grid.Row="14" Grid.Column="4"
Text="px" VerticalAlignment="Center"
IsVisible="{Binding Operation.IsRelief}"/>
</Grid>
@@ -7,32 +7,26 @@
x:Class="UVtools.WPF.Controls.Tools.ToolRaiseOnPrintFinishControl">
<Grid RowDefinitions="Auto"
ColumnDefinitions="Auto,10,200,5,Auto,20,Auto">
ColumnDefinitions="Auto,10,200,20,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Text="Raise to:"
/>
Text="Raise to:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_mm"
VerticalAlignment="Center"
Increment="1"
Minimum="{Binding Operation.MinimumPositionZ}"
Maximum="1000"
FormatString="F2"
Value="{Binding Operation.PositionZ}"
/>
Value="{Binding Operation.PositionZ}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="mm"
/>
<CheckBox Grid.Row="0" Grid.Column="6"
<CheckBox Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
ToolTip.Tip="If enabled, output a dummy pixel inside the layer bound to prevent a empty image and to ensure the correct handle by the firmware. This will also prevent layer being removed by auto-fix issues (Empty Layers)."
Content="Output a dummy pixel"
IsChecked="{Binding Operation.OutputDummyPixel}"
/>
IsChecked="{Binding Operation.OutputDummyPixel}"/>
</Grid>
</UserControl>
@@ -59,6 +59,7 @@
<StackPanel Grid.Row="4" Grid.Column="2" Orientation="Horizontal" Spacing="5">
<NumericUpDown
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
Increment="1"
@@ -34,109 +34,108 @@
/>
</StackPanel>
<Grid ColumnDefinitions="Auto,10,150,5,Auto"
RowDefinitions="Auto,10,Auto,10,Auto">
<Grid ColumnDefinitions="Auto,10,Auto,5,Auto"
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto">
<!-- Remove islands equal or smaller than -->
<TextBlock
Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="The pixel area threshold above which islands will not be removed by this repair.
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="The pixel area threshold above which islands will not be removed by this repair.
&#x0a;Islands remaining after repair will require supports to be added manually.
&#x0a;NOTE: This repair method requires the issues to be manually computed before hand."
Text="Remove islands equal or smaller than:"/>
Text="Remove islands equal or smaller than:"/>
<NumericUpDown
Grid.Row="0"
Grid.Column="2"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairIslands}"
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="The pixel area threshold above which islands will not be removed by this repair.
ToolTip.Tip="The pixel area threshold above which islands will not be removed by this repair.
&#x0a;Islands remaining after repair will require supports to be added manually.
&#x0a;NOTE: This repair method requires the issues to be manually computed before hand."
Value="{Binding Operation.RemoveIslandsBelowEqualPixelCount}"
/>
Value="{Binding Operation.RemoveIslandsBelowEqualPixelCount}"/>
<TextBlock
Grid.Row="0"
Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
Text="px"/>
<!-- Recursively remove islands for up to -->
<TextBlock
Grid.Row="2"
Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="If the removal of an island in the current layer results in a new island being introduce in the layer above, the island in the layer above will also be automatically removed.
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="If the removal of an island in the current layer results in a new island being introduce in the layer above, the island in the layer above will also be automatically removed.
&#x0a;This process will repeat for up to the number of layers specified. Set to 0 to repeat until there are no more valid islands to remove.
&#x0a;NOTE: Use with caution as this can remove large portions of your model if proper supports have not been added beforehand.
&#x0a;This repair method requires the issues to be manually computed before hand.
&#x0a;Using this function with high values can be extremely slow depending on resolution and issue count."
Text="Recursively remove islands for up to:"/>
Text="Recursively remove islands for up to:"/>
<NumericUpDown
Grid.Row="2"
Grid.Column="2"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="If the removal of an island in the current layer results in a new island being introduce in the layer above, the island in the layer above will also be automatically removed.
<NumericUpDown Grid.Row="2" Grid.Column="2"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="If the removal of an island in the current layer results in a new island being introduce in the layer above, the island in the layer above will also be automatically removed.
&#x0a;This process will repeat for up to the number of layers specified. Set to 0 to repeat until there are no more valid islands to remove.
&#x0a;NOTE: Use with caution as this can remove large portions of your model if proper supports have not been added beforehand.
&#x0a;This repair method requires the issues to be manually computed before hand.
&#x0a;Using this function with high values can be extremely slow depending on resolution and issue count."
Value="{Binding Operation.RemoveIslandsRecursiveIterations}"
/>
Value="{Binding Operation.RemoveIslandsRecursiveIterations}"
/>
<TextBlock
Grid.Row="2"
Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
Text="layers"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
Text="layers"/>
<!-- Attempt to attach islands below -->
<TextBlock
Grid.Row="4"
Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="Attempt to attach the islands down to n layers when found a safe mass below to support it.
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="Attempt to attach the islands down to n layers when found a safe mass below to support it.
&#x0a;NOTE: Use with caution and with a low value, this can mostly be used when there are some missed support layers in between as observed from the issues.
&#x0a;This repair method requires the issues to be manually computed before hand.
&#x0a;Use 0 to disable this repair method."
Text="Attempt to attach islands down to:"/>
Text="Attempt to attach islands down to:"/>
<NumericUpDown
Grid.Row="4"
Grid.Column="2"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="Attempt to attach the islands down to n layers when found a safe mass below to support it.
<NumericUpDown Grid.Row="4" Grid.Column="2"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairIslands}"
ToolTip.Tip="Attempt to attach the islands down to n layers when found a safe mass below to support it.
&#x0a;NOTE: Use with caution and with a low value, this can mostly be used when there are some missed support layers in between as observed from the issues.
&#x0a;This repair method requires the issues to be manually computed before hand.
&#x0a;Use 0 to disable this repair method."
Value="{Binding Operation.AttachIslandsBelowLayers}"/>
Value="{Binding Operation.AttachIslandsBelowLayers}"/>
<TextBlock
Grid.Row="4"
Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
Text="layers"/>
<TextBlock Grid.Row="4" Grid.Column="4"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairIslands}"
Text="layers"/>
<!-- Overlap resin traps -->
<TextBlock Grid.Row="6" Grid.Column="0"
VerticalAlignment="Center"
IsEnabled="{Binding Operation.RepairResinTraps}"
ToolTip.Tip="Overlap and expand resin trap area by this value.
&#x0a;Use this field when you have aggressive blur on model and a visible margin between white pixels and the resin trap highlight area.
&#x0a;(0 = Fill the found area without overlap nearby pixels)"
Text="Overlap and expand resin traps by:"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Increment="1"
Minimum="0"
Maximum="65535"
IsEnabled="{Binding Operation.RepairResinTraps}"
ToolTip.Tip="Overlap and expand resin trap area by this value.
&#x0a;Use this field when you have aggressive blur on model and a visible margin between white pixels and the resin trap highlight area.
&#x0a;(0 = Fill the found area without overlap nearby pixels)"
Value="{Binding Operation.ResinTrapsOverlapBy}"/>
</Grid>
@@ -28,6 +28,7 @@ namespace UVtools.WPF.Controls.Tools
RemoveIslandsBelowEqualPixelCount = UserSettings.Instance.LayerRepair.RemoveIslandsBelowEqualPixels,
RemoveIslandsRecursiveIterations = UserSettings.Instance.LayerRepair.RemoveIslandsRecursiveIterations,
AttachIslandsBelowLayers = UserSettings.Instance.LayerRepair.AttachIslandsBelowLayers,
ResinTrapsOverlapBy = UserSettings.Instance.LayerRepair.ResinTrapsOverlapBy,
GapClosingIterations = UserSettings.Instance.LayerRepair.ClosingIterations,
NoiseRemovalIterations = UserSettings.Instance.LayerRepair.OpeningIterations,
};
@@ -40,6 +41,7 @@ namespace UVtools.WPF.Controls.Tools
Operation.RemoveIslandsBelowEqualPixelCount = UserSettings.Instance.LayerRepair.RemoveIslandsBelowEqualPixels;
Operation.RemoveIslandsRecursiveIterations = UserSettings.Instance.LayerRepair.RemoveIslandsRecursiveIterations;
Operation.AttachIslandsBelowLayers = UserSettings.Instance.LayerRepair.AttachIslandsBelowLayers;
Operation.ResinTrapsOverlapBy = UserSettings.Instance.LayerRepair.ResinTrapsOverlapBy;
Operation.GapClosingIterations = UserSettings.Instance.LayerRepair.ClosingIterations;
Operation.NoiseRemovalIterations = UserSettings.Instance.LayerRepair.OpeningIterations;
}
@@ -9,11 +9,12 @@
<StackPanel Orientation="Horizontal" Spacing="10">
<TextBlock VerticalAlignment="Center" Text="X:"/>
<NumericUpDown
Width="150"
Classes="ValueLabel ValueLabel_percent"
Width="180"
Minimum="1"
Maximum="10000"
Increment="0.1"
FormatString="{}{0:F2} %"
FormatString="F2"
Value="{Binding Operation.X}"/>
<TextBlock
@@ -22,11 +23,12 @@
Text="Y:"
IsEnabled="{Binding !#ConstrainXY.IsChecked}"/>
<NumericUpDown
Width="150"
Classes="ValueLabel ValueLabel_percent"
Width="180"
Minimum="1"
Maximum="10000"
Increment="0.1"
FormatString="{}{0:F2} %"
FormatString="F2"
Value="{Binding Operation.Y}"
IsEnabled="{Binding !#ConstrainXY.IsChecked}"
/>
@@ -7,7 +7,8 @@
<StackPanel Orientation="Horizontal" Spacing="10">
<TextBlock VerticalAlignment="Center" Text="Rotation angle:"/>
<NumericUpDown
Width="150"
Classes="ValueLabel ValueLabel_deg"
Width="180"
Minimum="-359.99"
Maximum="359.99"
Increment="1.0"
@@ -20,13 +20,10 @@
VerticalAlignment="Center" />
<NumericUpDown
Width="200"
Classes="ValueLabel ValueLabel_px2"
Width="200"
Minimum="1"
Maximum="4294967295"
Value="{Binding Operation.MinimumArea}"
/>
<TextBlock
Text="px²"
VerticalAlignment="Center" />
Value="{Binding Operation.MinimumArea}"/>
</StackPanel>
</UserControl>
+4
View File
@@ -148,6 +148,10 @@ namespace UVtools.WPF
{
using var contours = new VectorOfVectorOfPoint(issue.Contours);
CvInvoke.DrawContours(image, contours, -1, EmguExtensions.WhiteColor, -1);
if (Settings.LayerRepair.ResinTrapsOverlapBy > 0)
{
CvInvoke.DrawContours(image, contours, -1, EmguExtensions.WhiteColor, Settings.LayerRepair.ResinTrapsOverlapBy * 2 + 1);
}
edited = true;
}
+78 -144
View File
@@ -946,75 +946,44 @@
Items="{Binding DrawingPixelDrawing.BrushShapeTypes}"
SelectedItem="{Binding DrawingPixelDrawing.BrushShape}"/>
<TextBlock
Grid.Row="4"
Grid.Column="0"
VerticalAlignment="Center"
Text="Rotation angle:" />
<NumericUpDown
Grid.Row="4"
Grid.Column="2"
FormatString="F2"
Minimum="-360"
Maximum="360"
Value="{Binding DrawingPixelDrawing.RotationAngle}"/>
<TextBlock
Grid.Row="4"
Grid.Column="4"
VerticalAlignment="Center"
Text="º" />
<TextBlock Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Text="Rotation angle:" />
<NumericUpDown Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_deg"
FormatString="F2"
Minimum="-360"
Maximum="360"
Value="{Binding DrawingPixelDrawing.RotationAngle}"/>
<TextBlock
Grid.Row="6"
Grid.Column="0"
VerticalAlignment="Center"
Text="Brush diameter:" />
<NumericUpDown
Grid.Row="6"
Grid.Column="2"
Minimum="1"
Maximum="4000"
HorizontalAlignment="Stretch"
Value="{Binding DrawingPixelDrawing.BrushSize}"/>
<TextBlock
Grid.Row="6"
Grid.Column="4"
VerticalAlignment="Center"
Text="px" />
<TextBlock Grid.Row="6" Grid.Column="0"
VerticalAlignment="Center"
Text="Brush diameter:" />
<NumericUpDown Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_px"
Minimum="1"
Maximum="4000"
HorizontalAlignment="Stretch"
Value="{Binding DrawingPixelDrawing.BrushSize}"/>
<TextBlock
Grid.Row="8"
Grid.Column="0"
VerticalAlignment="Center"
Text="Thickness:" />
<NumericUpDown
Grid.Row="8"
Grid.Column="2"
Minimum="-1"
Maximum="255"
HorizontalAlignment="Stretch"
Value="{Binding DrawingPixelDrawing.Thickness}"/>
<TextBlock
Grid.Row="8"
Grid.Column="4"
VerticalAlignment="Center"
Text="px" />
<TextBlock Grid.Row="8" Grid.Column="0"
VerticalAlignment="Center"
Text="Thickness:" />
<NumericUpDown Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_px"
Minimum="-1"
Maximum="255"
HorizontalAlignment="Stretch"
Value="{Binding DrawingPixelDrawing.Thickness}"/>
<TextBlock
Grid.Row="10"
Grid.Column="0"
VerticalAlignment="Center"
Text="Remove pixel brightness:" />
<NumericUpDown
Grid.Row="10"
Grid.Column="2"
Minimum="0"
Maximum="255"
HorizontalAlignment="Stretch"
Value="{Binding DrawingPixelDrawing.RemovePixelBrightness}"/>
<TextBlock Grid.Row="10" Grid.Column="0"
VerticalAlignment="Center"
Text="Remove pixel brightness:" />
<NumericUpDown Grid.Row="10" Grid.Column="2"
Minimum="0"
Maximum="255"
HorizontalAlignment="Stretch"
Value="{Binding DrawingPixelDrawing.RemovePixelBrightness}"/>
<TextBlock
Grid.Row="10"
Grid.Column="4"
@@ -1144,14 +1113,12 @@
Grid.Column="0"
VerticalAlignment="Center"
Text="Thickness:" />
<NumericUpDown
Grid.Row="6"
Grid.Column="2"
Grid.ColumnSpan="3"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelText.Thickness}"/>
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Grid.ColumnSpan="3"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelText.Thickness}"/>
<TextBlock
Grid.Row="8"
@@ -1191,18 +1158,12 @@
Grid.Column="0"
VerticalAlignment="Center"
Text="Rotation angle:" />
<NumericUpDown
Grid.Row="14"
Grid.Column="2"
FormatString="F2"
Minimum="-360"
Maximum="360"
Value="{Binding DrawingPixelText.Angle}"/>
<TextBlock
Grid.Row="14"
Grid.Column="4"
VerticalAlignment="Center"
Text="º" />
<NumericUpDown Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_deg"
FormatString="F2"
Minimum="-360"
Maximum="360"
Value="{Binding DrawingPixelText.Angle}"/>
<TextBlock
Grid.Row="16"
@@ -1301,13 +1262,12 @@
Grid.Column="0"
VerticalAlignment="Center"
Text="Pixel brightness:" />
<NumericUpDown
Grid.Row="0"
Grid.Column="2"
Minimum="0"
Maximum="255"
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
Value="{Binding DrawingPixelEraser.PixelBrightness}"/>
Value="{Binding DrawingPixelEraser.PixelBrightness}"/>
<TextBlock
Grid.Row="0"
Grid.Column="4"
@@ -1374,64 +1334,45 @@
Grid.Column="0"
VerticalAlignment="Center"
Text="Tip diameter:" />
<NumericUpDown
Grid.Row="0"
Grid.Column="2"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelSupport.TipDiameter}"/>
<TextBlock
Grid.Row="0"
Grid.Column="4"
VerticalAlignment="Center"
Text="px" />
<NumericUpDown Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_px"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelSupport.TipDiameter}"/>
<TextBlock
Grid.Row="2"
Grid.Column="0"
VerticalAlignment="Center"
Text="Pillar diameter:" />
<NumericUpDown
Grid.Row="2"
Grid.Column="2"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelSupport.PillarDiameter}"/>
<TextBlock
Grid.Row="2"
Grid.Column="4"
VerticalAlignment="Center"
Text="px" />
<NumericUpDown Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_px"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelSupport.PillarDiameter}"/>
<TextBlock
Grid.Row="4"
Grid.Column="0"
VerticalAlignment="Center"
Text="Base diameter:" />
<NumericUpDown
Grid.Row="4"
Grid.Column="2"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelSupport.BaseDiameter}"/>
<TextBlock
Grid.Row="4"
Grid.Column="4"
VerticalAlignment="Center"
Text="px" />
<NumericUpDown Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="3"
Classes="ValueLabel ValueLabel_px"
Minimum="1"
Maximum="255"
Value="{Binding DrawingPixelSupport.BaseDiameter}"/>
<TextBlock
Grid.Row="6"
Grid.Column="0"
VerticalAlignment="Center"
Text="Pixel brightness:" />
<NumericUpDown
Grid.Row="6"
Grid.Column="2"
Minimum="0"
Maximum="255"
<NumericUpDown Grid.Row="6" Grid.Column="2"
Classes="ValueLabel ValueLabel_sun"
Minimum="0"
Maximum="255"
Value="{Binding DrawingPixelSupport.PixelBrightness}"/>
Value="{Binding DrawingPixelSupport.PixelBrightness}"/>
<TextBlock
Grid.Row="6"
Grid.Column="4"
@@ -1464,24 +1405,17 @@
</Border>
<Grid
RowDefinitions="Auto"
ColumnDefinitions="Auto,10,*,5,Auto">
ColumnDefinitions="Auto,10,*">
<TextBlock
Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
Text="Hole diameter:" />
<NumericUpDown
Grid.Row="0"
Grid.Column="2"
Minimum="20"
Maximum="255"
Value="{Binding DrawingPixelDrainHole.Diameter}"/>
<TextBlock
Grid.Row="0"
Grid.Column="4"
VerticalAlignment="Center"
Text="px" />
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
Minimum="20"
Maximum="255"
Value="{Binding DrawingPixelDrainHole.Diameter}"/>
</Grid>
</StackPanel>
+1 -1
View File
@@ -12,7 +12,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<Version>2.21.2</Version>
<Version>2.22.0</Version>
<Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
+7
View File
@@ -1216,6 +1216,7 @@ namespace UVtools.WPF
private ushort _removeIslandsBelowEqualPixels = 5;
private ushort _removeIslandsRecursiveIterations = 4;
private ushort _attachIslandsBelowLayers = 2;
private byte _resinTrapsOverlapBy = 5;
private byte _closingIterations = 2;
private byte _openingIterations = 0;
@@ -1255,6 +1256,12 @@ namespace UVtools.WPF
set => RaiseAndSetIfChanged(ref _attachIslandsBelowLayers, value);
}
public byte ResinTrapsOverlapBy
{
get => _resinTrapsOverlapBy;
set => RaiseAndSetIfChanged(ref _resinTrapsOverlapBy, value);
}
public byte ClosingIterations
{
get => _closingIterations;
+23 -30
View File
@@ -76,23 +76,23 @@
<Expander Grid.Row="1"
Header="Add new material"
IsExpanded="False">
IsExpanded="True">
<Grid
RowDefinitions="Auto,10,Auto,10,Auto,10,Auto"
ColumnDefinitions="Auto,10,150,5,Auto,20,Auto,10,Auto,5,Auto,20,Auto,10,150,5,Auto,20,Auto,10,Auto,5,Auto">
ColumnDefinitions="Auto,10,Auto,20,Auto,10,Auto,20,Auto,10,Auto,20,Auto,10,Auto,5,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Text="Name:"/>
<TextBox Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="17"
<TextBox Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="11"
HorizontalAlignment="Stretch"
Watermark="A descriptive material name, eg: Epax Hard Grey"
Text="{Binding Material.Name}"/>
<Button
Grid.Row="0" Grid.Column="20" Grid.ColumnSpan="3"
Grid.Row="0" Grid.Column="14" Grid.ColumnSpan="3"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Stretch"
VerticalAlignment="Stretch"
@@ -111,54 +111,47 @@
Text="Volume:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_ml"
Minimum="100"
Maximum="100000"
Increment="100"
Value="{Binding Material.BottleVolume}"
/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="ml"/>
Value="{Binding Material.BottleVolume}"/>
<TextBlock Grid.Row="2" Grid.Column="6"
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
ToolTip.Tip="Used to calculate weight and cost"
Text="Density:"/>
<NumericUpDown Grid.Row="2" Grid.Column="8"
<NumericUpDown Grid.Row="2" Grid.Column="6"
Classes="ValueLabel ValueLabel_gml"
Minimum="0.1"
Maximum="10"
Increment="0.1"
Value="{Binding Material.Density}"/>
<TextBlock Grid.Row="2" Grid.Column="10"
VerticalAlignment="Center"
Text="g/ml"/>
<TextBlock Grid.Row="2" Grid.Column="12"
<TextBlock Grid.Row="2" Grid.Column="8"
VerticalAlignment="Center"
ToolTip.Tip="One bottle unit cost"
Text="Cost:"/>
<NumericUpDown Grid.Row="2" Grid.Column="10"
Minimum="1"
Maximum="100000"
Increment="1"
Value="{Binding Material.BottleCost}"/>
<TextBlock Grid.Row="2" Grid.Column="12"
VerticalAlignment="Center"
ToolTip.Tip="Number of bottles in stock"
Text="Stock:"/>
<NumericUpDown Grid.Row="2" Grid.Column="14"
Minimum="1"
Maximum="100000"
Increment="1"
Value="{Binding Material.BottleCost}"/>
<TextBlock Grid.Row="2" Grid.Column="16"
VerticalAlignment="Center"
Text=""/>
<TextBlock Grid.Row="2" Grid.Column="18"
VerticalAlignment="Center"
ToolTip.Tip="Number of bottles in stock"
Text="Stock:"/>
<NumericUpDown Grid.Row="2" Grid.Column="20"
Minimum="1"
Maximum="100000"
Increment="1"
Value="{Binding Material.BottlesInStock}"/>
<TextBlock Grid.Row="2" Grid.Column="22"
<TextBlock Grid.Row="2" Grid.Column="16"
VerticalAlignment="Center"
Text="units"/>
</Grid>
+33 -56
View File
@@ -136,7 +136,7 @@
<Grid RowDefinitions="Auto,10,Auto"
ColumnDefinitions="Auto,10,150,5,Auto">
ColumnDefinitions="Auto,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
@@ -144,16 +144,13 @@
Text="Horizontal limiting margin:"/>
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
ToolTip.Tip="Limits the windows and dialogs maximum width to the screen resolution less this margin"
Minimum="0"
Maximum="1000"
Increment="1"
Value="{Binding Settings.General.WindowsHorizontalMargin}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
@@ -161,18 +158,13 @@
Text="Vertical limiting margin:"/>
<NumericUpDown Grid.Row="2" Grid.Column="2"
Classes="ValueLabel ValueLabel_px"
VerticalAlignment="Center"
ToolTip.Tip="Limits windows and dialogs maximum height to the screen resolution less this margin"
Minimum="0"
Maximum="1000"
Increment="1"
Value="{Binding Settings.General.WindowsVerticalMargin}"/>
<TextBlock Grid.Row="2" Grid.Column="4"
VerticalAlignment="Center"
Text="px"/>
</Grid>
<CheckBox IsChecked="{Binding Settings.General.ExpandDescriptions}"
@@ -879,33 +871,24 @@
<StackPanel Orientation="Vertical">
<TextBlock Padding="10" Background="LightBlue" FontWeight="Bold" Text="Crosshairs"/>
<Grid Margin="10" RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,150,*,Auto,Auto">
<Grid Margin="10" RowDefinitions="Auto,10,Auto" ColumnDefinitions="Auto,150,*,Auto">
<CheckBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
VerticalAlignment="Center"
Content="Show crosshairs for selected issues only"
IsChecked="{Binding Settings.LayerPreview.CrosshairShowOnlyOnSelectedIssues}"
/>
IsChecked="{Binding Settings.LayerPreview.CrosshairShowOnlyOnSelectedIssues}"/>
<TextBlock Grid.Row="0" Grid.Column="2"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Text="Crosshair size:"/>
<NumericUpDown Grid.Row="0" Grid.Column="3"
Classes="ValueLabel ValueLabel_px"
Margin="10,0,0,0"
VerticalAlignment="Center"
Minimum="1"
Maximum="1000000"
Width="70"
Value="{Binding Settings.LayerPreview.CrosshairLength}"
/>
<TextBlock Grid.Row="0" Grid.Column="4"
Margin="5,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Text="px"/>
Value="{Binding Settings.LayerPreview.CrosshairLength}"/>
<TextBlock Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
@@ -914,28 +897,20 @@
VerticalAlignment="Center"
Margin="10,0,0,0"
Items="{Binding ZoomRanges}"
SelectedIndex="{Binding Settings.LayerPreview.CrosshairFadeLevelIndex}"
/>
SelectedIndex="{Binding Settings.LayerPreview.CrosshairFadeLevelIndex}"/>
<TextBlock Grid.Row="2" Grid.Column="2"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Text="Crosshair margin:"/>
<NumericUpDown Grid.Row="2" Grid.Column="3"
Classes="ValueLabel ValueLabel_px"
Margin="10,0,0,0"
VerticalAlignment="Center"
Minimum="1"
Maximum="255"
Width="70"
Value="{Binding Settings.LayerPreview.CrosshairMargin}"
/>
<TextBlock Grid.Row="2" Grid.Column="4"
Margin="5,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Text="px"/>
Value="{Binding Settings.LayerPreview.CrosshairMargin}"/>
</Grid>
</StackPanel>
@@ -1226,10 +1201,9 @@
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
<NumericUpDown Width="60"
Minimum="1"
Minimum="0"
Maximum="254"
Value="{Binding Settings.Issues.ResinTrapBinaryThreshold}"
/>
Value="{Binding Settings.Issues.ResinTrapBinaryThreshold}"/>
<TextBlock
VerticalAlignment="Center"
Text="Pixel intensity threshold for resin trap detection"
@@ -1294,7 +1268,7 @@
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
<NumericUpDown Width="60"
Minimum="1"
Maximum="255"
Maximum="4294967295"
Value="{Binding Settings.Issues.SuctionCupRequiredAreaToConsider}"/>
<TextBlock
VerticalAlignment="Center"
@@ -1455,6 +1429,7 @@
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
<NumericUpDown Width="60"
Classes="ValueLabel ValueLabel_mm"
Minimum="-50"
Maximum="50"
Increment="0.1"
@@ -1633,7 +1608,7 @@
Minimum="0"
Maximum="255"/>
<TextBlock VerticalAlignment="Center" Text="Default maximum pixel area for Island removal (0 = disable)"/>
<TextBlock VerticalAlignment="Center" Text="Islands: Maximum pixel area for Island removal (0 = disable)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
@@ -1643,7 +1618,7 @@
Minimum="0"
Maximum="65535"/>
<TextBlock VerticalAlignment="Center" Text="Default maximum layers for recursive island removal (0 = All)"/>
<TextBlock VerticalAlignment="Center" Text="Islands: Maximum layers for recursive island removal (0 = All)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
@@ -1652,7 +1627,16 @@
Width="70"
Minimum="0"
Maximum="65535"/>
<TextBlock VerticalAlignment="Center" Text="Attempt to attach islands down to this layers (0 = Disabled)"/>
<TextBlock VerticalAlignment="Center" Text="Islands: Attempt to attach islands down to this layers (0 = Disabled)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
<NumericUpDown
Value="{Binding Settings.LayerRepair.ResinTrapsOverlapBy}"
Width="70"
Minimum="0"
Maximum="255"/>
<TextBlock VerticalAlignment="Center" Text="Resin traps: Overlap and expand resin trap area by this value in pixels (0 = Disabled)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,0" Spacing="10">
@@ -1662,7 +1646,7 @@
Minimum="0"
Maximum="255"/>
<TextBlock VerticalAlignment="Center" Text="Default 'Gap Closing' iterations"/>
<TextBlock VerticalAlignment="Center" Text="'Gap Closing' iterations"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
@@ -1672,7 +1656,7 @@
Minimum="0"
Maximum="255"/>
<TextBlock VerticalAlignment="Center" Text="Default 'Noise Removal' iterations"/>
<TextBlock VerticalAlignment="Center" Text="'Noise Removal' iterations"/>
</StackPanel>
</StackPanel>
@@ -1772,7 +1756,7 @@
<Grid Margin="10,0,10,10"
IsVisible="{Binding Settings.Automations.LightOffDelayExtraTimeVisible}"
RowDefinitions="Auto"
ColumnDefinitions="Auto,10,150,5,Auto,30,Auto,10,150,5,Auto">
ColumnDefinitions="Auto,10,Auto,30,Auto,10,Auto">
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
@@ -1780,31 +1764,24 @@
Text="Light-off delay:" />
<NumericUpDown Grid.Row="0" Grid.Column="2"
Classes="ValueLabel ValueLabel_s"
Minimum="0"
Maximum="255"
Increment="0.5"
FormatString="F2"
Value="{Binding Settings.Automations.LightOffDelay}"/>
<TextBlock Grid.Row="0" Grid.Column="4"
VerticalAlignment="Center"
Text="s" />
<TextBlock Grid.Row="0" Grid.Column="6"
VerticalAlignment="Center"
ToolTip.Tip="Auto set the extra 'bottom light-off delay' based on bottom lift height and speed."
Text="Bottom light-off delay:" />
<NumericUpDown Grid.Row="0" Grid.Column="8"
<NumericUpDown Grid.Row="0" Grid.Column="6"
Classes="ValueLabel ValueLabel_s"
Minimum="0"
Maximum="255"
Increment="0.5"
FormatString="F2"
Value="{Binding Settings.Automations.BottomLightOffDelay}"/>
<TextBlock Grid.Row="0" Grid.Column="10"
VerticalAlignment="Center"
Text="s" />
</Grid>