Example #1
0
        private void SetSpecialRenderingType(DXViewportView dxViewportView, RenderingTypes renderingType)
        {
            if (dxViewportView.DXScene.DefaultRenderObjectsRenderingStep == null)
            {
                return; // Not yet initialized
            }
            // First reset any previous customizations
            dxViewportView.DXScene.DefaultRenderObjectsRenderingStep.OverrideEffect                = null;
            dxViewportView.DXScene.DefaultRenderObjectsRenderingStep.FilterObjectsFunction         = null;
            dxViewportView.DXScene.DefaultRenderObjectsRenderingStep.FilterRenderingQueuesFunction = null;


            if (renderingType == RenderingTypes.Wireframe)
            {
                // Use ModelColorLineEffect to render the 3D objects as wireframe (model colors define the color of the lines).
                // Note that instanced objects and some other advanced objects are not rendered.
                if (_modelColorLineEffect == null)
                {
                    _modelColorLineEffect = _masterDXViewportView.DXScene.DXDevice.EffectsManager.GetEffect <ModelColorLineEffect>();
                    _modelColorLineEffect.LineThickness = 1;
                }

                dxViewportView.DXScene.DefaultRenderObjectsRenderingStep.OverrideEffect = _modelColorLineEffect;
            }
            else if (renderingType == RenderingTypes.FilterByObjects)
            {
                dxViewportView.DXScene.DefaultRenderObjectsRenderingStep.FilterObjectsFunction =
                    delegate(RenderablePrimitiveBase renderablePrimitive)
                {
                    var originalSceneNode = renderablePrimitive.OriginalObject as SceneNode;
                    if (originalSceneNode != null)
                    {
                        return(originalSceneNode.Name.StartsWith("Sphere") || originalSceneNode.Name.StartsWith("Cylinder"));
                    }

                    return(false);
                };
            }
            else if (renderingType == RenderingTypes.FilerByRenderingQueue)
            {
                dxViewportView.DXScene.DefaultRenderObjectsRenderingStep.FilterRenderingQueuesFunction = renderingQueue => renderingQueue.Name == "CustomRenderingQueue";
            }

            dxViewportView.DXScene.NotifyChange(DXScene.ChangeNotifications.RenderingStepsChanged);
        }
Example #2
0
        private void OnUnloaded(object sender, RoutedEventArgs e)
        {
            if (_modelColorLineEffect != null)
            {
                _modelColorLineEffect.Dispose();
                _modelColorLineEffect = null;
            }

            // Dispose DXViewportViews in the opposite order (so first child DXViewportView and lastly _masterDXViewportView)
            for (int i = _dxViewportViews.Count - 1; i >= 0; i--)
            {
                _dxViewportViews[i].Dispose();
            }

            _dxViewportViews.Clear();

            _masterDXViewportView = null;
        }