You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							192 lines
						
					
					
						
							6.1 KiB
						
					
					
				
			
		
		
	
	
							192 lines
						
					
					
						
							6.1 KiB
						
					
					
				| /*=========================================================================
 | |
| 
 | |
|   Program:   Visualization Toolkit
 | |
|   Module:    $RCSfile: TestProjectedTetrahedra.cxx,v $
 | |
| 
 | |
|   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
 | |
|   All rights reserved.
 | |
|   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 | |
| 
 | |
|      This software is distributed WITHOUT ANY WARRANTY; without even
 | |
|      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 | |
|      PURPOSE.  See the above copyright notice for more information.
 | |
| 
 | |
| =========================================================================*/
 | |
| 
 | |
| /*
 | |
|  * Copyright 2004 Sandia Corporation.
 | |
|  * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
 | |
|  * license for use of this work by or on behalf of the
 | |
|  * U.S. Government. Redistribution and use in source and binary forms, with
 | |
|  * or without modification, are permitted provided that this Notice and any
 | |
|  * statement of authorship are reproduced on all copies.
 | |
|  */
 | |
| 
 | |
| #include "vtkProjectedTetrahedraMapper.h"
 | |
| 
 | |
| #include "vtkRenderer.h"
 | |
| #include "vtkRenderWindow.h"
 | |
| #include "vtkRenderWindowInteractor.h"
 | |
| #include "vtkStructuredPointsReader.h"
 | |
| #include "vtkSLCReader.h"
 | |
| #include "vtkStructuredPoints.h"
 | |
| #include "vtkUnstructuredGrid.h"
 | |
| #include "vtkThreshold.h"
 | |
| #include "vtkDataSetTriangleFilter.h"
 | |
| #include "vtkPiecewiseFunction.h"
 | |
| #include "vtkColorTransferFunction.h"
 | |
| #include "vtkVolumeProperty.h"
 | |
| #include "vtkVolume.h"
 | |
| #include "vtkContourFilter.h"
 | |
| #include "vtkPolyDataMapper.h"
 | |
| #include "vtkActor.h"
 | |
| #include "vtkCamera.h"
 | |
| #include "vtkRegressionTestImage.h"
 | |
| #include "vtkStdString.h"
 | |
| 
 | |
| int TestProjectedTetrahedra(int argc, char *argv[])
 | |
| {
 | |
|   int i;
 | |
|   // Need to get the data root.
 | |
|   const char *data_root = NULL;
 | |
|   for (i = 0; i < argc-1; i++)
 | |
|     {
 | |
|     if (strcmp("-D", argv[i]) == 0)
 | |
|       {
 | |
|       data_root = argv[i+1];
 | |
|       break;
 | |
|       }
 | |
|     }
 | |
|   if (!data_root)
 | |
|     {
 | |
|     cout << "Need to specify the directory to VTK_DATA_ROOT with -D <dir>." << endl;
 | |
|     return 1;
 | |
|     }
 | |
| 
 | |
|   // Create the standard renderer, render window, and interactor.
 | |
|   vtkRenderer *ren1 = vtkRenderer::New();
 | |
|   vtkRenderWindow *renWin = vtkRenderWindow::New();
 | |
|   renWin->AddRenderer(ren1);
 | |
|   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
 | |
|   iren->SetRenderWindow(renWin);
 | |
|   iren->SetDesiredUpdateRate(3);
 | |
| 
 | |
|   // Create the reader for the data.
 | |
|   // This is the data that will be volume rendered.
 | |
|   vtkStdString filename;
 | |
|   filename = data_root;
 | |
|   filename += "/Data/ironProt.vtk";
 | |
|   cout << "Loading " << filename.c_str() << endl;
 | |
|   vtkStructuredPointsReader *reader = vtkStructuredPointsReader::New();
 | |
|   reader->SetFileName(filename.c_str());
 | |
| 
 | |
|   // Create a reader for the other data that will be contoured and
 | |
|   // displayed as a polygonal mesh.
 | |
|   filename = data_root;
 | |
|   filename += "/Data/neghip.slc";
 | |
|   cout << "Loading " << filename.c_str() << endl;
 | |
|   vtkSLCReader *reader2 = vtkSLCReader::New();
 | |
|   reader2->SetFileName(filename.c_str());
 | |
| 
 | |
|   // Convert from vtkImageData to vtkUnstructuredGrid.
 | |
|   // Remove any cells where all values are below 80.
 | |
|   vtkThreshold *thresh = vtkThreshold::New();
 | |
|   thresh->ThresholdByUpper(80);
 | |
|   thresh->AllScalarsOff();
 | |
|   thresh->SetInputConnection(reader->GetOutputPort());
 | |
| 
 | |
|   // Make sure we have only tetrahedra.
 | |
|   vtkDataSetTriangleFilter *trifilter = vtkDataSetTriangleFilter::New();
 | |
|   trifilter->SetInputConnection(thresh->GetOutputPort());
 | |
| 
 | |
|   // Create transfer mapping scalar value to opacity.
 | |
|   vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New();
 | |
|   opacityTransferFunction->AddPoint(80.0,  0.0);
 | |
|   opacityTransferFunction->AddPoint(120.0, 0.2);
 | |
|   opacityTransferFunction->AddPoint(255.0, 0.2);
 | |
| 
 | |
|   // Create transfer mapping scalar value to color.
 | |
|   vtkColorTransferFunction *colorTransferFunction
 | |
|     = vtkColorTransferFunction::New();
 | |
|   colorTransferFunction->AddRGBPoint(80.0,  0.0, 0.0, 0.0);
 | |
|   colorTransferFunction->AddRGBPoint(120.0, 0.0, 0.0, 1.0);
 | |
|   colorTransferFunction->AddRGBPoint(160.0, 1.0, 0.0, 0.0);
 | |
|   colorTransferFunction->AddRGBPoint(200.0, 0.0, 1.0, 0.0);
 | |
|   colorTransferFunction->AddRGBPoint(255.0, 0.0, 1.0, 1.0);
 | |
| 
 | |
|   // The property describes how the data will look.
 | |
|   vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
 | |
|   volumeProperty->SetColor(colorTransferFunction);
 | |
|   volumeProperty->SetScalarOpacity(opacityTransferFunction);
 | |
|   volumeProperty->ShadeOff();
 | |
|   volumeProperty->SetInterpolationTypeToLinear();
 | |
| 
 | |
|   // The mapper that renders the volume data.
 | |
|   vtkProjectedTetrahedraMapper *volumeMapper
 | |
|     = vtkProjectedTetrahedraMapper::New();
 | |
|   volumeMapper->SetInputConnection(trifilter->GetOutputPort());
 | |
| 
 | |
|   // The volume holds the mapper and the property and can be used to
 | |
|   // position/orient the volume.
 | |
|   vtkVolume *volume = vtkVolume::New();
 | |
|   volume->SetMapper(volumeMapper);
 | |
|   volume->SetProperty(volumeProperty);
 | |
| 
 | |
|   // Contour the second dataset.
 | |
|   vtkContourFilter *contour = vtkContourFilter::New();
 | |
|   contour->SetValue(0, 80);
 | |
|   contour->SetInputConnection(reader2->GetOutputPort());
 | |
| 
 | |
|   // Create a mapper for the polygonal data.
 | |
|   vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
 | |
|   mapper->SetInputConnection(contour->GetOutputPort());
 | |
|   mapper->ScalarVisibilityOff();
 | |
| 
 | |
|   // Create an actor for the polygonal data.
 | |
|   vtkActor *actor = vtkActor::New();
 | |
|   actor->SetMapper(mapper);
 | |
| 
 | |
|   ren1->AddViewProp(actor);
 | |
|   ren1->AddVolume(volume);
 | |
| 
 | |
|   renWin->SetSize(300, 300);
 | |
| 
 | |
|   ren1->ResetCamera();
 | |
|   ren1->GetActiveCamera()->Azimuth(20.0);
 | |
|   ren1->GetActiveCamera()->Elevation(10.0);
 | |
|   ren1->GetActiveCamera()->Zoom(1.5);
 | |
| 
 | |
|   renWin->Render();
 | |
| 
 | |
|   int retVal = vtkTesting::Test(argc, argv, renWin, 75);
 | |
|   if (retVal == vtkRegressionTester::DO_INTERACTOR)
 | |
|     {
 | |
|     iren->Start();
 | |
|     }
 | |
| 
 | |
|   // Clean up.
 | |
|   ren1->Delete();
 | |
|   renWin->Delete();
 | |
|   iren->Delete();
 | |
|   reader->Delete();
 | |
|   reader2->Delete();
 | |
|   thresh->Delete();
 | |
|   trifilter->Delete();
 | |
|   opacityTransferFunction->Delete();
 | |
|   colorTransferFunction->Delete();
 | |
|   volumeProperty->Delete();
 | |
|   volumeMapper->Delete();
 | |
|   volume->Delete();
 | |
|   contour->Delete();
 | |
|   mapper->Delete();
 | |
|   actor->Delete();
 | |
| 
 | |
|   if ((retVal == vtkTesting::PASSED) || (retVal == vtkTesting::DO_INTERACTOR))
 | |
|     {
 | |
|     return 0;
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|     return 1;
 | |
|     }
 | |
| }
 | |
| 
 |