------------------------------------------------------------------------------
| 203 | |
| 204 | //------------------------------------------------------------------------------ |
| 205 | bool vtkXdmf3DataSet::VTKToXdmfArray( |
| 206 | vtkDataArray* vArray, XdmfArray* xArray, unsigned int rank, unsigned int* dims) |
| 207 | { |
| 208 | std::vector<unsigned int> xdims; |
| 209 | if (rank == 0) |
| 210 | { |
| 211 | xdims.push_back(vArray->GetNumberOfTuples()); |
| 212 | } |
| 213 | else |
| 214 | { |
| 215 | for (unsigned int i = 0; i < rank; i++) |
| 216 | { |
| 217 | xdims.push_back(dims[i]); |
| 218 | } |
| 219 | } |
| 220 | // add additional dimension to the xdmf array to match the vtk array's width, |
| 221 | // ex coordinate arrays have xyz, so add [3] |
| 222 | unsigned int ncomp = static_cast<unsigned int>(vArray->GetNumberOfComponents()); |
| 223 | if (ncomp != 1) |
| 224 | { |
| 225 | xdims.push_back(ncomp); |
| 226 | } |
| 227 | |
| 228 | if (vArray->GetName()) |
| 229 | { |
| 230 | xArray->setName(vArray->GetName()); |
| 231 | } |
| 232 | |
| 233 | auto aos = vArray->ToAOSDataArray(); |
| 234 | #define DO_DEEPWRITE 1 |
| 235 | #if DO_DEEPWRITE |
| 236 | #define XDMF_ARRAY_COPY(type, nativeType, xdmfarr, vtkarr) \ |
| 237 | xdmfarr->insert(0, \ |
| 238 | reinterpret_cast<type*>( \ |
| 239 | vtkAOSDataArrayTemplate<nativeType>::FastDownCast(vtkarr)->GetPointer(0)), \ |
| 240 | vtkarr->GetDataSize()) |
| 241 | #else |
| 242 | #define XDMF_ARRAY_COPY(type, xdmfarr, vtkarr) \ |
| 243 | xdmfarr->setValuesInternal(vtkAOSDataArrayTemplate<type>::FastDownCast(vtkarr)->GetPointer(0), \ |
| 244 | vtkarr->GetDataSize(), false) |
| 245 | #endif |
| 246 | |
| 247 | // TODO: verify the 32/64 choices are correct in all configurations |
| 248 | switch (vArray->GetDataType()) |
| 249 | { |
| 250 | case VTK_VOID: |
| 251 | return false; |
| 252 | case VTK_BIT: |
| 253 | return false; |
| 254 | case VTK_CHAR: |
| 255 | xArray->initialize(XdmfArrayType::Int8(), xdims); |
| 256 | XDMF_ARRAY_COPY(char, char, xArray, aos); |
| 257 | break; |
| 258 | case VTK_SIGNED_CHAR: |
| 259 | xArray->initialize(XdmfArrayType::Int8(), xdims); |
| 260 | XDMF_ARRAY_COPY(char, signed char, xArray, aos); |
| 261 | break; |
| 262 | case VTK_UNSIGNED_CHAR: |
nothing calls this directly
no test coverage detected