You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.9 KiB
C
114 lines
3.9 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkImageTransform.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkImageTransform
|
||
|
* @brief helper class to transform output of non-axis-aligned images
|
||
|
*
|
||
|
* vtkImageTransform is a helper class to transform the output of
|
||
|
* image filters (i.e., filter that input vtkImageData) by applying the
|
||
|
* Index to Physical transformation frmo the input image, which can
|
||
|
* include origin, spacing, direction. The transformation process is
|
||
|
* threaded with vtkSMPTools for performance.
|
||
|
*
|
||
|
* Typically in application the single method TransformPointSet() is
|
||
|
* invoked to transform the output of an image algorithm (assuming
|
||
|
* that the image's direction/orientation matrix is
|
||
|
* non-identity). Note that vtkPointSets encompass vtkPolyData as well
|
||
|
* as vtkUnstructuredGrids. In the future other output types may be
|
||
|
* added. Note that specific methods for transforming points, normals,
|
||
|
* and vectors is also provided by this class in case additional
|
||
|
* output data arrays need to be transformed (since
|
||
|
* TransformPointSet() only processes data arrays labeled as points,
|
||
|
* normals, and vectors).
|
||
|
*
|
||
|
* @warning
|
||
|
* This class has been threaded with vtkSMPTools. Using TBB or other
|
||
|
* non-sequential type (set in the CMake variable
|
||
|
* VTK_SMP_IMPLEMENTATION_TYPE) may improve performance significantly.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkImageTransform_h
|
||
|
#define vtkImageTransform_h
|
||
|
|
||
|
#include "vtkCommonDataModelModule.h" // For export macro
|
||
|
#include "vtkObject.h"
|
||
|
|
||
|
class vtkDataArray;
|
||
|
class vtkImageData;
|
||
|
class vtkMatrix3x3;
|
||
|
class vtkMatrix4x4;
|
||
|
class vtkPointSet;
|
||
|
|
||
|
class VTKCOMMONDATAMODEL_EXPORT vtkImageTransform : public vtkObject
|
||
|
{
|
||
|
public:
|
||
|
//@{
|
||
|
/**
|
||
|
* Standard methods for construction, type information, printing.
|
||
|
*/
|
||
|
static vtkImageTransform* New();
|
||
|
vtkTypeMacro(vtkImageTransform, vtkObject);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Given a vtkImageData (and hence its associated orientation
|
||
|
* matrix), and an instance of vtkPointSet, transform its points, as
|
||
|
* well as any normals and vectors, associated with the
|
||
|
* vtkPointSet. This is a convenience function, internally it calls
|
||
|
* TranslatePoints(), TransformPoints(), TransformNormals(), and/or
|
||
|
* TransformVectors() as appropriate. Note that both the normals and
|
||
|
* vectors associated with the point and cell data are transformed.
|
||
|
*/
|
||
|
static void TransformPointSet(vtkImageData* im, vtkPointSet* ps);
|
||
|
|
||
|
/**
|
||
|
* Given x-y-z points represented by a vtkDataArray,
|
||
|
* translate the points using the image origin. This
|
||
|
* method is useful if there is no orientation or
|
||
|
* spacing to apply.
|
||
|
*/
|
||
|
static void TranslatePoints(double* t, vtkDataArray* da);
|
||
|
|
||
|
/**
|
||
|
* Given x-y-z points represented by a vtkDataArray,
|
||
|
* transform the points using the matrix provided.
|
||
|
*/
|
||
|
static void TransformPoints(vtkMatrix4x4* m4, vtkDataArray* da);
|
||
|
|
||
|
/**
|
||
|
* Given three-component normals represented by a vtkDataArray,
|
||
|
* transform the normals using the matrix provided.
|
||
|
*/
|
||
|
static void TransformNormals(vtkMatrix3x3* m3, double spacing[3], vtkDataArray* da);
|
||
|
|
||
|
/**
|
||
|
* Given three-component vectors represented by a vtkDataArray,
|
||
|
* transform the vectors using the matrix provided.
|
||
|
*/
|
||
|
static void TransformVectors(vtkMatrix3x3* m3, double spacing[3], vtkDataArray* da);
|
||
|
|
||
|
protected:
|
||
|
vtkImageTransform() {}
|
||
|
~vtkImageTransform() override {}
|
||
|
|
||
|
private:
|
||
|
vtkImageTransform(const vtkImageTransform&) = delete;
|
||
|
void operator=(const vtkImageTransform&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|