1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestOptiXDynamicScene.cxx
5 
6   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7   All rights reserved.
8   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10      This software is distributed WITHOUT ANY WARRANTY; without even
11      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12      PURPOSE.  See the above copyright notice for more information.
13 
14 =========================================================================*/
15 // This test verifies that dynamic scene (vary number of objects)
16 // contents work acceptably
17 //
18 // The command line arguments are:
19 // -I        => run in interactive mode; unless this is used, the program will
20 //              not allow interaction and exit
21 
22 #include "vtkActor.h"
23 #include "vtkCamera.h"
24 #include "vtkOptiXPass.h"
25 #include "vtkPolyDataMapper.h"
26 #include "vtkRenderer.h"
27 #include "vtkRenderWindow.h"
28 #include "vtkRenderWindowInteractor.h"
29 #include "vtkSmartPointer.h"
30 #include "vtkSphereSource.h"
31 
32 #include <map>
33 
TestOptiXDynamicScene(int vtkNotUsed (argc),char * vtkNotUsed (argv)[])34 int TestOptiXDynamicScene(int vtkNotUsed(argc), char* vtkNotUsed(argv)[])
35 {
36   vtkSmartPointer<vtkRenderWindowInteractor> iren =
37     vtkSmartPointer<vtkRenderWindowInteractor>::New();
38   vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
39   iren->SetRenderWindow(renWin);
40   vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
41   renWin->AddRenderer(renderer);
42   renderer->SetBackground(0.0,0.0,0.0);
43   renWin->SetSize(400,400);
44   renWin->Render();
45 
46   vtkSmartPointer<vtkOptiXPass> optix=vtkSmartPointer<vtkOptiXPass>::New();
47   renderer->SetPass(optix);
48 
49   #define GRIDDIM 3
50   vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New();
51   camera->SetPosition(GRIDDIM*3,GRIDDIM*3,GRIDDIM*4);
52   renderer->SetActiveCamera(camera);
53 
54   cerr << "ADD" << endl;
55   std::map<int, vtkActor*> actors;
56   for (int i = 0; i < GRIDDIM; i++)
57   {
58     for (int j = 0; j < GRIDDIM; j++)
59     {
60       for (int k = 0; k < GRIDDIM; k++)
61       {
62         vtkSmartPointer<vtkSphereSource> sphere =
63           vtkSmartPointer<vtkSphereSource>::New();
64         sphere->SetCenter(i,j,k);
65         sphere->SetPhiResolution(10);
66         sphere->SetThetaResolution(10);
67         vtkSmartPointer<vtkPolyDataMapper> mapper =
68           vtkSmartPointer<vtkPolyDataMapper>::New();
69         mapper->SetInputConnection(sphere->GetOutputPort());
70         vtkActor *actor= vtkActor::New();
71         renderer->AddActor(actor);
72         actor->SetMapper(mapper);
73         actors[i*GRIDDIM*GRIDDIM+j*GRIDDIM+k] = actor;
74         renWin->Render();
75       }
76     }
77   }
78 
79   cerr << "HIDE" << endl;
80   for (int i = 0; i < GRIDDIM; i++)
81   {
82     for (int j = 0; j < GRIDDIM; j++)
83     {
84       for (int k = 0; k < GRIDDIM; k++)
85       {
86         vtkActor *actor = actors[i*GRIDDIM*GRIDDIM+j*GRIDDIM+k];
87         actor->VisibilityOff();
88         renWin->Render();
89       }
90     }
91   }
92 
93   cerr << "SHOW" << endl;
94   for (int i = 0; i < GRIDDIM; i++)
95   {
96     for (int j = 0; j < GRIDDIM; j++)
97     {
98       for (int k = 0; k < GRIDDIM; k++)
99       {
100         vtkActor *actor = actors[i*GRIDDIM*GRIDDIM+j*GRIDDIM+k];
101         actor->VisibilityOn();
102         renWin->Render();
103       }
104     }
105   }
106 
107   cerr << "REMOVE" << endl;
108   for (int i = 0; i < GRIDDIM; i++)
109   {
110     for (int j = 0; j < GRIDDIM; j++)
111     {
112       for (int k = 0; k < GRIDDIM; k++)
113       {
114         vtkActor *actor = actors[i*GRIDDIM*GRIDDIM+j*GRIDDIM+k];
115         //leaving one to have a decent image to compare against
116         bool killme = !(i==0 && j==1 && k==0);
117         if (killme)
118         {
119           renderer->RemoveActor(actor);
120           actor->Delete();
121           renWin->Render();
122         }
123       }
124     }
125   }
126 
127   iren->Start();
128 
129   renderer->RemoveActor(actors[0*GRIDDIM*GRIDDIM+1*GRIDDIM+0]);
130   actors[0*GRIDDIM*GRIDDIM+1*GRIDDIM+0]->Delete();
131 
132   return 0;
133 }
134