1 /*==================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestHyperTreeGridTernary3DGeometry.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 // .SECTION Thanks
16 // This test was written by Philippe Pebay, Kitware 2012
17 // This test by revised by Philippe Pebay, 2016
18 // This work was supported by Commissariat a l'Energie Atomique (CEA/DIF)
19 
20 #include "vtkCamera.h"
21 #include "vtkCellData.h"
22 #include "vtkHyperTreeGrid.h"
23 #include "vtkHyperTreeGridGeometry.h"
24 #include "vtkHyperTreeGridSource.h"
25 #include "vtkNew.h"
26 #include "vtkPolyData.h"
27 #include "vtkPolyDataMapper.h"
28 #include "vtkProperty.h"
29 #include "vtkRegressionTestImage.h"
30 #include "vtkRenderWindow.h"
31 #include "vtkRenderWindowInteractor.h"
32 #include "vtkRenderer.h"
33 
TestHyperTreeGridTernary3DGeometry(int argc,char * argv[])34 int TestHyperTreeGridTernary3DGeometry(int argc, char* argv[])
35 {
36   // Hyper tree grid
37   vtkNew<vtkHyperTreeGridSource> htGrid;
38   htGrid->SetMaxDepth(6);
39   htGrid->SetDimensions(4, 4, 3); // GridCell 3, 3, 2
40   htGrid->SetGridScale(1.5, 1., .7);
41   htGrid->SetBranchFactor(3);
42   htGrid->SetDescriptor(
43     "RRR .R. .RR ..R ..R .R.|R.......................... ........................... "
44     "........................... .............R............. ....RR.RR........R......... "
45     ".....RRRR.....R.RR......... ........................... ........................... "
46     "...........................|........................... ........................... "
47     "........................... ...RR.RR.......RR.......... ........................... "
48     "RR......................... ........................... ........................... "
49     "........................... ........................... ........................... "
50     "........................... ........................... "
51     "............RRR............|........................... ........................... "
52     ".......RR.................. ........................... ........................... "
53     "........................... ........................... ........................... "
54     "........................... ........................... "
55     "...........................|........................... ...........................");
56   htGrid->Update();
57   vtkHyperTreeGrid* htg = vtkHyperTreeGrid::SafeDownCast(htGrid->GetOutput());
58   htg->GetCellData()->SetScalars(htg->GetCellData()->GetArray("Depth"));
59 
60   // Geometry
61   vtkNew<vtkHyperTreeGridGeometry> geometry;
62   geometry->SetInputConnection(htGrid->GetOutputPort());
63   geometry->Update();
64   vtkPolyData* pd = geometry->GetPolyDataOutput();
65 
66   // Mappers
67   vtkMapper::SetResolveCoincidentTopologyToPolygonOffset();
68   vtkNew<vtkPolyDataMapper> mapper1;
69   mapper1->SetInputConnection(geometry->GetOutputPort());
70   mapper1->SetScalarRange(pd->GetCellData()->GetArray("Depth")->GetRange());
71   vtkNew<vtkPolyDataMapper> mapper2;
72   mapper2->SetInputConnection(geometry->GetOutputPort());
73   mapper2->ScalarVisibilityOff();
74 
75   // Actors
76   vtkNew<vtkActor> actor1;
77   actor1->SetMapper(mapper1);
78   vtkNew<vtkActor> actor2;
79   actor2->SetMapper(mapper2);
80   actor2->GetProperty()->SetRepresentationToWireframe();
81   actor2->GetProperty()->SetColor(.7, .7, .7);
82 
83   // Camera
84   double bd[6];
85   pd->GetBounds(bd);
86   vtkNew<vtkCamera> camera;
87   camera->SetClippingRange(1., 100.);
88   camera->SetFocalPoint(pd->GetCenter());
89   camera->SetPosition(-.8 * bd[1], 2.1 * bd[3], -4.8 * bd[5]);
90 
91   // Renderer
92   vtkNew<vtkRenderer> renderer;
93   renderer->SetActiveCamera(camera);
94   renderer->SetBackground(1., 1., 1.);
95   renderer->AddActor(actor1);
96   renderer->AddActor(actor2);
97 
98   // Render window
99   vtkNew<vtkRenderWindow> renWin;
100   renWin->AddRenderer(renderer);
101   renWin->SetSize(400, 400);
102   renWin->SetMultiSamples(0);
103 
104   // Interactor
105   vtkNew<vtkRenderWindowInteractor> iren;
106   iren->SetRenderWindow(renWin);
107 
108   // Render and test
109   renWin->Render();
110 
111   int retVal = vtkRegressionTestImageThreshold(renWin, 90);
112   if (retVal == vtkRegressionTester::DO_INTERACTOR)
113   {
114     iren->Start();
115   }
116 
117   return !retVal;
118 }
119