VTK  9.5.2
vtkFieldData.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
33
34#ifndef vtkFieldData_h
35#define vtkFieldData_h
36
37#include "vtkCommonDataModelModule.h" // For export macro
38#include "vtkObject.h"
39#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
40
41#include "vtkAbstractArray.h" // Needed for inline methods.
42
43#include <array> // For CachedGhostRangeType
44#include <tuple> // For CachedGhostRangeType
45#include <vector> // For list indices
46
47VTK_ABI_NAMESPACE_BEGIN
48class vtkIdList;
49class vtkDoubleArray;
51
52class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkFieldData : public vtkObject
53{
54public:
55 static vtkFieldData* New();
57
58 vtkTypeMacro(vtkFieldData, vtkObject);
59 void PrintSelf(ostream& os, vtkIndent indent) override;
60
65 virtual void Initialize();
66
72
79
89 void AllocateArrays(int num);
90
98
106
111
113
116 virtual void RemoveArray(const char* name);
117
121 virtual void RemoveArray(int index);
123
133
144 vtkDataArray* GetArray(const char* arrayName, int& index);
145
147
156 vtkDataArray* GetArray(const char* arrayName)
157 {
158 int i;
159 return this->GetArray(arrayName, i);
160 }
161
162
169
176 vtkAbstractArray* GetAbstractArray(const char* arrayName, int& index);
177
179
184 vtkAbstractArray* GetAbstractArray(const char* arrayName)
185 {
186 int i;
187 return this->GetAbstractArray(arrayName, i);
188 }
189
190
192
195 vtkTypeBool HasArray(const char* name)
196 {
197 int i;
198 vtkAbstractArray* array = this->GetAbstractArray(name, i);
199 return array ? 1 : 0;
200 }
201
202
204
209 const char* GetArrayName(int i)
210 {
211 vtkAbstractArray* da = this->GetAbstractArray(i);
212 return da ? da->GetName() : nullptr;
213 }
214
215
220 virtual void PassData(vtkFieldData* fd);
221
231 void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); }
232 void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); }
233
243 virtual void CopyAllOn(int unused = 0);
244
254 virtual void CopyAllOff(int unused = 0);
255
259 virtual void DeepCopy(vtkFieldData* da);
260
264 virtual void ShallowCopy(vtkFieldData* da);
265
269 void Squeeze();
270
275 void Reset();
276
283 virtual unsigned long GetActualMemorySize();
284
289
300
308 int GetArrayContainingComponent(int i, int& arrayComp);
309
320
332
342
349
355
362
364
383 bool GetRange(const char* name, double range[2], int comp = 0);
384 bool GetRange(int index, double range[2], int comp = 0);
385 bool GetFiniteRange(const char* name, double range[2], int comp = 0);
386 bool GetFiniteRange(int index, double range[2], int comp = 0);
388
390
401 vtkGetMacro(GhostsToSkip, unsigned char);
402 virtual void SetGhostsToSkip(unsigned char);
404
409 bool HasAnyGhostBitSet(int bitFlag);
410
419 vtkGetObjectMacro(GhostArray, vtkUnsignedCharArray);
420
421protected:
423 ~vtkFieldData() override;
424
428
432 void SetArray(int i, vtkAbstractArray* array);
433
437 virtual void InitializeFields();
438
440 {
443 };
444
445 CopyFieldFlag* CopyFieldFlags; // the names of fields not to be copied
446 int NumberOfFieldFlags; // the number of fields not to be copied
447 void CopyFieldOnOff(const char* name, int onOff);
449 int FindFlag(const char* field);
450 int GetFlag(const char* field);
454
455 /*
456 * This tuple holds: [array time stamp, ghost array time stamp, cached ranges].
457 * Those time stamps are used to decide whether the cached range should be recomputed or not.
458 * when requesting the range of an array.
459 *
460 * When there is no ghost array, the ghost array time stamp is defined as equal to 0.
461 */
462 using CachedGhostRangeType = std::tuple<vtkMTimeType, vtkMTimeType, std::vector<double>>;
463 unsigned char GhostsToSkip;
465
467
474 std::vector<std::array<CachedGhostRangeType, 2>> Ranges;
475 std::vector<std::array<CachedGhostRangeType, 2>> FiniteRanges;
477
478private:
479 vtkFieldData(const vtkFieldData&) = delete;
480 void operator=(const vtkFieldData&) = delete;
481
482 friend class vtkFieldDataSerDesHelper; // for access to SetArray()
483
484public:
485 class VTKCOMMONDATAMODEL_EXPORT BasicIterator
486 {
487 public:
488 BasicIterator() = default;
490 BasicIterator(const int* list, unsigned int listSize);
492 virtual ~BasicIterator() = default;
493 void PrintSelf(ostream& os, vtkIndent indent);
494
495 int GetListSize() const { return static_cast<int>(this->List.size()); }
496 int GetCurrentIndex() { return this->List[this->Position]; }
498 {
499 this->Position = -1;
500 return this->NextIndex();
501 }
502 int End() const { return (this->Position >= static_cast<int>(this->List.size())); }
504 {
505 this->Position++;
506 return (this->End() ? -1 : this->List[this->Position]);
507 }
508
509 // Support C++ range-for loops; e.g, code like
510 // "for (const auto& i : basicIterator)".
511 std::vector<int>::const_iterator begin() { return this->List.begin(); }
512 std::vector<int>::const_iterator end() { return this->List.end(); }
513
514 protected:
515 std::vector<int> List;
517 };
518
519 class VTKCOMMONDATAMODEL_EXPORT Iterator : public BasicIterator
520 {
521 public:
524 ~Iterator() override;
525 Iterator(vtkFieldData* dsa, const int* list = nullptr, unsigned int listSize = 0);
526
528 {
529 this->Position = -1;
530 return this->Next();
531 }
532
534 {
535 this->Position++;
536 if (this->End())
537 {
538 return nullptr;
539 }
540
541 // vtkFieldData::GetArray() can return null, which implies that
542 // a the array at the given index in not a vtkDataArray subclass.
543 // This iterator skips such arrays.
544 vtkDataArray* cur = Fields->GetArray(this->List[this->Position]);
545 return (cur ? cur : this->Next());
546 }
547
549
550 protected:
553 };
554};
555
556VTK_ABI_NAMESPACE_END
557#endif
Abstract superclass for all arrays.
virtual char * GetName()
Set/get array's name.
dynamic, self-adjusting array of double
BasicIterator(const BasicIterator &source)
BasicIterator & operator=(const BasicIterator &source)
BasicIterator(const int *list, unsigned int listSize)
virtual ~BasicIterator()=default
void PrintSelf(ostream &os, vtkIndent indent)
std::vector< int >::const_iterator end()
std::vector< int > List
std::vector< int >::const_iterator begin()
vtkDataArray * Begin()
Iterator(vtkFieldData *dsa, const int *list=nullptr, unsigned int listSize=0)
vtkFieldData * Fields
vtkDataArray * Next()
Iterator & operator=(const Iterator &source)
Iterator(const Iterator &source)
vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext=1000)
Allocate data for each array.
int GetFlag(const char *field)
vtkAbstractArray ** Data
int GetNumberOfArrays()
Get the number of arrays of data available.
virtual void DeepCopy(vtkFieldData *da)
Copy a field by creating new data arrays (i.e., duplicate storage).
int AddArray(vtkAbstractArray *array)
Add an array to the array list.
void CopyFlags(const vtkFieldData *source)
~vtkFieldData() override
void Reset()
Resets each data array in the field (Reset() does not release memory but it makes the arrays look lik...
void InsertTuple(vtkIdType i, vtkIdType j, vtkFieldData *source)
Insert the jth tuple in source field data at the ith location.
vtkAbstractArray * GetAbstractArray(const char *arrayName)
Return the array with the name given.
bool GetFiniteRange(const char *name, double range[2], int comp=0)
Computes the range of the input data array (specified through its name or the index in this field dat...
bool HasAnyGhostBitSet(int bitFlag)
Helper function that tests if any of the values in ghost array has been set.
std::vector< std::array< CachedGhostRangeType, 2 > > FiniteRanges
Ranges and FiniteRanges store cached ranges for arrays stored in this field data.
virtual void SetGhostsToSkip(unsigned char)
Set / Get the binary mask filtering out certain types of ghosts when calling GetRange.
void AllocateArrays(int num)
AllocateArrays actually sets the number of vtkAbstractArray pointers in the vtkFieldData object,...
virtual void RemoveArray(int index)
Remove an array (with the given index) from the list of arrays.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void InitializeFields()
Release all data but do not delete object.
bool GetRange(const char *name, double range[2], int comp=0)
Computes the range of the input data array (specified through its name or the index in this field dat...
int GetNumberOfComponents()
Get the number of components in the field.
vtkMTimeType GetMTime() override
Check object's components for modified times.
static vtkFieldData * ExtendedNew()
std::vector< std::array< CachedGhostRangeType, 2 > > Ranges
Ranges and FiniteRanges store cached ranges for arrays stored in this field data.
virtual void RemoveArray(const char *name)
Remove an array (with the given name) from the list of arrays.
unsigned char GhostsToSkip
void SetTuple(vtkIdType i, vtkIdType j, vtkFieldData *source)
Set the jth tuple in source field data at the ith location.
virtual void CopyAllOn(int unused=0)
Turn on copying of all data.
CopyFieldFlag * CopyFieldFlags
void SetNumberOfTuples(vtkIdType number)
Set the number of tuples for each data array in the field.
virtual unsigned long GetActualMemorySize()
Return the memory in kibibytes (1024 bytes) consumed by this field data.
int GetArrayContainingComponent(int i, int &arrayComp)
Return the array containing the ith component of the field.
void ClearFieldFlags()
int FindFlag(const char *field)
virtual void Initialize()
Release all data but do not delete object.
vtkDataArray * GetArray(int i)
Not recommended for use.
virtual void CopyAllOff(int unused=0)
Turn off copying of all data.
const char * GetArrayName(int i)
Get the name of ith array.
bool GetRange(int index, double range[2], int comp=0)
Computes the range of the input data array (specified through its name or the index in this field dat...
virtual void ShallowCopy(vtkFieldData *da)
Copy a field by reference counting the data arrays.
void CopyFieldOn(const char *name)
Turn on/off the copying of the field specified by name.
bool GetFiniteRange(int index, double range[2], int comp=0)
Computes the range of the input data array (specified through its name or the index in this field dat...
friend class vtkFieldDataSerDesHelper
vtkUnsignedCharArray * GhostArray
void CopyFieldOff(const char *name)
vtkDataArray * GetArray(const char *arrayName, int &index)
Not recommended for use.
vtkIdType GetNumberOfTuples()
Get the number of tuples in the field.
static vtkFieldData * New()
void Squeeze()
Squeezes each data array in the field (Squeeze() reclaims unused memory.).
vtkAbstractArray * GetAbstractArray(int i)
Returns the ith array in the field.
vtkIdType InsertNextTuple(vtkIdType j, vtkFieldData *source)
Insert the jth tuple in source field data at the end of the tuple matrix.
void NullData(vtkIdType id)
Sets every vtkDataArray at index id to a null tuple.
void GetField(vtkIdList *ptId, vtkFieldData *f)
Get a field from a list of ids.
void CopyFieldOnOff(const char *name, int onOff)
int NumberOfActiveArrays
virtual void PassData(vtkFieldData *fd)
Pass entire arrays of input data through to output.
vtkTypeBool HasArray(const char *name)
Return 1 if an array with the given name could be found.
vtkDataArray * GetArray(const char *arrayName)
Not recommended for use.
void CopyStructure(vtkFieldData *)
Copy data array structure from a given field.
void SetArray(int i, vtkAbstractArray *array)
Set an array to define the field.
vtkAbstractArray * GetAbstractArray(const char *arrayName, int &index)
Return the array with the name given.
std::tuple< vtkMTimeType, vtkMTimeType, std::vector< double > > CachedGhostRangeType
list of point or cell ids
Definition vtkIdList.h:24
a simple class to control print indentation
Definition vtkIndent.h:29
dynamic, self-adjusting array of unsigned char
int vtkTypeBool
Definition vtkABI.h:64
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define vtkDataArray
int vtkIdType
Definition vtkType.h:332
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287
#define VTK_MARSHALMANUAL