/*========================================================================= Program: Visualization Toolkit Module: vtkAngularPeriodicDataArray.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 vtkAngularPeriodicDataArray * @brief Map native an Array into an angulat * periodic array * * * Map an array into a periodic array. Data from the original array are * rotated (on the fly) by the specified angle along the specified axis * around the specified point. Lookup is not implemented. * Creating the array is virtually free, accessing a tuple require some * computation. */ #ifndef vtkAngularPeriodicDataArray_h #define vtkAngularPeriodicDataArray_h #include "vtkPeriodicDataArray.h" // Parent #define VTK_PERIODIC_ARRAY_AXIS_X 0 #define VTK_PERIODIC_ARRAY_AXIS_Y 1 #define VTK_PERIODIC_ARRAY_AXIS_Z 2 class vtkMatrix3x3; template class vtkAngularPeriodicDataArray : public vtkPeriodicDataArray { public: vtkAbstractTemplateTypeMacro(vtkAngularPeriodicDataArray, vtkPeriodicDataArray); vtkAOSArrayNewInstanceMacro(vtkAngularPeriodicDataArray); static vtkAngularPeriodicDataArray* New(); void PrintSelf(ostream& os, vtkIndent indent) override; /** * Initialize the mapped array with the original input data array. */ void InitializeArray(vtkAOSDataArrayTemplate* inputData); ///@{ /** * Set/Get the rotation angle in degrees. Default is 0. */ void SetAngle(double angle); vtkGetMacro(Angle, double); ///@} ///@{ /** * Set/Get the rotation center. Default is 0,0,0. */ void SetCenter(double* center); vtkGetVector3Macro(Center, double); ///@} ///@{ /** * Set/Get the rotation axis. Default is VTK_PERIODIC_ARRAY_AXIS_X axis. */ void SetAxis(int axis); vtkGetMacro(Axis, int); void SetAxisToX(void) { this->SetAxisType(VTK_PERIODIC_ARRAY_AXIS_X); } void SetAxisToY(void) { this->SetAxisType(VTK_PERIODIC_ARRAY_AXIS_Y); } void SetAxisToZ(void) { this->SetAxisType(VTK_PERIODIC_ARRAY_AXIS_Z); } ///@} protected: vtkAngularPeriodicDataArray(); ~vtkAngularPeriodicDataArray() override; /** * Transform the provided tuple */ void Transform(Scalar* tuple) const override; /** * Update rotation matrix from Axis, Angle and Center */ void UpdateRotationMatrix(); private: vtkAngularPeriodicDataArray(const vtkAngularPeriodicDataArray&) = delete; void operator=(const vtkAngularPeriodicDataArray&) = delete; double Angle; // Rotation angle in degrees double AngleInRadians; // Rotation angle in radians double Center[3]; // Rotation center int Axis; // Rotation Axis vtkMatrix3x3* RotationMatrix; }; #include "vtkAngularPeriodicDataArray.txx" #endif // vtkAngularPeriodicDataArray_h // VTK-HeaderTest-Exclude: vtkAngularPeriodicDataArray.h