VTK  9.0.20210613
vtkDataArray.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDataArray.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
35 #ifndef vtkDataArray_h
36 #define vtkDataArray_h
37 
38 #include "vtkAbstractArray.h"
39 #include "vtkCommonCoreModule.h" // For export macro
40 #include "vtkVTK_USE_SCALED_SOA_ARRAYS.h" // For #define of VTK_USE_SCALED_SOA_ARRAYS
41 
42 class vtkDoubleArray;
43 class vtkIdList;
46 class vtkLookupTable;
47 class vtkPoints;
48 
49 class VTKCOMMONCORE_EXPORT vtkDataArray : public vtkAbstractArray
50 {
51 public:
53  void PrintSelf(ostream& os, vtkIndent indent) override;
54 
61  static vtkDataArray* FastDownCast(vtkAbstractArray* source);
62 
69  int IsNumeric() const override { return 1; }
70 
76  int GetElementComponentSize() const override { return this->GetDataTypeSize(); }
77 
78  // Reimplemented virtuals (doc strings are inherited from superclass):
79  void InsertTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) override;
81  void InsertTuples(vtkIdList* dstIds, vtkIdList* srcIds, vtkAbstractArray* source) override;
83  vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray* source) override;
84  void GetTuples(vtkIdList* tupleIds, vtkAbstractArray* output) override;
85  void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* output) override;
87  double* weights) override;
88  void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx1, vtkAbstractArray* source1,
89  vtkIdType srcTupleIdx2, vtkAbstractArray* source2, double t) override;
90 
96  virtual double* GetTuple(vtkIdType tupleIdx)
97  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples()) = 0;
98 
104  virtual void GetTuple(vtkIdType tupleIdx, double* tuple)
105  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples()) = 0;
106 
108 
113  double GetTuple1(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
114  double* GetTuple2(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
115  VTK_SIZEHINT(2);
116  double* GetTuple3(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
117  VTK_SIZEHINT(3);
118  double* GetTuple4(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
119  VTK_SIZEHINT(4);
120  double* GetTuple6(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
121  VTK_SIZEHINT(6);
122  double* GetTuple9(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
123  VTK_SIZEHINT(9);
125 
126  void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) override;
127 
129 
134  virtual void SetTuple(vtkIdType tupleIdx, const float* tuple)
135  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
136  virtual void SetTuple(vtkIdType tupleIdx, const double* tuple)
137  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
139 
141 
146  void SetTuple1(vtkIdType tupleIdx, double value)
147  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
148  void SetTuple2(vtkIdType tupleIdx, double val0, double val1)
149  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
150  void SetTuple3(vtkIdType tupleIdx, double val0, double val1, double val2)
151  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
152  void SetTuple4(vtkIdType tupleIdx, double val0, double val1, double val2, double val3)
153  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
154  void SetTuple6(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
155  double val4, double val5) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
156  void SetTuple9(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
157  double val4, double val5, double val6, double val7, double val8)
158  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
160 
162 
166  virtual void InsertTuple(vtkIdType tupleIdx, const float* tuple) VTK_EXPECTS(0 <= tupleIdx) = 0;
167  virtual void InsertTuple(vtkIdType tupleIdx, const double* tuple) VTK_EXPECTS(0 <= tupleIdx) = 0;
169 
171 
176  void InsertTuple1(vtkIdType tupleIdx, double value) VTK_EXPECTS(0 <= tupleIdx);
177  void InsertTuple2(vtkIdType tupleIdx, double val0, double val1) VTK_EXPECTS(0 <= tupleIdx);
178  void InsertTuple3(vtkIdType tupleIdx, double val0, double val1, double val2)
179  VTK_EXPECTS(0 <= tupleIdx);
180  void InsertTuple4(vtkIdType tupleIdx, double val0, double val1, double val2, double val3)
181  VTK_EXPECTS(0 <= tupleIdx);
182  void InsertTuple6(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
183  double val4, double val5) VTK_EXPECTS(0 <= tupleIdx);
184  void InsertTuple9(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
185  double val4, double val5, double val6, double val7, double val8) VTK_EXPECTS(0 <= tupleIdx);
187 
189 
194  virtual vtkIdType InsertNextTuple(const float* tuple) = 0;
195  virtual vtkIdType InsertNextTuple(const double* tuple) = 0;
197 
199 
204  void InsertNextTuple1(double value);
205  void InsertNextTuple2(double val0, double val1);
206  void InsertNextTuple3(double val0, double val1, double val2);
207  void InsertNextTuple4(double val0, double val1, double val2, double val3);
208  void InsertNextTuple6(
209  double val0, double val1, double val2, double val3, double val4, double val5);
210  void InsertNextTuple9(double val0, double val1, double val2, double val3, double val4,
211  double val5, double val6, double val7, double val8);
213 
215 
220  virtual void RemoveTuple(vtkIdType tupleIdx)
221  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples()) = 0;
222  virtual void RemoveFirstTuple() { this->RemoveTuple(0); }
223  virtual void RemoveLastTuple();
225 
230  virtual double GetComponent(vtkIdType tupleIdx, int compIdx) VTK_EXPECTS(0 <= tupleIdx &&
231  tupleIdx < GetNumberOfTuples()) VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
232 
240  virtual void SetComponent(vtkIdType tupleIdx, int compIdx, double value)
241  VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
242  VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
243 
248  virtual void InsertComponent(vtkIdType tupleIdx, int compIdx, double value)
249  VTK_EXPECTS(0 <= tupleIdx) VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
250 
259  virtual void GetData(
260  vtkIdType tupleMin, vtkIdType tupleMax, int compMin, int compMax, vtkDoubleArray* data);
261 
263 
267  void DeepCopy(vtkAbstractArray* aa) override;
268  virtual void DeepCopy(vtkDataArray* da);
270 
280  virtual void ShallowCopy(vtkDataArray* other);
281 
288  virtual void FillComponent(int compIdx, double value)
289  VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
290 
294  virtual void Fill(double value);
295 
304  virtual void CopyComponent(int dstComponent, vtkDataArray* src, int srcComponent);
305 
311  virtual void* WriteVoidPointer(vtkIdType valueIdx, vtkIdType numValues) = 0;
312 
321  unsigned long GetActualMemorySize() const override;
322 
327  void CreateDefaultLookupTable();
328 
330 
333  void SetLookupTable(vtkLookupTable* lut);
334  vtkGetObjectMacro(LookupTable, vtkLookupTable);
336 
346  void GetRange(double range[2], int comp) { this->ComputeRange(range, comp); }
347 
349 
357  double* GetRange(int comp) VTK_SIZEHINT(2)
358  {
359  this->GetRange(this->Range, comp);
360  return this->Range;
361  }
363 
371  double* GetRange() VTK_SIZEHINT(2) { return this->GetRange(0); }
372 
381  void GetRange(double range[2]) { this->GetRange(range, 0); }
382 
392  void GetFiniteRange(double range[2], int comp) { this->ComputeFiniteRange(range, comp); }
393 
395 
403  double* GetFiniteRange(int comp) VTK_SIZEHINT(2)
404  {
405  this->GetFiniteRange(this->FiniteRange, comp);
406  return this->FiniteRange;
407  }
409 
417  double* GetFiniteRange() VTK_SIZEHINT(2) { return this->GetFiniteRange(0); }
418 
427  void GetFiniteRange(double range[2]) { this->GetFiniteRange(range, 0); }
428 
430 
435  void GetDataTypeRange(double range[2]);
436  double GetDataTypeMin();
437  double GetDataTypeMax();
438  static void GetDataTypeRange(int type, double range[2]);
439  static double GetDataTypeMin(int type);
440  static double GetDataTypeMax(int type);
442 
447  virtual double GetMaxNorm();
448 
458  static vtkDataArray* CreateDataArray(int dataType);
459 
468 
477 
486 
490  void Modified() override;
491 
496 
504  int CopyInformation(vtkInformation* infoFrom, int deep = 1) override;
505 
509  int GetArrayType() const override { return DataArray; }
510 
511 protected:
512  friend class vtkPoints;
513 
521  virtual void ComputeRange(double range[2], int comp);
522 
530  virtual void ComputeFiniteRange(double range[2], int comp);
531 
538  virtual bool ComputeScalarRange(double* ranges);
539 
544  virtual bool ComputeVectorRange(double range[2]);
545 
552  virtual bool ComputeFiniteScalarRange(double* ranges);
553 
558  virtual bool ComputeFiniteVectorRange(double range[2]);
559 
560  // Construct object with default tuple dimension (number of components) of 1.
562  ~vtkDataArray() override;
563 
565  double Range[2];
566  double FiniteRange[2];
567 
568 private:
569  double* GetTupleN(vtkIdType i, int n);
570 
571 private:
572  vtkDataArray(const vtkDataArray&) = delete;
573  void operator=(const vtkDataArray&) = delete;
574 };
575 
576 //------------------------------------------------------------------------------
578 {
579  if (source)
580  {
581  switch (source->GetArrayType())
582  {
585  case TypedDataArray:
586  case DataArray:
587  case MappedDataArray:
588  return static_cast<vtkDataArray*>(source);
589  default:
590  break;
591  }
592  }
593  return nullptr;
594 }
595 
597 
598 // These are used by vtkDataArrayPrivate.txx, but need to be available to
599 // vtkGenericDataArray.h as well.
601 {
602 struct AllValues
603 {
604 };
606 {
607 };
608 }
609 
610 #endif
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:34
vtk::Range
auto Range(IterablePtr iterable, Options &&... opts) -> typename detail::IterableTraits< typename detail::StripPointers< IterablePtr >::type >::RangeType
Generate an iterable STL proxy object for a VTK container.
Definition: vtkRange.h:85
vtkInformationStringKey
Key for string values in vtkInformation.
Definition: vtkInformationStringKey.h:34
vtkDataArray::LookupTable
vtkLookupTable * LookupTable
Definition: vtkDataArray.h:564
vtkArrayDownCast_FastCastMacro
vtkArrayDownCast_FastCastMacro(vtkDataArray)
vtkDataArray::COMPONENT_RANGE
static vtkInformationDoubleVectorKey * COMPONENT_RANGE()
This key is used to hold tight bounds on the range of one component over all tuples of the array.
vtkDataArray::GetTuples
void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output) override
Get the tuples for the range of tuple ids specified (i.e., p1->p2 inclusive).
vtkDataArray::InsertTuple
void InsertTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source) override
Insert the tuple at srcTupleIdx in the source array into this array at dstTupleIdx.
vtkDataArray::GetElementComponentSize
int GetElementComponentSize() const override
Return the size, in bytes, of the lowest-level element of an array.
Definition: vtkDataArray.h:76
VTK_EXPECTS
#define VTK_EXPECTS(x)
Definition: vtkWrappingHints.h:47
vtkX3D::value
@ value
Definition: vtkX3D.h:226
vtkIossUtilities::GetData
vtkSmartPointer< vtkDataArray > GetData(const Ioss::GroupingEntity *entity, const std::string &fieldname, Ioss::Transform *transform=nullptr, Cache *cache=nullptr, const std::string &cachekey=std::string())
Returns a VTK array for a given field (fieldname) on the chosen block (or set) entity.
vtkX3D::type
@ type
Definition: vtkX3D.h:522
vtkIdType
int vtkIdType
Definition: vtkType.h:332
vtkX3D::data
@ data
Definition: vtkX3D.h:321
vtkDataArray::RemoveLastTuple
virtual void RemoveLastTuple()
These methods remove tuples from the data array.
vtkDataArray::GetFiniteRange
double * GetFiniteRange(int comp)
Return the range of the data array values for the given component.
Definition: vtkDataArray.h:403
vtkDataArray::CopyInformation
int CopyInformation(vtkInformation *infoFrom, int deep=1) override
Copy information instance.
vtkX3D::range
@ range
Definition: vtkX3D.h:244
vtkDataArray::GetComponent
virtual double GetComponent(vtkIdType tupleIdx, int compIdx)
Return the data component at the location specified by tupleIdx and compIdx.
vtkDataArray::GetTuples
void GetTuples(vtkIdList *tupleIds, vtkAbstractArray *output) override
Given a list of tuple ids, return an array of tuples.
vtkAbstractArray::MappedDataArray
@ MappedDataArray
Definition: vtkAbstractArray.h:640
vtkDataArray::GetDataTypeRange
static void GetDataTypeRange(int type, double range[2])
These methods return the Min and Max possible range of the native data type.
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:50
vtkDataArray::InsertTuples
void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source) override
Copy the tuples indexed in srcIds from the source array to the tuple locations indexed by dstIds in t...
vtkAbstractArray.h
vtkDataArray::GetTuple
virtual double * GetTuple(vtkIdType tupleIdx)=0
Get the data tuple at tupleIdx.
vtkDataArray::ComputeFiniteScalarRange
virtual bool ComputeFiniteScalarRange(double *ranges)
Computes the range for each component of an array, the length of ranges must be two times the number ...
vtkDataArray::Modified
void Modified() override
Removes out-of-date L2_NORM_RANGE() and L2_NORM_FINITE_RANGE() values.
vtkDataArrayPrivate::FiniteValues
Definition: vtkDataArray.h:606
vtkAbstractArray::GetNumberOfTuples
vtkIdType GetNumberOfTuples() const
Get the number of complete tuples (a component group) in the array.
Definition: vtkAbstractArray.h:172
vtkDataArray::ComputeVectorRange
virtual bool ComputeVectorRange(double range[2])
Returns true if the range was computed.
vtkDataArray::GetMaxNorm
virtual double GetMaxNorm()
Return the maximum norm for the tuples.
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:48
vtkDataArray::ComputeRange
virtual void ComputeRange(double range[2], int comp)
Compute the range for a specific component.
vtkAbstractArray::AoSDataArrayTemplate
@ AoSDataArrayTemplate
Definition: vtkAbstractArray.h:637
vtkDataArray::GetFiniteRange
void GetFiniteRange(double range[2])
The range of the data array values will be returned in the provided range array argument.
Definition: vtkDataArray.h:427
vtkDataArray::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkDataArray::L2_NORM_RANGE
static vtkInformationDoubleVectorKey * L2_NORM_RANGE()
This key is used to hold tight bounds on the $L_2$ norm of tuples in the array.
vtkDataArray::GetFiniteRange
void GetFiniteRange(double range[2], int comp)
The range of the data array values for the given component will be returned in the provided range arr...
Definition: vtkDataArray.h:392
vtkDataArray::GetRange
void GetRange(double range[2])
The range of the data array values will be returned in the provided range array argument.
Definition: vtkDataArray.h:381
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:34
vtkDataArray::GetDataTypeMax
static double GetDataTypeMax(int type)
These methods return the Min and Max possible range of the native data type.
vtkDataArray::GetTuple2
double * GetTuple2(vtkIdType tupleIdx)
These methods are included as convenience for the wrappers.
vtkDataArray::GetDataTypeRange
void GetDataTypeRange(double range[2])
These methods return the Min and Max possible range of the native data type.
vtkDataArrayPrivate
Definition: vtkDataArray.h:601
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:31
vtkAbstractArray::SoADataArrayTemplate
@ SoADataArrayTemplate
Definition: vtkAbstractArray.h:638
vtkDataArray
#define vtkDataArray
Definition: vtkCharArray.h:33
vtkDataArray::GetRange
double * GetRange(int comp)
Return the range of the data array values for the given component.
Definition: vtkDataArray.h:357
vtkDataArray::GetTuple
virtual void GetTuple(vtkIdType tupleIdx, double *tuple)=0
Get the data tuple at tupleIdx by filling in a user-provided array, Make sure that your array is larg...
vtkDataArray::L2_NORM_FINITE_RANGE
static vtkInformationDoubleVectorKey * L2_NORM_FINITE_RANGE()
This key is used to hold tight bounds on the $L_2$ norm of tuples in the array.
vtkDataArray::vtkDataArray
vtkDataArray()
vtkDataArray::InterpolateTuple
void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdList *ptIndices, vtkAbstractArray *source, double *weights) override
Set the tuple at dstTupleIdx in this array to the interpolated tuple value, given the ptIndices in th...
vtkDataArrayPrivate::AllValues
Definition: vtkDataArray.h:603
vtkDataArray::ComputeFiniteVectorRange
virtual bool ComputeFiniteVectorRange(double range[2])
Returns true if the range was computed.
vtkDataArray::GetDataTypeMin
static double GetDataTypeMin(int type)
These methods return the Min and Max possible range of the native data type.
vtkDataArray::ComputeFiniteRange
virtual void ComputeFiniteRange(double range[2], int comp)
Compute the range for a specific component.
vtkAbstractArray
Abstract superclass for all arrays.
Definition: vtkAbstractArray.h:76
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:74
vtkLookupTable
map scalar values into colors via a lookup table
Definition: vtkLookupTable.h:69
vtkDataArray::GetRange
double * GetRange()
Return the range of the data array.
Definition: vtkDataArray.h:371
vtkDataArray::~vtkDataArray
~vtkDataArray() override
vtkDataArray::GetDataTypeMin
double GetDataTypeMin()
These methods return the Min and Max possible range of the native data type.
vtkDataArray::IsNumeric
int IsNumeric() const override
This method is here to make backward compatibility easier.
Definition: vtkDataArray.h:69
vtkInformationDoubleVectorKey
Key for double vector values.
Definition: vtkInformationDoubleVectorKey.h:32
vtkDataArray::UNITS_LABEL
static vtkInformationStringKey * UNITS_LABEL()
A human-readable string indicating the units for the array data.
vtkAbstractArray::TypedDataArray
@ TypedDataArray
Definition: vtkAbstractArray.h:639
vtkAbstractArray::DataArray
@ DataArray
Definition: vtkAbstractArray.h:636
vtkDataArray::ComputeScalarRange
virtual bool ComputeScalarRange(double *ranges)
Computes the range for each component of an array, the length of ranges must be two times the number ...
vtkDataArray::InsertNextTuple
vtkIdType InsertNextTuple(vtkIdType srcTupleIdx, vtkAbstractArray *source) override
Insert the tuple from srcTupleIdx in the source array at the end of this array.
vtkDataArray::GetArrayType
int GetArrayType() const override
Method for type-checking in FastDownCast implementations.
Definition: vtkDataArray.h:509
vtkAbstractArray::GetDataTypeSize
virtual int GetDataTypeSize() const =0
Return the size of the underlying data type.
vtkDataArray::GetDataTypeMax
double GetDataTypeMax()
These methods return the Min and Max possible range of the native data type.
vtkDoubleArray
dynamic, self-adjusting array of double
Definition: vtkDoubleArray.h:36
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:959
vtkDataArray::FastDownCast
static vtkDataArray * FastDownCast(vtkAbstractArray *source)
Perform a fast, safe cast from a vtkAbstractArray to a vtkDataArray.
Definition: vtkDataArray.h:577
VTK_NEWINSTANCE
#define VTK_NEWINSTANCE
Definition: vtkWrappingHints.h:44
vtkDataArray::CreateDataArray
static vtkDataArray * CreateDataArray(int dataType)
Creates an array for dataType where dataType is one of VTK_BIT, VTK_CHAR, VTK_SIGNED_CHAR,...
vtkDataArray::GetFiniteRange
double * GetFiniteRange()
Return the range of the data array.
Definition: vtkDataArray.h:417
vtkDataArray::GetTuple1
double GetTuple1(vtkIdType tupleIdx)
These methods are included as convenience for the wrappers.
vtkDataArray::InterpolateTuple
void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx1, vtkAbstractArray *source1, vtkIdType srcTupleIdx2, vtkAbstractArray *source2, double t) override
Insert the tuple at dstTupleIdx in this array to the tuple interpolated from the two tuple indices,...
vtkDataArray::InsertTuples
void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source) override
Copy n consecutive tuples starting at srcStart from the source array to this array,...