VTK  9.1.0
DataArrayConverters.h
Go to the documentation of this file.
1 //=============================================================================
2 //
3 // Copyright (c) Kitware, Inc.
4 // All rights reserved.
5 // See LICENSE.txt for details.
6 //
7 // This software is distributed WITHOUT ANY WARRANTY; without even
8 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9 // PURPOSE. See the above copyright notice for more information.
10 //
11 // Copyright 2012 Sandia Corporation.
12 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
13 // the U.S. Government retains certain rights in this software.
14 //
15 //=============================================================================
16 
17 #ifndef vtkmlib_DataArrayConverters_h
18 #define vtkmlib_DataArrayConverters_h
19 
20 #include "vtkAcceleratorsVTKmCoreModule.h" //required for correct implementation
21 #include "vtkmConfigCore.h" //required for general vtkm setup
22 
25 
26 #include <vtkm/cont/ArrayHandleSOA.h>
27 #include <vtkm/cont/Field.h>
28 #include <vtkm/cont/UnknownArrayHandle.h>
29 
30 #include <type_traits> // for std::underlying_type
31 
32 class vtkDataArray;
33 class vtkPoints;
34 
35 namespace vtkm
36 {
37 namespace cont
38 {
39 class CoordinateSystem;
40 }
41 }
42 
43 namespace tovtkm
44 {
45 
46 template <typename DataArrayType, vtkm::IdComponent NumComponents>
48 
49 template <typename T, vtkm::IdComponent NumComponents>
51 {
52  using ValueType =
53  typename std::conditional<NumComponents == 1, T, vtkm::Vec<T, NumComponents>>::type;
54  using StorageType = vtkm::cont::internal::Storage<ValueType, vtkm::cont::StorageTagBasic>;
55  using ArrayHandleType = vtkm::cont::ArrayHandle<ValueType, vtkm::cont::StorageTagBasic>;
56 
58  {
59  return vtkm::cont::make_ArrayHandle(reinterpret_cast<ValueType*>(input->GetPointer(0)),
60  input->GetNumberOfTuples(), vtkm::CopyFlag::Off);
61  }
62 };
63 
64 template <typename T, vtkm::IdComponent NumComponents>
66 {
67  using ValueType = vtkm::Vec<T, NumComponents>;
68  using StorageType = vtkm::cont::internal::Storage<ValueType, vtkm::cont::StorageTagSOA>;
69  using ArrayHandleType = vtkm::cont::ArrayHandle<ValueType, vtkm::cont::StorageTagSOA>;
70 
72  {
73  vtkm::Id numValues = input->GetNumberOfTuples();
74  vtkm::cont::ArrayHandleSOA<ValueType> handle;
75  for (vtkm::IdComponent i = 0; i < NumComponents; ++i)
76  {
77  handle.SetArray(i,
78  vtkm::cont::make_ArrayHandle<T>(reinterpret_cast<T*>(input->GetComponentArrayPointer(i)),
79  numValues, vtkm::CopyFlag::Off));
80  }
81 
82  return handle;
83  }
84 };
85 
86 template <typename T>
88 {
89  using StorageType = vtkm::cont::internal::Storage<T, vtkm::cont::StorageTagBasic>;
90  using ArrayHandleType = vtkm::cont::ArrayHandle<T, vtkm::cont::StorageTagBasic>;
91 
93  {
94  return vtkm::cont::make_ArrayHandle(
95  input->GetComponentArrayPointer(0), input->GetNumberOfTuples(), vtkm::CopyFlag::Off);
96  }
97 };
98 
99 enum class FieldsFlag
100 {
101  None = 0x0,
102  Points = 0x1,
103  Cells = 0x2,
104 
106 };
107 
108 }
109 
110 namespace fromvtkm
111 {
112 
113 VTKACCELERATORSVTKMCORE_EXPORT
114 vtkDataArray* Convert(const vtkm::cont::Field& input);
115 
116 VTKACCELERATORSVTKMCORE_EXPORT
117 vtkDataArray* Convert(const vtkm::cont::UnknownArrayHandle& input, const char* name);
118 
119 VTKACCELERATORSVTKMCORE_EXPORT
120 vtkPoints* Convert(const vtkm::cont::CoordinateSystem& input);
121 
122 }
123 
125 {
127  return static_cast<tovtkm::FieldsFlag>(static_cast<T>(a) & static_cast<T>(b));
128 }
129 
131 {
133  return static_cast<tovtkm::FieldsFlag>(static_cast<T>(a) | static_cast<T>(b));
134 }
135 
136 #endif // vtkmlib_ArrayConverters_h
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:143
vtkSOADataArrayTemplate.h
operator&
tovtkm::FieldsFlag operator&(const tovtkm::FieldsFlag &a, const tovtkm::FieldsFlag &b)
Definition: DataArrayConverters.h:124
vtkSOADataArrayTemplate::SetArray
void SetArray(int comp, ValueType *array, vtkIdType size, bool updateMaxId=false, bool save=false, int deleteMethod=VTK_DATA_ARRAY_FREE)
Use this API to pass externally allocated memory to this instance.
vtkm
Definition: DataArrayConverters.h:36
tovtkm::FieldsFlag::Cells
@ Cells
vtkSOADataArrayTemplate
Struct-Of-Arrays implementation of vtkGenericDataArray.
Definition: vtkSOADataArrayTemplate.h:41
vtkX3D::type
@ type
Definition: vtkX3D.h:522
fromvtkm::Convert
VTKACCELERATORSVTKMCORE_EXPORT vtkDataArray * Convert(const vtkm::cont::Field &input)
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, NumComponents >::ArrayHandleType
vtkm::cont::ArrayHandle< ValueType, vtkm::cont::StorageTagSOA > ArrayHandleType
Definition: DataArrayConverters.h:69
tovtkm::DataArrayToArrayHandle
Definition: DataArrayConverters.h:47
vtkAOSDataArrayTemplate.h
fromvtkm
Definition: DataArrayConverters.h:111
tovtkm::DataArrayToArrayHandle< vtkAOSDataArrayTemplate< T >, NumComponents >::ValueType
typename std::conditional< NumComponents==1, T, vtkm::Vec< T, NumComponents > >::type ValueType
Definition: DataArrayConverters.h:53
vtkAOSDataArrayTemplate::GetPointer
ValueType * GetPointer(vtkIdType valueIdx)
Get the address of a particular data index.
operator|
tovtkm::FieldsFlag operator|(const tovtkm::FieldsFlag &a, const tovtkm::FieldsFlag &b)
Definition: DataArrayConverters.h:130
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, 1 >::Wrap
static ArrayHandleType Wrap(vtkSOADataArrayTemplate< T > *input)
Definition: DataArrayConverters.h:92
tovtkm::DataArrayToArrayHandle< vtkAOSDataArrayTemplate< T >, NumComponents >::ArrayHandleType
vtkm::cont::ArrayHandle< ValueType, vtkm::cont::StorageTagBasic > ArrayHandleType
Definition: DataArrayConverters.h:55
tovtkm::DataArrayToArrayHandle< vtkAOSDataArrayTemplate< T >, NumComponents >::StorageType
vtkm::cont::internal::Storage< ValueType, vtkm::cont::StorageTagBasic > StorageType
Definition: DataArrayConverters.h:54
vtkAbstractArray::GetNumberOfTuples
vtkIdType GetNumberOfTuples() const
Get the number of complete tuples (a component group) in the array.
Definition: vtkAbstractArray.h:172
tovtkm::FieldsFlag
FieldsFlag
Definition: DataArrayConverters.h:100
vtkSOADataArrayTemplate::GetComponentArrayPointer
ValueType * GetComponentArrayPointer(int comp)
Return a pointer to a contiguous block of memory containing all values for a particular components (i...
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, NumComponents >::Wrap
static ArrayHandleType Wrap(vtkSOADataArrayTemplate< T > *input)
Definition: DataArrayConverters.h:71
tovtkm::DataArrayToArrayHandle< vtkAOSDataArrayTemplate< T >, NumComponents >::Wrap
static ArrayHandleType Wrap(vtkAOSDataArrayTemplate< T > *input)
Definition: DataArrayConverters.h:57
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, NumComponents >::ValueType
vtkm::Vec< T, NumComponents > ValueType
Definition: DataArrayConverters.h:67
tovtkm::FieldsFlag::None
@ None
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, 1 >::StorageType
vtkm::cont::internal::Storage< T, vtkm::cont::StorageTagBasic > StorageType
Definition: DataArrayConverters.h:89
vtkX3D::name
@ name
Definition: vtkX3D.h:225
vtkAOSDataArrayTemplate
Array-Of-Structs implementation of vtkGenericDataArray.
Definition: vtkAOSDataArrayTemplate.h:45
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, NumComponents >::StorageType
vtkm::cont::internal::Storage< ValueType, vtkm::cont::StorageTagSOA > StorageType
Definition: DataArrayConverters.h:68
tovtkm
Definition: DataArrayConverters.h:44
tovtkm::FieldsFlag::Points
@ Points
tovtkm::DataArrayToArrayHandle< vtkSOADataArrayTemplate< T >, 1 >::ArrayHandleType
vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagBasic > ArrayHandleType
Definition: DataArrayConverters.h:90