ReadSLC
VTKExamples/Java/IO/ReadSLC
Description¶
In this example you will familiarize yourself with the stages required to read a .slc file and create a visualization pipeline in VTK. Following is the three step procedure:
-
Read the data from .slc file using vtkSLCReader
-
Implement Marching cubes Algorithm using vtkContourFilter
-
Create Visualization pipeline to visualize data using an actor, mapper and rendering window
Cite
This example was provided by Bharatesh Chakravarthi from Virtual Environment Lab, Chung-Ang University, Seoul, South Korea
Question
If you have a simple question about this example contact us at VTKExamplesProject If your question is more complex and may require extended discussion, please use the VTK Discourse Forum
Code¶
ReadSLC.java
import vtk.vtkActor; import vtk.vtkNamedColors; import vtk.vtkNativeLibrary; import vtk.vtkPolyDataMapper; import vtk.vtkRenderWindow; import vtk.vtkRenderWindowInteractor; import vtk.vtkRenderer; import vtk.vtkSLCReader; import vtk.vtkContourFilter; import vtk.vtkOutlineFilter; import vtk.vtkExtractVOI; public class ReadSLC { // ----------------------------------------------------------------- // Load VTK library and print which library was not properly loaded static { if (!vtkNativeLibrary.LoadAllNativeLibraries()) { for (vtkNativeLibrary lib : vtkNativeLibrary.values()) { if (!lib.IsLoaded()) { System.out.println(lib.GetLibraryName() + " not loaded"); } } } vtkNativeLibrary.DisableOutputWindow(null); } // ----------------------------------------------------------------- public static void main(String args[]) { //parse command line arguments if (args.length != 2) { System.err.println("Usage: java -classpath ... Filename(.slc) e.g vw_knee.slc"); return; } String inputFilename = args[0]; double isoValue = 72.0; if (args.length != 2) { isoValue = 72.0; } else { isoValue = Integer.valueOf(args[1]); } vtkNamedColors colors = new vtkNamedColors(); //For Actor Color double actorColor[] = new double[4]; //Renderer Background Color double Bgcolor[] = new double[4]; colors.GetColor("Ivory", actorColor); colors.GetColor("SlateGray", Bgcolor); //Using vtkSLCReader to read Volumetric file format(<filename.slc>) vtkSLCReader reader = new vtkSLCReader(); reader.SetFileName(inputFilename); reader.Update(); // Implementing Marching Cubes Algorithm to create the surface using vtkContourFilter object vtkContourFilter cFilter = new vtkContourFilter(); cFilter.SetInputConnection(reader.GetOutputPort()); // Change the range(2nd and 3rd Paramater) based on your // requirement. recomended value for 1st parameter is above 1 // cFilter.GenerateValues(5, 80.0, 100.0); cFilter.SetValue(0, isoValue); cFilter.Update(); //Adding the outliner using vtkOutlineFilter object vtkOutlineFilter outliner = new vtkOutlineFilter(); outliner.SetInputConnection(reader.GetOutputPort()); outliner.Update(); // Visualize vtkPolyDataMapper mapper = new vtkPolyDataMapper(); mapper.SetInputConnection(cFilter.GetOutputPort()); mapper.SetScalarVisibility(0); vtkActor actor = new vtkActor(); actor.SetMapper(mapper); actor.GetProperty().SetDiffuse(.8); actor.GetProperty().SetDiffuseColor(actorColor); actor.GetProperty().SetSpecular(.8); actor.GetProperty().SetSpecularPower(120.0); //extractVOI is used to fix the problem of subsampling of data and reduce slow interaction and increase loading speed vtkExtractVOI extractVOI = new vtkExtractVOI(); extractVOI.SetInputConnection(reader.GetOutputPort()); extractVOI.SetSampleRate(2, 2, 2); extractVOI.Update(); // Create the renderer, render window and interactor. vtkRenderer ren = new vtkRenderer(); vtkRenderWindow renWin = new vtkRenderWindow(); renWin.AddRenderer(ren); vtkRenderWindowInteractor iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow(renWin); // Visualise ren.AddActor(actor); ren.SetBackground(Bgcolor); renWin.SetSize(640, 512); renWin.Render(); iren.Initialize(); iren.Start(); } }