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