mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-21 07:57:08 +02:00
v2.4.3
* **(Add) Exposure time finder:** * Configurable zebra bars * Configurable text * Tune defaults values to fill the space * Add incremental loop circles to fill space on exposure text space * (Change) Default vertical windows margin from 250 to 400px
This commit is contained in:
@@ -1,5 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
## 08/02/2021 - v2.4.3
|
||||
|
||||
* **(Add) Exposure time finder:**
|
||||
* Configurable zebra bars
|
||||
* Configurable text
|
||||
* Tune defaults values to fill the space
|
||||
* Add incremental loop circles to fill space on exposure text space
|
||||
* (Change) Default vertical windows margin from 250 to 400px
|
||||
|
||||
|
||||
## 08/02/2021 - v2.4.2
|
||||
|
||||
* **(Improvement) Exposure time finder:**
|
||||
|
||||
@@ -27,13 +27,13 @@ namespace UVtools.Core.Operations
|
||||
{
|
||||
#region Constants
|
||||
|
||||
const byte TextSpacing = 60;
|
||||
const byte TextLineBreak = 30;
|
||||
const FontFace FontFace = Emgu.CV.CvEnum.FontFace.HersheyDuplex;
|
||||
const byte TextStartX = 10;
|
||||
const byte TextMarkingSpacing = 60;
|
||||
const byte TextMarkingLineBreak = 30;
|
||||
const FontFace TextMarkingFontFace = Emgu.CV.CvEnum.FontFace.HersheyDuplex;
|
||||
const byte TextMarkingStartX = 10;
|
||||
//const byte TextStartY = 50;
|
||||
const double TextScale = 0.8;
|
||||
const byte TextThickness = 2;
|
||||
const double TextMarkingScale = 0.8;
|
||||
const byte TextMarkingThickness = 2;
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -52,11 +52,21 @@ namespace UVtools.Core.Operations
|
||||
private bool _enableAntiAliasing = true;
|
||||
private bool _mirrorOutput;
|
||||
private decimal _baseHeight = 1;
|
||||
private decimal _holeHeight = 1;
|
||||
private decimal _holeMargin = 1.5m;
|
||||
private decimal _featuresHeight = 1;
|
||||
private decimal _featuresMargin = 1.5m;
|
||||
private Measures _unitOfMeasure = Measures.Pixels;
|
||||
private string _holeDiametersMm = "0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0";
|
||||
private string _holeDiametersPx = "2, 3, 4, 5, 6, 7, 8, 9, 10";
|
||||
private string _holeDiametersMm = "0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.4, 1.6";
|
||||
private string _holeDiametersPx = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16";
|
||||
private decimal _barSpacing = 1.5m;
|
||||
private decimal _barLength = 5;
|
||||
private byte _barVerticalSplitter = 1;
|
||||
private string _barThicknessesPx = "2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 23";
|
||||
private string _barThicknessesMm = "0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4";
|
||||
private FontFace _textFont = TextMarkingFontFace;
|
||||
private double _textScale = 1;
|
||||
private byte _textThickness = 2;
|
||||
private string _text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ/1";
|
||||
|
||||
private bool _multipleLayerHeight;
|
||||
private decimal _multipleLayerHeightMaximum = 0.1m;
|
||||
private decimal _multipleLayerHeightStep = 0.01m;
|
||||
@@ -72,6 +82,7 @@ namespace UVtools.Core.Operations
|
||||
private ObservableCollection<ExposureItem> _exposureTable = new();
|
||||
private CalibrateExposureFinderShapes _holeShape = CalibrateExposureFinderShapes.Square;
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
@@ -144,10 +155,10 @@ namespace UVtools.Core.Operations
|
||||
var result = $"[Layer Height: {_layerHeight}] " +
|
||||
$"[Bottom layers: {_bottomLayers}] " +
|
||||
$"[Exposure: {_bottomExposure}/{_normalExposure}] " +
|
||||
$"[TB:{_topBottomMargin} LR:{_leftRightMargin} PM:{_partMargin} CM:{_holeMargin}] " +
|
||||
$"[TB:{_topBottomMargin} LR:{_leftRightMargin} PM:{_partMargin} FM:{_featuresMargin}] " +
|
||||
$"[Chamfer: {_chamferLayers}] [Erode: {_erodeBottomIterations}] " +
|
||||
$"[Obj height: {_holeHeight}] " +
|
||||
$"[Holes: {Holes.Length}] " +
|
||||
$"[Obj height: {_featuresHeight}] " +
|
||||
$"[Holes: {Holes.Length}] [Bars: {Bars.Length}] [Text: {!string.IsNullOrWhiteSpace(_text)}]" +
|
||||
$"[AA: {_enableAntiAliasing}] [Mirror: {_mirrorOutput}]";
|
||||
if (!string.IsNullOrEmpty(ProfileName)) result = $"{ProfileName}: {result}";
|
||||
return result;
|
||||
@@ -266,20 +277,20 @@ namespace UVtools.Core.Operations
|
||||
set => RaiseAndSetIfChanged(ref _baseHeight, Math.Round(value, 2));
|
||||
}
|
||||
|
||||
public decimal HoleHeight
|
||||
public decimal FeaturesHeight
|
||||
{
|
||||
get => _holeHeight;
|
||||
set => RaiseAndSetIfChanged(ref _holeHeight, Math.Round(value, 2));
|
||||
get => _featuresHeight;
|
||||
set => RaiseAndSetIfChanged(ref _featuresHeight, Math.Round(value, 2));
|
||||
}
|
||||
|
||||
public decimal HoleMargin
|
||||
public decimal TotalHeight => _baseHeight + _featuresHeight;
|
||||
|
||||
public decimal FeaturesMargin
|
||||
{
|
||||
get => _holeMargin;
|
||||
set => RaiseAndSetIfChanged(ref _holeMargin, Math.Round(value, 2));
|
||||
get => _featuresMargin;
|
||||
set => RaiseAndSetIfChanged(ref _featuresMargin, Math.Round(value, 2));
|
||||
}
|
||||
|
||||
public decimal TotalHeight => BaseHeight + HoleHeight;
|
||||
|
||||
public CalibrateExposureFinderShapes HoleShape
|
||||
{
|
||||
get => _holeShape;
|
||||
@@ -351,7 +362,117 @@ namespace UVtools.Core.Operations
|
||||
|
||||
public int GetHolesLength(int[] holes)
|
||||
{
|
||||
return (int) (holes.Sum() + (holes.Length-1) * _holeMargin * Yppmm);
|
||||
return (int) (holes.Sum() + (holes.Length-1) * _featuresMargin * Yppmm);
|
||||
}
|
||||
|
||||
public decimal BarSpacing
|
||||
{
|
||||
get => _barSpacing;
|
||||
set => RaiseAndSetIfChanged(ref _barSpacing, value);
|
||||
}
|
||||
|
||||
public decimal BarLength
|
||||
{
|
||||
get => _barLength;
|
||||
set => RaiseAndSetIfChanged(ref _barLength, value);
|
||||
}
|
||||
|
||||
public byte BarVerticalSplitter
|
||||
{
|
||||
get => _barVerticalSplitter;
|
||||
set => RaiseAndSetIfChanged(ref _barVerticalSplitter, value);
|
||||
}
|
||||
|
||||
public string BarThicknessesPx
|
||||
{
|
||||
get => _barThicknessesPx;
|
||||
set => RaiseAndSetIfChanged(ref _barThicknessesPx, value);
|
||||
}
|
||||
|
||||
public string BarThicknessesMm
|
||||
{
|
||||
get => _barThicknessesMm;
|
||||
set => RaiseAndSetIfChanged(ref _barThicknessesMm, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all holes in pixels and ordered
|
||||
/// </summary>
|
||||
public int[] Bars
|
||||
{
|
||||
get
|
||||
{
|
||||
List<int> bars = new();
|
||||
|
||||
if (_unitOfMeasure == Measures.Millimeters)
|
||||
{
|
||||
var split = _barThicknessesMm.Split(',', StringSplitOptions.TrimEntries);
|
||||
foreach (var mmStr in split)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(mmStr)) continue;
|
||||
if (!decimal.TryParse(mmStr, out var mm)) continue;
|
||||
if (mm <= 0) continue;
|
||||
var mmPx = (int)Math.Floor(mm * Xppmm);
|
||||
if (bars.Contains(mmPx) || mmPx > 500) continue;
|
||||
bars.Add((int)Math.Floor(mm * Xppmm));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var split = _barThicknessesPx.Split(',', StringSplitOptions.TrimEntries);
|
||||
foreach (var pxStr in split)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(pxStr)) continue;
|
||||
if (!int.TryParse(pxStr, out var px)) continue;
|
||||
if (px <= 0) continue;
|
||||
if (bars.Contains(px) || px > 500) continue;
|
||||
bars.Add(px);
|
||||
}
|
||||
}
|
||||
|
||||
return bars.OrderBy(pixels => pixels).ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public int GetBarsWidth(int[] bars)
|
||||
{
|
||||
return (int)(bars.Sum() + (bars.Length + 1) * _barSpacing * Yppmm);
|
||||
}
|
||||
|
||||
public static Array TextFonts => Enum.GetValues(typeof(FontFace));
|
||||
|
||||
public FontFace TextFont
|
||||
{
|
||||
get => _textFont;
|
||||
set => RaiseAndSetIfChanged(ref _textFont, value);
|
||||
}
|
||||
|
||||
public double TextScale
|
||||
{
|
||||
get => _textScale;
|
||||
set => RaiseAndSetIfChanged(ref _textScale, Math.Round(value, 2));
|
||||
}
|
||||
|
||||
public byte TextThickness
|
||||
{
|
||||
get => _textThickness;
|
||||
set => RaiseAndSetIfChanged(ref _textThickness, value);
|
||||
}
|
||||
|
||||
public string Text
|
||||
{
|
||||
get => _text;
|
||||
set => RaiseAndSetIfChanged(ref _text, value);
|
||||
}
|
||||
|
||||
public Size TextSize
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(_text)) return Size.Empty;
|
||||
int baseline = 0;
|
||||
return CvInvoke.GetTextSize(_text, _textFont, _textScale, _textThickness, ref baseline);
|
||||
}
|
||||
}
|
||||
|
||||
public bool MultipleLayerHeight
|
||||
@@ -528,9 +649,11 @@ namespace UVtools.Core.Operations
|
||||
|
||||
#region Equality
|
||||
|
||||
|
||||
|
||||
private bool Equals(OperationCalibrateExposureFinder other)
|
||||
{
|
||||
return _layerHeight == other._layerHeight && _bottomLayers == other._bottomLayers && _bottomExposure == other._bottomExposure && _normalExposure == other._normalExposure && _topBottomMargin == other._topBottomMargin && _leftRightMargin == other._leftRightMargin && _chamferLayers == other._chamferLayers && _erodeBottomIterations == other._erodeBottomIterations && _partMargin == other._partMargin && _enableAntiAliasing == other._enableAntiAliasing && _mirrorOutput == other._mirrorOutput && _baseHeight == other._baseHeight && _holeHeight == other._holeHeight && _holeMargin == other._holeMargin && _holeShape == other._holeShape && _unitOfMeasure == other._unitOfMeasure && _holeDiametersMm == other._holeDiametersMm && _holeDiametersPx == other._holeDiametersPx && _multipleLayerHeight == other._multipleLayerHeight && _multipleLayerHeightMaximum == other._multipleLayerHeightMaximum && _multipleLayerHeightStep == other._multipleLayerHeightStep && _multipleExposures == other._multipleExposures && _exposureGenType == other._exposureGenType && _exposureGenIgnoreBaseExposure == other._exposureGenIgnoreBaseExposure && _exposureGenBottomStep == other._exposureGenBottomStep && _exposureGenNormalStep == other._exposureGenNormalStep && _exposureGenTests == other._exposureGenTests && Equals(_exposureTable, other._exposureTable);
|
||||
return _layerHeight == other._layerHeight && _bottomLayers == other._bottomLayers && _bottomExposure == other._bottomExposure && _normalExposure == other._normalExposure && _topBottomMargin == other._topBottomMargin && _leftRightMargin == other._leftRightMargin && _chamferLayers == other._chamferLayers && _erodeBottomIterations == other._erodeBottomIterations && _partMargin == other._partMargin && _enableAntiAliasing == other._enableAntiAliasing && _mirrorOutput == other._mirrorOutput && _baseHeight == other._baseHeight && _featuresHeight == other._featuresHeight && _featuresMargin == other._featuresMargin && _unitOfMeasure == other._unitOfMeasure && _holeDiametersMm == other._holeDiametersMm && _holeDiametersPx == other._holeDiametersPx && _barSpacing == other._barSpacing && _barLength == other._barLength && _barVerticalSplitter == other._barVerticalSplitter && _barThicknessesPx == other._barThicknessesPx && _barThicknessesMm == other._barThicknessesMm && _textFont == other._textFont && _textScale.Equals(other._textScale) && _textThickness == other._textThickness && _text == other._text && _multipleLayerHeight == other._multipleLayerHeight && _multipleLayerHeightMaximum == other._multipleLayerHeightMaximum && _multipleLayerHeightStep == other._multipleLayerHeightStep && _multipleExposures == other._multipleExposures && _exposureGenType == other._exposureGenType && _exposureGenIgnoreBaseExposure == other._exposureGenIgnoreBaseExposure && _exposureGenBottomStep == other._exposureGenBottomStep && _exposureGenNormalStep == other._exposureGenNormalStep && _exposureGenTests == other._exposureGenTests && _exposureGenManualLayerHeight == other._exposureGenManualLayerHeight && _exposureGenManualBottom == other._exposureGenManualBottom && _exposureGenManualNormal == other._exposureGenManualNormal && Equals(_exposureTable, other._exposureTable) && _holeShape == other._holeShape;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
@@ -553,12 +676,20 @@ namespace UVtools.Core.Operations
|
||||
hashCode.Add(_enableAntiAliasing);
|
||||
hashCode.Add(_mirrorOutput);
|
||||
hashCode.Add(_baseHeight);
|
||||
hashCode.Add(_holeHeight);
|
||||
hashCode.Add(_holeMargin);
|
||||
hashCode.Add((int) _holeShape);
|
||||
hashCode.Add(_featuresHeight);
|
||||
hashCode.Add(_featuresMargin);
|
||||
hashCode.Add((int) _unitOfMeasure);
|
||||
hashCode.Add(_holeDiametersMm);
|
||||
hashCode.Add(_holeDiametersPx);
|
||||
hashCode.Add(_barSpacing);
|
||||
hashCode.Add(_barLength);
|
||||
hashCode.Add(_barVerticalSplitter);
|
||||
hashCode.Add(_barThicknessesPx);
|
||||
hashCode.Add(_barThicknessesMm);
|
||||
hashCode.Add((int) _textFont);
|
||||
hashCode.Add(_textScale);
|
||||
hashCode.Add(_textThickness);
|
||||
hashCode.Add(_text);
|
||||
hashCode.Add(_multipleLayerHeight);
|
||||
hashCode.Add(_multipleLayerHeightMaximum);
|
||||
hashCode.Add(_multipleLayerHeightStep);
|
||||
@@ -568,7 +699,11 @@ namespace UVtools.Core.Operations
|
||||
hashCode.Add(_exposureGenBottomStep);
|
||||
hashCode.Add(_exposureGenNormalStep);
|
||||
hashCode.Add(_exposureGenTests);
|
||||
hashCode.Add(_exposureGenManualLayerHeight);
|
||||
hashCode.Add(_exposureGenManualBottom);
|
||||
hashCode.Add(_exposureGenManualNormal);
|
||||
hashCode.Add(_exposureTable);
|
||||
hashCode.Add((int) _holeShape);
|
||||
return hashCode.ToHashCode();
|
||||
}
|
||||
|
||||
@@ -629,31 +764,60 @@ namespace UVtools.Core.Operations
|
||||
public Mat[] GetLayers()
|
||||
{
|
||||
var holes = Holes;
|
||||
int holeMarginX = (int)(Xppmm * _holeMargin);
|
||||
int holeMarginY = (int)(Yppmm * _holeMargin);
|
||||
Rectangle rect = new Rectangle(new Point(1, 1),
|
||||
new Size(holeMarginX * 4 + holes[^1] * 2,
|
||||
holeMarginY * 3 + GetHolesLength(holes) + TextSpacing));
|
||||
if (holes.Length == 0) return null;
|
||||
var bars = Bars;
|
||||
var textSize = TextSize;
|
||||
|
||||
int featuresMarginX = (int)(Xppmm * _featuresMargin);
|
||||
int featuresMarginY = (int)(Yppmm * _featuresMargin);
|
||||
|
||||
int holePanelWidth = featuresMarginX * 2 + holes[^1];
|
||||
|
||||
|
||||
int yMaxSize = Math.Max(Math.Max(GetHolesLength(holes), GetBarsWidth(bars)), textSize.Width);
|
||||
|
||||
int xSize = holePanelWidth * 2;
|
||||
int ySize = featuresMarginX * 3 + yMaxSize + TextMarkingSpacing;
|
||||
|
||||
int barLengthPx = (int) (_barLength * Xppmm);
|
||||
int barSpacingPx = (int) (_barSpacing * Yppmm);
|
||||
int barsPanelWidth = 0;
|
||||
if (bars.Length > 0)
|
||||
{
|
||||
barsPanelWidth = barLengthPx * 2 + _barVerticalSplitter;
|
||||
xSize += barsPanelWidth + featuresMarginX;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!textSize.IsEmpty)
|
||||
{
|
||||
xSize += textSize.Height + featuresMarginX;
|
||||
}
|
||||
|
||||
int positiveSideWidth = xSize - holePanelWidth;
|
||||
|
||||
Rectangle rect = new Rectangle(new Point(1, 1), new Size(xSize, ySize));
|
||||
var layers = new Mat[2];
|
||||
layers[0] = EmguExtensions.InitMat(rect.Size.Inflate(2));
|
||||
|
||||
CvInvoke.Rectangle(layers[0], rect, EmguExtensions.WhiteByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
layers[1] = layers[0].Clone();
|
||||
CvInvoke.Rectangle(layers[1], new Rectangle(0, 0, rect.Size.Width / 2, layers[0].Height), EmguExtensions.BlackByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
layers[1] = layers[0].CloneBlank();
|
||||
CvInvoke.Rectangle(layers[1], new Rectangle(rect.Size.Width - holePanelWidth, 0, rect.Size.Width, layers[0].Height), EmguExtensions.WhiteByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
|
||||
//int holeXPos = (int) Math.Round(Xppmm * (CylinderMargin + maxCylinder / 2));
|
||||
// Print holes
|
||||
int holeXPos = 0;
|
||||
int holeYPos = 0;
|
||||
int xPos = 0;
|
||||
int yPos = 0;
|
||||
for (var layerIndex = 0; layerIndex < layers.Length; layerIndex++)
|
||||
{
|
||||
var layer = layers[layerIndex];
|
||||
holeYPos = holeMarginY;
|
||||
yPos = featuresMarginY;
|
||||
for (int i = 0; i < holes.Length; i++)
|
||||
{
|
||||
var diameter = holes[i];
|
||||
var radius = diameter / 2;
|
||||
holeXPos = rect.X + holeMarginX + holes[^1] - diameter;
|
||||
xPos = layers[0].Width - holePanelWidth - featuresMarginX;
|
||||
|
||||
CalibrateExposureFinderShapes effectiveShape = _holeShape == CalibrateExposureFinderShapes.Square || diameter < 6 ?
|
||||
CalibrateExposureFinderShapes.Square : CalibrateExposureFinderShapes.Circle;
|
||||
@@ -661,11 +825,11 @@ namespace UVtools.Core.Operations
|
||||
switch (effectiveShape)
|
||||
{
|
||||
case CalibrateExposureFinderShapes.Square:
|
||||
holeXPos = rect.X + holeMarginX + holes[^1] - diameter;
|
||||
xPos -= diameter;
|
||||
break;
|
||||
case CalibrateExposureFinderShapes.Circle:
|
||||
holeXPos = rect.X + holeMarginX + holes[^1] - radius;
|
||||
holeYPos += radius;
|
||||
xPos -= radius;
|
||||
yPos += radius;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -675,7 +839,7 @@ namespace UVtools.Core.Operations
|
||||
{
|
||||
if (diameter == 1)
|
||||
{
|
||||
layer.SetByte(holeXPos, holeYPos, 255);
|
||||
layer.SetByte(xPos, yPos, 255);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -683,13 +847,13 @@ namespace UVtools.Core.Operations
|
||||
{
|
||||
case CalibrateExposureFinderShapes.Square:
|
||||
CvInvoke.Rectangle(layers[layerIndex],
|
||||
new Rectangle(new Point(holeXPos, holeYPos), new Size(diameter-1, diameter-1)),
|
||||
new Rectangle(new Point(xPos, yPos), new Size(diameter-1, diameter-1)),
|
||||
EmguExtensions.WhiteByte, -1,
|
||||
_enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
break;
|
||||
case CalibrateExposureFinderShapes.Circle:
|
||||
CvInvoke.Circle(layers[layerIndex],
|
||||
new Point(holeXPos, holeYPos),
|
||||
new Point(xPos, yPos),
|
||||
radius, EmguExtensions.WhiteByte, -1,
|
||||
_enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
break;
|
||||
@@ -702,17 +866,17 @@ namespace UVtools.Core.Operations
|
||||
switch (effectiveShape)
|
||||
{
|
||||
case CalibrateExposureFinderShapes.Square:
|
||||
holeXPos = layers[0].Width - rect.X - holeMarginX - holes[^1];
|
||||
xPos = layers[0].Width - rect.X - featuresMarginX - holes[^1];
|
||||
break;
|
||||
case CalibrateExposureFinderShapes.Circle:
|
||||
holeXPos = layers[0].Width - rect.X - holeMarginX - holes[^1] + radius;
|
||||
xPos = layers[0].Width - rect.X - featuresMarginX - holes[^1] + radius;
|
||||
break;
|
||||
}
|
||||
|
||||
// Right side
|
||||
if (diameter == 1)
|
||||
{
|
||||
layer.SetByte(holeXPos, holeYPos, 0);
|
||||
layer.SetByte(xPos, yPos, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -720,13 +884,13 @@ namespace UVtools.Core.Operations
|
||||
{
|
||||
case CalibrateExposureFinderShapes.Square:
|
||||
CvInvoke.Rectangle(layers[layerIndex],
|
||||
new Rectangle(new Point(holeXPos, holeYPos), new Size(diameter-1, diameter-1)),
|
||||
new Rectangle(new Point(xPos, yPos), new Size(diameter-1, diameter-1)),
|
||||
EmguExtensions.BlackByte, -1,
|
||||
_enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
break;
|
||||
case CalibrateExposureFinderShapes.Circle:
|
||||
CvInvoke.Circle(layers[layerIndex],
|
||||
new Point(holeXPos, holeYPos),
|
||||
new Point(xPos, yPos),
|
||||
radius, EmguExtensions.BlackByte, -1,
|
||||
_enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
break;
|
||||
@@ -734,25 +898,67 @@ namespace UVtools.Core.Operations
|
||||
}
|
||||
|
||||
|
||||
holeYPos += holeMarginY;
|
||||
yPos += featuresMarginY;
|
||||
|
||||
switch (effectiveShape)
|
||||
{
|
||||
case CalibrateExposureFinderShapes.Square:
|
||||
holeYPos += diameter;
|
||||
yPos += diameter;
|
||||
break;
|
||||
case CalibrateExposureFinderShapes.Circle:
|
||||
holeYPos += radius;
|
||||
yPos += radius;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*if (_mirrorOutput)
|
||||
xPos = featuresMarginX;
|
||||
|
||||
// Print Zebra bars
|
||||
if (bars.Length > 0)
|
||||
{
|
||||
Parallel.ForEach(layers, mat => CvInvoke.Flip(mat, mat, FlipType.Horizontal));
|
||||
}*/
|
||||
yPos = featuresMarginY;
|
||||
for (int i = 0; i < bars.Length; i++)
|
||||
{
|
||||
// Print positive bottom
|
||||
CvInvoke.Rectangle(layers[1], new Rectangle(xPos, yPos, barLengthPx - 1, barSpacingPx - 1),
|
||||
EmguExtensions.WhiteByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
// Print positive top
|
||||
yPos += barSpacingPx;
|
||||
CvInvoke.Rectangle(layers[1], new Rectangle(xPos + barLengthPx + _barVerticalSplitter, yPos, barLengthPx - 1, bars[i] - 1),
|
||||
EmguExtensions.WhiteByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
yPos += bars[i];
|
||||
}
|
||||
|
||||
// Left over
|
||||
CvInvoke.Rectangle(layers[1], new Rectangle(xPos, yPos, barLengthPx - 1, barSpacingPx - 1),
|
||||
EmguExtensions.WhiteByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
|
||||
xPos += featuresMarginX;
|
||||
}
|
||||
|
||||
if (!textSize.IsEmpty)
|
||||
{
|
||||
CvInvoke.Rotate(layers[1], layers[1], RotateFlags.Rotate90CounterClockwise);
|
||||
CvInvoke.PutText(layers[1], _text, new Point(featuresMarginX, layers[1].Height - barsPanelWidth - xPos), _textFont, _textScale, EmguExtensions.WhiteByte, _textThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.Rotate(layers[1], layers[1], RotateFlags.Rotate90Clockwise);
|
||||
}
|
||||
|
||||
// Print a hardcoded spiral if have space
|
||||
if (positiveSideWidth >= 250)
|
||||
{
|
||||
xPos = (int) ((layers[0].Width - holePanelWidth) / 1.8);
|
||||
yPos = layers[0].Height - featuresMarginY - TextMarkingSpacing / 2;
|
||||
byte circleThickness = 5;
|
||||
byte radiusStep = 13;
|
||||
int count = -1;
|
||||
for (int radius = radiusStep; radius <= 100; radius += (radiusStep + count))
|
||||
{
|
||||
count++;
|
||||
CvInvoke.Circle(layers[1], new Point(xPos, yPos), radius, EmguExtensions.WhiteByte, circleThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
}
|
||||
CvInvoke.Circle(layers[1], new Point(xPos, yPos), 5, EmguExtensions.WhiteByte, -1, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
}
|
||||
|
||||
return layers;
|
||||
}
|
||||
@@ -771,16 +977,17 @@ namespace UVtools.Core.Operations
|
||||
CvInvoke.Line(thumbnail, new Point(thumbnail.Width - xSpacing, 0), new Point(thumbnail.Width - xSpacing, ySpacing + 5), new MCvScalar(255, 27, 245), 3);
|
||||
CvInvoke.PutText(thumbnail, "Exposure Time Cal.", new Point(xSpacing, ySpacing * 2), fontFace, fontScale, new MCvScalar(0, 255, 255), fontThickness);
|
||||
CvInvoke.PutText(thumbnail, $"{Microns}um @ {BottomExposure}s/{NormalExposure}s", new Point(xSpacing, ySpacing * 3), fontFace, fontScale, EmguExtensions.White3Byte, fontThickness);
|
||||
CvInvoke.PutText(thumbnail, $"Holes: {Holes.Length}", new Point(xSpacing, ySpacing * 4), fontFace, fontScale, EmguExtensions.White3Byte, fontThickness);
|
||||
CvInvoke.PutText(thumbnail, $"Features: {Holes.Length+Bars.Length}", new Point(xSpacing, ySpacing * 4), fontFace, fontScale, EmguExtensions.White3Byte, fontThickness);
|
||||
|
||||
return thumbnail;
|
||||
}
|
||||
|
||||
protected override bool ExecuteInternally(OperationProgress progress)
|
||||
{
|
||||
var layers = GetLayers();
|
||||
if (layers is null) return false;
|
||||
progress.ItemCount = 0;
|
||||
SanitizeExposureTable();
|
||||
var layers = GetLayers();
|
||||
if (layers[0].Width > SlicerFile.ResolutionX || layers[0].Height > SlicerFile.ResolutionY)
|
||||
{
|
||||
return false;
|
||||
@@ -796,7 +1003,10 @@ namespace UVtools.Core.Operations
|
||||
uint layerIndex = 0;
|
||||
int currentX = sideMarginPx;
|
||||
int currentY = topBottomMarginPx;
|
||||
int holeMarginY = (int)(Yppmm * _holeMargin);
|
||||
int featuresMarginX = (int)(Xppmm * _featuresMargin);
|
||||
int featuresMarginY = (int)(Yppmm * _featuresMargin);
|
||||
|
||||
var holes = Holes;
|
||||
|
||||
var anchor = new Point(-1, -1);
|
||||
using var kernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(3, 3), anchor);
|
||||
@@ -854,13 +1064,13 @@ namespace UVtools.Core.Operations
|
||||
CvInvoke.Erode(matRoi, matRoi, kernel, anchor, _chamferLayers - layerCountOnHeight, BorderType.Reflect101, default);
|
||||
}
|
||||
|
||||
var textHeightStart = matRoi.Height - holeMarginY - TextSpacing;
|
||||
CvInvoke.PutText(matRoi, $"{microns}u", new Point(TextStartX, textHeightStart), FontFace, TextScale, EmguExtensions.WhiteByte, TextThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{bottomExposure}s", new Point(TextStartX, textHeightStart + TextLineBreak), FontFace, TextScale, EmguExtensions.WhiteByte, TextThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{normalExposure}s", new Point(TextStartX, textHeightStart + TextLineBreak * 2), FontFace, TextScale, EmguExtensions.WhiteByte, TextThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{microns}u", new Point(matRoi.Width / 2 + TextStartX, textHeightStart), FontFace, TextScale, EmguExtensions.BlackByte, TextThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{bottomExposure}s", new Point(matRoi.Width / 2 + TextStartX, textHeightStart + TextLineBreak), FontFace, TextScale, EmguExtensions.BlackByte, TextThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{normalExposure}s", new Point(matRoi.Width / 2 + TextStartX, textHeightStart + TextLineBreak * 2), FontFace, TextScale, EmguExtensions.BlackByte, TextThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
var textHeightStart = matRoi.Height - featuresMarginY - TextMarkingSpacing;
|
||||
CvInvoke.PutText(matRoi, $"{microns}u", new Point(TextMarkingStartX, textHeightStart), TextMarkingFontFace, TextMarkingScale, EmguExtensions.WhiteByte, TextMarkingThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{bottomExposure}s", new Point(TextMarkingStartX, textHeightStart + TextMarkingLineBreak), TextMarkingFontFace, TextMarkingScale, EmguExtensions.WhiteByte, TextMarkingThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{normalExposure}s", new Point(TextMarkingStartX, textHeightStart + TextMarkingLineBreak * 2), TextMarkingFontFace, TextMarkingScale, EmguExtensions.WhiteByte, TextMarkingThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{microns}u", new Point(matRoi.Width - featuresMarginX * 2 - holes[^1] + TextMarkingStartX, textHeightStart), TextMarkingFontFace, TextMarkingScale, EmguExtensions.BlackByte, TextMarkingThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{bottomExposure}s", new Point(matRoi.Width - featuresMarginX * 2 - holes[^1] + TextMarkingStartX, textHeightStart + TextMarkingLineBreak), TextMarkingFontFace, TextMarkingScale, EmguExtensions.BlackByte, TextMarkingThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
CvInvoke.PutText(matRoi, $"{normalExposure}s", new Point(matRoi.Width - featuresMarginX * 2 - holes[^1] + TextMarkingStartX, textHeightStart + TextMarkingLineBreak * 2), TextMarkingFontFace, TextMarkingScale, EmguExtensions.BlackByte, TextMarkingThickness, _enableAntiAliasing ? LineType.AntiAlias : LineType.EightConnected);
|
||||
|
||||
Layer layer = new(layerIndex++, mat, SlicerFile)
|
||||
{
|
||||
|
||||
@@ -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.4.2</Version>
|
||||
<Version>2.4.3</Version>
|
||||
<Copyright>Copyright © 2020 PTRTECH</Copyright>
|
||||
<PackageIcon>UVtools.png</PackageIcon>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -54,7 +54,7 @@
|
||||
IsEnabled="{Binding !Operation.SyncLayers}"
|
||||
Text="Normal layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding !Operation.SyncLayers}"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
@@ -71,7 +71,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -84,7 +84,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -97,7 +97,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Part scale:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="1"
|
||||
Maximum="10"
|
||||
@@ -110,7 +110,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Margin:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -194,7 +194,7 @@
|
||||
Text="Iterations range:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsErodeEnabled}"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
@@ -207,7 +207,7 @@
|
||||
Text="-"/>
|
||||
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="6"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsErodeEnabled}"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
@@ -223,7 +223,7 @@
|
||||
Text="Step increment(s):"/>
|
||||
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="12"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsErodeEnabled}"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
@@ -278,7 +278,7 @@
|
||||
Text="Wall thickness:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsDimmingEnabled}"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
@@ -295,7 +295,7 @@
|
||||
Text="Brightness range:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsDimmingEnabled}"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
@@ -309,7 +309,7 @@
|
||||
Text="-"/>
|
||||
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="6"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsDimmingEnabled}"
|
||||
Increment="1"
|
||||
Minimum="2"
|
||||
@@ -321,7 +321,7 @@
|
||||
Text="Step increment(s):"/>
|
||||
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="12"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsEnabled="{Binding Operation.IsDimmingEnabled}"
|
||||
Increment="1"
|
||||
Minimum="2"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ToolTip.Tip="The printer display width. Required to calculate the pixels per mm."
|
||||
Text="Display width:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -40,7 +40,7 @@
|
||||
ToolTip.Tip="The printer display height. Required to calculate the pixels per mm."
|
||||
Text="Display height:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -68,7 +68,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -81,7 +81,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -95,7 +95,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -109,7 +109,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Top/bottom margin:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
@@ -122,7 +122,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Left/right margin:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
@@ -135,7 +135,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Part margin:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -149,7 +149,7 @@
|
||||
ToolTip.Tip="Chamfer the bottom and top layers"
|
||||
Text="Chamfer layers:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -161,7 +161,7 @@
|
||||
ToolTip.Tip="Erode bottom iterations to counter the elephant foot"
|
||||
Text="Erode bottom iter.:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -191,13 +191,13 @@
|
||||
|
||||
</Expander.Header>
|
||||
|
||||
<Grid RowDefinitions="Auto,10,Auto,10,Auto"
|
||||
<Grid RowDefinitions="Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto,10,Auto"
|
||||
ColumnDefinitions="Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto,20,Auto,10,Auto,5,Auto">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||
Text="Base height:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.3"
|
||||
Maximum="100"
|
||||
@@ -208,79 +208,210 @@
|
||||
Text="mm"/>
|
||||
|
||||
<TextBlock Grid.Row="0" Grid.Column="6"
|
||||
Text="Hole height:"
|
||||
Text="Features height:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="1"
|
||||
Maximum="100"
|
||||
FormatString="F02"
|
||||
Value="{Binding Operation.HoleHeight}"/>
|
||||
Value="{Binding Operation.FeaturesHeight}"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="10"
|
||||
VerticalAlignment="Center"
|
||||
Text="mm"/>
|
||||
|
||||
<TextBlock Grid.Row="0" Grid.Column="12"
|
||||
Text="Hole margin:"
|
||||
Text="Features margin:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="14"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="1"
|
||||
Maximum="100"
|
||||
FormatString="F02"
|
||||
Value="{Binding Operation.HoleMargin}"/>
|
||||
Value="{Binding Operation.FeaturesMargin}"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="16"
|
||||
VerticalAlignment="Center"
|
||||
Text="mm"/>
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
||||
Grid.ColumnSpan="17"
|
||||
FontWeight="Bold"
|
||||
Text="Pin (positive) / holes (negative):"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="0"
|
||||
Text="Shape:"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<ComboBox Grid.Row="2" Grid.Column="2"
|
||||
<ComboBox Grid.Row="4" Grid.Column="2"
|
||||
HorizontalAlignment="Stretch"
|
||||
Items="{Binding Operation.ShapesItems}"
|
||||
SelectedItem="{Binding Operation.HoleShape}"/>
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.Column="6"
|
||||
<TextBlock Grid.Row="4" Grid.Column="6"
|
||||
Text="Unit of measure:"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<ComboBox Grid.Row="2" Grid.Column="8"
|
||||
<ComboBox Grid.Row="4" Grid.Column="8"
|
||||
HorizontalAlignment="Stretch"
|
||||
Items="{Binding Operation.MeasuresItems}"
|
||||
SelectedItem="{Binding Operation.UnitOfMeasure}"/>
|
||||
|
||||
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="0"
|
||||
<TextBlock Grid.Row="6" Grid.Column="0"
|
||||
Text="Diameters:"
|
||||
ToolTip.Tip="Diameters separated by a comma (,).
|
||||

Order doesn't matter.
|
||||

Values are pixel square, eg: 3 = 3x3 = 9 pixel hole"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<TextBox Grid.Row="4" Grid.Column="2"
|
||||
<TextBox Grid.Row="6" Grid.Column="2"
|
||||
Grid.ColumnSpan="13"
|
||||
IsVisible="{Binding Operation.IsUnitOfMeasureMm}"
|
||||
Text="{Binding Operation.HoleDiametersMm}"/>
|
||||
|
||||
<TextBox Grid.Row="4" Grid.Column="2"
|
||||
<TextBox Grid.Row="6" Grid.Column="2"
|
||||
Grid.ColumnSpan="13"
|
||||
IsVisible="{Binding !Operation.IsUnitOfMeasureMm}"
|
||||
Text="{Binding Operation.HoleDiametersPx}"/>
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="16"
|
||||
<TextBlock Grid.Row="6" Grid.Column="16"
|
||||
IsVisible="{Binding Operation.IsUnitOfMeasureMm}"
|
||||
VerticalAlignment="Center"
|
||||
Text="mm"/>
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="16"
|
||||
<TextBlock Grid.Row="6" Grid.Column="16"
|
||||
IsVisible="{Binding !Operation.IsUnitOfMeasureMm}"
|
||||
VerticalAlignment="Center"
|
||||
Text="px"/>
|
||||
|
||||
<TextBlock Grid.Row="8" Grid.Column="0"
|
||||
Grid.ColumnSpan="17"
|
||||
FontWeight="Bold"
|
||||
Text="Zebra bars:"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
|
||||
<TextBlock Grid.Row="10" Grid.Column="0"
|
||||
Text="Bar spacing:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.01"
|
||||
Maximum="100"
|
||||
FormatString="F02"
|
||||
Value="{Binding Operation.BarSpacing}"/>
|
||||
<TextBlock Grid.Row="10" Grid.Column="4"
|
||||
VerticalAlignment="Center"
|
||||
Text="mm"/>
|
||||
|
||||
<TextBlock Grid.Row="10" Grid.Column="6"
|
||||
Text="Bar length:"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="8"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.01"
|
||||
Maximum="100"
|
||||
FormatString="F02"
|
||||
Value="{Binding Operation.BarLength}"/>
|
||||
<TextBlock Grid.Row="10" Grid.Column="10"
|
||||
VerticalAlignment="Center"
|
||||
Text="mm"/>
|
||||
|
||||
<TextBlock Grid.Row="10" Grid.Column="12"
|
||||
Text="Vertical splitter:"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="14"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
FormatString="F02"
|
||||
Value="{Binding Operation.BarVerticalSplitter}"/>
|
||||
<TextBlock Grid.Row="10" Grid.Column="16"
|
||||
VerticalAlignment="Center"
|
||||
Text="px"/>
|
||||
|
||||
<TextBlock Grid.Row="12" Grid.Column="0"
|
||||
Text="Thicknesses:"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<TextBox Grid.Row="12" Grid.Column="2"
|
||||
Grid.ColumnSpan="13"
|
||||
IsVisible="{Binding Operation.IsUnitOfMeasureMm}"
|
||||
Text="{Binding Operation.BarThicknessesMm}"/>
|
||||
|
||||
<TextBox Grid.Row="12" Grid.Column="2"
|
||||
Grid.ColumnSpan="13"
|
||||
IsVisible="{Binding !Operation.IsUnitOfMeasureMm}"
|
||||
Text="{Binding Operation.BarThicknessesPx}"/>
|
||||
<TextBlock Grid.Row="12" Grid.Column="16"
|
||||
IsVisible="{Binding Operation.IsUnitOfMeasureMm}"
|
||||
VerticalAlignment="Center"
|
||||
Text="mm"/>
|
||||
<TextBlock Grid.Row="12" Grid.Column="16"
|
||||
IsVisible="{Binding !Operation.IsUnitOfMeasureMm}"
|
||||
VerticalAlignment="Center"
|
||||
Text="px"/>
|
||||
|
||||
<TextBlock Grid.Row="14" Grid.Column="0"
|
||||
Grid.ColumnSpan="17"
|
||||
FontWeight="Bold"
|
||||
Text="Text:"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<TextBlock Grid.Row="16" Grid.Column="0"
|
||||
Text="Font:"
|
||||
VerticalAlignment="Center"/>
|
||||
<ComboBox Grid.Row="16" Grid.Column="2"
|
||||
Grid.ColumnSpan="2"
|
||||
VerticalAlignment="Center"
|
||||
HorizontalAlignment="Stretch"
|
||||
Items="{Binding Operation.TextFonts}"
|
||||
SelectedItem="{Binding Operation.TextFont}"
|
||||
/>
|
||||
|
||||
<TextBlock Grid.Row="16" Grid.Column="6"
|
||||
Text="Text scale:"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="16" Grid.Column="8"
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="100"
|
||||
FormatString="F02"
|
||||
Value="{Binding Operation.TextScale}"/>
|
||||
<TextBlock Grid.Row="16" Grid.Column="10"
|
||||
VerticalAlignment="Center"
|
||||
Text="x"/>
|
||||
|
||||
<TextBlock Grid.Row="16" Grid.Column="12"
|
||||
Text="Text thickness:"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="16" Grid.Column="14"
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Operation.TextThickness}"/>
|
||||
<TextBlock Grid.Row="16" Grid.Column="16"
|
||||
VerticalAlignment="Center"
|
||||
Text="px"/>
|
||||
|
||||
<TextBlock Grid.Row="18" Grid.Column="0"
|
||||
Text="Thicknesses:"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<TextBox Grid.Row="18" Grid.Column="2"
|
||||
Grid.ColumnSpan="13"
|
||||
Text="{Binding Operation.Text}"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Expander>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Layer height:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="0.01"
|
||||
Maximum="0.30"
|
||||
@@ -55,7 +55,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -70,7 +70,7 @@
|
||||
ToolTip.Tip="Number of layers at normal exposure between bottom and normal layers"
|
||||
Text="Interface layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
@@ -83,7 +83,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal layers:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -96,7 +96,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom exposure:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -110,7 +110,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal exposure:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -125,7 +125,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Outer margin:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -138,7 +138,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Inner margin:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -181,7 +181,7 @@
|
||||
Text="Brightness range:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="254"
|
||||
@@ -194,7 +194,7 @@
|
||||
Text="-"/>
|
||||
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="6"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="2"
|
||||
Maximum="255"
|
||||
@@ -205,7 +205,7 @@
|
||||
Text="Step increment(s):"/>
|
||||
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="12"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="2"
|
||||
Maximum="254"
|
||||
@@ -227,7 +227,7 @@
|
||||
Text="Center hole diameter:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="2"
|
||||
Maximum="10000"
|
||||
@@ -255,7 +255,7 @@
|
||||
Text="Division thickness:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -275,7 +275,7 @@
|
||||
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="9"
|
||||
Grid.ColumnSpan="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -293,7 +293,7 @@
|
||||
Text="X text offset:"/>
|
||||
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="-10000"
|
||||
Maximum="10000"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ToolTip.Tip="The printer display width. Required to calculate the pixels per mm."
|
||||
Text="Display width:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -40,7 +40,7 @@
|
||||
ToolTip.Tip="The printer display height. Required to calculate the pixels per mm."
|
||||
Text="Display height:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -54,7 +54,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Layer height:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="0.01"
|
||||
Maximum="0.30"
|
||||
@@ -69,7 +69,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -82,7 +82,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -96,7 +96,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -110,7 +110,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Base height:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -124,7 +124,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Base diameter:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="10000"
|
||||
@@ -138,7 +138,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Ceil height:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -153,7 +153,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Body height:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -195,7 +195,7 @@
|
||||
ToolTip.Tip="Chamfer the bottom layers"
|
||||
Text="Chamfer layers:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -234,7 +234,7 @@
|
||||
Text="Number of spirals:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="10"
|
||||
@@ -255,7 +255,7 @@
|
||||
Text="Spiral diameter:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0.1"
|
||||
Maximum="10000"
|
||||
@@ -270,7 +270,7 @@
|
||||
ToolTip.Tip="Spirals will turn this angle per layer."
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0.01"
|
||||
Maximum="359.99"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ToolTip.Tip="The printer display width. Required to calculate the pixels per mm."
|
||||
Text="Display width:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -40,7 +40,7 @@
|
||||
ToolTip.Tip="The printer display height. Required to calculate the pixels per mm."
|
||||
Text="Display height:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -54,7 +54,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Layer height:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="0.01"
|
||||
Maximum="0.30"
|
||||
@@ -69,7 +69,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -82,7 +82,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -96,7 +96,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -110,7 +110,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Z height:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="5"
|
||||
Maximum="100"
|
||||
@@ -150,7 +150,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Top/bottom margin:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -163,7 +163,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Left/right margin:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -177,7 +177,7 @@
|
||||
ToolTip.Tip="Chamfer the bottom and top layers"
|
||||
Text="Chamfer layers:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -189,7 +189,7 @@
|
||||
ToolTip.Tip="Erode bottom iterations to counter the elephant foot"
|
||||
Text="Erode bottom iter.:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
@@ -206,7 +206,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Part margin:"/>
|
||||
<NumericUpDown Grid.Row="12" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -260,7 +260,7 @@
|
||||
Text="Diameter:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1.0"
|
||||
Minimum="2"
|
||||
Maximum="1000"
|
||||
@@ -274,7 +274,7 @@
|
||||
Text="Hole diameter:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1.0"
|
||||
Minimum="2"
|
||||
Maximum="1000"
|
||||
@@ -322,7 +322,7 @@
|
||||
Text="Thinner models:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
@@ -331,7 +331,7 @@
|
||||
Text="-Offset:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="-1000"
|
||||
Maximum="0"
|
||||
@@ -345,7 +345,7 @@
|
||||
Text="-Step:"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="14"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="-1000"
|
||||
Maximum="-0.01"
|
||||
@@ -361,7 +361,7 @@
|
||||
IsEnabled="{Binding !Operation.FuseParts}"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
@@ -372,7 +372,7 @@
|
||||
IsEnabled="{Binding !Operation.FuseParts}"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
@@ -389,7 +389,7 @@
|
||||
IsEnabled="{Binding !Operation.FuseParts}"
|
||||
VerticalAlignment="Center"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="14"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="0.01"
|
||||
Maximum="1000"
|
||||
@@ -423,7 +423,7 @@
|
||||
<StackPanel Orientation="Horizontal" Spacing="5">
|
||||
<TextBlock VerticalAlignment="Center" Text="X:"/>
|
||||
<NumericUpDown
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -435,7 +435,7 @@
|
||||
<TextBlock VerticalAlignment="Center" Text="Y:"
|
||||
Margin="20,0,0,0"/>
|
||||
<NumericUpDown
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -447,7 +447,7 @@
|
||||
<TextBlock VerticalAlignment="Center" Text="Z:"
|
||||
Margin="20,0,0,0"/>
|
||||
<NumericUpDown
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
ToolTip.Tip="The printer display width. Required to calculate the pixels per mm."
|
||||
Text="Display width:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -41,7 +41,7 @@
|
||||
ToolTip.Tip="The printer display height. Required to calculate the pixels per mm."
|
||||
Text="Display height:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -55,7 +55,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Layer height:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.01"
|
||||
Minimum="0.01"
|
||||
Maximum="0.30"
|
||||
@@ -70,7 +70,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom layers:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="1"
|
||||
Maximum="1000"
|
||||
@@ -83,7 +83,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Bottom exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -97,7 +97,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Normal exposure:"/>
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0.1"
|
||||
Maximum="200"
|
||||
@@ -111,7 +111,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="X length:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="5"
|
||||
Maximum="100"
|
||||
@@ -125,7 +125,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Y length:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="5"
|
||||
Maximum="100"
|
||||
@@ -139,7 +139,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Z height:"/>
|
||||
<NumericUpDown Grid.Row="8" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="5"
|
||||
Maximum="100"
|
||||
@@ -178,7 +178,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Top/bottom margin:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -191,7 +191,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Left/right margin:"/>
|
||||
<NumericUpDown Grid.Row="10" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -209,7 +209,7 @@
|
||||
VerticalAlignment="Center"
|
||||
IsEnabled="{Binding Operation.HollowModel}"/>
|
||||
<NumericUpDown Grid.Row="12" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.5"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -357,7 +357,7 @@
|
||||
<StackPanel Orientation="Horizontal" Spacing="5">
|
||||
<TextBlock VerticalAlignment="Center" Text="X:"/>
|
||||
<NumericUpDown
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -369,7 +369,7 @@
|
||||
<TextBlock VerticalAlignment="Center" Text="Y:"
|
||||
Margin="20,0,0,0"/>
|
||||
<NumericUpDown
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
@@ -381,7 +381,7 @@
|
||||
<TextBlock VerticalAlignment="Center" Text="Z:"
|
||||
Margin="20,0,0,0"/>
|
||||
<NumericUpDown
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="100"
|
||||
|
||||
@@ -639,7 +639,7 @@
|
||||
Maximum="0.20"
|
||||
Increment="0.01"
|
||||
FormatString="F02"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Operation.CalcOptimalModelTilt.LayerHeight}"
|
||||
/>
|
||||
<TextBlock
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
ToolTip.Tip="The printer display width. Required to calculate the XY pixel resolution."
|
||||
Text="Display width:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
@@ -32,7 +32,7 @@
|
||||
ToolTip.Tip="The printer display height. Required to calculate the XY pixel resolution."
|
||||
Text="Display height:"/>
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Increment="0.1"
|
||||
Minimum="0"
|
||||
Maximum="10000"
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
Minimum="0"
|
||||
Maximum="65535"
|
||||
Increment="1"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Operation.WallThickness}"
|
||||
/>
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
Increment="1"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Operation.InfillBrightness}"
|
||||
/>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
Minimum="0"
|
||||
Maximum="65535"
|
||||
Increment="1"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Operation.InfillThickness}"
|
||||
/>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
Minimum="{Binding #InfillThickness.Value}"
|
||||
Maximum="65535"
|
||||
Increment="1"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Operation.InfillSpacing}"
|
||||
/>
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
VerticalAlignment="Center"
|
||||
Text="Start at layer:"/>
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="{Binding MaximumLayer}"
|
||||
Value="{Binding Operation.StartLayerIndex}"/>
|
||||
@@ -61,7 +61,7 @@
|
||||
IsVisible="{Binding Operation.IsImportStackType}"
|
||||
Text="Stack margin:"/>
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
IsVisible="{Binding Operation.IsImportStackType}"
|
||||
Minimum="0"
|
||||
Maximum="65535"
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="65535"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
ToolTip.Tip="The pixel area threshold above which islands will not be removed by this repair.
|
||||

Islands remaining after repair will require supports to be added manually."
|
||||
Value="{Binding Operation.RemoveIslandsBelowEqualPixelCount}"
|
||||
@@ -82,7 +82,7 @@
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="65535"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
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.
|
||||

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.
|
||||


|
||||
@@ -124,7 +124,7 @@
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
ToolTip.Tip="Attempt to repair islands by attaching them to other nearby islands in safe increments.
|
||||

If enabled, gap closing is attempted before island removal is attempted.
|
||||

Set iterations to 0 to disable.
|
||||
@@ -151,7 +151,7 @@
|
||||
Increment="1"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
ToolTip.Tip="Remove individual or small clusters of pixels in iterations.
|
||||

This settings can remove noise from a layer, but will also remove fine details.
|
||||

Set iterations to 0 to disable.
|
||||
|
||||
@@ -831,7 +831,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
HorizontalAlignment="Stretch"
|
||||
Value="{Binding DrawingPixelDrawing.BrushSize}"/>
|
||||
<TextBlock
|
||||
@@ -850,7 +850,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="-1"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
HorizontalAlignment="Stretch"
|
||||
Value="{Binding DrawingPixelDrawing.Thickness}"/>
|
||||
<TextBlock
|
||||
@@ -869,7 +869,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
HorizontalAlignment="Stretch"
|
||||
Value="{Binding DrawingPixelDrawing.RemovePixelBrightness}"/>
|
||||
<TextBlock
|
||||
@@ -888,7 +888,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
HorizontalAlignment="Stretch"
|
||||
Value="{Binding DrawingPixelDrawing.PixelBrightness}"/>
|
||||
<TextBlock
|
||||
@@ -907,7 +907,7 @@
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
HorizontalAlignment="Stretch"
|
||||
Value="{Binding DrawingPixelDrawing.LayersBelow}"/>
|
||||
|
||||
@@ -922,7 +922,7 @@
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
HorizontalAlignment="Stretch"
|
||||
Value="{Binding DrawingPixelDrawing.LayersAbove}"/>
|
||||
|
||||
@@ -992,7 +992,7 @@
|
||||
Minimum="0.1"
|
||||
Maximum="255"
|
||||
Increment="0.1"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelText.FontScale}"/>
|
||||
|
||||
|
||||
@@ -1007,7 +1007,7 @@
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelText.Thickness}"/>
|
||||
|
||||
<TextBlock
|
||||
@@ -1038,7 +1038,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelText.RemovePixelBrightness}"/>
|
||||
<TextBlock
|
||||
Grid.Row="12"
|
||||
@@ -1056,7 +1056,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelText.PixelBrightness}"/>
|
||||
<TextBlock
|
||||
Grid.Row="14"
|
||||
@@ -1075,7 +1075,7 @@
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelText.LayersBelow}"/>
|
||||
|
||||
|
||||
@@ -1089,7 +1089,7 @@
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelText.LayersAbove}"/>
|
||||
|
||||
</Grid>
|
||||
@@ -1130,7 +1130,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelEraser.PixelBrightness}"/>
|
||||
<TextBlock
|
||||
Grid.Row="0"
|
||||
@@ -1148,7 +1148,7 @@
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelEraser.LayersBelow}"/>
|
||||
|
||||
<TextBlock
|
||||
@@ -1161,7 +1161,7 @@
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Minimum="0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelEraser.LayersAbove}"/>
|
||||
|
||||
|
||||
@@ -1254,7 +1254,7 @@
|
||||
Grid.Column="2"
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding DrawingPixelSupport.PixelBrightness}"/>
|
||||
<TextBlock
|
||||
Grid.Row="6"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
|
||||
<RepositoryType>Git</RepositoryType>
|
||||
<Version>2.4.2</Version>
|
||||
<Version>2.4.3</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace UVtools.WPF
|
||||
private bool _loadDemoFileOnStartup = true;
|
||||
private bool _windowsTakeIntoAccountScreenScaling = true;
|
||||
private ushort _windowsHorizontalMargin = 200;
|
||||
private ushort _windowsVerticalMargin = 250;
|
||||
private ushort _windowsVerticalMargin = 400;
|
||||
private byte _defaultOpenFileExtensionIndex;
|
||||
private string _defaultDirectoryOpenFile;
|
||||
private string _defaultDirectorySaveFile;
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip.Tip="Limits the windows and dialogs maximum width to the screen resolution less this margin"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
Increment="1"
|
||||
@@ -69,7 +69,7 @@
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip.Tip="Limits windows and dialogs maximum height to the screen resolution less this margin"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="1000"
|
||||
Increment="1"
|
||||
@@ -265,7 +265,7 @@
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2"
|
||||
Margin="10,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="50"
|
||||
Value="{Binding Settings.LayerPreview.VolumeBoundsOutlineThickness}"
|
||||
@@ -299,7 +299,7 @@
|
||||
<NumericUpDown Grid.Row="4" Grid.Column="2"
|
||||
Margin="10,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="50"
|
||||
Value="{Binding Settings.LayerPreview.LayerBoundsOutlineThickness}"
|
||||
@@ -334,7 +334,7 @@
|
||||
<NumericUpDown Grid.Row="6" Grid.Column="2"
|
||||
Margin="10,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="50"
|
||||
Value="{Binding Settings.LayerPreview.HollowOutlineLineThickness}"
|
||||
@@ -593,7 +593,7 @@
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="3"
|
||||
Margin="10,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="1000000"
|
||||
Width="70"
|
||||
@@ -624,7 +624,7 @@
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="3"
|
||||
Margin="10,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Width="70"
|
||||
@@ -737,7 +737,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="254"
|
||||
Value="{Binding Settings.Issues.IslandBinaryThreshold}"
|
||||
@@ -753,7 +753,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.IslandRequiredAreaToProcessCheck}"
|
||||
@@ -767,7 +767,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToProcessCheck}"
|
||||
@@ -781,7 +781,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0.05"
|
||||
Maximum="0.95"
|
||||
Increment="0.05"
|
||||
@@ -798,7 +798,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="50"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToSupport}"
|
||||
@@ -813,7 +813,7 @@
|
||||
<!--
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.IslandRequiredPixelsToSupport}"
|
||||
@@ -829,7 +829,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="50"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.IslandRequiredPixelBrightnessToSupport}"
|
||||
@@ -861,7 +861,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="2"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.OverhangErodeIterations}"
|
||||
@@ -885,7 +885,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="254"
|
||||
Value="{Binding Settings.Issues.ResinTrapBinaryThreshold}"
|
||||
@@ -902,7 +902,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.ResinTrapRequiredAreaToProcessCheck}"
|
||||
@@ -916,7 +916,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.ResinTrapRequiredBlackPixelsToDrain}"
|
||||
@@ -930,7 +930,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10,0,10,10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="150"
|
||||
Value="{Binding Settings.Issues.ResinTrapMaximumPixelBrightnessToDrain}"
|
||||
@@ -953,7 +953,7 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Margin="10" Spacing="10">
|
||||
<NumericUpDown Width="60"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Value="{Binding Settings.Issues.TouchingBoundMinimumPixelBrightness}"
|
||||
@@ -1016,7 +1016,7 @@
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Margin="0,0,5,0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Settings.Issues.TouchingBoundMarginLeft}" />
|
||||
|
||||
|
||||
@@ -1034,7 +1034,7 @@
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Margin="0,0,0,5"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Settings.Issues.TouchingBoundMarginTop}" />
|
||||
|
||||
<TextBlock
|
||||
@@ -1050,7 +1050,7 @@
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Margin="5,0,0,0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Settings.Issues.TouchingBoundMarginRight}" />
|
||||
|
||||
<TextBlock
|
||||
@@ -1067,7 +1067,7 @@
|
||||
Minimum="1"
|
||||
Maximum="255"
|
||||
Margin="0,5,0,0"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Value="{Binding Settings.Issues.TouchingBoundMarginBottom}" />
|
||||
|
||||
<CheckBox
|
||||
@@ -1242,7 +1242,7 @@
|
||||
<NumericUpDown
|
||||
Value="{Binding Settings.LayerRepair.RemoveIslandsBelowEqualPixels}"
|
||||
Width="70"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="255"/>
|
||||
<TextBlock VerticalAlignment="Center" Text="Default maximum pixel area for Island removal (0 = disable)"/>
|
||||
@@ -1252,7 +1252,7 @@
|
||||
<NumericUpDown
|
||||
Value="{Binding Settings.LayerRepair.RemoveIslandsRecursiveIterations}"
|
||||
Width="70"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="65535"/>
|
||||
<TextBlock VerticalAlignment="Center" Text="Default maximum layers for recursive island removal (0 = All)"/>
|
||||
@@ -1262,7 +1262,7 @@
|
||||
<NumericUpDown
|
||||
Value="{Binding Settings.LayerRepair.ClosingIterations}"
|
||||
Width="70"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="255"/>
|
||||
<TextBlock VerticalAlignment="Center" Text="Default 'Gap Closing' iterations"/>
|
||||
@@ -1272,7 +1272,7 @@
|
||||
<NumericUpDown
|
||||
Value="{Binding Settings.LayerRepair.OpeningIterations}"
|
||||
Width="70"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="255"/>
|
||||
<TextBlock VerticalAlignment="Center" Text="Default 'Noise Removal' iterations"/>
|
||||
@@ -1345,7 +1345,7 @@
|
||||
Text="Light-off delay:" />
|
||||
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
Increment="0.5"
|
||||
@@ -1362,7 +1362,7 @@
|
||||

Use '0' to ignore this automation."
|
||||
Text="Bottom light-off delay:" />
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="8"
|
||||
ClipValueToMinMax="True"
|
||||
|
||||
Minimum="0"
|
||||
Maximum="255"
|
||||
Increment="0.5"
|
||||
|
||||
@@ -528,7 +528,6 @@ namespace UVtools.WPF.Windows
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Ensure the description don't stretch window
|
||||
DispatcherTimer.Run(() =>
|
||||
|
||||
Reference in New Issue
Block a user