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