//wizualizacja 3d ----------------------------------------------------------------- public Visualization3D(RenderWindowControl window, DicomLoader dicomLoader, Chart chart) { _chart = chart; _window = window; _dicomLoader = dicomLoader; PresetReader = new XmlPresetReader(); // Create a mapper and actor _mapper = vtkSmartVolumeMapper.New(); _mapper.SetInput(_dicomLoader.GetOutput()); _volume = vtkVolume.New(); SetOpacityFunction(); SetGradientOpacity(); _volume.SetMapper(_mapper); renderer = vtkRenderer.New(); renderer.AddVolume(_volume); _window.RenderWindow.GetRenderers().RemoveAllItems(); _window.RenderWindow.AddRenderer(renderer); _window.RenderWindow.GetRenderers().GetFirstRenderer().AddVolume(_volume); // An interactor _renderWindowInteractor = vtkRenderWindowInteractor.New(); _renderWindowInteractor.SetRenderWindow(_window.RenderWindow); //Camera style vtkInteractorStyleTrackballCamera style = vtkInteractorStyleTrackballCamera.New(); style.AutoAdjustCameraClippingRangeOff(); _renderWindowInteractor.SetInteractorStyle(style); //Create and setup planes PlaneWidgetX = new PlaneWidget(Axis.X); SetupPlane(PlaneWidgetX); PlaneWidgetY = new PlaneWidget(Axis.Y); SetupPlane(PlaneWidgetY); PlaneWidgetZ = new PlaneWidget(Axis.Z); SetupPlane(PlaneWidgetZ); // Render _window.RenderWindow.Render(); //ClipingModule _clipingModule = new ClipingModule(GetObjectSize()); }
/// <summary> /// Lock/unlock PlaneWidget on specified axis. /// </summary> /// <param name="axis">axis to lock/unlock</param> /// <param name="state">0 to turn off, 1 to turn on</param> public void ChangePlaneGadetActivity(Axis axis, int state) { PlaneWidget widget = null; switch (axis) { case (Axis.X): widget = PlaneWidgetX; break; case (Axis.Y): widget = PlaneWidgetY; break; case (Axis.Z): widget = PlaneWidgetZ; break; } if (state == 0) { widget.InteractionOff(); } if (state == 1) { widget.InteractionOn(); } }
/// <summary> /// Set up the new PlaneWidget. /// </summary> /// <param name="planeWidget">Plane to set up.</param> private void SetupPlane(PlaneWidget planeWidget) { planeWidget.DisplayTextOff(); planeWidget.SetInput(_dicomLoader.GetOutput()); planeWidget.SetPlaneOrientationToXAxes(); planeWidget.SetSliceIndex(250); planeWidget.SetInteractor(_renderWindowInteractor); planeWidget.SetLeftButtonAction(99); planeWidget.SetRightButtonAction(0); planeWidget.SetMarginSizeX(0); planeWidget.SetMarginSizeY(0); planeWidget.GetMarginProperty().SetColor(1, 0, 0); planeWidget.GetSelectedPlaneProperty().SetOpacity(0); planeWidget.GetCursorProperty().SetOpacity(0); planeWidget.GetPlaneProperty().SetOpacity(0); vtkColorTransferFunction colors = vtkColorTransferFunction.New(); if (planeWidget.Axis == Axis.X) { planeWidget.SetPlaneOrientationToXAxes(); colors.AddRGBPoint(0, 1, 0, 0); //red } else if (planeWidget.Axis == Axis.Y) { planeWidget.SetPlaneOrientationToYAxes(); colors.AddRGBPoint(0, 0, 1, 0); } else if (planeWidget.Axis == Axis.Z) { planeWidget.SetPlaneOrientationToZAxes(); colors.AddRGBPoint(0, 0, 0, 1); } colors.SetAlpha(0.4); colors.SetColorSpaceToRGB(); colors.Build(); planeWidget.GetColorMap().SetLookupTable(colors); }