protected override bool ExecuteInternally(OperationProgress progress) { progress.CanCancel = false; var layersRemove = new List <uint>(); for (uint layerIndex = LayerIndexStart; layerIndex <= LayerIndexEnd; layerIndex++) { layersRemove.Add(layerIndex); } return(RemoveLayers(SlicerFile, layersRemove, progress)); }
public override bool Execute(FileFormat slicerFile, OperationProgress progress = null) { progress ??= new OperationProgress(false); var layersRemove = new List <uint>(); for (uint layerIndex = LayerIndexStart; layerIndex <= LayerIndexEnd; layerIndex++) { layersRemove.Add(layerIndex); } return(RemoveLayers(slicerFile, layersRemove, progress)); }
protected override bool ExecuteInternally(OperationProgress progress) { Parallel.For(LayerIndexStart, LayerIndexEnd + 1, CoreSettings.ParallelOptions, layerIndex => { if (progress.Token.IsCancellationRequested) { return; } using var mat = SlicerFile[layerIndex].LayerMat; Execute(mat); SlicerFile[layerIndex].LayerMat = mat; progress.LockAndIncrement(); }); return(!progress.Token.IsCancellationRequested); }
public static bool RemoveLayers(FileFormat slicerFile, List <uint> layersRemove, OperationProgress progress = null) { if (layersRemove.Count == 0) { return(false); } progress ??= new OperationProgress(false); progress.Reset("Removed layers", (uint)layersRemove.Count); foreach (var layerIndex in layersRemove) { slicerFile[layerIndex] = null; progress++; } slicerFile.LayerManager.RemoveNulls(); /*var oldLayers = slicerFile.LayerManager.Layers; * var layerHeight = slicerFile.LayerHeight; * * var layers = new Layer[oldLayers.Length - layersRemove.Count]; * * // Re-set * uint newLayerIndex = 0; * for (uint layerIndex = 0; layerIndex < oldLayers.Length; layerIndex++) * { * if (layersRemove.Contains(layerIndex)) continue; * layers[newLayerIndex] = oldLayers[layerIndex]; * layers[newLayerIndex].Index = newLayerIndex; * * // Re-Z * float posZ = layerHeight; * if (newLayerIndex > 0) * { * if (oldLayers[layerIndex - 1].PositionZ == oldLayers[layerIndex].PositionZ) * { * posZ = layers[newLayerIndex - 1].PositionZ; * } * else * { * posZ = Layer.RoundHeight(layers[newLayerIndex - 1].PositionZ + layerHeight); * } * } * * layers[newLayerIndex].PositionZ = posZ; * layers[newLayerIndex].IsModified = true; * * newLayerIndex++; * progress++; * } * * slicerFile.LayerManager.Layers = layers;*/ return(true); }
public static bool RemoveLayers(FileFormat slicerFile, List <uint> layersRemove, OperationProgress progress = null) { if (layersRemove.Count == 0) { return(false); } progress ??= new OperationProgress(false); progress.Reset("removed layers", (uint)layersRemove.Count); var oldLayers = slicerFile.LayerManager.Layers; var layerHeight = slicerFile.LayerHeight; var layers = new Layer[oldLayers.Length - layersRemove.Count]; // Re-set uint newLayerIndex = 0; for (uint layerIndex = 0; layerIndex < oldLayers.Length; layerIndex++) { if (layersRemove.Contains(layerIndex)) { continue; } layers[newLayerIndex] = oldLayers[layerIndex]; layers[newLayerIndex].Index = newLayerIndex; // Re-Z float posZ = layerHeight; if (newLayerIndex > 0) { if (oldLayers[layerIndex - 1].PositionZ == oldLayers[layerIndex].PositionZ) { posZ = layers[newLayerIndex - 1].PositionZ; } else { posZ = Layer.RoundHeight(layers[newLayerIndex - 1].PositionZ + layerHeight); } } layers[newLayerIndex].PositionZ = posZ; layers[newLayerIndex].IsModified = true; newLayerIndex++; progress++; } slicerFile.LayerManager.Layers = layers; return(true); }