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