Exemple #1
0
        private static long CalculateWhitePixel(Slices.Slice slice)
        {
            var amountOfWhitePixels = RenderEngineHelper.ConvertPolyTreesToPixels(pixelValues, slice.ModelPolyTrees, PrintJob.SelectedPrinter.ProjectorResolutionX, PrintJob.SelectedPrinter.ProjectorResolutionY, true);

            amountOfWhitePixels     += RenderEngineHelper.ConvertPolyTreesToPixels(pixelValues, slice.SupportPolyTrees, PrintJob.SelectedPrinter.ProjectorResolutionX, PrintJob.SelectedPrinter.ProjectorResolutionY, false);
            TotatAmountofActivePixel = TotatAmountofActivePixel + amountOfWhitePixels;
            return(TotatAmountofActivePixel);
        }
Exemple #2
0
        private static bool RenderSliceToPNG(Slices.Slice slice)
        {
            var result = false;

            //create pic object
            Bitmap t = null;

            lock (_renderBitmap)
            {
                t = (Bitmap)_renderBitmap.Clone();
            }

            lock (pixelValues)
            {
                var pixelLength = pixelValues.Length;
                Array.Clear(pixelValues, 0, pixelLength);
                Array.Clear(pixelBleedingValues, 0, pixelLength);

                //render model points
                var amountOfWhitePixels = CalculateWhitePixel(slice);

                //render bleeding points
                if (PrintJob.Material.BleedingOffset > 0 && slice.SliceIndex > 5)
                {
                    if (slice.ModelBleedingPolyTrees != null && slice.ModelBleedingPolyTrees.Length > 0)
                    {
                        RenderEngineHelper.ConvertPolyTreesToPixels(pixelBleedingValues, slice.ModelBleedingPolyTrees, PrintJob.SelectedPrinter.ProjectorResolutionX, PrintJob.SelectedPrinter.ProjectorResolutionY, true);

                        var emptyBleedingModelPolyTrees = new List <PolyTree> [slice.ModelBleedingPolyTrees.Length];
                        for (var modelBleedingPolyTreeIndex = 0; modelBleedingPolyTreeIndex < slice.ModelBleedingPolyTrees.Length; modelBleedingPolyTreeIndex++)
                        {
                            if (slice.ModelBleedingPolyTrees[modelBleedingPolyTreeIndex] == null)
                            {
                                //process no bleeding information available
                                emptyBleedingModelPolyTrees[modelBleedingPolyTreeIndex] = slice.ModelPolyTrees[modelBleedingPolyTreeIndex];
                            }
                        }

                        //convert empty polygons to bleeding pixels
                        RenderEngineHelper.ConvertPolyTreesToPixels(pixelBleedingValues, emptyBleedingModelPolyTrees, PrintJob.SelectedPrinter.ProjectorResolutionX, PrintJob.SelectedPrinter.ProjectorResolutionY, true, 0);

                        //do bleeding merge model pixel active and bleeding not active then not active
                        for (var modelPixelIndex = 0; modelPixelIndex < pixelLength; modelPixelIndex += 3)
                        {
                            if (pixelValues[modelPixelIndex] == 255 && pixelBleedingValues[modelPixelIndex] == 0)
                            {
                                pixelValues[modelPixelIndex]     = 0;
                                pixelValues[modelPixelIndex + 1] = 0;
                                pixelValues[modelPixelIndex + 2] = 0;

                                amountOfWhitePixels -= 1;
                            }
                        }
                    }
                    else
                    {
                        amountOfWhitePixels = 0;
                    }
                }

                //render support points

                if (amountOfWhitePixels > UserProfileManager.UserProfile.Settings_PrintJob_FirstSlice_MinAmountOfPixels)
                {
                    result = true;
                }
                else if (amountOfWhitePixels == 0 && slice.SliceIndex > 5)
                {
                    lock (_emptyPNGs)
                    {
                        _emptyPNGs.Add(slice.SliceIndex, 0);
                    }
                }

                //Get a reference to the images pixel data
                BitmapData picData           = t.LockBits(new Rectangle(0, 0, PrintJob.SelectedPrinter.ProjectorResolutionX, PrintJob.SelectedPrinter.ProjectorResolutionY), ImageLockMode.WriteOnly, t.PixelFormat);
                IntPtr     pixelStartAddress = picData.Scan0;

                //Copy the pixel data into the bitmap structure
                System.Runtime.InteropServices.Marshal.Copy(pixelValues, 0, pixelStartAddress, pixelValues.Length);
                t.UnlockBits(picData);
            }

            try
            {
                if (!_emptyPNGs.ContainsKey(slice.SliceIndex))
                {
                    using (var memStream = new MemoryStream())
                    {
                        //           t.Save("Slices\\" + slice.SliceIndex + ".png");
                        t.Save(memStream, ImageFormat.Png);
                        t.Dispose();
                        memStream.Position = 0;

                        lock (_zipStream)
                        {
                            var entry = new ZipEntry(slice.SliceIndex + ".png");
                            _zipStream.PutNextEntry(entry);

                            try
                            {
                                byte[] transferBuffer = new byte[1024];
                                int    bytesRead;
                                do
                                {
                                    bytesRead = memStream.Read(transferBuffer, 0, transferBuffer.Length);
                                    _zipStream.Write(transferBuffer, 0, bytesRead);
                                }while (bytesRead > 0);
                            }
                            finally
                            {
                                memStream.Close();
                            }

                            _zipStream.CloseEntry();

                            //LoggingManager.WriteToLog("RenderSliceThread", "Zip location", _);
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                LoggingManager.WriteToLog("RenderSliceThread", "Save image (exception)", exc.Message);
            }

            return(result);
        }