コード例 #1
0
        private void CreateObjectIdBitmapButton_OnClick(object sender, RoutedEventArgs e)
        {
            if (_objectIdRenderingStep == null)
            {
                return;
            }

            _objectIdRenderingStep.IsEnabled = true;
            MainDXViewportView.DXScene.DefaultRenderObjectsRenderingStep.IsEnabled = false;

            try
            {
                var renderToBitmap = MainDXViewportView.RenderToBitmap(MainDXViewportView.DXScene.Width, MainDXViewportView.DXScene.Height, preferedMultisampling: 0);

                string fileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "ObjectIds.png");

                SaveBitmap(renderToBitmap, fileName);

                System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(fileName)
                {
                    UseShellExecute = true
                });                                                                                                             // For .Net CORE projects we need to set UseShellExecute to true
            }
            finally
            {
                _objectIdRenderingStep.IsEnabled = false;
                MainDXViewportView.DXScene.DefaultRenderObjectsRenderingStep.IsEnabled = true;
            }
        }
コード例 #2
0
        private BitmapSource RenderObjectIdBitmap()
        {
            if (_objectIdRenderingStep == null)
            {
                return(null);
            }


            BitmapSource objectIdBitmap;

            // Now enable our custom rendering step that will be used only for RenderToBitmap
            _objectIdRenderingStep.IsEnabled = true;
            MainDXViewportView.DXScene.DefaultRenderObjectsRenderingStep.IsEnabled = false;

            try
            {
                // Render to the same size as seen on the screen but without multi-sampling and super-sampling
                objectIdBitmap = MainDXViewportView.RenderToBitmap(MainDXViewportView.DXFinalPixelSize.Width,
                                                                   MainDXViewportView.DXFinalPixelSize.Height,
                                                                   preferedMultisampling: 0,
                                                                   supersamplingCount: 1);

                if (objectIdBitmap != null)
                {
                    int bitmapSize = objectIdBitmap.PixelHeight * objectIdBitmap.PixelWidth * 4; // 4 bytes per pixel

                    // Try to reuse the _objectIdPixelsArray
                    if (_objectIdPixelsArray == null || _objectIdPixelsArray.Length < bitmapSize)
                    {
                        _objectIdPixelsArray = new byte[bitmapSize];
                    }

                    objectIdBitmap.CopyPixels(_objectIdPixelsArray, objectIdBitmap.PixelWidth * 4, 0);

                    _objectIdBitmapWidth  = objectIdBitmap.PixelWidth;
                    _objectIdBitmapHeight = objectIdBitmap.PixelHeight;
                }
            }
            finally
            {
                _objectIdRenderingStep.IsEnabled = false;
                MainDXViewportView.DXScene.DefaultRenderObjectsRenderingStep.IsEnabled = true;
            }

            return(objectIdBitmap);
        }