VTK-m  2.0
MeshStructureMarchingCubes.h
Go to the documentation of this file.
1 //============================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //============================================================================
10 // Copyright (c) 2018, The Regents of the University of California, through
11 // Lawrence Berkeley National Laboratory (subject to receipt of any required approvals
12 // from the U.S. Dept. of Energy). All rights reserved.
13 //
14 // Redistribution and use in source and binary forms, with or without modification,
15 // are permitted provided that the following conditions are met:
16 //
17 // (1) Redistributions of source code must retain the above copyright notice, this
18 // list of conditions and the following disclaimer.
19 //
20 // (2) Redistributions in binary form must reproduce the above copyright notice,
21 // this list of conditions and the following disclaimer in the documentation
22 // and/or other materials provided with the distribution.
23 //
24 // (3) Neither the name of the University of California, Lawrence Berkeley National
25 // Laboratory, U.S. Dept. of Energy nor the names of its contributors may be
26 // used to endorse or promote products derived from this software without
27 // specific prior written permission.
28 //
29 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
30 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
32 // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
36 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
37 // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
38 // OF THE POSSIBILITY OF SUCH DAMAGE.
39 //
40 //=============================================================================
41 //
42 // This code is an extension of the algorithm presented in the paper:
43 // Parallel Peak Pruning for Scalable SMP Contour Tree Computation.
44 // Hamish Carr, Gunther Weber, Christopher Sewell, and James Ahrens.
45 // Proceedings of the IEEE Symposium on Large Data Analysis and Visualization
46 // (LDAV), October 2016, Baltimore, Maryland.
47 //
48 // The PPP2 algorithm and software were jointly developed by
49 // Hamish Carr (University of Leeds), Gunther H. Weber (LBNL), and
50 // Oliver Ruebel (LBNL)
51 //==============================================================================
52 
53 #ifndef vtk_m_worklet_contourtree_augmented_meshtypes_MeshStructureMarchingCubes_h
54 #define vtk_m_worklet_contourtree_augmented_meshtypes_MeshStructureMarchingCubes_h
55 
56 #include <vtkm/Pair.h>
57 #include <vtkm/Types.h>
58 #include <vtkm/cont/ArrayHandle.h>
63 
64 namespace vtkm
65 {
66 namespace worklet
67 {
68 namespace contourtree_augmented
69 {
70 
71 // Worklet for computing the sort indices from the sort order
73 {
74 public:
75  // EdgeBoundaryDetectionMasks types
78 
79  // Sort indicies types
81 
82  // CubeVertexPermutations types
85 
86  // linkVertexConnection types
88  m3d_marchingcubes::LinkVertexConnectionsType::ReadPortalType;
89  // inCubeConnection types
90 
91  using InCubeConnectionsPortalType = m3d_marchingcubes::InCubeConnectionsType::ReadPortalType;
92 
93  // Default constructor needed to make the CUDA build work
96  : data_set_mesh::MeshStructure3D()
97  , GetMax(false)
98  {
99  }
100 
101  // Main constructore used in the code
103  vtkm::Id3 meshSize,
104  bool getmax,
105  const IdArrayType& sortIndices,
106  const IdArrayType& sortOrder,
107  const m3d_marchingcubes::EdgeBoundaryDetectionMasksType& EdgeBoundaryDetectionMasksIn,
108  const m3d_marchingcubes::CubeVertexPermutationsType& CubeVertexPermutationsIn,
109  const m3d_marchingcubes::LinkVertexConnectionsType& LinkVertexConnectionsSixIn,
110  const m3d_marchingcubes::LinkVertexConnectionsType& LinkVertexConnectionsEighteenIn,
111  const m3d_marchingcubes::InCubeConnectionsType& InCubeConnectionsSixIn,
112  const m3d_marchingcubes::InCubeConnectionsType& InCubeConnectionsEighteenIn,
114  vtkm::cont::Token& token)
115  : data_set_mesh::MeshStructure3D(meshSize)
116  , GetMax(getmax)
117  {
118  this->SortIndicesPortal = sortIndices.PrepareForInput(device, token);
119  this->SortOrderPortal = sortOrder.PrepareForInput(device, token);
121  EdgeBoundaryDetectionMasksIn.PrepareForInput(device, token);
122  this->CubeVertexPermutationsPortal = CubeVertexPermutationsIn.PrepareForInput(device, token);
124  LinkVertexConnectionsSixIn.PrepareForInput(device, token);
126  LinkVertexConnectionsEighteenIn.PrepareForInput(device, token);
127  this->InCubeConnectionsSixPortal = InCubeConnectionsSixIn.PrepareForInput(device, token);
129  InCubeConnectionsEighteenIn.PrepareForInput(device, token);
130  }
131 
132  VTKM_EXEC
133  vtkm::Id GetMaxNumberOfNeighbours() const { return m3d_marchingcubes::N_FACE_NEIGHBOURS; }
134 
135  VTKM_EXEC
136  inline vtkm::Id GetNeighbourIndex(vtkm::Id sortIndex, vtkm::Id nbrNo) const
137  {
138  using namespace m3d_marchingcubes;
139  vtkm::Id meshIndex = this->SortOrderPortal.Get(sortIndex);
140  const vtkm::Id3 strides{ 1, this->MeshSize[0], this->MeshSize[0] * this->MeshSize[1] };
141 
142  // GetNeighbourIndex
143  switch (nbrNo)
144  {
145  // Edge connected neighbours
146  case 0: // { 0, 0, -1 }
147  return SortIndicesPortal.Get(meshIndex - strides[2]);
148  case 1: // { 0, -1, 0 }
149  return SortIndicesPortal.Get(meshIndex - strides[1]);
150  case 2: // { -1, 0, 0 }
151  return SortIndicesPortal.Get(meshIndex - strides[0]);
152  case 3: // { 1, 0, 0 }
153  return SortIndicesPortal.Get(meshIndex + strides[0]);
154  case 4: // { 0, 1, 0 }
155  return SortIndicesPortal.Get(meshIndex + strides[1]);
156  case 5: // { 0, 0, 1 }
157  return SortIndicesPortal.Get(meshIndex + strides[2]);
158  // Face connected neighbours
159  case 6: // { 0, -1, -1 }
160  return SortIndicesPortal.Get(meshIndex - strides[2] - strides[1]);
161  case 7: // { -1, 0, -1 }
162  return SortIndicesPortal.Get(meshIndex - strides[2] - strides[0]);
163  case 8: // { 1, 0, -1 }
164  return SortIndicesPortal.Get(meshIndex - strides[2] + strides[0]);
165  case 9: // { 0, 1, -1 }
166  return SortIndicesPortal.Get(meshIndex - strides[2] + strides[1]);
167  case 10: // { -1, -1, 0 }
168  return SortIndicesPortal.Get(meshIndex - strides[1] - strides[0]);
169  case 11: // { 1, -1, 0 }
170  return SortIndicesPortal.Get(meshIndex - strides[1] + strides[0]);
171  case 12: // { -1, 1, 0 }
172  return SortIndicesPortal.Get(meshIndex + strides[1] - strides[0]);
173  case 13: // { 1, 1, 0 }
174  return SortIndicesPortal.Get(meshIndex + strides[1] + strides[0]);
175  case 14: // { 0, -1, 1 }
176  return SortIndicesPortal.Get(meshIndex + strides[2] - strides[1]);
177  case 15: // { -1, 0, 1 }
178  return SortIndicesPortal.Get(meshIndex + strides[2] - 1);
179  case 16: // { 1, 0, 1 }
180  return SortIndicesPortal.Get(meshIndex + strides[2] + 1);
181  case 17: // { 0, 1, 1 }
182  return SortIndicesPortal.Get(meshIndex + strides[2] + strides[1]);
183  // Diagonal connected neighbours
184  case 18: // { -1, -1, -1 }
185  return SortIndicesPortal.Get(meshIndex - strides[2] - strides[1] - strides[0]);
186  case 19: // { 1, -1, -1 }
187  return SortIndicesPortal.Get(meshIndex - strides[2] - strides[1] + strides[0]);
188  case 20: // { -1, 1, -1 }
189  return SortIndicesPortal.Get(meshIndex - strides[2] + strides[1] - strides[0]);
190  case 21: // { 1, 1, -1 }
191  return SortIndicesPortal.Get(meshIndex - strides[2] + strides[1] + strides[0]);
192  case 22: // { -1, -1, 1 }
193  return SortIndicesPortal.Get(meshIndex + strides[2] - strides[1] - strides[0]);
194  case 23: // { 1, -1, 1 }
195  return SortIndicesPortal.Get(meshIndex + strides[2] - strides[1] + strides[0]);
196  case 24: // { -1, 1, 1 }
197  return SortIndicesPortal.Get(meshIndex + strides[2] + strides[1] - strides[0]);
198  case 25: // { 1, 1, 1 }
199  return SortIndicesPortal.Get(meshIndex + strides[2] + strides[1] + strides[0]);
200  default:
201  VTKM_ASSERT(false);
202  // TODO/FIXME: Should probaly return an invalid value or throw an exception instead
203  return meshIndex; // Need to error out here
204  }
205  } // GetNeighbourIndex
206 
207 // Disable conversion warnings for Add, Subtract, Multiply, Divide on GCC only.
208 // GCC creates false positive warnings for signed/unsigned char* operations.
209 // This occurs because the values are implicitly casted up to int's for the
210 // operation, and than casted back down to char's when return.
211 // This causes a false positive warning, even when the values is within
212 // the value types range
213 #if (defined(VTKM_GCC) || defined(VTKM_CLANG))
214 #pragma GCC diagnostic push
215 #pragma GCC diagnostic ignored "-Wconversion"
216 #endif // gcc || clang
217 
218  VTKM_EXEC
219  inline vtkm::Id GetExtremalNeighbour(vtkm::Id sortIndex) const
220  {
221  using namespace m3d_marchingcubes;
222  // GetExtremalNeighbour()
223  // convert to a sort index
224  vtkm::Id meshIndex = SortOrderPortal.Get(sortIndex);
225 
226  vtkm::Id3 pos = this->VertexPos(meshIndex);
227  vtkm::Int8 boundaryConfig = ((pos[0] == 0) ? LeftBit : 0) |
228  ((pos[0] == this->MeshSize[0] - 1) ? RightBit : 0) | ((pos[1] == 0) ? TopBit : 0) |
229  ((pos[1] == this->MeshSize[1] - 1) ? BottomBit : 0) | ((pos[2] == 0) ? FrontBit : 0) |
230  ((pos[2] == this->MeshSize[2] - 1) ? BackBit : 0);
231 
232  // in what follows, the boundary conditions always reset wasAscent
233  // loop downwards so that we pick the same edges as previous versions
234  const int nNeighbours = (!GetMax ? N_FACE_NEIGHBOURS : N_EDGE_NEIGHBOURS);
235  for (vtkm::Id nbrNo = 0; nbrNo < nNeighbours; ++nbrNo)
236  {
237  // only consider valid edges
238  if (!(boundaryConfig & EdgeBoundaryDetectionMasksPortal.Get(nbrNo)))
239  {
240  vtkm::Id nbrSortIndex = GetNeighbourIndex(sortIndex, nbrNo);
241  // explicit test allows reversal between join and split trees
242  if (GetMax ? (nbrSortIndex > sortIndex) : (nbrSortIndex < sortIndex))
243  { // valid edge and outbound
244  return nbrSortIndex;
245  } // valid edge and outbound
246  }
247  } // per edge
248 
249  return sortIndex | TERMINAL_ELEMENT;
250  } // GetExtremalNeighbour()
251 
252  VTKM_EXEC
254  vtkm::Id sortIndex,
255  bool getMaxComponents) const
256  {
257  using namespace m3d_marchingcubes;
258  // GetNeighbourComponentsMaskAndDegree()
259  // convert to a sort index
260  vtkm::Id meshIndex = SortOrderPortal.Get(sortIndex);
261 
262  vtkm::Id3 pos = this->VertexPos(meshIndex);
263  vtkm::Int8 boundaryConfig = ((pos[0] == 0) ? LeftBit : 0) |
264  ((pos[0] == this->MeshSize[0] - 1) ? RightBit : 0) | ((pos[1] == 0) ? TopBit : 0) |
265  ((pos[1] == this->MeshSize[1] - 1) ? BottomBit : 0) | ((pos[2] == 0) ? FrontBit : 0) |
266  ((pos[2] == this->MeshSize[2] - 1) ? BackBit : 0);
267 
268  // Initialize "union find"
269  int parentId[N_ALL_NEIGHBOURS];
270 
271  // Compute components of upper link
272  for (int edgeNo = 0; edgeNo < N_ALL_NEIGHBOURS; ++edgeNo)
273  {
274  if (!(boundaryConfig & EdgeBoundaryDetectionMasksPortal.Get(edgeNo)))
275  {
276  vtkm::Id nbrSortIndex = GetNeighbourIndex(sortIndex, edgeNo);
277 
278  if (getMaxComponents ? (sortIndex < nbrSortIndex) : (sortIndex > nbrSortIndex))
279  {
280  parentId[edgeNo] = edgeNo;
281  }
282  else
283  {
284  parentId[edgeNo] = -1;
285  }
286  } // inside grid
287  else
288  {
289  parentId[edgeNo] = -1;
290  }
291  } // for each edge
292 
293  for (vtkm::UInt8 permIndex = 0; permIndex < CubeVertexPermutations_NumPermutations; permIndex++)
294  {
295  // Combpute connection configuration in each of the eight cubes
296  // surrounding a vertex
297  vtkm::UInt8 caseNo = 0;
298  for (int vtxNo = 0; vtxNo < 7; ++vtxNo)
299  {
300  if (parentId[CubeVertexPermutationsPortal.Get(permIndex)[vtxNo]] != -1)
301  {
302  caseNo |= (vtkm::UInt8)(1 << vtxNo);
303  }
304  }
305 
306  const auto& vertex_permutation = CubeVertexPermutationsPortal.Get(permIndex);
307  if (getMaxComponents)
308  {
309  for (int edgeNo = 0; edgeNo < 3; ++edgeNo)
310  {
311  if (InCubeConnectionsSixPortal.Get(caseNo) & (static_cast<vtkm::Id>(1) << edgeNo))
312  {
313  const auto& edge = LinkVertexConnectionsSixPortal.Get(edgeNo);
314  vtkm::IdComponent edge0 = edge[0];
315  vtkm::IdComponent edge1 = edge[1];
316  VTKM_ASSERT(0 <= edge0 && edge0 < CubeVertexPermutations_PermVecLength);
317  VTKM_ASSERT(0 <= edge1 && edge1 < CubeVertexPermutations_PermVecLength);
318  int root0 = vertex_permutation[edge0];
319  int root1 = vertex_permutation[edge1];
320  VTKM_ASSERT(0 <= root0 && root0 < N_ALL_NEIGHBOURS);
321  VTKM_ASSERT(0 <= root1 && root1 < N_ALL_NEIGHBOURS);
322  while (parentId[root0] != root0)
323  {
324  root0 = parentId[root0];
325  VTKM_ASSERT(0 <= root0 && root0 < N_ALL_NEIGHBOURS);
326  }
327  while (parentId[root1] != root1)
328  {
329  root1 = parentId[root1];
330  VTKM_ASSERT(0 <= root1 && root1 < N_ALL_NEIGHBOURS);
331  }
332  if (root0 != root1)
333  {
334  VTKM_ASSERT(0 <= root1 && root1 < N_ALL_NEIGHBOURS);
335  parentId[root1] = root0;
336  }
337  }
338  }
339  }
340  else
341  {
342  for (int edgeNo = 0; edgeNo < 15; ++edgeNo)
343  {
344  if (InCubeConnectionsEighteenPortal.Get(caseNo) & (static_cast<vtkm::Id>(1) << edgeNo))
345  {
346  const auto& edge = LinkVertexConnectionsEighteenPortal.Get(edgeNo);
347  vtkm::IdComponent edge0 = edge[0];
348  vtkm::IdComponent edge1 = edge[1];
349  VTKM_ASSERT(0 <= edge0 && edge0 < CubeVertexPermutations_PermVecLength);
350  VTKM_ASSERT(0 <= edge1 && edge1 < CubeVertexPermutations_PermVecLength);
351  int root0 = vertex_permutation[edge0];
352  int root1 = vertex_permutation[edge1];
353  VTKM_ASSERT(0 <= root0 && root0 < N_ALL_NEIGHBOURS);
354  VTKM_ASSERT(0 <= root1 && root1 < N_ALL_NEIGHBOURS);
355  while (parentId[root0] != root0)
356  {
357  root0 = parentId[root0];
358  VTKM_ASSERT(0 <= root0 && root0 < N_ALL_NEIGHBOURS);
359  }
360  while (parentId[root1] != root1)
361  {
362  root1 = parentId[root1];
363  VTKM_ASSERT(0 <= root1 && root1 < N_ALL_NEIGHBOURS);
364  }
365  if (root0 != root1)
366  {
367  VTKM_ASSERT(0 <= root1 && root1 < N_ALL_NEIGHBOURS);
368  parentId[root1] = root0;
369  }
370  }
371  }
372  }
373  }
374  // we now know which edges are ascents, so we count to get the updegree
375  vtkm::Id outDegree = 0;
376  vtkm::Id neighbourComponentMask = 0;
377 
378  // Find one representaant for each connected compomnent in "link"
379  const int nNeighbours = getMaxComponents ? 6 : 18;
380  for (int nbrNo = 0; nbrNo < nNeighbours; ++nbrNo)
381  {
382  if (parentId[nbrNo] == nbrNo)
383  {
384  outDegree++;
385  neighbourComponentMask |= static_cast<vtkm::Id>(1) << nbrNo;
386  }
387  }
388 
389  return vtkm::make_Pair(neighbourComponentMask, outDegree);
390  } // GetNeighbourComponentsMaskAndDegree()
391 
392 #if (defined(VTKM_GCC) || defined(VTKM_CLANG))
393 #pragma GCC diagnostic pop
394 #endif // gcc || clang
395 
396 
397 
398 private:
407  bool GetMax;
408 
409 
410 }; // MeshStructureMarchingCubes
411 
412 } // namespace contourtree_augmented
413 } // namespace worklet
414 } // namespace vtkm
415 
416 #endif
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::GetMaxNumberOfNeighbours
VTKM_EXEC vtkm::Id GetMaxNumberOfNeighbours() const
Definition: MeshStructureMarchingCubes.h:133
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::CubeVertexPermutationsPortal
CubeVertexPermutationsPortalType CubeVertexPermutationsPortal
Definition: MeshStructureMarchingCubes.h:402
Types.h
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::MeshStructureMarchingCubes
MeshStructureMarchingCubes(vtkm::Id3 meshSize, bool getmax, const IdArrayType &sortIndices, const IdArrayType &sortOrder, const m3d_marchingcubes::EdgeBoundaryDetectionMasksType &EdgeBoundaryDetectionMasksIn, const m3d_marchingcubes::CubeVertexPermutationsType &CubeVertexPermutationsIn, const m3d_marchingcubes::LinkVertexConnectionsType &LinkVertexConnectionsSixIn, const m3d_marchingcubes::LinkVertexConnectionsType &LinkVertexConnectionsEighteenIn, const m3d_marchingcubes::InCubeConnectionsType &InCubeConnectionsSixIn, const m3d_marchingcubes::InCubeConnectionsType &InCubeConnectionsEighteenIn, vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token)
Definition: MeshStructureMarchingCubes.h:102
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::LinkVertexConnectionsPortalType
m3d_marchingcubes::LinkVertexConnectionsType::ReadPortalType LinkVertexConnectionsPortalType
Definition: MeshStructureMarchingCubes.h:88
vtkm::cont::ArrayHandle< vtkm::Id >
ArrayHandle.h
vtkm::make_Pair
VTKM_EXEC_CONT vtkm::Pair< typename std::decay< T1 >::type, typename std::decay< T2 >::type > make_Pair(T1 &&v1, T2 &&v2)
Definition: Pair.h:164
VTKM_EXEC
#define VTKM_EXEC
Definition: ExportMacros.h:51
vtkm
Groups connected points that have the same field value.
Definition: Atomic.h:19
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::EdgeBoundaryDetectionMasksPortalType
m3d_marchingcubes::EdgeBoundaryDetectionMasksType::ReadPortalType EdgeBoundaryDetectionMasksPortalType
Definition: MeshStructureMarchingCubes.h:77
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::SortOrderPortal
SortIndicesPortalType SortOrderPortal
Definition: MeshStructureMarchingCubes.h:400
Types.h
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::MeshStructureMarchingCubes
VTKM_EXEC_CONT MeshStructureMarchingCubes()
Definition: MeshStructureMarchingCubes.h:95
VTKM_ASSERT
#define VTKM_ASSERT(condition)
Definition: Assert.h:43
VTKM_EXEC_CONT
#define VTKM_EXEC_CONT
Definition: ExportMacros.h:52
vtkm::cont::ArrayHandle::PrepareForInput
VTKM_CONT ReadPortalType PrepareForInput(vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
Prepares this array to be used as an input to an operation in the execution environment.
Definition: ArrayHandle.h:574
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::SortIndicesPortalType
IdArrayType::ReadPortalType SortIndicesPortalType
Definition: MeshStructureMarchingCubes.h:80
vtkm::IdComponent
vtkm::Int32 IdComponent
Represents a component ID (index of component in a vector).
Definition: Types.h:168
Pair.h
vtkm::worklet::contourtree_augmented::m3d_marchingcubes::LinkVertexConnectionsType
typename vtkm::cont::ArrayHandleGroupVec< vtkm::cont::ArrayHandle< vtkm::IdComponent >, VertexConnections_VecLength > LinkVertexConnectionsType
Definition: filter/scalar_topology/worklet/contourtree_augmented/meshtypes/marchingcubes_3D/Types.h:140
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::GetExtremalNeighbour
VTKM_EXEC vtkm::Id GetExtremalNeighbour(vtkm::Id sortIndex) const
Definition: MeshStructureMarchingCubes.h:219
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::LinkVertexConnectionsSixPortal
LinkVertexConnectionsPortalType LinkVertexConnectionsSixPortal
Definition: MeshStructureMarchingCubes.h:403
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::GetMax
bool GetMax
Definition: MeshStructureMarchingCubes.h:407
vtkm::worklet::contourtree_augmented::TERMINAL_ELEMENT
constexpr vtkm::Id TERMINAL_ELEMENT
Definition: filter/scalar_topology/worklet/contourtree_augmented/Types.h:74
vtkm::worklet::contourtree_augmented::m3d_marchingcubes::CubeVertexPermutations_NumPermutations
constexpr vtkm::UInt8 CubeVertexPermutations_NumPermutations
Definition: filter/scalar_topology/worklet/contourtree_augmented/meshtypes/marchingcubes_3D/Types.h:114
vtkm::cont::ArrayHandle< vtkm::Int8 >::ReadPortalType
typename StorageType::ReadPortalType ReadPortalType
Definition: ArrayHandle.h:294
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::CubeVertexPermutationsPortalType
m3d_marchingcubes::CubeVertexPermutationsType::ReadPortalType CubeVertexPermutationsPortalType
Definition: MeshStructureMarchingCubes.h:84
vtkm::Id
vtkm::Int32 Id
Represents an ID (index into arrays).
Definition: Types.h:191
vtkm::worklet::contourtree_augmented::data_set_mesh::MeshStructure3D::VertexPos
VTKM_EXEC vtkm::Id3 VertexPos(vtkm::Id v) const
Definition: MeshStructure3D.h:91
vtkm::cont::Token
A token to hold the scope of an ArrayHandle or other object.
Definition: Token.h:35
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::SortIndicesPortal
SortIndicesPortalType SortIndicesPortal
Definition: MeshStructureMarchingCubes.h:399
vtkm::Int8
int8_t Int8
Definition: Types.h:156
vtkm::worklet::contourtree_augmented::data_set_mesh::MeshStructure3D::MeshStructure3D
VTKM_EXEC_CONT MeshStructure3D()
Definition: MeshStructure3D.h:72
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::GetNeighbourComponentsMaskAndDegree
VTKM_EXEC vtkm::Pair< vtkm::Id, vtkm::Id > GetNeighbourComponentsMaskAndDegree(vtkm::Id sortIndex, bool getMaxComponents) const
Definition: MeshStructureMarchingCubes.h:253
Types.h
vtkm::UInt8
uint8_t UInt8
Definition: Types.h:157
ArrayHandleGroupVec.h
vtkm::worklet::contourtree_augmented::m3d_marchingcubes::InCubeConnectionsType
typename vtkm::cont::ArrayHandle< vtkm::UInt32 > InCubeConnectionsType
Definition: filter/scalar_topology/worklet/contourtree_augmented/meshtypes/marchingcubes_3D/Types.h:161
vtkm::worklet::contourtree_augmented::data_set_mesh::MeshStructure3D::MeshSize
vtkm::Id3 MeshSize
Definition: MeshStructure3D.h:137
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::InCubeConnectionsEighteenPortal
InCubeConnectionsPortalType InCubeConnectionsEighteenPortal
Definition: MeshStructureMarchingCubes.h:406
vtkm::cont::DeviceAdapterId
Definition: DeviceAdapterTag.h:52
vtkm::Vec< vtkm::Id, 3 >
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::InCubeConnectionsPortalType
m3d_marchingcubes::InCubeConnectionsType::ReadPortalType InCubeConnectionsPortalType
Definition: MeshStructureMarchingCubes.h:91
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::InCubeConnectionsSixPortal
InCubeConnectionsPortalType InCubeConnectionsSixPortal
Definition: MeshStructureMarchingCubes.h:405
vtkm::worklet::contourtree_augmented::data_set_mesh::MeshStructure3D
Definition: MeshStructure3D.h:68
MeshStructure3D.h
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::LinkVertexConnectionsEighteenPortal
LinkVertexConnectionsPortalType LinkVertexConnectionsEighteenPortal
Definition: MeshStructureMarchingCubes.h:404
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::EdgeBoundaryDetectionMasksPortal
EdgeBoundaryDetectionMasksPortalType EdgeBoundaryDetectionMasksPortal
Definition: MeshStructureMarchingCubes.h:401
vtkm::cont::ArrayHandleGroupVec< vtkm::cont::ArrayHandle< vtkm::IdComponent >, CubeVertexPermutations_PermVecLength >
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes::GetNeighbourIndex
VTKM_EXEC vtkm::Id GetNeighbourIndex(vtkm::Id sortIndex, vtkm::Id nbrNo) const
Definition: MeshStructureMarchingCubes.h:136
vtkm::worklet::contourtree_augmented::MeshStructureMarchingCubes
Definition: MeshStructureMarchingCubes.h:72
vtkm::worklet::contourtree_augmented::m3d_marchingcubes::CubeVertexPermutations_PermVecLength
constexpr vtkm::UInt8 CubeVertexPermutations_PermVecLength
Definition: filter/scalar_topology/worklet/contourtree_augmented/meshtypes/marchingcubes_3D/Types.h:116
vtkm::Pair
A vtkm::Pair is essentially the same as an STL pair object except that the methods (constructors and ...
Definition: Pair.h:29