VTK  9.7.1
vtkImageData.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
25 #ifndef vtkImageData_h
26 #define vtkImageData_h
27 
28 #include "vtkCartesianGrid.h"
29 #include "vtkCommonDataModelModule.h" // For export macro
30 #include "vtkSmartPointer.h" // For vtkSmartPointer ivars
31 #include "vtkStructuredData.h" // Needed for inline methods
32 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
33 
34 VTK_ABI_NAMESPACE_BEGIN
35 class vtkDataArray;
37 class vtkLine;
38 class vtkMatrix3x3;
39 class vtkMatrix4x4;
40 class vtkPixel;
41 class vtkPoints;
42 class vtkVertex;
43 class vtkVoxel;
44 
45 class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALAUTO vtkImageData : public vtkCartesianGrid
46 {
47 public:
48  static vtkImageData* New();
49  static vtkImageData* ExtendedNew();
50 
52  void PrintSelf(ostream& os, vtkIndent indent) override;
53 
57  int GetDataObjectType() VTK_FUTURE_CONST override { return VTK_IMAGE_DATA; }
58 
60 
63  void ShallowCopy(vtkDataObject* src) override;
64  void DeepCopy(vtkDataObject* src) override;
66 
71  void CopyStructure(vtkDataSet* ds) override;
72 
74  using Superclass::GetCell;
75 
77 
80  void GetCell(vtkIdType cellId, vtkGenericCell* cell) override;
81  void GetCellBounds(vtkIdType cellId, double bounds[6]) override;
83  vtkIdType FindPoint(double x[3]) override;
84  vtkIdType FindCell(double x[3], vtkCell* cell, vtkGenericCell* genCell, vtkIdType cellId,
85  double tol2, int& subId, double pcoords[3], double* weights) override;
86  void ComputeBounds() override;
88 
90 
97  int ComputeStructuredCoordinates(const double x[3], int ijk[3], double pcoords[3]) override;
98  virtual int ComputeStructuredCoordinates(
99  const double x[3], int ijk[3], double pcoords[3], double tol2);
101 
106  vtkIdType ComputePointId(int ijk[3]) override;
107 
112  vtkIdType ComputeCellId(int ijk[3]) override;
113 
123  virtual void GetVoxelGradient(int i, int j, int k, vtkDataArray* s, vtkDataArray* g);
124 
131  virtual void GetPointGradient(int i, int j, int k, vtkDataArray* s, double g[3]);
132 
134 
137  virtual void SetAxisUpdateExtent(
138  int axis, int min, int max, const int updateExtent[6], int axisUpdateExtent[6]);
139  virtual void GetAxisUpdateExtent(int axis, int& min, int& max, const int updateExtent[6]);
141 
143 
147  virtual double GetScalarTypeMin(vtkInformation* meta_data);
148  virtual double GetScalarTypeMin();
149  virtual double GetScalarTypeMax(vtkInformation* meta_data);
150  virtual double GetScalarTypeMax();
152 
154 
157  virtual int GetScalarSize(vtkInformation* meta_data);
158  virtual int GetScalarSize();
160 
162 
173  virtual vtkIdType* GetIncrements() VTK_SIZEHINT(3);
174  virtual void GetIncrements(vtkIdType& incX, vtkIdType& incY, vtkIdType& incZ);
175  virtual void GetIncrements(vtkIdType inc[3]);
176  virtual vtkIdType* GetIncrements(vtkDataArray* scalars) VTK_SIZEHINT(3);
177  virtual void GetIncrements(
178  vtkDataArray* scalars, vtkIdType& incX, vtkIdType& incY, vtkIdType& incZ);
179  virtual void GetIncrements(vtkDataArray* scalars, vtkIdType inc[3]);
181 
183 
196  virtual void GetContinuousIncrements(
197  VTK_FUTURE_CONST int extent[6], vtkIdType& incX, vtkIdType& incY, vtkIdType& incZ);
198  virtual void GetContinuousIncrements(vtkDataArray* scalars, VTK_FUTURE_CONST int extent[6],
199  vtkIdType& incX, vtkIdType& incY, vtkIdType& incZ);
201 
203 
206  virtual void* GetScalarPointerForExtent(VTK_FUTURE_CONST int extent[6]);
207  virtual void* GetScalarPointer(int coordinates[3]);
208  virtual void* GetScalarPointer(int x, int y, int z);
209  virtual void* GetScalarPointer();
211 
213 
216  virtual vtkIdType GetScalarIndexForExtent(int extent[6]);
217  virtual vtkIdType GetScalarIndex(int coordinates[3]);
218  virtual vtkIdType GetScalarIndex(int x, int y, int z);
220 
222 
225  virtual float GetScalarComponentAsFloat(int x, int y, int z, int component);
226  virtual void SetScalarComponentFromFloat(int x, int y, int z, int component, float v);
227  virtual double GetScalarComponentAsDouble(int x, int y, int z, int component);
228  virtual void SetScalarComponentFromDouble(int x, int y, int z, int component, double v);
230 
236  virtual void AllocateScalars(int dataType, int numComponents);
237 
244  virtual void AllocateScalars(vtkInformation* pipeline_info);
245 
247 
253  virtual void CopyAndCastFrom(vtkImageData* inData, VTK_FUTURE_CONST int extent[6]);
254  virtual void CopyAndCastFrom(vtkImageData* inData, int x0, int x1, int y0, int y1, int z0, int z1)
255  {
256  int e[6];
257  e[0] = x0;
258  e[1] = x1;
259  e[2] = y0;
260  e[3] = y1;
261  e[4] = z0;
262  e[5] = z1;
263  this->CopyAndCastFrom(inData, e);
264  }
266 
272  void Crop(const int updateExtent[6]) override;
273 
282  unsigned long GetActualMemorySize() override;
283 
285 
289  vtkGetVector3Macro(Spacing, double);
290  virtual void SetSpacing(double i, double j, double k);
291  virtual void SetSpacing(const double ijk[3]);
293 
295 
303  vtkGetVector3Macro(Origin, double);
304  virtual void SetOrigin(double i, double j, double k);
305  virtual void SetOrigin(const double ijk[3]);
307 
309 
313  vtkGetObjectMacro(DirectionMatrix, vtkMatrix3x3);
314  virtual void SetDirectionMatrix(vtkMatrix3x3* m);
315  virtual void SetDirectionMatrix(const double elements[9]);
316  virtual void SetDirectionMatrix(double e00, double e01, double e02, double e10, double e11,
317  double e12, double e20, double e21, double e22);
319 
321 
325  vtkGetObjectMacro(IndexToPhysicalMatrix, vtkMatrix4x4);
327 
329 
338  void ApplyIndexToPhysicalMatrix(vtkMatrix4x4* source);
340 
342 
345  virtual void TransformContinuousIndexToPhysicalPoint(double i, double j, double k, double xyz[3]);
346  virtual void TransformContinuousIndexToPhysicalPoint(const double ijk[3], double xyz[3]);
347  virtual void TransformIndexToPhysicalPoint(int i, int j, int k, double xyz[3]);
348  virtual void TransformIndexToPhysicalPoint(const int ijk[3], double xyz[3]);
349  static void TransformContinuousIndexToPhysicalPoint(double i, double j, double k,
350  double const origin[3], double const spacing[3], double const direction[9], double xyz[3]);
352 
354 
358  vtkGetObjectMacro(PhysicalToIndexMatrix, vtkMatrix4x4);
360 
362 
371  void ApplyPhysicalToIndexMatrix(vtkMatrix4x4* source);
373 
375 
378  virtual void TransformPhysicalPointToContinuousIndex(double x, double y, double z, double ijk[3]);
379  virtual void TransformPhysicalPointToContinuousIndex(const double xyz[3], double ijk[3]);
381 
383 
386  virtual void TransformPhysicalNormalToContinuousIndex(const double xyz[3], double ijk[3]);
388 
393  virtual void TransformPhysicalPlaneToContinuousIndex(double const pplane[4], double iplane[4]);
394 
396 
399  static void ComputeIndexToPhysicalMatrix(
400  double const origin[3], double const spacing[3], double const direction[9], double result[16]);
401 
403 
406  static void ComputePhysicalToIndexMatrix(
407  double const origin[3], double const spacing[3], double const direction[9], double result[16]);
409 
414  void CopyInformationFromPipeline(vtkInformation* information) override;
415 
421  void CopyInformationToPipeline(vtkInformation* information) override;
422 
428  void PrepareForNewData() override;
429 
430  //--------------------------------------------------------------------------
431  // Methods that apply to any array (not just scalars).
432  // I am starting to experiment with generalizing imaging filters
433  // to operate on more than just scalars.
434 
436 
441  void* GetArrayPointerForExtent(vtkDataArray* array, VTK_FUTURE_CONST int extent[6]);
442  void* GetArrayPointer(vtkDataArray* array, VTK_FUTURE_CONST int coordinates[3]);
443  void* GetArrayPointer(vtkDataArray* array, int x, int y, int z);
445 
450  void GetArrayIncrements(vtkDataArray* array, vtkIdType increments[3]);
451 
458  void ComputeInternalExtent(int* intExt, int* tgtExt, int* bnds);
459 
461 
465  static vtkImageData* GetData(vtkInformationVector* v, int i = 0);
467 
468 protected:
469  vtkImageData();
470  ~vtkImageData() override;
471 
472  vtkIdType Increments[3];
473 
474  // Variables used to define dataset physical orientation
475  double Origin[3];
476  double Spacing[3];
480 
481  // The first method assumes Active Scalars
482  void ComputeIncrements();
483  // This one is given the number of components of the
484  // scalar field explicitly
485  void ComputeIncrements(int numberOfComponents);
486  void ComputeIncrements(vtkDataArray* scalars);
487 
488  // The first method assumes Active Scalars
489  void ComputeIncrements(vtkIdType inc[3]);
490  // This one is given the number of components of the
491  // scalar field explicitly
492  void ComputeIncrements(int numberOfComponents, vtkIdType inc[3]);
493  void ComputeIncrements(vtkDataArray* scalars, vtkIdType inc[3]);
494 
495  // for the index to physical methods
496  void ComputeTransforms();
497 
498  void BuildPoints() override;
499 
503  void ComputeScalarRange() override;
504 
505 private:
506  void InternalImageDataCopy(vtkImageData* src);
507 
508  friend class vtkUniformGrid;
509 
510  bool DirectionMatrixIsIdentity;
511 
512  vtkImageData(const vtkImageData&) = delete;
513  void operator=(const vtkImageData&) = delete;
514 };
515 
516 //----------------------------------------------------------------------------
518 {
519  this->ComputeIncrements(this->Increments);
520 }
521 
522 //----------------------------------------------------------------------------
523 inline void vtkImageData::ComputeIncrements(int numberOfComponents)
524 {
525  this->ComputeIncrements(numberOfComponents, this->Increments);
526 }
527 
528 //----------------------------------------------------------------------------
530 {
531  this->ComputeIncrements(scalars, this->Increments);
532 }
533 
534 //----------------------------------------------------------------------------
536 {
538 }
539 
540 //----------------------------------------------------------------------------
542 {
544 }
545 
546 VTK_ABI_NAMESPACE_END
547 #endif
vtkIdType ComputePointId(int ijk[3]) override
Given a location in structured coordinates (i-j-k), return the point id.
Definition: vtkImageData.h:535
vtkMatrix3x3 * DirectionMatrix
Definition: vtkImageData.h:477
int GetDataObjectType() VTK_FUTURE_CONST override
Return what type of dataset this is.
Definition: vtkImageData.h:57
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:31
static vtkDataObject * New()
static vtkIdType ComputeCellIdForExtent(const int extent[6], const int ijk[3], int dataDescription=vtkStructuredData::VTK_STRUCTURED_EMPTY)
Given a location in structured coordinates (i-j-k), and the extent of the structured dataset...
virtual void ComputeScalarRange()
Compute the range of the scalars and cache it into ScalarRange only if the cache became invalid (Scal...
Store vtkAlgorithm input/output information.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
a cell that represents a 3D point
Definition: vtkVertex.h:22
a cell that represents an orthogonal quadrilateral
Definition: vtkPixel.h:26
implicit object to represent cell connectivity
vtkMatrix4x4 * PhysicalToIndexMatrix
Definition: vtkImageData.h:479
virtual void CopyInformationFromPipeline(vtkInformation *info)
Copy from the pipeline information to the data object's own information.
virtual void ComputeBounds()
Compute the data bounding box from data points.
virtual void PrepareForNewData()
make the output data ready for new data to be inserted.
static vtkCartesianGrid * GetData(vtkInformation *info)
Retrieve an instance of this class from an information object.
vtkMatrix4x4 * IndexToPhysicalMatrix
Definition: vtkImageData.h:478
int vtkIdType
Definition: vtkType.h:363
provides thread-safe access to cells
void CopyStructure(vtkDataSet *ds) override
Standard vtkObject API methods.
cell represents a 1D line
Definition: vtkLine.h:22
abstract class to specify cell behavior
Definition: vtkCell.h:50
a cell that represents a 3D orthogonal parallelepiped
Definition: vtkVoxel.h:30
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
a simple class to control print indentation
Definition: vtkIndent.h:28
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
vtkIdType ComputeCellId(int ijk[3]) override
Given a location in structured coordinates (i-j-k), return the cell id.
Definition: vtkImageData.h:541
virtual vtkIdType FindCell(double x[3], vtkCell *cell, vtkIdType cellId, double tol2, int &subId, double pcoords[3], double *weights)
Locate cell based on global coordinate x and tolerance squared.
#define VTK_SIZEHINT(...)
virtual int * GetExtent()
Set/Get the extent.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkCell * GetCell(vtkIdType cellId) override
Standard vtkDataSet API methods.
void DeepCopy(vtkDataObject *src) override
Standard vtkObject API methods.
vtkIdType Increments[3]
Definition: vtkImageData.h:472
Deprecated vtkImageData.
vtkIdType FindCell(double x[3], vtkCell *cell, vtkIdType cellId, double tol2, int &subId, double pcoords[3], double *weights) override
Standard vtkDataSet API methods.
void ComputeIncrements()
Definition: vtkImageData.h:517
void PrintSelf(ostream &os, vtkIndent indent) override
Standard vtkObject API methods.
virtual void CopyInformationToPipeline(vtkInformation *info)
Copy information from this data object to the pipeline information.
static vtkIdType ComputePointIdForExtent(const int extent[6], const int ijk[3], int dataDescription=vtkStructuredData::VTK_STRUCTURED_EMPTY)
Given a location in structured coordinates (i-j-k), and the extent of the structured dataset...
Store zero or more vtkInformation instances.
#define VTK_MARSHALAUTO
Abstract API for vtkImageData and vtkRectilinearGrid.
virtual void Crop(const int updateExtent[6])
This method crops the data object (if necessary) so that the extent matches the update extent...
virtual vtkIdType ComputePointId(int ijk[3])=0
Given a location in structured coordinates (i-j-k), return the point id.
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:26
virtual vtkIdType ComputeCellId(int ijk[3])=0
Given a location in structured coordinates (i-j-k), return the cell id.
general representation of visualization data
Definition: vtkDataObject.h:55
virtual void BuildPoints()=0
Pure abstract method responsible to build and set internal points.
vtkIdType FindPoint(double x, double y, double z)
Locate the closest point to the global coordinate x.
Definition: vtkDataSet.h:248
virtual vtkCell * GetCell(vtkIdType cellId)=0
Get cell with cellId such that: 0 <= cellId < NumberOfCells.
#define max(a, b)
represent and manipulate 3D points
Definition: vtkPoints.h:30
virtual int ComputeStructuredCoordinates(const double x[3], int ijk[3], double pcoords[3])=0
Computes the structured coordinates for a point x[3].
virtual void GetCellBounds(vtkIdType cellId, double bounds[6])
Get the bounds of the cell with cellId such that: 0 <= cellId < NumberOfCells.
void ShallowCopy(vtkDataObject *src) override
Standard vtkObject API methods.