/*========================================================================= Program: Visualization Toolkit Module: vtkGeoSphereTransform.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. =========================================================================*/ /*------------------------------------------------------------------------- Copyright 2008 Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. -------------------------------------------------------------------------*/ /** * @class vtkGeoSphereTransform * @brief A transformation between long-lat-alt and rect coords * * the cartesian coordinate system is the following (if BaseAltitude is 0), * - the origin is at the center of the earth * - the x axis goes from the origin to (longtitude=-90,latitude=0), intersection of equator and the meridian passing just east of Galapagos Islands * - the y axis goes from the origin to the intersection of Greenwitch meridian and equator (longitude=0,latitude=0) * - the z axis goes from the origin to the Geographic North Pole (latitude=90) * - therefore the frame is right-handed. */ #ifndef vtkGeoSphereTransform_h #define vtkGeoSphereTransform_h #include "vtkGeovisCoreModule.h" // For export macro #include "vtkAbstractTransform.h" class vtkGeoProjection; class VTKGEOVISCORE_EXPORT vtkGeoSphereTransform : public vtkAbstractTransform { public: static vtkGeoSphereTransform* New(); void PrintSelf( ostream& os, vtkIndent indent ) override; vtkTypeMacro(vtkGeoSphereTransform,vtkAbstractTransform); /** * Invert the transformation. */ void Inverse() override; //@{ /** * This will calculate the transformation without calling Update. * Meant for use only within other VTK classes. */ void InternalTransformPoint( const float in[3], float out[3] ) override; void InternalTransformPoint( const double in[3], double out[3] ) override; //@} //@{ /** * This will transform a point and, at the same time, calculate a * 3x3 Jacobian matrix that provides the partial derivatives of the * transformation at that point. This method does not call Update. * Meant for use only within other VTK classes. */ void InternalTransformDerivative( const float in[3], float out[3], float derivative[3][3] ) override; void InternalTransformDerivative( const double in[3], double out[3], double derivative[3][3] ) override; //@} /** * Make another transform of the same type. */ vtkAbstractTransform* MakeTransform() override; //@{ /** * If on, this transform converts (long,lat,alt) triples to (x,y,z) as an offset * from the center of the earth. Alt, x, y, and z are all be in meters. * If off, the transform works in the reverse direction. * Initial value is on. */ vtkSetMacro(ToRectangular, bool); vtkGetMacro(ToRectangular, bool); vtkBooleanMacro(ToRectangular, bool); //@} //@{ /** * The base altitude to transform coordinates to. This can be useful for transforming * lines just above the earth's surface. Default is 0. */ vtkSetMacro(BaseAltitude, double); vtkGetMacro(BaseAltitude, double); //@} protected: vtkGeoSphereTransform(); ~vtkGeoSphereTransform() override; bool ToRectangular; double BaseAltitude; private: vtkGeoSphereTransform( const vtkGeoSphereTransform& ) = delete; void operator = ( const vtkGeoSphereTransform& ) = delete; }; #endif // vtkGeoSphereTransform_h