Example #1
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }