using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Kitware.VTK;using itk.simple;namespace VolumeRendering{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private bool MouseDown1 = false; private vtkRenderWindowInteractor Interactor = null; private vtkRenderWindow RenderWindow = null; private vtkRenderer Renderer = null; private vtkImageActor ImageActor = null; private vtkImageClip Clip = null; string fileName = “”; static vtkBoxWidget boxWidget; int slicenumber=0; private vtkRenderWindow RenderWindow3 = null; private vtkRenderer Renderer2 = null; private vtkImageActor ImageActor2 = null; private vtkRenderWindow RenderWindow2 = null; private vtkRenderWindow window = null; ///
/// Tell the application when the mouse is being dragged void iren_LeftButtonReleaseEvt(vtkObject sender, vtkObjectEventArgs e) { this.MouseDown1 = false; } ///
/// Tell the application when the mouse is being dragged void iren_LeftButtonPressEvt(vtkObject sender, vtkObjectEventArgs e) { this.MouseDown1 = true; } ///
/// Display the render window with the 3D Volume in it private void renderWindowControl2_Load(object sender, EventArgs e) { //Create all the objects for the pipeline vtkRenderer renderer = renderWindowControl2.RenderWindow.GetRenderers().GetFirstRenderer(); vtkMetaImageReader reader = vtkMetaImageReader.New(); vtkFixedPointVolumeRayCastMapper texMapper = vtkFixedPointVolumeRayCastMapper.New(); vtkVolume vol = vtkVolume.New(); vtkImagePlaneWidget planeWidget = vtkImagePlaneWidget.New(); vtkColorTransferFunction ctf = vtkColorTransferFunction.New(); vtkPiecewiseFunction spwf = vtkPiecewiseFunction.New(); vtkPiecewiseFunction gpwf = vtkPiecewiseFunction.New(); // vtkSmartPointer renderWindowInteractor = // vtkSmartPointer < vtkRenderWindowInteractor >::New(); // this.window = renderWindowControl2.RenderWindow; // vtkRenderWindowInteractor interactor2 = vtkRenderWindowInteractor.New(); vtkRenderWindowInteractor iren = vtkRenderWindowInteractor.New(); iren.SetRenderWindow(RenderWindow); vtkPlanes planes = vtkPlanes.New(); vtkClipPolyData clipper = vtkClipPolyData.New(); vtkAppendPolyData apd = vtkAppendPolyData.New(); apd.AddInput(reader.GetOutput()); clipper.SetInputConnection(apd.GetOutputPort()); clipper.SetClipFunction(planes); clipper.InsideOutOn(); //Read in the file reader.SetFileName(fileName); reader.Update(); //Go through the visulizatin pipeline texMapper.SetInputConnection(reader.GetOutputPort()); ctf.AddRGBPoint(0, 1, 0, 0); ctf.AddRGBPoint(139, 1, 50, 0); ctf.AddRGBPoint(160, 0, .34, 0); ctf.AddRGBPoint(254, 1, 0, 0); //Set the opacity curve for the volume spwf.AddPoint(4, 0); spwf.AddPoint(100, .1); spwf.AddPoint(2555, .01); //Set the gradient curve for the volume gpwf.AddPoint(0, .2); gpwf.AddPoint(10, .2); gpwf.AddPoint(25, 1); vol.GetProperty().SetColor(ctf); vol.GetProperty().SetScalarOpacity(spwf); vol.GetProperty().SetGradientOpacity(gpwf); vol.SetMapper(texMapper); //Go through the Graphics Pipeline renderer.AddVolume(vol); // interactor2.SetEnableRender(true); // interactor2.SetRenderWindow(window); // planeWidget.SetInteractor(interactor2); planeWidget.TextureVisibilityOff(); // planeWidget.SetInput(reader.GetOutput()); // planeWidget.PlaceWidget(); } private void renderWindowControl1_Load(object sender, EventArgs e) { //Get the name of the Unsigned Char volume that you want to load fileName = “../../../outf.mha”; //Create all the objects for the pipeline // vtkXMLImageDataReader reader = vtkXMLImageDataReader.New(); vtkMetaImageReader reader = vtkMetaImageReader.New(); vtkImageActor iactor = vtkImageActor.New(); vtkImageClip clip = vtkImageClip.New(); vtkContourFilter contour = vtkContourFilter.New(); vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); vtkActor actor = vtkActor.New(); vtkInteractorStyleImage style = vtkInteractorStyleImage.New(); vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer(); //Read the Image reader.SetFileName(fileName); //Go through the visulization pipeline iactor.SetInput(reader.GetOutput()); renderer.AddActor(iactor); reader.Update(); int extent = reader.GetOutput().GetWholeExtent(); iactor.SetDisplayExtent(0, 0, extent2, extent3, (extent4 + extent5) / 2, (extent4 + extent5) / 2); // iactor.RotateX(90); // iactor.RotateZ(90); iactor.AddOrientation(500, 0, 0); // iactor.SetScale(2000, 2000, 2000); clip.SetInputConnection(reader.GetOutputPort()); clip.SetOutputWholeExtent(extent0, extent1, extent2, extent3, (extent4 + extent5) / 2, (extent4 + extent5) / 2); iactor.RotateX(90); iactor.RotateZ(90); contour.SetInputConnection(clip.GetOutputPort()); contour.SetValue(0, 100); mapper.SetInputConnection(contour.GetOutputPort()); mapper.SetScalarVisibility(1); actor.SetMapper(mapper); renderer.AddActor(actor); vtkRenderWindowInteractor iren = renderWindowControl1.RenderWindow.GetInteractor(); iren.SetInteractorStyle(style); //Add new events to the interactor style style.LeftButtonPressEvt += new vtkObject.vtkObjectEventHandler(iren_LeftButtonPressEvt); style.LeftButtonReleaseEvt += new vtkObject.vtkObjectEventHandler(iren_LeftButtonReleaseEvt); // style.MouseMoveEvt += new vtkObject.vtkObjectEventHandler(iren_MouseMoveEvt); this.trackBar1.Maximum = extent5; this.trackBar1.Minimum = extent4; this.Interactor = iren; this.RenderWindow = renderWindowControl1.RenderWindow; this.Renderer = renderer; this.Clip = clip; this.ImageActor = iactor; } private void trackBar1_Scroll(object sender, EventArgs e) { ImageActor.SetOrientation(90,90,0); if (ImageActor != null) { int lastPos = this.Interactor.GetLastEventPosition(); int size = this.RenderWindow.GetSize(); int dim = this.ImageActor.GetInput().GetDimensions(); int newSlice = (int)(trackBar1.Value); if (newSlice >= 0 && newSlice < dim2) { this.Clip.SetOutputWholeExtent(0, dim0 - 1, newSlice, newSlice, 0, dim2 - 1); this.ImageActor.SetDisplayExtent(0, dim0 - 1 , newSlice, newSlice, 0, dim2 - 1); this.ImageActor.RotateY(90); this.Renderer.ResetCameraClippingRange(); this.RenderWindow.Render(); slicenumber = ImageActor.GetSliceNumber(); label1.Text = slicenumber.ToString(); } } } private void Form1_Closed(object sender, FormClosedEventArgs e) { if (this.Interactor != null) { this.Interactor.Dispose(); } if (this.ImageActor != null) { this.ImageActor.Dispose(); } if (this.Clip != null) { this.Clip.Dispose(); } } private void renderWindowControl3_Load(object sender, EventArgs e) { fileName = "../../../outf.mha"; vtkMetaImageReader reader = vtkMetaImageReader.New(); vtkImageActor iactor2 = vtkImageActor.New(); vtkImageClip clip2 = vtkImageClip.New(); vtkContourFilter contour = vtkContourFilter.New(); vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); vtkActor actor = vtkActor.New(); vtkInteractorStyleImage style = vtkInteractorStyleImage.New(); vtkRenderer renderer3 = renderWindowControl3.RenderWindow.GetRenderers().GetFirstRenderer(); reader.SetFileName(fileName); iactor2.SetInput(reader.GetOutput()); renderer3.AddActor(iactor2); reader.Update(); int extent = reader.GetOutput().GetWholeExtent(); iactor2.SetDisplayExtent(extent0, extent1, extent2, extent3, (extent4 + extent5) / 2, (extent4 + extent5) / 2); clip2.SetInputConnection(reader.GetOutputPort()); clip2.SetOutputWholeExtent(0,0, extent2, extent3, ( extent4 + extent5) / 2, ( extent5 + extent5) / 2); contour.SetInputConnection(clip2.GetOutputPort()); contour.SetValue(0, 100); mapper.SetInputConnection(contour.GetOutputPort()); mapper.SetScalarVisibility(1); actor.SetMapper(mapper); actor.GetProperty().SetColor(0, 1, 0); renderer3.AddActor(actor); vtkRenderWindowInteractor iren = renderWindowControl3.RenderWindow.GetInteractor(); iren.SetInteractorStyle(style); style.LeftButtonPressEvt += new vtkObject.vtkObjectEventHandler(iren_LeftButtonPressEvt); style.LeftButtonReleaseEvt += new vtkObject.vtkObjectEventHandler(iren_LeftButtonReleaseEvt); this.trackBar2.Maximum = extent5; this.trackBar2.Minimum = extent4; this.RenderWindow3 = renderWindowControl3.RenderWindow; this.Renderer2 = renderer3; this.Clip = clip2; this.ImageActor2 = iactor2; } private void label1_Click(object sender, EventArgs e) { } private void trackBar2_Scroll(object sender, EventArgs e) { if (ImageActor != null) { int lastPos = this.Interactor.GetLastEventPosition(); int size = this.RenderWindow3.GetSize(); int dim = this.ImageActor2.GetInput().GetDimensions(); int newSlice = (int)(trackBar2.Value); if (newSlice >= 0 && newSlice < dim2) { this.Clip.SetOutputWholeExtent( 0,dim0 - 1, 0, dim1 - 1, newSlice, newSlice); this.ImageActor2.SetDisplayExtent(0, dim0 - 1, 0, dim1 - 1, newSlice, newSlice); this.Renderer2.ResetCameraClippingRange(); this.RenderWindow3.Render(); this.Renderer.ResetCameraClippingRange(); this.RenderWindow.Render(); slicenumber = ImageActor.GetSliceNumber(); label2.Text = slicenumber.ToString(); } } } private void button1_Click(object sender, EventArgs e) { } }}