VTK-m  2.0
MarchingCells.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 
11 #ifndef vtk_m_worklet_contour_MarchingCells_h
12 #define vtk_m_worklet_contour_MarchingCells_h
13 
14 #include <vtkm/BinaryPredicates.h>
15 #include <vtkm/VectorAnalysis.h>
16 
19 
20 #include <vtkm/cont/ArrayCopy.h>
22 #include <vtkm/cont/ArrayHandle.h>
26 #include <vtkm/cont/Invoker.h>
27 
28 #include <vtkm/worklet/Keys.h>
31 
37 
38 namespace vtkm
39 {
40 namespace worklet
41 {
42 namespace marching_cells
43 {
44 
45 // -----------------------------------------------------------------------------
46 template <typename S>
49 {
50  return ah;
51 }
52 
53 template <typename S>
56 {
57  return ah;
58 }
59 
60 template <typename S>
63 {
65 }
66 
67 template <typename S>
70 {
72 }
73 
74 // ---------------------------------------------------------------------------
75 template <typename T>
77 {
78 public:
79  using ControlSignature = void(WholeArrayIn isoValues,
80  FieldInPoint fieldIn,
81  CellSetIn cellSet,
82  FieldOutCell outNumTriangles,
83  ExecObject classifyTable);
84  using ExecutionSignature = void(CellShape, _1, _2, _4, _5);
85  using InputDomain = _3;
86 
87  template <typename CellShapeType,
88  typename IsoValuesType,
89  typename FieldInType,
90  typename ClassifyTableType>
91  VTKM_EXEC void operator()(CellShapeType shape,
92  const IsoValuesType& isovalues,
93  const FieldInType& fieldIn,
94  vtkm::IdComponent& numTriangles,
95  const ClassifyTableType& classifyTable) const
96  {
97  vtkm::IdComponent sum = 0;
98  vtkm::IdComponent numIsoValues = static_cast<vtkm::IdComponent>(isovalues.GetNumberOfValues());
99  vtkm::IdComponent numVerticesPerCell = classifyTable.GetNumVerticesPerCell(shape.Id);
100 
101  for (vtkm::Id i = 0; i < numIsoValues; ++i)
102  {
103  vtkm::IdComponent caseNumber = 0;
104  for (vtkm::IdComponent j = 0; j < numVerticesPerCell; ++j)
105  {
106  caseNumber |= (fieldIn[j] > isovalues.Get(i)) << j;
107  }
108 
109  sum += classifyTable.GetNumTriangles(shape.Id, caseNumber);
110  }
111  numTriangles = sum;
112  }
113 };
114 
118 // TODO: remove unused data members.
119 // -----------------------------------------------------------------------------
121 {
122 public:
124  {
125  template <typename FieldType>
127  template <typename FieldType>
129 
130  public:
131  ExecObject() = default;
132 
133  VTKM_CONT
137  vtkm::cont::ArrayHandle<vtkm::Id>& interpCellIds,
138  vtkm::cont::ArrayHandle<vtkm::UInt8>& interpContourId,
140  vtkm::cont::Token& token)
141  : InterpWeightsPortal(interpWeights.PrepareForOutput(3 * size, device, token))
142  , InterpIdPortal(interpIds.PrepareForOutput(3 * size, device, token))
143  , InterpCellIdPortal(interpCellIds.PrepareForOutput(3 * size, device, token))
144  , InterpContourPortal(interpContourId.PrepareForOutput(3 * size, device, token))
145  {
146  // Interp needs to be 3 times longer than size as they are per point of the
147  // output triangle
148  }
153  };
154 
155  VTKM_CONT
159  vtkm::cont::ArrayHandle<vtkm::Id>& interpCellIds,
160  vtkm::cont::ArrayHandle<vtkm::UInt8>& interpContourId)
161  : Size(size)
162  , InterpWeights(interpWeights)
163  , InterpIds(interpIds)
164  , InterpCellIds(interpCellIds)
165  , InterpContourId(interpContourId)
166  {
167  }
168 
170  vtkm::cont::Token& token)
171  {
172  return ExecObject(this->Size,
173  this->InterpWeights,
174  this->InterpIds,
175  this->InterpCellIds,
176  this->InterpContourId,
177  device,
178  token);
179  }
180 
181 private:
187 };
188 
191 // -----------------------------------------------------------------------------
192 template <typename T>
194 {
195 public:
197 
198  template <typename ArrayHandleType>
199  VTKM_CONT static ScatterType MakeScatter(const ArrayHandleType& numOutputTrisPerCell)
200  {
201  return ScatterType(numOutputTrisPerCell);
202  }
203 
204  typedef void ControlSignature(CellSetIn cellset, // Cell set
205  WholeArrayIn isoValues,
206  FieldInPoint fieldIn, // Input point field defining the contour
207  ExecObject metaData, // Metadata for edge weight generation
208  ExecObject classifyTable,
209  ExecObject triTable);
210  using ExecutionSignature =
211  void(CellShape, _2, _3, _4, _5, _6, InputIndex, WorkIndex, VisitIndex, PointIndices);
212 
213  using InputDomain = _1;
214 
215  template <typename CellShape,
216  typename IsoValuesType,
217  typename FieldInType, // Vec-like, one per input point
218  typename ClassifyTableType,
219  typename TriTableType,
220  typename IndicesVecType>
221  VTKM_EXEC void operator()(const CellShape shape,
222  const IsoValuesType& isovalues,
223  const FieldInType& fieldIn, // Input point field defining the contour
225  const ClassifyTableType& classifyTable,
226  const TriTableType& triTable,
227  vtkm::Id inputCellId,
228  vtkm::Id outputCellId,
229  vtkm::IdComponent visitIndex,
230  const IndicesVecType& indices) const
231  {
232  const vtkm::Id outputPointId = 3 * outputCellId;
233  using FieldType = typename vtkm::VecTraits<FieldInType>::ComponentType;
234 
235  vtkm::IdComponent sum = 0, caseNumber = 0;
236  vtkm::IdComponent i = 0,
237  numIsoValues = static_cast<vtkm::IdComponent>(isovalues.GetNumberOfValues());
238  vtkm::IdComponent numVerticesPerCell = classifyTable.GetNumVerticesPerCell(shape.Id);
239 
240  for (i = 0; i < numIsoValues; ++i)
241  {
242  const FieldType ivalue = isovalues.Get(i);
243  // Compute the Marching Cubes case number for this cell. We need to iterate
244  // the isovalues until the sum >= our visit index. But we need to make
245  // sure the caseNumber is correct before stopping
246  caseNumber = 0;
247  for (vtkm::IdComponent j = 0; j < numVerticesPerCell; ++j)
248  {
249  caseNumber |= (fieldIn[j] > ivalue) << j;
250  }
251 
252  sum += classifyTable.GetNumTriangles(shape.Id, caseNumber);
253  if (sum > visitIndex)
254  {
255  break;
256  }
257  }
258 
259  visitIndex = sum - visitIndex - 1;
260 
261  // Interpolate for vertex positions and associated scalar values
262  for (vtkm::IdComponent triVertex = 0; triVertex < 3; triVertex++)
263  {
264  auto edgeVertices = triTable.GetEdgeVertices(shape.Id, caseNumber, visitIndex, triVertex);
265  const FieldType fieldValue0 = fieldIn[edgeVertices.first];
266  const FieldType fieldValue1 = fieldIn[edgeVertices.second];
267 
268  // Store the input cell id so that we can properly generate the normals
269  // in a subsequent call, after we have merged duplicate points
270  metaData.InterpCellIdPortal.Set(outputPointId + triVertex, inputCellId);
271 
272  metaData.InterpContourPortal.Set(outputPointId + triVertex, static_cast<vtkm::UInt8>(i));
273 
274  metaData.InterpIdPortal.Set(
275  outputPointId + triVertex,
276  vtkm::Id2(indices[edgeVertices.first], indices[edgeVertices.second]));
277 
278  vtkm::FloatDefault interpolant =
279  static_cast<vtkm::FloatDefault>(isovalues.Get(i) - fieldValue0) /
280  static_cast<vtkm::FloatDefault>(fieldValue1 - fieldValue0);
281 
282  metaData.InterpWeightsPortal.Set(outputPointId + triVertex, interpolant);
283  }
284  }
285 };
286 
287 // ---------------------------------------------------------------------------
289 {
290  template <typename T>
291  VTKM_EXEC_CONT bool operator()(const T& a, const T& b) const
292  {
293  return a < b;
294  }
295 
296  template <typename T, typename U>
298  {
299  return (a.first < b.first) || (!(b.first < a.first) && (a.second < b.second));
300  }
301 
302  template <typename T, typename U>
303  VTKM_EXEC_CONT bool operator()(const vtkm::internal::ArrayPortalValueReference<T>& a,
304  const U& b) const
305  {
306  U&& t = static_cast<U>(a);
307  return t < b;
308  }
309 };
310 
311 // ---------------------------------------------------------------------------
313 {
314  using ControlSignature = void(KeysIn keys,
315  ValuesIn valuesIn1,
316  ValuesIn valuesIn2,
317  ReducedValuesOut valueOut1,
318  ReducedValuesOut valueOut2);
319  using ExecutionSignature = void(_1, _2, _3, _4, _5);
320  using InputDomain = _1;
321 
322  template <typename T,
323  typename ValuesInType,
324  typename Values2InType,
325  typename ValuesOutType,
326  typename Values2OutType>
327  VTKM_EXEC void operator()(const T&,
328  const ValuesInType& values1,
329  const Values2InType& values2,
330  ValuesOutType& valueOut1,
331  Values2OutType& valueOut2) const
332  {
333  valueOut1 = values1[0];
334  valueOut2 = values2[0];
335  }
336 };
337 
338 // ---------------------------------------------------------------------------
340 {
342  using ExecutionSignature = void(_1, _2);
343  using InputDomain = _1;
344 
345  VTKM_EXEC
346  void operator()(const vtkm::Id2& input, vtkm::Id2& output) const { output = input; }
347 
348  template <typename T>
349  VTKM_EXEC void operator()(const vtkm::Pair<T, vtkm::Id2>& input, vtkm::Id2& output) const
350  {
351  output = input.second;
352  }
353 };
354 
355 // ---------------------------------------------------------------------------
356 template <typename KeyType, typename KeyStorage>
362  vtkm::cont::ArrayHandle<vtkm::Id>& connectivity)
363 {
365  vtkm::cont::ArrayCopyDevice(original_keys, input_keys);
366  vtkm::worklet::Keys<KeyType> keys(input_keys);
367  input_keys.ReleaseResources();
368 
369  {
372  invoker(MergeDuplicateValues{}, keys, weights, cellids, writeWeights, writeCells);
373  weights = writeWeights;
374  cellids = writeCells;
375  }
376 
377  //need to build the new connectivity
378  auto uniqueKeys = keys.GetUniqueKeys();
380  uniqueKeys, original_keys, connectivity, marching_cells::MultiContourLess());
381 
382  //update the edge ids
383  invoker(CopyEdgeIds{}, uniqueKeys, edgeIds);
384 }
385 
386 // -----------------------------------------------------------------------------
387 template <vtkm::IdComponent Comp>
389 {
390  VTKM_EXEC vtkm::Id operator()(const vtkm::Id2& edge) const { return edge[Comp]; }
391 };
392 
394 {
395 private:
396  using PointIdsArray =
398 
399 public:
400  using ControlSignature = void(CellSetIn,
401  WholeCellSetIn<Cell, Point>,
402  WholeArrayIn pointCoordinates,
403  WholeArrayIn inputField,
404  FieldOutPoint normals);
405 
406  using ExecutionSignature = void(CellCount, CellIndices, InputIndex, _2, _3, _4, _5);
407 
408  using InputDomain = _1;
410 
411  VTKM_CONT
413  {
415  }
416 
417  template <typename FromIndexType,
418  typename CellSetInType,
419  typename WholeCoordinatesIn,
420  typename WholeFieldIn,
421  typename NormalType>
422  VTKM_EXEC void operator()(const vtkm::IdComponent& numCells,
423  const FromIndexType& cellIds,
424  vtkm::Id pointId,
425  const CellSetInType& geometry,
426  const WholeCoordinatesIn& pointCoordinates,
427  const WholeFieldIn& inputField,
428  NormalType& normal) const
429  {
431  gradient(numCells, cellIds, pointId, geometry, pointCoordinates, inputField, normal);
432  }
433 
434  template <typename FromIndexType,
435  typename WholeCoordinatesIn,
436  typename WholeFieldIn,
437  typename NormalType>
439  const FromIndexType& vtkmNotUsed(cellIds),
440  vtkm::Id pointId,
442  const WholeCoordinatesIn& pointCoordinates,
443  const WholeFieldIn& inputField,
444  NormalType& normal) const
445  {
446  //Optimization for structured cellsets so we can call StructuredPointGradient
447  //and have way faster gradients
449  vtkm::exec::arg::ThreadIndicesPointNeighborhood tpn(pointId, pointId, 0, pointId, pointGeom);
450 
451  const auto& boundary = tpn.GetBoundaryState();
452  vtkm::exec::FieldNeighborhood<WholeCoordinatesIn> points(pointCoordinates, boundary);
453  vtkm::exec::FieldNeighborhood<WholeFieldIn> field(inputField, boundary);
454 
456  gradient(boundary, points, field, normal);
457  }
458 };
459 
461 {
462 private:
463  using PointIdsArray =
465 
466 public:
467  typedef void ControlSignature(CellSetIn,
468  WholeCellSetIn<Cell, Point>,
469  WholeArrayIn pointCoordinates,
470  WholeArrayIn inputField,
471  WholeArrayIn weights,
472  FieldInOutPoint normals);
473 
474  using ExecutionSignature =
475  void(CellCount, CellIndices, InputIndex, _2, _3, _4, WorkIndex, _5, _6);
476 
477  using InputDomain = _1;
479 
480  VTKM_CONT
482  {
484  }
485 
486  template <typename FromIndexType,
487  typename CellSetInType,
488  typename WholeCoordinatesIn,
489  typename WholeFieldIn,
490  typename WholeWeightsIn,
491  typename NormalType>
492  VTKM_EXEC void operator()(const vtkm::IdComponent& numCells,
493  const FromIndexType& cellIds,
494  vtkm::Id pointId,
495  const CellSetInType& geometry,
496  const WholeCoordinatesIn& pointCoordinates,
497  const WholeFieldIn& inputField,
498  vtkm::Id edgeId,
499  const WholeWeightsIn& weights,
500  NormalType& normal) const
501  {
503  NormalType grad1;
504  gradient(numCells, cellIds, pointId, geometry, pointCoordinates, inputField, grad1);
505 
506  NormalType grad0 = normal;
507  auto weight = weights.Get(edgeId);
508  normal = vtkm::Normal(vtkm::Lerp(grad0, grad1, weight));
509  }
510 
511  template <typename FromIndexType,
512  typename WholeCoordinatesIn,
513  typename WholeFieldIn,
514  typename WholeWeightsIn,
515  typename NormalType>
517  const FromIndexType& vtkmNotUsed(cellIds),
518  vtkm::Id pointId,
520  const WholeCoordinatesIn& pointCoordinates,
521  const WholeFieldIn& inputField,
522  vtkm::Id edgeId,
523  const WholeWeightsIn& weights,
524  NormalType& normal) const
525  {
526  //Optimization for structured cellsets so we can call StructuredPointGradient
527  //and have way faster gradients
529  vtkm::exec::arg::ThreadIndicesPointNeighborhood tpn(pointId, pointId, 0, pointId, pointGeom);
530 
531  const auto& boundary = tpn.GetBoundaryState();
532  vtkm::exec::FieldNeighborhood<WholeCoordinatesIn> points(pointCoordinates, boundary);
533  vtkm::exec::FieldNeighborhood<WholeFieldIn> field(inputField, boundary);
534 
536  NormalType grad1;
537  gradient(boundary, points, field, grad1);
538 
539  NormalType grad0 = normal;
540  auto weight = weights.Get(edgeId);
541  normal = vtkm::Lerp(grad0, grad1, weight);
542  const auto mag2 = vtkm::MagnitudeSquared(normal);
543  if (mag2 > 0.)
544  {
545  normal = normal * vtkm::RSqrt(mag2);
546  }
547  }
548 };
549 
550 
552 {
553  template <typename CoordinateSystem,
554  typename NormalCType,
555  typename InputFieldType,
556  typename InputStorageType,
557  typename CellSet>
558  void operator()(const CoordinateSystem& coordinates,
559  const vtkm::cont::Invoker& invoker,
562  const CellSet cellset,
564  const vtkm::cont::ArrayHandle<vtkm::FloatDefault>& weights) const
565  {
566  // To save memory, the normals computation is done in two passes. In the first
567  // pass the gradient at the first vertex of each edge is computed and stored in
568  // the normals array. In the second pass the gradient at the second vertex is
569  // computed and the gradient of the first vertex is read from the normals array.
570  // The final normal is interpolated from the two gradient values and stored
571  // in the normals array.
572  //
573  auto scalarField = marching_cells::make_ScalarField(field);
574  invoker(NormalsWorkletPass1{},
576  cellset,
577  cellset,
578  coordinates,
579  scalarField,
580  normals);
581 
582  invoker(NormalsWorkletPass2{},
584  cellset,
585  cellset,
586  coordinates,
587  scalarField,
588  weights,
589  normals);
590  }
591 };
592 
593 //----------------------------------------------------------------------------
594 template <typename CellSetType,
595  typename CoordinateSystem,
596  typename ValueType,
597  typename StorageTagField,
598  typename StorageTagVertices,
599  typename StorageTagNormals,
600  typename CoordinateType,
601  typename NormalType>
603  const CellSetType& cells,
604  const CoordinateSystem& coordinateSystem,
605  const std::vector<ValueType>& isovalues,
607  vtkm::cont::ArrayHandle<vtkm::Vec<CoordinateType, 3>, StorageTagVertices>& vertices,
608  vtkm::cont::ArrayHandle<vtkm::Vec<NormalType, 3>, StorageTagNormals>& normals,
610 {
615 
618 
619  // Setup the invoker
620  vtkm::cont::Invoker invoker;
621 
622  vtkm::cont::ArrayHandle<ValueType> isoValuesHandle =
624 
625  // Call the ClassifyCell functor to compute the Marching Cubes case numbers
626  // for each cell, and the number of vertices to be generated
627  vtkm::cont::ArrayHandle<vtkm::IdComponent> numOutputTrisPerCell;
628  {
630  invoker(classifyCell, isoValuesHandle, inputField, cells, numOutputTrisPerCell, classTable);
631  }
632 
633  //Pass 2 Generate the edges
635  vtkm::cont::ArrayHandle<vtkm::Id> originalCellIdsForPoints;
636  {
637  auto scatter = EdgeWeightGenerate<ValueType>::MakeScatter(numOutputTrisPerCell);
638 
639  // Maps output cells to input cells. Store this for cell field mapping.
640  sharedState.CellIdMap = scatter.GetOutputToInputMap();
641 
643  scatter.GetOutputRange(numOutputTrisPerCell.GetNumberOfValues()),
644  sharedState.InterpolationWeights,
645  sharedState.InterpolationEdgeIds,
646  originalCellIdsForPoints,
647  contourIds);
648 
650  scatter,
651  cells,
652  //cast to a scalar field if not one, as cellderivative only works on those
653  isoValuesHandle,
654  inputField,
655  metaData,
656  classTable,
657  triTable);
658  }
659 
660  if (isovalues.size() <= 1 || !sharedState.MergeDuplicatePoints)
661  { //release memory early that we are not going to need again
662  contourIds.ReleaseResources();
663  }
664 
666  if (sharedState.MergeDuplicatePoints)
667  {
668  // In all the below cases you will notice that only interpolation ids
669  // are updated. That is because MergeDuplicates will internally update
670  // the InterpolationWeights and InterpolationOriginCellIds arrays to be the correct for the
671  // output. But for InterpolationEdgeIds we need to do it manually once done
672  if (isovalues.size() == 1)
673  {
675  sharedState.InterpolationEdgeIds, //keys
676  sharedState.InterpolationWeights, //values
677  sharedState.InterpolationEdgeIds, //values
678  originalCellIdsForPoints, //values
679  connectivity); // computed using lower bounds
680  }
681  else
682  {
684  invoker,
685  vtkm::cont::make_ArrayHandleZip(contourIds, sharedState.InterpolationEdgeIds), //keys
686  sharedState.InterpolationWeights, //values
687  sharedState.InterpolationEdgeIds, //values
688  originalCellIdsForPoints, //values
689  connectivity); // computed using lower bounds
690  }
691  }
692  else
693  {
694  //when we don't merge points, the connectivity array can be represented
695  //by a counting array. The danger of doing it this way is that the output
696  //type is unknown. That is why we copy it into an explicit array
697  vtkm::cont::ArrayHandleIndex temp(sharedState.InterpolationEdgeIds.GetNumberOfValues());
698  vtkm::cont::ArrayCopy(temp, connectivity);
699  }
700 
701  //generate the vertices's
702  invoker(MapPointField{},
703  sharedState.InterpolationEdgeIds,
704  sharedState.InterpolationWeights,
705  coordinateSystem,
706  vertices);
707 
708  //assign the connectivity to the cell set
710  outputCells.Fill(vertices.GetNumberOfValues(), vtkm::CELL_SHAPE_TRIANGLE, 3, connectivity);
711 
712  //now that the vertices have been generated we can generate the normals
713  if (sharedState.GenerateNormals)
714  {
715  GenerateNormals genNorms;
716  genNorms(coordinateSystem,
717  invoker,
718  normals,
719  inputField,
720  cells,
721  sharedState.InterpolationEdgeIds,
722  sharedState.InterpolationWeights);
723  }
724 
725  return outputCells;
726 }
727 }
728 }
729 } // namespace vtkm::worklet::marching_cells
730 
731 #endif // vtk_m_worklet_contour_MarchingCells_h
vtkm::cont::ArrayCopyDevice
VTKM_CONT void ArrayCopyDevice(const vtkm::cont::ArrayHandle< InValueType, InStorage > &source, vtkm::cont::ArrayHandle< OutValueType, OutStorage > &destination)
Does a deep copy from one array to another array.
Definition: ArrayCopyDevice.h:75
vtkm::worklet::marching_cells::MergeDuplicateValues::ExecutionSignature
void(_1, _2, _3, _4, _5) ExecutionSignature
Definition: MarchingCells.h:319
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::InterpContourPortal
WritePortalType< vtkm::UInt8 > InterpContourPortal
Definition: MarchingCells.h:152
vtkm::cont::ArrayHandle::GetNumberOfValues
VTKM_CONT vtkm::Id GetNumberOfValues() const
Returns the number of entries in the array.
Definition: ArrayHandle.h:448
vtkm::cont::make_ArrayHandle
VTKM_CONT vtkm::cont::ArrayHandleBasic< T > make_ArrayHandle(const T *array, vtkm::Id numberOfValues, vtkm::CopyFlag copy)
A convenience function for creating an ArrayHandle from a standard C array.
Definition: ArrayHandleBasic.h:217
vtkm::worklet::marching_cells::NormalsWorkletPass1
Definition: MarchingCells.h:393
vtkm::cont::ArrayHandle
Manages an array-worth of data.
Definition: ArrayHandle.h:283
ArrayHandle.h
vtkm::MagnitudeSquared
VTKM_EXEC_CONT detail::FloatingPointReturnType< T >::Type MagnitudeSquared(const T &x)
Returns the square of the magnitude of a vector.
Definition: VectorAnalysis.h:64
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::marching_cells::MergeDuplicateValues::InputDomain
_1 InputDomain
Definition: MarchingCells.h:320
vtkm::worklet::marching_cells::make_ScalarField
vtkm::cont::ArrayHandle< vtkm::Float32, S > make_ScalarField(const vtkm::cont::ArrayHandle< vtkm::Float32, S > &ah)
Definition: MarchingCells.h:47
vtkm::worklet::marching_cells::NormalsWorkletPass2::ControlSignature
void ControlSignature(CellSetIn, WholeCellSetIn< Cell, Point >, WholeArrayIn pointCoordinates, WholeArrayIn inputField, WholeArrayIn weights, FieldInOutPoint normals)
Definition: MarchingCells.h:467
vtkm::worklet::marching_cells::EdgeVertex
Definition: MarchingCells.h:388
vtkm::worklet::marching_cells::TriangleGenerationTable
Definition: MarchingCellTables.h:539
vtkm::worklet::contour::MapPointField
Definition: FieldPropagation.h:25
vtkm::worklet::marching_cells::MultiContourLess::operator()
VTKM_EXEC_CONT bool operator()(const T &a, const T &b) const
Definition: MarchingCells.h:291
VTKM_EXEC_CONT
#define VTKM_EXEC_CONT
Definition: ExportMacros.h:52
vtkm::worklet::WorkletMapField::FieldOut
A control signature tag for output fields.
Definition: WorkletMapField.h:60
vtkm::worklet::marching_cells::GenerateNormals::operator()
void operator()(const CoordinateSystem &coordinates, const vtkm::cont::Invoker &invoker, vtkm::cont::ArrayHandle< vtkm::Vec< NormalCType, 3 >> &normals, const vtkm::cont::ArrayHandle< InputFieldType, InputStorageType > &field, const CellSet cellset, const vtkm::cont::ArrayHandle< vtkm::Id2 > &edges, const vtkm::cont::ArrayHandle< vtkm::FloatDefault > &weights) const
Definition: MarchingCells.h:558
vtkm::worklet::contour::CommonState::InterpolationWeights
vtkm::cont::ArrayHandle< vtkm::FloatDefault > InterpolationWeights
Definition: CommonState.h:33
vtkm::worklet::marching_cells::EdgeVertex::operator()
VTKM_EXEC vtkm::Id operator()(const vtkm::Id2 &edge) const
Definition: MarchingCells.h:390
vtkm::IdComponent
vtkm::Int32 IdComponent
Represents a component ID (index of component in a vector).
Definition: Types.h:168
vtkm::worklet::marching_cells::MultiContourLess::operator()
VTKM_EXEC_CONT bool operator()(const vtkm::internal::ArrayPortalValueReference< T > &a, const U &b) const
Definition: MarchingCells.h:303
vtkm::worklet::WorkletReduceByKey::ValuesIn
A control signature tag for input values.
Definition: WorkletReduceByKey.h:70
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::InterpCellIdPortal
WritePortalType< vtkm::Id > InterpCellIdPortal
Definition: MarchingCells.h:151
vtkm::exec::arg::ThreadIndicesNeighborhood::GetBoundaryState
const VTKM_EXEC vtkm::exec::BoundaryState & GetBoundaryState() const
Definition: ThreadIndicesNeighborhood.h:87
vtkm::worklet::marching_cells::NormalsWorkletPass2::operator()
VTKM_EXEC void operator()(const vtkm::IdComponent &numCells, const FromIndexType &cellIds, vtkm::Id pointId, const CellSetInType &geometry, const WholeCoordinatesIn &pointCoordinates, const WholeFieldIn &inputField, vtkm::Id edgeId, const WholeWeightsIn &weights, NormalType &normal) const
Definition: MarchingCells.h:492
vtkm::worklet::marching_cells::NormalsWorkletPass1::InputDomain
_1 InputDomain
Definition: MarchingCells.h:408
vtkm::worklet::marching_cells::NormalsWorkletPass1::operator()
VTKM_EXEC void operator()(const vtkm::IdComponent &numCells, const FromIndexType &cellIds, vtkm::Id pointId, const CellSetInType &geometry, const WholeCoordinatesIn &pointCoordinates, const WholeFieldIn &inputField, NormalType &normal) const
Definition: MarchingCells.h:422
vtkm::worklet::marching_cells::NormalsWorkletPass1::ExecutionSignature
void(CellCount, CellIndices, InputIndex, _2, _3, _4, _5) ExecutionSignature
Definition: MarchingCells.h:406
vtkm::cont::Algorithm::LowerBounds
static VTKM_CONT void LowerBounds(vtkm::cont::DeviceAdapterId devId, const vtkm::cont::ArrayHandle< T, CIn > &input, const vtkm::cont::ArrayHandle< T, CVal > &values, vtkm::cont::ArrayHandle< vtkm::Id, COut > &output)
Definition: Algorithm.h:604
vtkm::worklet::contour::CommonState::GenerateNormals
bool GenerateNormals
Definition: CommonState.h:32
ArrayHandleTransform.h
Keys.h
vtkm::worklet::marching_cells::EdgeWeightGenerate::ControlSignature
void ControlSignature(CellSetIn cellset, WholeArrayIn isoValues, FieldInPoint fieldIn, ExecObject metaData, ExecObject classifyTable, ExecObject triTable)
Definition: MarchingCells.h:204
vtkm::cont::CellSetSingleType
Definition: CastAndCall.h:34
vtkm::worklet::marching_cells::NormalsWorkletPass2
Definition: MarchingCells.h:460
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::Size
vtkm::Id Size
Definition: MarchingCells.h:182
Invoker.h
PointGradient.h
CellDerivative.h
vtkm::worklet::WorkletReduceByKey::ReducedValuesOut
A control signature tag for reduced output values.
Definition: WorkletReduceByKey.h:150
vtkm::worklet::marching_cells::CopyEdgeIds::operator()
VTKM_EXEC void operator()(const vtkm::Pair< T, vtkm::Id2 > &input, vtkm::Id2 &output) const
Definition: MarchingCells.h:349
vtkm::worklet::WorkletVisitCellsWithPoints::PointIndices
IncidentElementIndices PointIndices
Definition: WorkletMapTopology.h:269
vtkm::cont::ArrayHandle::ReadPortalType
typename StorageType::ReadPortalType ReadPortalType
Definition: ArrayHandle.h:294
vtkm::exec::arg::ThreadIndicesPointNeighborhood
Container for thread information in a WorkletPointNeighborhood.
Definition: ThreadIndicesPointNeighborhood.h:24
vtkm::worklet::marching_cells::CopyEdgeIds::InputDomain
_1 InputDomain
Definition: MarchingCells.h:343
vtkm::worklet::marching_cells::EdgeWeightGenerate::operator()
VTKM_EXEC void operator()(const CellShape shape, const IsoValuesType &isovalues, const FieldInType &fieldIn, const EdgeWeightGenerateMetaData::ExecObject &metaData, const ClassifyTableType &classifyTable, const TriTableType &triTable, vtkm::Id inputCellId, vtkm::Id outputCellId, vtkm::IdComponent visitIndex, const IndicesVecType &indices) const
Definition: MarchingCells.h:221
vtkm::Id
vtkm::Int32 Id
Represents an ID (index into arrays).
Definition: Types.h:191
ArrayCopy.h
vtkm::worklet::marching_cells::EdgeWeightGenerate
Compute the weights for each edge that is used to generate a point in the resulting iso-surface.
Definition: MarchingCells.h:193
ScatterCounting.h
vtkm::Normal
VTKM_EXEC_CONT T Normal(const T &x)
Returns a normalized version of the given vector.
Definition: VectorAnalysis.h:157
ArrayHandleZip.h
VectorAnalysis.h
vtkm::worklet::marching_cells::MergeDuplicateValues
Definition: MarchingCells.h:312
vtkm::cont::Token
A token to hold the scope of an ArrayHandle or other object.
Definition: Token.h:35
vtkm::worklet::contour::CommonState::MergeDuplicatePoints
bool MergeDuplicatePoints
Definition: CommonState.h:31
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::InterpCellIds
vtkm::cont::ArrayHandle< vtkm::Id > InterpCellIds
Definition: MarchingCells.h:185
vtkm::worklet::ScatterCounting
A scatter that maps input to some numbers of output.
Definition: ScatterCounting.h:44
vtkm::worklet::gradient::PointGradient
Definition: PointGradient.h:29
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::InterpWeightsPortal
WritePortalType< vtkm::FloatDefault > InterpWeightsPortal
Definition: MarchingCells.h:149
vtkm::worklet::WorkletVisitPointsWithCells::CellCount
IncidentElementCount CellCount
Definition: WorkletMapTopology.h:286
WorkletReduceByKey.h
vtkm::worklet::WorkletVisitPointsWithCells
Base class for worklets that map from Cells to Points.
Definition: WorkletMapTopology.h:274
vtkm::cont::make_ArrayHandleTransform
VTKM_CONT vtkm::cont::ArrayHandleTransform< HandleType, FunctorType > make_ArrayHandleTransform(HandleType handle, FunctorType functor)
make_ArrayHandleTransform is convenience function to generate an ArrayHandleTransform.
Definition: ArrayHandleTransform.h:474
ArrayCopyDevice.h
vtkm::worklet::WorkletMapField::FieldIn
A control signature tag for input fields.
Definition: WorkletMapField.h:49
ArrayHandleIndex.h
vtkm::worklet::WorkletReduceByKey
Definition: WorkletReduceByKey.h:42
vtkm::worklet::contour::CommonState
Definition: CommonState.h:24
vtkm::cont::make_ArrayHandleZip
VTKM_CONT vtkm::cont::ArrayHandleZip< FirstHandleType, SecondHandleType > make_ArrayHandleZip(const FirstHandleType &first, const SecondHandleType &second)
A convenience function for creating an ArrayHandleZip.
Definition: ArrayHandleZip.h:288
vtkm::worklet::marching_cells::CellClassifyTable
Definition: MarchingCellTables.h:477
vtkm::cont::Invoker
Allows launching any worklet without a dispatcher.
Definition: Invoker.h:41
vtkm::Pair::first
FirstType first
The pair's first object.
Definition: Pair.h:50
vtkm::worklet::WorkletVisitCellsWithPoints
Base class for worklets that map from Points to Cells.
Definition: WorkletMapTopology.h:255
vtkm::cont::ArrayCopy
void ArrayCopy(const SourceArrayType &source, DestArrayType &destination)
Does a deep copy from one array to another array.
Definition: ArrayCopy.h:142
vtkm::worklet::marching_cells::NormalsWorkletPass2::MakeScatter
static VTKM_CONT ScatterType MakeScatter(const vtkm::cont::ArrayHandle< vtkm::Id2 > &edges)
Definition: MarchingCells.h:481
vtkm::worklet::marching_cells::NormalsWorkletPass2::InputDomain
_1 InputDomain
Definition: MarchingCells.h:477
vtkm::worklet::marching_cells::MergeDuplicateValues::operator()
VTKM_EXEC void operator()(const T &, const ValuesInType &values1, const Values2InType &values2, ValuesOutType &valueOut1, Values2OutType &valueOut2) const
Definition: MarchingCells.h:327
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::EdgeWeightGenerateMetaData
VTKM_CONT EdgeWeightGenerateMetaData(vtkm::Id size, vtkm::cont::ArrayHandle< vtkm::FloatDefault > &interpWeights, vtkm::cont::ArrayHandle< vtkm::Id2 > &interpIds, vtkm::cont::ArrayHandle< vtkm::Id > &interpCellIds, vtkm::cont::ArrayHandle< vtkm::UInt8 > &interpContourId)
Definition: MarchingCells.h:156
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::ReadPortalType
typename vtkm::cont::ArrayHandle< FieldType >::ReadPortalType ReadPortalType
Definition: MarchingCells.h:126
vtkm::worklet::marching_cells::CopyEdgeIds
Definition: MarchingCells.h:339
vtkm::worklet::marching_cells::CopyEdgeIds::ExecutionSignature
void(_1, _2) ExecutionSignature
Definition: MarchingCells.h:342
vtkm::worklet::WorkletVisitCellsWithPoints::FieldInPoint
FieldInIncident FieldInPoint
Definition: WorkletMapTopology.h:259
VTKM_CONT
#define VTKM_CONT
Definition: ExportMacros.h:57
vtkm::worklet::WorkletReduceByKey::KeysIn
A control signature tag for input keys.
Definition: WorkletReduceByKey.h:56
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::InterpContourId
vtkm::cont::ArrayHandle< vtkm::UInt8 > InterpContourId
Definition: MarchingCells.h:186
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::InterpIds
vtkm::cont::ArrayHandle< vtkm::Id2 > InterpIds
Definition: MarchingCells.h:184
vtkm::cont::ArrayHandleTransform
Implicitly transform values of one array to another with a functor.
Definition: ArrayHandleTransform.h:437
vtkm::cont::ArrayHandle::WritePortalType
typename StorageType::WritePortalType WritePortalType
Definition: ArrayHandle.h:295
vtkm::worklet::marching_cells::ClassifyCell::operator()
VTKM_EXEC void operator()(CellShapeType shape, const IsoValuesType &isovalues, const FieldInType &fieldIn, vtkm::IdComponent &numTriangles, const ClassifyTableType &classifyTable) const
Definition: MarchingCells.h:91
vtkm::worklet::marching_cells::ClassifyCell::ExecutionSignature
void(CellShape, _1, _2, _4, _5) ExecutionSignature
Definition: MarchingCells.h:84
vtkm::worklet::ScatterPermutation
A scatter that maps input to output based on a permutation array.
Definition: ScatterPermutation.h:32
vtkm::worklet::Keys::GetUniqueKeys
VTKM_CONT KeyArrayHandleType GetUniqueKeys() const
Definition: Keys.h:175
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::PrepareForExecution
VTKM_CONT ExecObject PrepareForExecution(vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token)
Definition: MarchingCells.h:169
MarchingCellTables.h
vtkm::UInt8
uint8_t UInt8
Definition: Types.h:157
vtkmNotUsed
#define vtkmNotUsed(parameter_name)
Simple macro to identify a parameter as unused.
Definition: ExportMacros.h:128
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData
Used to store data need for the EdgeWeightGenerate worklet.
Definition: MarchingCells.h:120
vtkm::CELL_SHAPE_TRIANGLE
@ CELL_SHAPE_TRIANGLE
Definition: CellShape.h:41
vtkm::Lerp
VTKM_EXEC_CONT ValueType Lerp(const ValueType &value0, const ValueType &value1, const WeightType &weight)
Returns the linear interpolation of two values based on weight.
Definition: VectorAnalysis.h:32
vtkm::worklet::marching_cells::EdgeWeightGenerate::MakeScatter
static VTKM_CONT ScatterType MakeScatter(const ArrayHandleType &numOutputTrisPerCell)
Definition: MarchingCells.h:199
vtkm::worklet::WorkletVisitPointsWithCells::CellIndices
IncidentElementIndices CellIndices
Definition: WorkletMapTopology.h:288
vtkm::exec::ConnectivityStructured
Definition: ConnectivityStructured.h:24
vtkm::cont::ExecutionObjectBase
Base ExecutionObjectBase for execution objects to inherit from so that you can use an arbitrary objec...
Definition: ExecutionObjectBase.h:31
vtkm::cont::DeviceAdapterId
Definition: DeviceAdapterTag.h:52
vtkm::worklet::marching_cells::ClassifyCell
Definition: MarchingCells.h:76
vtkm::Vec< vtkm::Id, 2 >
vtkm::CopyFlag::Off
@ Off
vtkm::FloatDefault
vtkm::Float32 FloatDefault
The floating point type to use when no other precision is specified.
Definition: Types.h:198
vtkm::worklet::marching_cells::execute
vtkm::cont::CellSetSingleType execute(const CellSetType &cells, const CoordinateSystem &coordinateSystem, const std::vector< ValueType > &isovalues, const vtkm::cont::ArrayHandle< ValueType, StorageTagField > &inputField, vtkm::cont::ArrayHandle< vtkm::Vec< CoordinateType, 3 >, StorageTagVertices > &vertices, vtkm::cont::ArrayHandle< vtkm::Vec< NormalType, 3 >, StorageTagNormals > &normals, vtkm::worklet::contour::CommonState &sharedState)
Definition: MarchingCells.h:602
vtkm::worklet::contour::CommonState::CellIdMap
vtkm::cont::ArrayHandle< vtkm::Id > CellIdMap
Definition: CommonState.h:35
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::WritePortalType
typename vtkm::cont::ArrayHandle< FieldType >::WritePortalType WritePortalType
Definition: MarchingCells.h:128
vtkm::cont::ArrayHandleCast
Cast the values of an array to the specified type, on demand.
Definition: ArrayHandleCast.h:141
CommonState.h
ScatterPermutation.h
vtkm::worklet::WorkletVisitPointsWithCells::FieldOutPoint
FieldOut FieldOutPoint
Definition: WorkletMapTopology.h:282
vtkm::worklet::Keys
Manage keys for a WorkletReduceByKey.
Definition: Keys.h:131
vtkm::worklet::marching_cells::ClassifyCell::ControlSignature
void(WholeArrayIn isoValues, FieldInPoint fieldIn, CellSetIn cellSet, FieldOutCell outNumTriangles, ExecObject classifyTable) ControlSignature
Definition: MarchingCells.h:83
BinaryPredicates.h
vtkm::VecTraits::ComponentType
typename VecType::ComponentType ComponentType
Type of the components in the vector.
Definition: VecTraits.h:73
vtkm::worklet::marching_cells::GenerateNormals
Definition: MarchingCells.h:551
vtkm::worklet::marching_cells::NormalsWorkletPass2::ExecutionSignature
void(CellCount, CellIndices, InputIndex, _2, _3, _4, WorkIndex, _5, _6) ExecutionSignature
Definition: MarchingCells.h:475
vtkm::worklet::marching_cells::EdgeWeightGenerate::ExecutionSignature
void(CellShape, _2, _3, _4, _5, _6, InputIndex, WorkIndex, VisitIndex, PointIndices) ExecutionSignature
Definition: MarchingCells.h:211
vtkm::worklet::marching_cells::CopyEdgeIds::ControlSignature
void(FieldIn, FieldOut) ControlSignature
Definition: MarchingCells.h:341
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject
Definition: MarchingCells.h:123
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::InterpIdPortal
WritePortalType< vtkm::Id2 > InterpIdPortal
Definition: MarchingCells.h:150
vtkm::worklet::marching_cells::ClassifyCell::InputDomain
_3 InputDomain
Definition: MarchingCells.h:85
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::ExecObject
VTKM_CONT ExecObject(vtkm::Id size, vtkm::cont::ArrayHandle< vtkm::FloatDefault > &interpWeights, vtkm::cont::ArrayHandle< vtkm::Id2 > &interpIds, vtkm::cont::ArrayHandle< vtkm::Id > &interpCellIds, vtkm::cont::ArrayHandle< vtkm::UInt8 > &interpContourId, vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token)
Definition: MarchingCells.h:134
vtkm::cont::CellSetSingleType::Fill
VTKM_CONT void Fill(vtkm::Id numPoints, vtkm::UInt8 shapeId, vtkm::IdComponent numberOfPointsPerCell, const vtkm::cont::ArrayHandle< vtkm::Id, ConnectivityStorageTag > &connectivity)
Definition: CellSetSingleType.h:186
vtkm::exec::arg::VisitIndex
The ExecutionSignature tag to use to get the visit index.
Definition: VisitIndex.h:43
vtkm::worklet::marching_cells::EdgeWeightGenerate::ScatterType
vtkm::worklet::ScatterCounting ScatterType
Definition: MarchingCells.h:196
vtkm::worklet::contour::CommonState::InterpolationEdgeIds
vtkm::cont::ArrayHandle< vtkm::Id2 > InterpolationEdgeIds
Definition: CommonState.h:34
vtkm::worklet::WorkletVisitPointsWithCells::FieldInOutPoint
FieldInOut FieldInOutPoint
Definition: WorkletMapTopology.h:284
vtkm::Pair
A vtkm::Pair is essentially the same as an STL pair object except that the methods (constructors and ...
Definition: Pair.h:29
vtkm::exec::arg::InputIndex
The ExecutionSignature tag to use to get the input index.
Definition: InputIndex.h:42
vtkm::cont::ArrayHandle::ReleaseResources
VTKM_CONT void ReleaseResources() const
Releases all resources in both the control and execution environments.
Definition: ArrayHandle.h:559
vtkm::worklet::marching_cells::MergeDuplicates
void MergeDuplicates(const vtkm::cont::Invoker &invoker, const vtkm::cont::ArrayHandle< KeyType, KeyStorage > &original_keys, vtkm::cont::ArrayHandle< vtkm::FloatDefault > &weights, vtkm::cont::ArrayHandle< vtkm::Id2 > &edgeIds, vtkm::cont::ArrayHandle< vtkm::Id > &cellids, vtkm::cont::ArrayHandle< vtkm::Id > &connectivity)
Definition: MarchingCells.h:357
vtkm::worklet::marching_cells::MergeDuplicateValues::ControlSignature
void(KeysIn keys, ValuesIn valuesIn1, ValuesIn valuesIn2, ReducedValuesOut valueOut1, ReducedValuesOut valueOut2) ControlSignature
Definition: MarchingCells.h:318
vtkm::worklet::marching_cells::MultiContourLess::operator()
VTKM_EXEC_CONT bool operator()(const vtkm::Pair< T, U > &a, const vtkm::Pair< T, U > &b) const
Definition: MarchingCells.h:297
ParametricCoordinates.h
vtkm::worklet::marching_cells::NormalsWorkletPass2::operator()
VTKM_EXEC void operator()(const vtkm::IdComponent &vtkmNotUsed(numCells), const FromIndexType &vtkmNotUsed(cellIds), vtkm::Id pointId, vtkm::exec::ConnectivityStructured< Cell, Point, 3 > &geometry, const WholeCoordinatesIn &pointCoordinates, const WholeFieldIn &inputField, vtkm::Id edgeId, const WholeWeightsIn &weights, NormalType &normal) const
Definition: MarchingCells.h:516
vtkm::worklet::marching_cells::NormalsWorkletPass1::ControlSignature
void(CellSetIn, WholeCellSetIn< Cell, Point >, WholeArrayIn pointCoordinates, WholeArrayIn inputField, FieldOutPoint normals) ControlSignature
Definition: MarchingCells.h:404
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::ExecObject::ExecObject
ExecObject()=default
vtkm::Pair::second
SecondType second
The pair's second object.
Definition: Pair.h:55
vtkm::exec::FieldNeighborhood
Retrieves field values from a neighborhood.
Definition: FieldNeighborhood.h:36
vtkm::worklet::marching_cells::EdgeWeightGenerate::InputDomain
_1 InputDomain
Definition: MarchingCells.h:213
vtkm::worklet::marching_cells::NormalsWorkletPass1::operator()
VTKM_EXEC void operator()(const vtkm::IdComponent &vtkmNotUsed(numCells), const FromIndexType &vtkmNotUsed(cellIds), vtkm::Id pointId, vtkm::exec::ConnectivityStructured< Cell, Point, 3 > &geometry, const WholeCoordinatesIn &pointCoordinates, const WholeFieldIn &inputField, NormalType &normal) const
Definition: MarchingCells.h:438
vtkm::worklet::marching_cells::NormalsWorkletPass1::MakeScatter
static VTKM_CONT ScatterType MakeScatter(const vtkm::cont::ArrayHandle< vtkm::Id2 > &edges)
Definition: MarchingCells.h:412
vtkm::worklet::gradient::StructuredPointGradient
Definition: StructuredPointGradient.h:25
vtkm::cont::ArrayHandleIndex
An implicit array handle containing the its own indices.
Definition: ArrayHandleIndex.h:54
StructuredPointGradient.h
vtkm::worklet::WorkletMapField
Base class for worklets that do a simple mapping of field arrays.
Definition: WorkletMapField.h:38
vtkm::worklet::WorkletVisitCellsWithPoints::FieldOutCell
FieldOut FieldOutCell
Definition: WorkletMapTopology.h:263
vtkm::worklet::marching_cells::MultiContourLess
Definition: MarchingCells.h:288
vtkm::exec::arg::WorkIndex
The ExecutionSignature tag to use to get the work index.
Definition: WorkIndex.h:39
vtkm::worklet::marching_cells::NormalsWorkletPass1::ScatterType
vtkm::worklet::ScatterPermutation< typename PointIdsArray::StorageTag > ScatterType
Definition: MarchingCells.h:409
vtkm::cont::make_ArrayHandleCast
VTKM_CONT detail::MakeArrayHandleCastImpl< T, typename ArrayType::ValueType, ArrayType >::ReturnType make_ArrayHandleCast(const ArrayType &array, const T &=T())
make_ArrayHandleCast is convenience function to generate an ArrayHandleCast.
Definition: ArrayHandleCast.h:255
vtkm::worklet::marching_cells::EdgeWeightGenerateMetaData::InterpWeights
vtkm::cont::ArrayHandle< vtkm::FloatDefault > InterpWeights
Definition: MarchingCells.h:183
vtkm::worklet::marching_cells::CopyEdgeIds::operator()
VTKM_EXEC void operator()(const vtkm::Id2 &input, vtkm::Id2 &output) const
Definition: MarchingCells.h:346
vtkm::worklet::marching_cells::NormalsWorkletPass2::ScatterType
vtkm::worklet::ScatterPermutation< typename PointIdsArray::StorageTag > ScatterType
Definition: MarchingCells.h:478