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); }
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; }