6 #ifndef vtkmlib_DataArrayConverters_h
7 #define vtkmlib_DataArrayConverters_h
9 #include "vtkAcceleratorsVTKmCoreModule.h"
10 #include "vtkmConfigCore.h"
19 #include <viskores/cont/ArrayExtractComponent.h>
20 #include <viskores/cont/ArrayHandleBasic.h>
21 #include <viskores/cont/ArrayHandleConstant.h>
22 #include <viskores/cont/ArrayHandleCounting.h>
23 #include <viskores/cont/ArrayHandleIndex.h>
24 #include <viskores/cont/ArrayHandleRecombineVec.h>
25 #include <viskores/cont/ArrayHandleRuntimeVec.h>
26 #include <viskores/cont/ArrayHandleSOA.h>
27 #include <viskores/cont/ArrayHandleStride.h>
28 #include <viskores/cont/Field.h>
29 #include <viskores/cont/UnknownArrayHandle.h>
31 #include <type_traits>
38 class CoordinateSystem;
42 VTK_ABI_NAMESPACE_BEGIN
49 VTK_ABI_NAMESPACE_BEGIN
56 static const char*
name =
"NoNameVTKField";
69 auto deleter = [](
void* container)
74 auto reallocator = [](
void*& memory,
void*& container, viskores::BufferSizeType oldSize,
75 viskores::BufferSizeType newSize)
81 "Dangerous inconsistency found between pointers for VTK and Viskores. "
82 "Was the VTK array resized outside of Viskores?");
88 return viskores::cont::ArrayHandleBasic<T>(
100 using ContainerPair = std::pair<vtkSOADataArrayTemplate<T>*,
int>;
101 ContainerPair* componentInput =
new ContainerPair(input, componentIndex);
103 auto deleter = [](
void* container)
105 ContainerPair* containerPair =
reinterpret_cast<ContainerPair*
>(container);
106 containerPair->first->UnRegister(
nullptr);
107 delete containerPair;
109 auto reallocator = [](
void*& memory,
void*& container,
110 viskores::BufferSizeType vtkNotUsed(oldSize),
111 viskores::BufferSizeType newSize)
113 ContainerPair* containerPair =
reinterpret_cast<ContainerPair*
>(container);
114 containerPair->first->SetNumberOfTuples(newSize);
115 memory = containerPair->first->GetComponentArrayPointer(containerPair->second);
122 template <
typename T>
130 template <
typename T>
137 viskores::cont::ArrayHandleRecombineVec<T> output;
142 output.AppendComponentArray(
143 viskores::cont::ArrayExtractComponent(componentArray, 0, viskores::CopyFlag::Off));
149 template <
typename VecT>
153 return viskores::cont::ArrayHandleConstant<VecT>(
154 VecT{ input->GetBackend()->Value }, input->GetNumberOfTuples());
157 template <
typename T>
163 return vtkDataArrayToArrayHandle<T>(input);
165 return vtkDataArrayToArrayHandle<viskores::Vec<T, 2>>(input);
167 return vtkDataArrayToArrayHandle<viskores::Vec<T, 3>>(input);
169 return vtkDataArrayToArrayHandle<viskores::Vec<T, 4>>(input);
171 vtkGenericWarningMacro(<<
"Cannot convert constant array with "
173 return viskores::cont::UnknownArrayHandle{};
177 template <
typename T>
184 return viskores::cont::UnknownArrayHandle{};
190 if ((start == 0) && (step == 1))
195 return viskores::cont::ArrayHandleIndex(length);
199 return viskores::cont::ArrayHandleCounting<T>(start, step,
length);
203 template <
typename DataArrayType>
218 VTK_ABI_NAMESPACE_END
223 VTK_ABI_NAMESPACE_BEGIN
225 VTKACCELERATORSVTKMCORE_EXPORT
228 VTKACCELERATORSVTKMCORE_EXPORT
231 VTKACCELERATORSVTKMCORE_EXPORT
234 VTK_ABI_NAMESPACE_END
237 VTK_ABI_NAMESPACE_BEGIN
249 VTK_ABI_NAMESPACE_END
251 #endif // vtkmlib_ArrayConverters_h
Struct-Of-Arrays implementation of vtkGenericDataArray.
tovtkm::FieldsFlag operator&(const tovtkm::FieldsFlag &a, const tovtkm::FieldsFlag &b)
int GetNumberOfComponents() const
Set/Get the dimension (n) of the components.
ValueType * GetPointer(vtkIdType valueIdx)
Get the address of a particular data index.
A utility array for wrapping constant functions in implicit arrays.
Abstract interface for N-dimensional arrays.
tovtkm::FieldsFlag operator|(const tovtkm::FieldsFlag &a, const tovtkm::FieldsFlag &b)
std::shared_ptr< vtkAffineImplicitBackend< ValueTypeT > > GetBackend()
ValueType * GetComponentArrayPointer(int comp)
Return a pointer to a contiguous block of memory containing all values for a particular components (i...
vtkIdType GetNumberOfValues() const
Get the total number of values in the array.
static const char * NoNameVTKFieldName()
Temporary name for arrays converted from VTK that do not have a name.
viskores::cont::ArrayHandleBasic< T > vtkSOADataArrayToComponentArrayHandle(vtkSOADataArrayTemplate< T > *input, int componentIndex)
viskores::cont::ArrayHandleBasic< T > vtkAOSDataArrayToFlatArrayHandle(vtkAOSDataArrayTemplate< T > *input)
virtual void UnRegister(vtkObjectBase *o)
Decrease the reference count (release by another object).
Array-Of-Structs implementation of vtkGenericDataArray.
#define vtkLog(verbosity_name, x)
Add to log given the verbosity level.
abstract superclass for arrays of numeric data
void Register(vtkObjectBase *o)
Increase the reference count (mark as used by another object).
vtkIdType GetNumberOfTuples() const
Get the number of complete tuples (a component group) in the array.
A utility array for wrapping affine functions in implicit arrays.
VTKACCELERATORSVTKMCORE_EXPORT vtkDataArray * Convert(const viskores::cont::Field &input)
viskores::cont::UnknownArrayHandle vtkDataArrayToUnknownArrayHandle(vtkConstantArray< T > *input)
virtual bool SetNumberOfValues(vtkIdType numValues)
Specify the number of values (tuples * components) for this object to hold.
represent and manipulate 3D points
viskores::cont::ArrayHandleRuntimeVec< T > vtkDataArrayToArrayHandle(vtkAOSDataArrayTemplate< T > *input)