Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vtkSmartPointer.h>
- #include <vtkConeSource.h>
- #include <vtkTransform.h>
- #include <vtkPolyData.h>
- #include <vtkPolyDataMapper.h>
- #include <vtkProp3D.h>
- #include <vtkActor.h>
- #include <vtkProperty.h>
- #include <vtkRenderWindow.h>
- #include <vtkRenderer.h>
- #include <vtkRenderWindowInteractor.h>
- #include <vtkProjectedTetrahedraMapper.h>
- #include <vtkDoubleArray.h>
- #include <vtkRectilinearGrid.h>
- #include <vtkUnstructuredGrid.h>
- #include <vtkRectilinearGridToTetrahedra.h>
- #include <vtkVolumeProperty.h>
- #include <vtkPointData.h>
- #include <vtkColorTransferFunction.h>
- // Creates a cube volume
- vtkSmartPointer<vtkVolume> cubeVolume(double r, double g, double b){
- // Create the coordinates
- vtkSmartPointer<vtkDoubleArray> xArray = vtkSmartPointer<vtkDoubleArray>::New();
- xArray->InsertNextValue(0.0);
- xArray->InsertNextValue(1.0);
- vtkSmartPointer<vtkDoubleArray> yArray = vtkSmartPointer<vtkDoubleArray>::New();
- yArray->InsertNextValue(0.0);
- yArray->InsertNextValue(1.0);
- vtkSmartPointer<vtkDoubleArray> zArray = vtkSmartPointer<vtkDoubleArray>::New();
- zArray->InsertNextValue(0.0);
- zArray->InsertNextValue(1.0);
- // Create the RectilinearGrid
- vtkSmartPointer<vtkRectilinearGrid> grid = vtkSmartPointer<vtkRectilinearGrid>::New();
- grid->SetDimensions(2,2,2);
- grid->SetXCoordinates(xArray);
- grid->SetYCoordinates(yArray);
- grid->SetZCoordinates(zArray);
- // Obtain an UnstructuredGrid made of tetrahedras
- vtkSmartPointer<vtkRectilinearGridToTetrahedra> rectilinearGridToTetrahedra = vtkSmartPointer<vtkRectilinearGridToTetrahedra>::New();
- rectilinearGridToTetrahedra->SetInputData(grid);
- rectilinearGridToTetrahedra->Update();
- vtkSmartPointer<vtkUnstructuredGrid> ugrid = rectilinearGridToTetrahedra->GetOutput();
- // Add scalars to the grid
- vtkSmartPointer<vtkDoubleArray> scalars = vtkSmartPointer<vtkDoubleArray>::New();
- for (int i = 0; i < 8; i++){
- scalars->InsertNextValue(0);
- }
- ugrid->GetPointData()->SetScalars(scalars);
- // Volume Rendering Mapper
- vtkSmartPointer<vtkProjectedTetrahedraMapper> mapper = vtkSmartPointer<vtkProjectedTetrahedraMapper>::New();
- mapper->SetInputData(ugrid);
- mapper->Update();
- // Create the volume
- vtkSmartPointer<vtkVolume> volume = vtkSmartPointer<vtkVolume>::New();
- volume->SetMapper(mapper);
- // Apply a ColorTransferFunction to the volume
- vtkSmartPointer<vtkColorTransferFunction> colorTransferFunction = vtkSmartPointer<vtkColorTransferFunction>::New();
- colorTransferFunction->AddRGBPoint(0.0, r, g, b);
- volume->GetProperty()->SetColor(colorTransferFunction);
- return volume;
- }
- // Creates a cone actor
- vtkSmartPointer<vtkActor> coneActor(double r, double g, double b){
- // Simple cone mapper
- vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
- mapper->SetInputConnection(vtkSmartPointer<vtkConeSource>::New()->GetOutputPort());
- // Create the actor
- vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
- actor->GetProperty()->SetColor(r,g,b);
- actor->SetMapper(mapper);
- return actor;
- }
- int main(int, char *[]){
- // Create the props
- vtkSmartPointer<vtkProp3D> volume1 = cubeVolume(1, 0, 0); // The red cube volume
- vtkSmartPointer<vtkProp3D> volume2 = cubeVolume(0, 0, 1); // The blue cube volume
- vtkSmartPointer<vtkProp3D> actor1 = coneActor(1, 0, 0); // The red cone actor
- vtkSmartPointer<vtkProp3D> actor2 = coneActor(0, 0, 1); // The blue cone actor
- // Translate the blue props by (2,2)
- vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
- transform->Translate(2, 2, 0);
- volume2->SetUserTransform(transform);
- actor2->SetUserTransform(transform);
- // Create a renderer, render window, and interactor
- vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
- vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
- renderWindow->AddRenderer(renderer);
- vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
- renderWindowInteractor->SetRenderWindow(renderWindow);
- // Add the props to the scene
- renderer->AddActor(volume1);
- renderer->AddActor(volume2);
- renderer->AddActor(actor1);
- renderer->AddActor(actor2);
- renderer->SetBackground(1,1,1); // Background color white
- // Render and interact
- renderWindow->Render();
- renderWindowInteractor->Start();
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement