// // File: isosurface.cxx // Author: Erik Vidholm // Date: 2004-09-13 // Description: Iso-surface extraction from a volume // #include #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkStructuredPointsReader.h" #include "vtkMarchingCubes.h" #include "vtkOutlineFilter.h" #include "vtkPolyDataMapper.h" #include "vtkActor.h" #include "vtkLookupTable.h" #include "vtkProperty.h" using namespace std; int main(int argc, char **argv) { if( argc < 5 ) { cerr << "Usage: isosurface filename.vtk nrContours firstValue lastValue" << endl; return 0; } // image reader vtkStructuredPointsReader *reader = vtkStructuredPointsReader::New(); reader -> SetFileName(argv[1]); // bounding box vtkOutlineFilter *outline = vtkOutlineFilter::New(); outline -> SetInput( (vtkDataSet *) reader -> GetOutput() ); vtkPolyDataMapper *outlineMapper = vtkPolyDataMapper::New(); outlineMapper -> SetInput( outline -> GetOutput() ); vtkActor *outlineActor = vtkActor::New(); outlineActor -> SetMapper( outlineMapper ); outlineActor -> GetProperty() -> SetColor(0.0,0.0,1.0); // marching cubes vtkMarchingCubes *isosurface = vtkMarchingCubes::New(); isosurface -> SetInput( (vtkImageData *) reader -> GetOutput() ); // get input parameters int nrc = atoi(argv[2]); double cstart = atof(argv[3]); double cstop = atof(argv[4]); isosurface -> GenerateValues( nrc, cstart, cstop ); vtkPolyDataMapper *isosurfaceMapper = vtkPolyDataMapper::New(); isosurfaceMapper -> SetInput( isosurface -> GetOutput() ); isosurfaceMapper -> SetColorModeToMapScalars(); vtkActor *isosurfaceActor = vtkActor::New(); isosurfaceActor -> SetMapper( isosurfaceMapper ); // renderer and render window vtkRenderer *ren = vtkRenderer::New(); ren -> SetBackground(.8, .8, .8); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin -> SetSize( 400, 400 ); renWin->AddRenderer( ren ); // render window interactor vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren -> SetRenderWindow( renWin ); // add the actors ren -> AddActor( outlineActor ); ren -> AddActor( isosurfaceActor ); renWin -> Render(); // initialize and start the interactor iren -> Initialize(); iren -> Start(); // de-allocation reader -> Delete(); outline -> Delete(); outlineMapper -> Delete(); outlineActor -> Delete(); isosurface -> Delete(); isosurfaceMapper -> Delete(); isosurfaceActor -> Delete(); ren -> Delete(); renWin -> Delete(); iren -> Delete(); return 0; }