Advertisement
Guest User

VTKVolume doesn't transform

a guest
Mar 9th, 2016
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. #include <vtkSmartPointer.h>
  2. #include <vtkConeSource.h>
  3. #include <vtkTransform.h>
  4. #include <vtkPolyData.h>
  5. #include <vtkPolyDataMapper.h>
  6. #include <vtkProp3D.h>
  7. #include <vtkActor.h>
  8. #include <vtkProperty.h>
  9. #include <vtkRenderWindow.h>
  10. #include <vtkRenderer.h>
  11. #include <vtkRenderWindowInteractor.h>
  12. #include <vtkProjectedTetrahedraMapper.h>
  13. #include <vtkDoubleArray.h>
  14. #include <vtkRectilinearGrid.h>
  15. #include <vtkUnstructuredGrid.h>
  16. #include <vtkRectilinearGridToTetrahedra.h>
  17. #include <vtkVolumeProperty.h>
  18. #include <vtkPointData.h>
  19. #include <vtkColorTransferFunction.h>
  20.  
  21. // Creates a cube volume
  22. vtkSmartPointer<vtkVolume> cubeVolume(double r, double g, double b){
  23.  
  24.     // Create the coordinates
  25.     vtkSmartPointer<vtkDoubleArray> xArray = vtkSmartPointer<vtkDoubleArray>::New();
  26.     xArray->InsertNextValue(0.0);
  27.     xArray->InsertNextValue(1.0);
  28.     vtkSmartPointer<vtkDoubleArray> yArray = vtkSmartPointer<vtkDoubleArray>::New();
  29.     yArray->InsertNextValue(0.0);
  30.     yArray->InsertNextValue(1.0);
  31.     vtkSmartPointer<vtkDoubleArray> zArray = vtkSmartPointer<vtkDoubleArray>::New();
  32.     zArray->InsertNextValue(0.0);
  33.     zArray->InsertNextValue(1.0);
  34.  
  35.     // Create the RectilinearGrid
  36.     vtkSmartPointer<vtkRectilinearGrid> grid = vtkSmartPointer<vtkRectilinearGrid>::New();
  37.     grid->SetDimensions(2,2,2);
  38.     grid->SetXCoordinates(xArray);
  39.     grid->SetYCoordinates(yArray);
  40.     grid->SetZCoordinates(zArray);
  41.  
  42.     // Obtain an UnstructuredGrid made of tetrahedras
  43.     vtkSmartPointer<vtkRectilinearGridToTetrahedra> rectilinearGridToTetrahedra = vtkSmartPointer<vtkRectilinearGridToTetrahedra>::New();
  44.     rectilinearGridToTetrahedra->SetInputData(grid);
  45.     rectilinearGridToTetrahedra->Update();
  46.     vtkSmartPointer<vtkUnstructuredGrid> ugrid = rectilinearGridToTetrahedra->GetOutput();
  47.  
  48.     // Add scalars to the grid
  49.     vtkSmartPointer<vtkDoubleArray> scalars = vtkSmartPointer<vtkDoubleArray>::New();
  50.     for (int i = 0; i < 8; i++){
  51.         scalars->InsertNextValue(0);
  52.     }
  53.     ugrid->GetPointData()->SetScalars(scalars);
  54.  
  55.     // Volume Rendering Mapper
  56.     vtkSmartPointer<vtkProjectedTetrahedraMapper> mapper = vtkSmartPointer<vtkProjectedTetrahedraMapper>::New();
  57.     mapper->SetInputData(ugrid);
  58.     mapper->Update();
  59.    
  60.     // Create the volume
  61.     vtkSmartPointer<vtkVolume> volume = vtkSmartPointer<vtkVolume>::New();
  62.     volume->SetMapper(mapper);
  63.  
  64.     // Apply a ColorTransferFunction to the volume
  65.     vtkSmartPointer<vtkColorTransferFunction> colorTransferFunction = vtkSmartPointer<vtkColorTransferFunction>::New();
  66.     colorTransferFunction->AddRGBPoint(0.0, r, g, b);
  67.     volume->GetProperty()->SetColor(colorTransferFunction);
  68.  
  69.     return volume;
  70. }
  71.  
  72. // Creates a cone actor
  73. vtkSmartPointer<vtkActor> coneActor(double r, double g, double b){
  74.  
  75.     // Simple cone mapper
  76.     vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
  77.     mapper->SetInputConnection(vtkSmartPointer<vtkConeSource>::New()->GetOutputPort());
  78.  
  79.     // Create the actor
  80.     vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
  81.     actor->GetProperty()->SetColor(r,g,b);
  82.     actor->SetMapper(mapper);
  83.  
  84.     return actor;
  85. }
  86.  
  87.  
  88. int main(int, char *[]){
  89.    
  90.     // Create the props
  91.     vtkSmartPointer<vtkProp3D> volume1 = cubeVolume(1, 0, 0);   // The red cube volume
  92.     vtkSmartPointer<vtkProp3D> volume2 = cubeVolume(0, 0, 1);   // The blue cube volume
  93.     vtkSmartPointer<vtkProp3D> actor1 = coneActor(1, 0, 0); // The red cone actor
  94.     vtkSmartPointer<vtkProp3D> actor2 = coneActor(0, 0, 1); // The blue cone actor
  95.  
  96.     // Translate the blue props by (2,2)
  97.     vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
  98.     transform->Translate(2, 2, 0);
  99.     volume2->SetUserTransform(transform);
  100.     actor2->SetUserTransform(transform);
  101.  
  102.     // Create a renderer, render window, and interactor
  103.     vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
  104.     vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
  105.     renderWindow->AddRenderer(renderer);
  106.     vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
  107.     renderWindowInteractor->SetRenderWindow(renderWindow);
  108.  
  109.     // Add the props to the scene
  110.     renderer->AddActor(volume1);
  111.     renderer->AddActor(volume2);
  112.     renderer->AddActor(actor1);
  113.     renderer->AddActor(actor2);
  114.     renderer->SetBackground(1,1,1); // Background color white
  115.  
  116.     // Render and interact
  117.     renderWindow->Render();
  118.     renderWindowInteractor->Start();
  119.  
  120.     return EXIT_SUCCESS;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement