VTK  9.6.1
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
32
33#ifndef vtkFieldData_h
34#define vtkFieldData_h
35
36#include "vtkCommonDataModelModule.h" // For export macro
37#include "vtkObject.h"
38#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
39
40#include "vtkAbstractArray.h" // Needed for inline methods.
41
42#include <array> // For CachedGhostRangeType
43#include <tuple> // For CachedGhostRangeType
44#include <vector> // For list indices
45
46VTK_ABI_NAMESPACE_BEGIN
47class vtkIdList;
48class vtkDoubleArray;
50
51class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkFieldData : public vtkObject
52{
53public:
54 static vtkFieldData* New();
56
57 vtkTypeMacro(vtkFieldData, vtkObject);
58 void PrintSelf(ostream& os, vtkIndent indent) override;
59
64 virtual void Initialize();
65
71
78
88 void AllocateArrays(int num);
89
97
105
110
112
115 virtual void RemoveArray(const char* name);
116
120 virtual void RemoveArray(int index);
122
132
143 vtkDataArray* GetArray(const char* arrayName, int& index);
144
146
155 vtkDataArray* GetArray(const char* arrayName)
156 {
157 int i;
158 return this->GetArray(arrayName, i);
159 }
160
161
168
175 vtkAbstractArray* GetAbstractArray(const char* arrayName, int& index);
176
178
183 vtkAbstractArray* GetAbstractArray(const char* arrayName)
184 {
185 int i;
186 return this->GetAbstractArray(arrayName, i);
187 }
188
189
191
194 vtkTypeBool HasArray(const char* name)
195 {
196 int i;
197 vtkAbstractArray* array = this->GetAbstractArray(name, i);
198 return array ? 1 : 0;
199 }
200
201
203
208 const char* GetArrayName(int i)
209 {
210 vtkAbstractArray* da = this->GetAbstractArray(i);
211 return da ? da->GetName() : nullptr;
212 }
213
214
219 virtual void PassData(vtkFieldData* fd);
220
230 void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); }
231 void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); }
232
242 virtual void CopyAllOn(int unused = 0);
243
253 virtual void CopyAllOff(int unused = 0);
254
258 virtual void DeepCopy(vtkFieldData* da);
259
263 virtual void ShallowCopy(vtkFieldData* da);
264
268 void Squeeze();
269
274 void Reset();
275
282 virtual unsigned long GetActualMemorySize();
283
288
299
307 int GetArrayContainingComponent(int i, int& arrayComp);
308
319
331
341
348
354
361
363
382 bool GetRange(const char* name, double range[2], int comp = 0);
383 bool GetRange(int index, double range[2], int comp = 0);
384 bool GetFiniteRange(const char* name, double range[2], int comp = 0);
385 bool GetFiniteRange(int index, double range[2], int comp = 0);
387
389
400 vtkGetMacro(GhostsToSkip, unsigned char);
401 virtual void SetGhostsToSkip(unsigned char);
403
408 bool HasAnyGhostBitSet(int bitFlag);
409
418 vtkGetObjectMacro(GhostArray, vtkUnsignedCharArray);
419
427 static const char* GhostArrayName() { return "vtkGhostType"; }
428
429protected:
431 ~vtkFieldData() override;
432
436
440 void SetArray(int i, vtkAbstractArray* array);
441
445 virtual void InitializeFields();
446
448 {
451 };
452
453 CopyFieldFlag* CopyFieldFlags; // the names of fields not to be copied
454 int NumberOfFieldFlags; // the number of fields not to be copied
455 void CopyFieldOnOff(const char* name, int onOff);
457 int FindFlag(const char* field);
458 int GetFlag(const char* field);
462
463 /*
464 * This tuple holds: [array time stamp, ghost array time stamp, cached ranges].
465 * Those time stamps are used to decide whether the cached range should be recomputed or not.
466 * when requesting the range of an array.
467 *
468 * When there is no ghost array, the ghost array time stamp is defined as equal to 0.
469 */
470 using CachedGhostRangeType = std::tuple<vtkMTimeType, vtkMTimeType, std::vector<double>>;
471 unsigned char GhostsToSkip;
473
475
482 std::vector<std::array<CachedGhostRangeType, 2>> Ranges;
483 std::vector<std::array<CachedGhostRangeType, 2>> FiniteRanges;
485
486private:
487 vtkFieldData(const vtkFieldData&) = delete;
488 void operator=(const vtkFieldData&) = delete;
489
490 friend class vtkFieldDataSerDesHelper; // for access to SetArray()
491
492public:
493 class VTKCOMMONDATAMODEL_EXPORT BasicIterator
494 {
495 public:
496 BasicIterator() = default;
498 BasicIterator(const int* list, unsigned int listSize);
500 virtual ~BasicIterator() = default;
501 void PrintSelf(ostream& os, vtkIndent indent);
502
503 int GetListSize() const { return static_cast<int>(this->List.size()); }
504 int GetCurrentIndex() { return this->List[this->Position]; }
506 {
507 this->Position = -1;
508 return this->NextIndex();
509 }
510 int End() const { return (this->Position >= static_cast<int>(this->List.size())); }
512 {
513 this->Position++;
514 return (this->End() ? -1 : this->List[this->Position]);
515 }
516
517 // Support C++ range-for loops; e.g, code like
518 // "for (const auto& i : basicIterator)".
519 std::vector<int>::const_iterator begin() { return this->List.begin(); }
520 std::vector<int>::const_iterator end() { return this->List.end(); }
521
522 protected:
523 std::vector<int> List;
525 };
526
527 class VTKCOMMONDATAMODEL_EXPORT Iterator : public BasicIterator
528 {
529 public:
532 ~Iterator() override;
533 Iterator(vtkFieldData* dsa, const int* list = nullptr, unsigned int listSize = 0);
534
536 {
537 this->Position = -1;
538 return this->Next();
539 }
540
542 {
543 this->Position++;
544 if (this->End())
545 {
546 return nullptr;
547 }
548
549 // vtkFieldData::GetArray() can return null, which implies that
550 // a the array at the given index in not a vtkDataArray subclass.
551 // This iterator skips such arrays.
552 vtkDataArray* cur = Fields->GetArray(this->List[this->Position]);
553 return (cur ? cur : this->Next());
554 }
555
557
558 protected:
561 };
562};
563
564VTK_ABI_NAMESPACE_END
565#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.
static const char * GhostArrayName()
Return the name used for Ghost Arrays.
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:368
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:323
#define VTK_MARSHALMANUAL