1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestHyperTreeGridTernary3DAdaptiveDataSetSurfaceFilterMaterial.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 Rogeli Grima and Philippe Pebay, 2016
17 // This work was supported by Commissariat a l'Energie Atomique (CEA/DIF)
18 
19 #include "vtkAdaptiveDataSetSurfaceFilter.h"
20 
21 #include "vtkCamera.h"
22 #include "vtkCellData.h"
23 #include "vtkDataSetMapper.h"
24 #include "vtkHyperTreeGrid.h"
25 #include "vtkHyperTreeGridSource.h"
26 #include "vtkNew.h"
27 #include "vtkProperty.h"
28 #include "vtkRegressionTestImage.h"
29 #include "vtkRenderWindow.h"
30 #include "vtkRenderWindowInteractor.h"
31 #include "vtkRenderer.h"
32 
TestHyperTreeGridTernary3DAdaptiveDataSetSurfaceFilterMaterial(int argc,char * argv[])33 int TestHyperTreeGridTernary3DAdaptiveDataSetSurfaceFilterMaterial(int argc, char* argv[])
34 {
35   // Hyper tree grid
36   vtkNew<vtkHyperTreeGridSource> htGrid;
37   htGrid->SetMaxDepth(5);
38   htGrid->SetDimensions(4, 4, 3); // GridCell 3, 3, 2
39   htGrid->SetGridScale(1.5, 1., .7);
40   htGrid->SetBranchFactor(3);
41   htGrid->UseMaskOn();
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->SetMask(
57     "111 011 011 111 011 110|111111111111111111111111111 111111111111111111111111111 "
58     "000000000100110111111111111 111111111111111111111111111 111111111111111111111111111 "
59     "111111111111111111111111111 111111111111111111111111111 111111111111111111111111111 "
60     "000110011100000100100010100|000001011011111111111111111 111111111111111111111111111 "
61     "111111111111111111111111111 111111111111001111111101111 111111111111111111111111111 "
62     "111111111111111111111111111 111111111111111111111111111 111111111111111111111111111 "
63     "111111111111111111111111111 111111111111111111111111111 111111111111111111111111111 "
64     "111111111111111111111111111 111111111111111111111111111 "
65     "111111111111111111111111111|000000000111100100111100100 000000000111001001111001001 "
66     "000000111100100111111111111 000000111001001111111111111 111111111111111111111111111 "
67     "111111111111111111111111111 111111111111111111111111111 111111111111111111111111111 "
68     "111111111111111111111111111 111111111111111111111111111 "
69     "110110110100111110111000000|111111111111111111111111111 111111111111111111111111111");
70   htGrid->Update();
71   vtkHyperTreeGrid* htg = vtkHyperTreeGrid::SafeDownCast(htGrid->GetOutput());
72   htg->GetCellData()->SetScalars(htg->GetCellData()->GetArray("Depth"));
73 
74   // Data set surface
75   vtkNew<vtkAdaptiveDataSetSurfaceFilter> surface;
76   vtkNew<vtkRenderer> renderer;
77   surface->SetRenderer(renderer);
78   surface->SetInputConnection(htGrid->GetOutputPort());
79   surface->Update();
80   vtkPolyData* pd = surface->GetOutput();
81   double* range = pd->GetCellData()->GetArray("Depth")->GetRange();
82 
83   // Mappers
84   vtkMapper::SetResolveCoincidentTopologyToPolygonOffset();
85   vtkNew<vtkDataSetMapper> mapper1;
86   mapper1->SetInputConnection(surface->GetOutputPort());
87   mapper1->SetScalarRange(range);
88   vtkNew<vtkDataSetMapper> mapper2;
89   mapper2->SetInputConnection(surface->GetOutputPort());
90   mapper2->ScalarVisibilityOff();
91 
92   // Actors
93   vtkNew<vtkActor> actor1;
94   actor1->SetMapper(mapper1);
95   vtkNew<vtkActor> actor2;
96   actor2->SetMapper(mapper2);
97   actor2->GetProperty()->SetRepresentationToWireframe();
98   actor2->GetProperty()->SetColor(.7, .7, .7);
99 
100   // Camera
101   double bd[6];
102   pd->GetBounds(bd);
103   vtkNew<vtkCamera> camera;
104   camera->SetClippingRange(1., 100.);
105   camera->SetFocalPoint(pd->GetCenter());
106   camera->SetPosition(-.8 * bd[1], 2.1 * bd[3], -4.8 * bd[5]);
107 
108   // Renderer
109   renderer->SetActiveCamera(camera);
110   renderer->SetBackground(1., 1., 1.);
111   renderer->AddActor(actor1);
112   renderer->AddActor(actor2);
113 
114   // Render window
115   vtkNew<vtkRenderWindow> renWin;
116   renWin->AddRenderer(renderer);
117   renWin->SetSize(400, 400);
118   renWin->SetMultiSamples(0);
119 
120   // Interactor
121   vtkNew<vtkRenderWindowInteractor> iren;
122   iren->SetRenderWindow(renWin);
123 
124   // Render and test
125   renWin->Render();
126 
127   int retVal = vtkRegressionTestImageThreshold(renWin, 100);
128   if (retVal == vtkRegressionTester::DO_INTERACTOR)
129   {
130     iren->Start();
131   }
132 
133   return !retVal;
134 }
135