1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestOptiXWindow.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 
16 #include "vtkSmartPointer.h"
17 
18 #include "vtkActor.h"
19 #include "vtkCamera.h"
20 #include "vtkLight.h"
21 #include "vtkPolyDataMapper.h"
22 #include "vtkProperty2D.h"
23 #include "vtkRegressionTestImage.h"
24 #include "vtkRenderer.h"
25 #include "vtkRenderWindow.h"
26 #include "vtkRenderWindowInteractor.h"
27 #include "vtkTextProperty.h"
28 #include "vtkSphereSource.h"
29 #include "vtkNew.h"
30 #include "vtkElevationFilter.h"
31 #include "vtkOptiXWindowNode.h"
32 #include "vtkImageActor.h"
33 #include "vtkImageData.h"
34 #include "vtkPointData.h"
35 #include "vtkImageMapper3D.h"
36 
37 #include "vtkTestUtilities.h"
38 
TestOptiXWindow(int argc,char * argv[])39 int TestOptiXWindow( int argc, char *argv[] )
40 {
41   vtkNew<vtkSphereSource> sphere;
42   sphere->SetThetaResolution(8);
43   sphere->SetPhiResolution(8);
44   vtkNew<vtkElevationFilter> elev;
45   elev->SetInputConnection(sphere->GetOutputPort(0));
46 
47   vtkNew<vtkPolyDataMapper> sphereMapper;
48   sphereMapper->SetInputConnection(elev->GetOutputPort(0));
49   vtkNew<vtkActor> sphereActor;
50   sphereActor->SetMapper(sphereMapper);
51 
52   vtkSmartPointer<vtkLight> light1 = vtkSmartPointer<vtkLight>::New();
53 
54   // Create the RenderWindow, Renderer and all Actors
55   vtkSmartPointer<vtkRenderer> ren1 =
56     vtkSmartPointer<vtkRenderer>::New();
57   ren1->AddLight(light1);
58 
59   vtkSmartPointer<vtkRenderWindow> renWin =
60     vtkSmartPointer<vtkRenderWindow>::New();
61   renWin->AddRenderer( ren1 );
62 
63   // Add the actors to the renderer, set the background and size
64   //
65   ren1->AddActor( sphereActor );
66   ren1->SetBackground( .2,.3,.4 );
67 
68   // render the image
69   renWin->SetWindowName( "VTK - Scalar Bar options" );
70   renWin->SetSize( 600, 500 );
71 
72   vtkNew<vtkOptiXWindowNode> owindow;
73   owindow->SetRenderable(renWin);
74   owindow->TraverseAllPasses();
75 
76   // now get the result and display it
77   int *size = owindow->GetSize();
78   vtkNew<vtkImageData> image;
79   image->SetDimensions(size[0], size[1], 1);
80   image->GetPointData()->SetScalars(owindow->GetColorBuffer());
81 
82   // Create a new image actor and remove the geometry one
83   vtkNew<vtkImageActor> imageActor;
84   imageActor->GetMapper()->SetInputData(image);
85   vtkNew<vtkRenderer> renderer;
86   renderer->AddActor(imageActor);
87 
88   // Background color white to distinguish image boundary
89   renderer->SetBackground(1, 1, 1);
90   vtkNew<vtkRenderWindow> renderWindow;
91   renderWindow->AddRenderer(renderer);
92 
93   vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
94   renderWindowInteractor->SetRenderWindow(renderWindow);
95   renderWindow->Render();
96   renderer->ResetCamera();
97   renderWindow->Render();
98   int retVal = vtkRegressionTestImage(renderWindow);
99   if (retVal == vtkRegressionTester::DO_INTERACTOR)
100   {
101     renderWindowInteractor->Start();
102   }
103 
104   return !retVal;
105 }
106