/*========================================================================= Program: Visualization Toolkit Module: TestOSPRayDynamicScene.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. =========================================================================*/ // This test verifies that dynamic scene (vary number of objects) // contents work acceptably // // The command line arguments are: // -I => run in interactive mode; unless this is used, the program will // not allow interaction and exit // TODO: test broken by pre SC15 ospray caching #include "vtkActor.h" #include "vtkCamera.h" #include "vtkOSPRayPass.h" #include "vtkOSPRayRendererNode.h" #include "vtkPolyDataMapper.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkSmartPointer.h" #include "vtkSphereSource.h" #include int TestOSPRayDynamicScene(int argc, char* argv[]) { vtkSmartPointer iren = vtkSmartPointer::New(); vtkSmartPointer renWin = vtkSmartPointer::New(); iren->SetRenderWindow(renWin); vtkSmartPointer renderer = vtkSmartPointer::New(); renWin->AddRenderer(renderer); renderer->SetBackground(0.0, 0.0, 0.0); renWin->SetSize(400, 400); renWin->Render(); vtkSmartPointer ospray = vtkSmartPointer::New(); renderer->SetPass(ospray); for (int i = 0; i < argc; ++i) { if (!strcmp(argv[i], "--OptiX")) { vtkOSPRayRendererNode::SetRendererType("optix pathtracer", renderer); break; } } #define GRIDDIM 3 vtkSmartPointer camera = vtkSmartPointer::New(); camera->SetPosition(GRIDDIM * 3, GRIDDIM * 3, GRIDDIM * 4); renderer->SetActiveCamera(camera); cerr << "ADD" << endl; std::map actors; for (int i = 0; i < GRIDDIM; i++) { for (int j = 0; j < GRIDDIM; j++) { for (int k = 0; k < GRIDDIM; k++) { vtkSmartPointer sphere = vtkSmartPointer::New(); sphere->SetCenter(i, j, k); sphere->SetPhiResolution(10); sphere->SetThetaResolution(10); vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(sphere->GetOutputPort()); vtkActor* actor = vtkActor::New(); renderer->AddActor(actor); actor->SetMapper(mapper); actors[i * GRIDDIM * GRIDDIM + j * GRIDDIM + k] = actor; renWin->Render(); } } } cerr << "HIDE" << endl; for (int i = 0; i < GRIDDIM; i++) { for (int j = 0; j < GRIDDIM; j++) { for (int k = 0; k < GRIDDIM; k++) { vtkActor* actor = actors[i * GRIDDIM * GRIDDIM + j * GRIDDIM + k]; actor->VisibilityOff(); renWin->Render(); } } } cerr << "SHOW" << endl; for (int i = 0; i < GRIDDIM; i++) { for (int j = 0; j < GRIDDIM; j++) { for (int k = 0; k < GRIDDIM; k++) { vtkActor* actor = actors[i * GRIDDIM * GRIDDIM + j * GRIDDIM + k]; actor->VisibilityOn(); renWin->Render(); } } } cerr << "REMOVE" << endl; for (int i = 0; i < GRIDDIM; i++) { for (int j = 0; j < GRIDDIM; j++) { for (int k = 0; k < GRIDDIM; k++) { vtkActor* actor = actors[i * GRIDDIM * GRIDDIM + j * GRIDDIM + k]; // leaving one to have a decent image to compare against bool killme = !(i == 0 && j == 1 && k == 0); if (killme) { renderer->RemoveActor(actor); actor->Delete(); renWin->Render(); } } } } iren->Start(); renderer->RemoveActor(actors[0 * GRIDDIM * GRIDDIM + 1 * GRIDDIM + 0]); actors[0 * GRIDDIM * GRIDDIM + 1 * GRIDDIM + 0]->Delete(); return 0; }