mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-09 01:52:32 +02:00
Add Merge layers on same position
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Emgu.CV;
|
||||
@@ -23,6 +24,7 @@ namespace UVtools.Core.Operations
|
||||
private string _filePath;
|
||||
private Enumerations.RotateDirection _rotateDirection = Enumerations.RotateDirection.None;
|
||||
private Enumerations.FlipDirection _flipDirection = Enumerations.FlipDirection.None;
|
||||
private bool _mergeSamePositionedLayers = true;
|
||||
private bool _cropByRoi = true;
|
||||
|
||||
#endregion
|
||||
@@ -86,6 +88,12 @@ namespace UVtools.Core.Operations
|
||||
set => RaiseAndSetIfChanged(ref _flipDirection, value);
|
||||
}
|
||||
|
||||
public bool MergeSamePositionedLayers
|
||||
{
|
||||
get => _mergeSamePositionedLayers;
|
||||
set => RaiseAndSetIfChanged(ref _mergeSamePositionedLayers, value);
|
||||
}
|
||||
|
||||
public bool CropByROI
|
||||
{
|
||||
get => _cropByRoi;
|
||||
@@ -118,9 +126,15 @@ namespace UVtools.Core.Operations
|
||||
using var sumMat32 = EmguExtensions.InitMat(SlicerFile.Resolution, 1, DepthType.Cv32S);
|
||||
var sumMat32Roi = GetRoiOrDefault(sumMat32);
|
||||
using var mask = GetMask(sumMat32);
|
||||
|
||||
|
||||
Parallel.For(LayerIndexStart, LayerIndexEnd+1, CoreSettings.ParallelOptions, layerIndex =>
|
||||
var layerRange = _mergeSamePositionedLayers
|
||||
? SlicerFile.LayerManager.GetDistinctLayersByPositionZ(LayerIndexStart, LayerIndexEnd) .ToArray()
|
||||
: GetSelectedLayerRange().ToArray();
|
||||
|
||||
progress.ItemCount = (uint)layerRange.Length;
|
||||
|
||||
|
||||
/*Parallel.For(LayerIndexStart, LayerIndexEnd+1, CoreSettings.ParallelOptions, layerIndex =>
|
||||
{
|
||||
if (progress.Token.IsCancellationRequested) return;
|
||||
|
||||
@@ -129,6 +143,25 @@ namespace UVtools.Core.Operations
|
||||
mat.ConvertTo(mat32, DepthType.Cv32S);
|
||||
var mat32Roi = GetRoiOrDefault(mat32);
|
||||
|
||||
lock (progress.Mutex)
|
||||
{
|
||||
CvInvoke.Add(sumMat32Roi, mat32Roi, sumMat32Roi, mask);
|
||||
progress++;
|
||||
}
|
||||
});*/
|
||||
|
||||
Parallel.ForEach(layerRange, CoreSettings.ParallelOptions, layer =>
|
||||
{
|
||||
if (progress.Token.IsCancellationRequested) return;
|
||||
|
||||
using var mat = _mergeSamePositionedLayers
|
||||
? SlicerFile.LayerManager.GetMergedMatForSequentialPositionedLayers(layer.Index)
|
||||
: layer.LayerMat;
|
||||
|
||||
using var mat32 = new Mat();
|
||||
mat.ConvertTo(mat32, DepthType.Cv32S);
|
||||
var mat32Roi = GetRoiOrDefault(mat32);
|
||||
|
||||
lock (progress.Mutex)
|
||||
{
|
||||
CvInvoke.Add(sumMat32Roi, mat32Roi, sumMat32Roi, mask);
|
||||
@@ -139,7 +172,7 @@ namespace UVtools.Core.Operations
|
||||
if (!progress.Token.IsCancellationRequested)
|
||||
{
|
||||
using var sumMat = EmguExtensions.InitMat(sumMat32.Size);
|
||||
sumMat32.ConvertTo(sumMat, DepthType.Cv8U, 1.0 / LayerRangeCount);
|
||||
sumMat32.ConvertTo(sumMat, DepthType.Cv8U, 1.0 / layerRange.Length);
|
||||
|
||||
if (_flipDirection != Enumerations.FlipDirection.None)
|
||||
{
|
||||
@@ -171,7 +204,7 @@ namespace UVtools.Core.Operations
|
||||
|
||||
private bool Equals(OperationLayerExportHeatMap other)
|
||||
{
|
||||
return _filePath == other._filePath && _rotateDirection == other._rotateDirection && _flipDirection == other._flipDirection && _cropByRoi == other._cropByRoi;
|
||||
return _filePath == other._filePath && _rotateDirection == other._rotateDirection && _flipDirection == other._flipDirection && _mergeSamePositionedLayers == other._mergeSamePositionedLayers && _cropByRoi == other._cropByRoi;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
@@ -181,7 +214,7 @@ namespace UVtools.Core.Operations
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return HashCode.Combine(_filePath, (int)_rotateDirection, (int)_flipDirection, _cropByRoi);
|
||||
return HashCode.Combine(_filePath, (int)_rotateDirection, (int)_flipDirection, _mergeSamePositionedLayers, _cropByRoi);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -43,6 +43,10 @@
|
||||
SelectedItem="{Binding Operation.FlipDirection, Converter={StaticResource FromValueDescriptionToEnumConverter}}"/>
|
||||
</Grid>
|
||||
|
||||
<CheckBox
|
||||
Content="Merge layers on same position"
|
||||
IsChecked="{Binding Operation.MergeSamePositionedLayers}"/>
|
||||
|
||||
<CheckBox
|
||||
Content="Crop image by selected ROI"
|
||||
IsVisible="{Binding ParentWindow.IsROIVisible}"
|
||||
|
||||
Reference in New Issue
Block a user