/*========================================================================= Program: Visualization Toolkit Module: TestProjectedTetrahedraTransform.cxx 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. =========================================================================*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Creates a cube volume vtkSmartPointer CubeVolume(double r, double g, double b) { // Create the coordinates vtkNew xArray; xArray->InsertNextValue(0.0); xArray->InsertNextValue(1.0); vtkNew yArray; yArray->InsertNextValue(0.0); yArray->InsertNextValue(1.0); vtkNew zArray; zArray->InsertNextValue(0.0); zArray->InsertNextValue(1.0); // Create the RectilinearGrid vtkNew grid; grid->SetDimensions(2, 2, 2); grid->SetXCoordinates(xArray); grid->SetYCoordinates(yArray); grid->SetZCoordinates(zArray); // Obtain an UnstructuredGrid made of tetrahedras vtkNew rectilinearGridToTetrahedra; rectilinearGridToTetrahedra->SetInputData(grid); rectilinearGridToTetrahedra->Update(); vtkSmartPointer ugrid = rectilinearGridToTetrahedra->GetOutput(); // Add scalars to the grid vtkNew scalars; for (int i = 0; i < 8; i++) { scalars->InsertNextValue(0); } ugrid->GetPointData()->SetScalars(scalars); // Volume Rendering Mapper vtkNew mapper; mapper->SetInputData(ugrid); mapper->Update(); // Create the volume vtkSmartPointer volume = vtkSmartPointer::New(); volume->SetMapper(mapper); // Apply a ColorTransferFunction to the volume vtkNew colorTransferFunction; colorTransferFunction->AddRGBPoint(0.0, r, g, b); volume->GetProperty()->SetColor(colorTransferFunction); return volume; } // Creates a cone actor vtkSmartPointer ConeActor(double r, double g, double b) { // Simple cone mapper vtkNew mapper; vtkNew coneSource; coneSource->SetCenter(0.0, 0.0, 0.0); mapper->SetInputConnection(coneSource->GetOutputPort()); // Create the actor vtkSmartPointer actor = vtkSmartPointer::New(); actor->GetProperty()->SetColor(r, g, b); actor->SetMapper(mapper); return actor; } int TestProjectedTetrahedraTransform(int argc, char* argv[]) { // Create the props // The red cube volume vtkSmartPointer volume1 = CubeVolume(1, 0, 0); // The blue cube volume vtkSmartPointer volume2 = CubeVolume(0, 0, 1); // The red cone actor vtkSmartPointer actor1 = ConeActor(1, 0, 0); // The blue cone actor vtkSmartPointer actor2 = ConeActor(0, 0, 1); // Translate the blue props by (2,2) vtkNew transform; transform->Translate(2, 2, 0); volume2->SetUserTransform(transform); actor2->SetUserTransform(transform); // Create a renderer, render window, and interactor vtkNew renderer; vtkNew renderWindow; renderWindow->AddRenderer(renderer); renderWindow->SetSize(300, 300); vtkNew renderWindowInteractor; renderWindowInteractor->SetRenderWindow(renderWindow); // Add the props to the scene renderer->AddVolume(volume1); renderer->AddVolume(volume2); renderer->AddActor(actor1); renderer->AddActor(actor2); renderer->SetBackground(1, 1, 1); // Render and interact renderWindow->Render(); renderer->ResetCamera(); renderWindow->Render(); int retVal = vtkTesting::Test(argc, argv, renderWindow, 20); if (retVal == vtkRegressionTester::DO_INTERACTOR) { renderWindowInteractor->Start(); } return !retVal; }