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.
nmWTAI-Platform/3rd/VTK7.1/include/vtkGlobeSource.h

185 lines
5.2 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkGlobeSource.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 vtkGlobeSource
* @brief Sphere patch with Lat/Long scalar array.
*
* vtkGlobeSource will generate any "rectangular" patch of the globe
* given its Longitude-Latitude extent. It adds two point scalar arrays
* Longitude and Latitude to the output. These arrays can be transformed
* to generate texture coordinates for any texture map. This source is
* imperfect near the poles as implmented. It should really reduce the
* longitude resolution as the triangles become slivers.
*
* \image html vtkGlobeSourceSphericalToCartesianFigure.png
* \image latex vtkGlobeSourceSphericalToCartesianFigure.eps
*/
#ifndef vtkGlobeSource_h
#define vtkGlobeSource_h
#include "vtkGeovisCoreModule.h" // For export macro
#include "vtkPolyDataAlgorithm.h"
class vtkCellArray;
class vtkFloatArray;
class VTKGEOVISCORE_EXPORT vtkGlobeSource : public vtkPolyDataAlgorithm
{
public:
vtkTypeMacro(vtkGlobeSource,vtkPolyDataAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
//@{
/**
* This world point will be shifted to 0,0,0.
* Used to avoid picking bug caused by rendering errors with large offsets.
*/
vtkSetVector3Macro(Origin, double);
//@}
//@{
/**
* Longitude Latitude clamps.
*/
vtkSetClampMacro(StartLongitude,double,-180.0,180.0);
vtkSetClampMacro(EndLongitude,double,-180.0,180.0);
vtkSetClampMacro(StartLatitude,double,-90.0,90.0);
vtkSetClampMacro(EndLatitude,double,-90.0,90.0);
//@}
//@{
/**
* Set the number of points in the longitude direction (ranging from
* StartLongitude to EndLongitude).
*/
vtkSetClampMacro(LongitudeResolution,int,3,100);
vtkGetMacro(LongitudeResolution,int);
//@}
//@{
/**
* Set the number of points in the latitude direction (ranging
* from StartLatitude to EndLatitude).
*/
vtkSetClampMacro(LatitudeResolution,int,3,100);
vtkGetMacro(LatitudeResolution,int);
//@}
//@{
/**
* Set radius of sphere. Default is 6356750.0
*/
vtkSetClampMacro(Radius,double,0.0,VTK_DOUBLE_MAX);
vtkGetMacro(Radius,double);
//@}
//@{
vtkSetMacro(AutoCalculateCurtainHeight, bool);
vtkGetMacro(AutoCalculateCurtainHeight, bool);
vtkBooleanMacro(AutoCalculateCurtainHeight, bool);
//@}
//@{
/**
* Set/Get curtain height.
*/
vtkSetClampMacro(CurtainHeight,double,0.0,VTK_DOUBLE_MAX);
vtkGetMacro(CurtainHeight,double);
//@}
//@{
/**
* Cause the sphere to be tessellated with edges along the latitude
* and longitude lines. If off, triangles are generated at non-polar
* regions, which results in edges that are not parallel to latitude and
* longitude lines. If on, quadrilaterals are generated everywhere
* except at the poles. This can be useful for generating a wireframe
* sphere with natural latitude and longitude lines.
*/
vtkSetMacro(QuadrilateralTessellation,int);
vtkGetMacro(QuadrilateralTessellation,int);
vtkBooleanMacro(QuadrilateralTessellation,int);
//@}
/**
* Construct sphere with radius=0.5 and default resolution 8 in both latitude
* and longitude directions. longitude ranges from (-180,180)
* and latitude (-90,90) degrees.
*/
static vtkGlobeSource *New();
/**
* Calculates the normal and point on a sphere with a specified radius
* at the spherical coordinates theta and phi.
*/
static void ComputeGlobePoint(
double theta, double phi, double radius, double* point, double* normal = 0);
/**
* Calculates the spherical coordinates theta and phi based on the
* point on a sphere.
*/
static void ComputeLatitudeLongitude(
double* x, double& theta, double& phi);
protected:
vtkGlobeSource();
~vtkGlobeSource() {}
int RequestData(
vtkInformation *,
vtkInformationVector **,
vtkInformationVector *);
void AddPoint(
double theta, double phi, double radius,
vtkPoints* newPoints, vtkFloatArray* newNormals,
vtkFloatArray* newLongitudeArray, vtkFloatArray* newLatitudeArray,
vtkDoubleArray* newLatLongArray);
double Origin[3];
double Radius;
bool AutoCalculateCurtainHeight;
double CurtainHeight;
int LongitudeResolution;
int LatitudeResolution;
double StartLongitude;
double EndLongitude;
double StartLatitude;
double EndLatitude;
int QuadrilateralTessellation;
private:
vtkGlobeSource(const vtkGlobeSource&) VTK_DELETE_FUNCTION;
void operator=(const vtkGlobeSource&) VTK_DELETE_FUNCTION;
};
#endif