1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestOSPRayScalarBar.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 "vtkElevationFilter.h"
21 #include "vtkNew.h"
22 #include "vtkOSPRayPass.h"
23 #include "vtkOSPRayRendererNode.h"
24 #include "vtkPolyDataMapper.h"
25 #include "vtkProperty2D.h"
26 #include "vtkRegressionTestImage.h"
27 #include "vtkRenderWindow.h"
28 #include "vtkRenderWindowInteractor.h"
29 #include "vtkRenderer.h"
30 #include "vtkScalarBarActor.h"
31 #include "vtkScalarsToColors.h"
32 #include "vtkSphereSource.h"
33 #include "vtkTextProperty.h"
34 
35 #include "vtkTestUtilities.h"
36 
TestOSPRayScalarBar(int argc,char * argv[])37 int TestOSPRayScalarBar(int argc, char* argv[])
38 {
39   vtkNew<vtkSphereSource> sphere;
40   sphere->SetThetaResolution(8);
41   sphere->SetPhiResolution(8);
42   vtkNew<vtkElevationFilter> elev;
43   elev->SetInputConnection(sphere->GetOutputPort(0));
44 
45   vtkNew<vtkPolyDataMapper> sphereMapper;
46   sphereMapper->SetInputConnection(elev->GetOutputPort(0));
47   vtkNew<vtkActor> sphereActor;
48   sphereActor->SetMapper(sphereMapper);
49 
50   // Create the RenderWindow, Renderer and all Actors
51   vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();
52   vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
53   renWin->AddRenderer(ren1);
54 
55   vtkSmartPointer<vtkRenderWindowInteractor> iren =
56     vtkSmartPointer<vtkRenderWindowInteractor>::New();
57   iren->SetRenderWindow(renWin);
58 
59   vtkSmartPointer<vtkScalarBarActor> scalarBar1 = vtkSmartPointer<vtkScalarBarActor>::New();
60   vtkScalarsToColors* lut = sphereMapper->GetLookupTable();
61   lut->SetAnnotation(0.0, "Zed");
62   lut->SetAnnotation(1.0, "Uno");
63   lut->SetAnnotation(0.1, "$\\frac{1}{10}$");
64   lut->SetAnnotation(0.125, "$\\frac{1}{8}$");
65   lut->SetAnnotation(0.5, "Half");
66   scalarBar1->SetTitle("Density");
67   scalarBar1->SetLookupTable(lut);
68   scalarBar1->DrawAnnotationsOn();
69   scalarBar1->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();
70   scalarBar1->GetPositionCoordinate()->SetValue(.6, .05);
71   scalarBar1->SetWidth(0.15);
72   scalarBar1->SetHeight(0.5);
73   scalarBar1->SetTextPositionToPrecedeScalarBar();
74   scalarBar1->GetTitleTextProperty()->SetColor(0., 0., 1.);
75   scalarBar1->GetLabelTextProperty()->SetColor(0., 0., 1.);
76   scalarBar1->SetDrawFrame(1);
77   scalarBar1->GetFrameProperty()->SetColor(0., 0., 0.);
78   scalarBar1->SetDrawBackground(1);
79   scalarBar1->GetBackgroundProperty()->SetColor(1., 1., 1.);
80 
81   // Add the actors to the renderer, set the background and size
82   //
83   ren1->AddActor(sphereActor);
84   ren1->AddActor(scalarBar1);
85   ren1->GradientBackgroundOn();
86   ren1->SetBackground(.5, .5, .5);
87   ren1->SetBackground2(.0, .0, .0);
88 
89   // render the image
90   renWin->SetWindowName("VTK - Scalar Bar options");
91   renWin->SetSize(600, 500);
92   renWin->SetMultiSamples(0);
93   vtkSmartPointer<vtkOSPRayPass> ospray = vtkSmartPointer<vtkOSPRayPass>::New();
94   ren1->SetPass(ospray);
95 
96   for (int i = 0; i < argc; ++i)
97   {
98     if (!strcmp(argv[i], "--OptiX"))
99     {
100       vtkOSPRayRendererNode::SetRendererType("optix pathtracer", ren1);
101       break;
102     }
103   }
104 
105   renWin->Render();
106 
107   int retVal = vtkRegressionTestImage(renWin);
108   if (retVal == vtkRegressionTester::DO_INTERACTOR)
109   {
110     iren->Start();
111   }
112 
113   return !retVal;
114 }
115