VTK  9.3.20240521
vtkDataArray.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
138#ifndef vtkDataArray_h
139#define vtkDataArray_h
140
141#include "vtkAbstractArray.h"
142#include "vtkCommonCoreModule.h" // For export macro
143#include "vtkVTK_USE_SCALED_SOA_ARRAYS.h" // For #define of VTK_USE_SCALED_SOA_ARRAYS
144#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
145
146VTK_ABI_NAMESPACE_BEGIN
147class vtkDoubleArray;
148class vtkIdList;
151class vtkLookupTable;
152class vtkPoints;
153
154class VTKCOMMONCORE_EXPORT VTK_MARSHALMANUAL vtkDataArray : public vtkAbstractArray
155{
156public:
158 void PrintSelf(ostream& os, vtkIndent indent) override;
159
166 static vtkDataArray* FastDownCast(vtkAbstractArray* source);
167
174 int IsNumeric() const override { return 1; }
175
181 int GetElementComponentSize() const override { return this->GetDataTypeSize(); }
182
183 // Reimplemented virtuals (doc strings are inherited from superclass):
185
190 void InsertTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) override;
192 void InsertTuples(vtkIdList* dstIds, vtkIdList* srcIds, vtkAbstractArray* source) override;
194 vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray* source) override;
196 vtkIdType dstStart, vtkIdList* srcIds, vtkAbstractArray* source) override;
197 void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) override;
199 void GetTuples(vtkIdList* tupleIds, vtkAbstractArray* output) override;
200 void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* output) override;
202 double* weights) override;
203 void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx1, vtkAbstractArray* source1,
204 vtkIdType srcTupleIdx2, vtkAbstractArray* source2, double t) override;
205
211 virtual double* GetTuple(vtkIdType tupleIdx)
212 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples()) = 0;
213
219 virtual void GetTuple(vtkIdType tupleIdx, double* tuple)
220 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples()) = 0;
221
223
228 double GetTuple1(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
229 double* GetTuple2(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
230 VTK_SIZEHINT(2);
231 double* GetTuple3(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
232 VTK_SIZEHINT(3);
233 double* GetTuple4(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
234 VTK_SIZEHINT(4);
235 double* GetTuple6(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
236 VTK_SIZEHINT(6);
237 double* GetTuple9(vtkIdType tupleIdx) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
238 VTK_SIZEHINT(9);
240
242
247 virtual void SetTuple(vtkIdType tupleIdx, const float* tuple)
248 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
249 virtual void SetTuple(vtkIdType tupleIdx, const double* tuple)
250 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
252
254
259 void SetTuple1(vtkIdType tupleIdx, double value)
260 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
261 void SetTuple2(vtkIdType tupleIdx, double val0, double val1)
262 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
263 void SetTuple3(vtkIdType tupleIdx, double val0, double val1, double val2)
264 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
265 void SetTuple4(vtkIdType tupleIdx, double val0, double val1, double val2, double val3)
266 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
267 void SetTuple6(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
268 double val4, double val5) VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
269 void SetTuple9(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
270 double val4, double val5, double val6, double val7, double val8)
271 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples());
273
275
279 virtual void InsertTuple(vtkIdType tupleIdx, const float* tuple) VTK_EXPECTS(0 <= tupleIdx) = 0;
280 virtual void InsertTuple(vtkIdType tupleIdx, const double* tuple) VTK_EXPECTS(0 <= tupleIdx) = 0;
282
284
289 void InsertTuple1(vtkIdType tupleIdx, double value) VTK_EXPECTS(0 <= tupleIdx);
290 void InsertTuple2(vtkIdType tupleIdx, double val0, double val1) VTK_EXPECTS(0 <= tupleIdx);
291 void InsertTuple3(vtkIdType tupleIdx, double val0, double val1, double val2)
292 VTK_EXPECTS(0 <= tupleIdx);
293 void InsertTuple4(vtkIdType tupleIdx, double val0, double val1, double val2, double val3)
294 VTK_EXPECTS(0 <= tupleIdx);
295 void InsertTuple6(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
296 double val4, double val5) VTK_EXPECTS(0 <= tupleIdx);
297 void InsertTuple9(vtkIdType tupleIdx, double val0, double val1, double val2, double val3,
298 double val4, double val5, double val6, double val7, double val8) VTK_EXPECTS(0 <= tupleIdx);
300
302
307 virtual vtkIdType InsertNextTuple(const float* tuple) = 0;
308 virtual vtkIdType InsertNextTuple(const double* tuple) = 0;
310
312
317 void InsertNextTuple1(double value);
318 void InsertNextTuple2(double val0, double val1);
319 void InsertNextTuple3(double val0, double val1, double val2);
320 void InsertNextTuple4(double val0, double val1, double val2, double val3);
321 void InsertNextTuple6(
322 double val0, double val1, double val2, double val3, double val4, double val5);
323 void InsertNextTuple9(double val0, double val1, double val2, double val3, double val4,
324 double val5, double val6, double val7, double val8);
326
328
333 virtual void RemoveTuple(vtkIdType tupleIdx)
334 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples()) = 0;
335 virtual void RemoveFirstTuple() { this->RemoveTuple(0); }
336 virtual void RemoveLastTuple();
338
343 virtual double GetComponent(vtkIdType tupleIdx, int compIdx) VTK_EXPECTS(0 <= tupleIdx &&
344 tupleIdx < GetNumberOfTuples()) VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
345
353 virtual void SetComponent(vtkIdType tupleIdx, int compIdx, double value)
354 VTK_EXPECTS(0 <= tupleIdx && tupleIdx < GetNumberOfTuples())
355 VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
356
361 virtual void InsertComponent(vtkIdType tupleIdx, int compIdx, double value)
362 VTK_EXPECTS(0 <= tupleIdx) VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
363
372 virtual void GetData(
373 vtkIdType tupleMin, vtkIdType tupleMax, int compMin, int compMax, vtkDoubleArray* data);
374
376
380 void DeepCopy(vtkAbstractArray* aa) override;
381 virtual void DeepCopy(vtkDataArray* da);
383
393 virtual void ShallowCopy(vtkDataArray* other);
394
401 virtual void FillComponent(int compIdx, double value)
402 VTK_EXPECTS(0 <= compIdx && compIdx < GetNumberOfComponents());
403
407 virtual void Fill(double value);
408
417 virtual void CopyComponent(int dstComponent, vtkDataArray* src, int srcComponent);
418
424 virtual void* WriteVoidPointer(vtkIdType valueIdx, vtkIdType numValues) = 0;
425
434 unsigned long GetActualMemorySize() const override;
435
440 void CreateDefaultLookupTable();
441
443
446 void SetLookupTable(vtkLookupTable* lut);
447 vtkGetObjectMacro(LookupTable, vtkLookupTable);
449
451
468 void GetRange(double range[2], int comp) { this->ComputeRange(range, comp); }
469 void GetRange(double range[2], int comp, const unsigned char* ghosts, unsigned char ghostsToSkip)
470 {
471 this->ComputeRange(range, comp, ghosts, ghostsToSkip);
472 }
474
476
484 double* GetRange(int comp) VTK_SIZEHINT(2)
485 {
486 this->GetRange(this->Range, comp);
487 return this->Range;
488 }
490
498 double* GetRange() VTK_SIZEHINT(2) { return this->GetRange(0); }
499
508 void GetRange(double range[2]) { this->GetRange(range, 0); }
509
511
529 void GetFiniteRange(double range[2], int comp) { this->ComputeFiniteRange(range, comp); }
531 double range[2], int comp, const unsigned char* ghosts, unsigned char ghostsToSkip)
532 {
533 this->ComputeFiniteRange(range, comp, ghosts, ghostsToSkip);
534 }
536
538
546 double* GetFiniteRange(int comp) VTK_SIZEHINT(2)
547 {
548 this->GetFiniteRange(this->FiniteRange, comp);
549 return this->FiniteRange;
550 }
552
560 double* GetFiniteRange() VTK_SIZEHINT(2) { return this->GetFiniteRange(0); }
561
570 void GetFiniteRange(double range[2]) { this->GetFiniteRange(range, 0); }
571
573
578 void GetDataTypeRange(double range[2]);
581 static void GetDataTypeRange(int type, double range[2]);
582 static double GetDataTypeMin(int type);
583 static double GetDataTypeMax(int type);
585
590 virtual double GetMaxNorm();
591
601 static vtkDataArray* CreateDataArray(int dataType);
602
611
620
629
633 void Modified() override;
634
639
647 int CopyInformation(vtkInformation* infoFrom, vtkTypeBool deep = 1) override;
648
652 int GetArrayType() const override { return DataArray; }
653
654protected:
655 friend class vtkPoints;
656 friend class vtkFieldData;
657
659
675 virtual void ComputeRange(double range[2], int comp);
676 virtual void ComputeRange(
677 double range[2], int comp, const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff);
679
681
697 virtual void ComputeFiniteRange(double range[2], int comp);
698 virtual void ComputeFiniteRange(
699 double range[2], int comp, const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff);
701
703
718 virtual bool ComputeScalarRange(double* ranges);
719 virtual bool ComputeScalarRange(
720 double* ranges, const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff);
722
724
736 virtual bool ComputeVectorRange(double range[2]);
737 virtual bool ComputeVectorRange(
738 double range[2], const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff);
740
742
756 virtual bool ComputeFiniteScalarRange(double* ranges);
758 double* ranges, const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff);
760
762
774 virtual bool ComputeFiniteVectorRange(double range[2]);
776 double range[2], const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff);
778
779 // Construct object with default tuple dimension (number of components) of 1.
781 ~vtkDataArray() override;
782
784 double Range[2];
785 double FiniteRange[2];
786
787private:
788 double* GetTupleN(vtkIdType i, int n);
789
790 vtkDataArray(const vtkDataArray&) = delete;
791 void operator=(const vtkDataArray&) = delete;
792};
793
794//------------------------------------------------------------------------------
796{
797 if (source)
798 {
799 switch (source->GetArrayType())
800 {
803 case ImplicitArray:
804 case TypedDataArray:
805 case DataArray:
806 case MappedDataArray:
807 return static_cast<vtkDataArray*>(source);
808 default:
809 break;
810 }
811 }
812 return nullptr;
813}
814
816VTK_ABI_NAMESPACE_END
817
818// These are used by vtkDataArrayPrivate.txx, but need to be available to
819// vtkGenericDataArray.h as well.
821{
822VTK_ABI_NAMESPACE_BEGIN
824{
825};
827{
828};
829VTK_ABI_NAMESPACE_END
830}
831
832#endif
Abstract superclass for all arrays.
vtkIdType GetNumberOfTuples() const
Get the number of complete tuples (a component group) in the array.
virtual int GetDataTypeSize() const =0
Return the size of the underlying data type.
abstract superclass for arrays of numeric data
virtual double * GetTuple(vtkIdType tupleIdx)=0
Get the data tuple at tupleIdx.
double * GetRange()
Return the range of the data array.
virtual void ComputeRange(double range[2], int comp, const unsigned char *ghosts, unsigned char ghostsToSkip=0xff)
Compute the range for a specific component.
static double GetDataTypeMin(int type)
These methods return the Min and Max possible range of the native data type.
double * GetTuple2(vtkIdType tupleIdx)
These methods are included as convenience for the wrappers.
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...
virtual bool ComputeScalarRange(double *ranges, const unsigned char *ghosts, unsigned char ghostsToSkip=0xff)
Computes the range for each component of an array, the length of ranges must be two times the number ...
virtual bool ComputeVectorRange(double range[2])
Returns true if the range was computed.
int IsNumeric() const override
This method is here to make backward compatibility easier.
void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source) override
See documentation from parent class.
void GetDataTypeRange(double range[2])
These methods return the Min and Max possible range of the native data type.
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,...
virtual void ComputeRange(double range[2], int comp)
Compute the range for a specific component.
double * GetFiniteRange()
Return the range of the data array.
virtual bool ComputeScalarRange(double *ranges)
Computes the range for each component of an array, the length of ranges must be two times the number ...
void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source) override
See documentation from parent class.
virtual bool ComputeFiniteVectorRange(double range[2], const unsigned char *ghosts, unsigned char ghostsToSkip=0xff)
Returns true if the range was computed.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual bool ComputeVectorRange(double range[2], const unsigned char *ghosts, unsigned char ghostsToSkip=0xff)
Returns true if the range was computed.
~vtkDataArray() override
int GetArrayType() const override
Method for type-checking in FastDownCast implementations.
int GetElementComponentSize() const override
Return the size, in bytes, of the lowest-level element of an array.
virtual bool ComputeFiniteVectorRange(double range[2])
Returns true if the range was computed.
static vtkInformationDoubleVectorKey * COMPONENT_RANGE()
This key is used to hold tight bounds on the range of one component over all tuples of the array.
virtual void RemoveLastTuple()
These methods remove tuples from the data array.
double * GetRange(int comp)
Return the range of the data array values for the given component.
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...
void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output) override
Get the tuples for the range of tuple ids specified (i.e., p1->p2 inclusive).
static vtkInformationDoubleVectorKey * L2_NORM_RANGE()
This key is used to hold tight bounds on the $L_2$ norm of tuples in the array.
double GetDataTypeMin()
These methods return the Min and Max possible range of the native data type.
void InsertTuplesStartingAt(vtkIdType dstStart, vtkIdList *srcIds, vtkAbstractArray *source) override
See documentation from parent class.
void GetTuples(vtkIdList *tupleIds, vtkAbstractArray *output) override
Given a list of tuple ids, return an array of tuples.
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...
double GetTuple1(vtkIdType tupleIdx)
These methods are included as convenience for the wrappers.
static vtkInformationDoubleVectorKey * L2_NORM_FINITE_RANGE()
This key is used to hold tight bounds on the $L_2$ norm of tuples in the array.
double GetDataTypeMax()
These methods return the Min and Max possible range of the native data type.
void GetRange(double range[2])
The range of the data array values will be returned in the provided range array argument.
static vtkDataArray * FastDownCast(vtkAbstractArray *source)
Perform a fast, safe cast from a vtkAbstractArray to a vtkDataArray.
virtual double GetComponent(vtkIdType tupleIdx, int compIdx)
Return the data component at the location specified by tupleIdx and compIdx.
int CopyInformation(vtkInformation *infoFrom, vtkTypeBool deep=1) override
Copy information instance.
vtkIdType InsertNextTuple(vtkIdType srcTupleIdx, vtkAbstractArray *source) override
See documentation from parent class.
virtual void ComputeFiniteRange(double range[2], int comp)
Compute the range for a specific component.
virtual double GetMaxNorm()
Return the maximum norm for the tuples.
void InsertTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source) override
See documentation from parent class.
void GetRange(double range[2], int comp, const unsigned char *ghosts, unsigned char ghostsToSkip)
The range of the data array values for the given component will be returned in the provided range arr...
static void GetDataTypeRange(int type, double range[2])
These methods return the Min and Max possible range of the native data type.
virtual bool ComputeFiniteScalarRange(double *ranges, const unsigned char *ghosts, unsigned char ghostsToSkip=0xff)
Computes the range for each component of an array, the length of ranges must be two times the number ...
virtual void ComputeFiniteRange(double range[2], int comp, const unsigned char *ghosts, unsigned char ghostsToSkip=0xff)
Compute the range for a specific component.
static vtkDataArray * CreateDataArray(int dataType)
Creates an array for dataType where dataType is one of VTK_BIT, VTK_CHAR, VTK_SIGNED_CHAR,...
void GetFiniteRange(double range[2], int comp, const unsigned char *ghosts, unsigned char ghostsToSkip)
The range of the data array values for the given component will be returned in the provided range arr...
void GetFiniteRange(double range[2])
The range of the data array values will be returned in the provided range array argument.
double * GetFiniteRange(int comp)
Return the range of the data array values for the given component.
void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source) override
See documentation from parent class.
static vtkInformationStringKey * UNITS_LABEL()
A human-readable string indicating the units for the array data.
virtual bool ComputeFiniteScalarRange(double *ranges)
Computes the range for each component of an array, the length of ranges must be two times the number ...
void Modified() override
Removes out-of-date L2_NORM_RANGE() and L2_NORM_FINITE_RANGE() values.
static double GetDataTypeMax(int type)
These methods return the Min and Max possible range of the native data type.
vtkLookupTable * LookupTable
dynamic, self-adjusting array of double
represent and manipulate fields of data
list of point or cell ids
Definition vtkIdList.h:133
a simple class to control print indentation
Definition vtkIndent.h:108
Key for string values in vtkInformation.
Store vtkAlgorithm input/output information.
map scalar values into colors via a lookup table
represent and manipulate 3D points
Definition vtkPoints.h:139
int vtkTypeBool
Definition vtkABI.h:64
#define vtkArrayDownCast_FastCastMacro(ArrayT)
This macro is used to tell vtkArrayDownCast to use FastDownCast instead of SafeDownCast.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define vtkDataArray
int vtkIdType
Definition vtkType.h:315
#define VTK_SIZEHINT(...)
#define VTK_EXPECTS(x)
#define VTK_MARSHALMANUAL
#define VTK_NEWINSTANCE