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/vtkGeoTerrainNode.h

166 lines
4.2 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkGeoTerrainNode.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 vtkGeoTerrainNode
*
*
*/
#ifndef vtkGeoTerrainNode_h
#define vtkGeoTerrainNode_h
#include "vtkGeovisCoreModule.h" // For export macro
#include "vtkGeoTreeNode.h"
#include "vtkSmartPointer.h" // for SP
class vtkPolyData;
class VTKGEOVISCORE_EXPORT vtkGeoTerrainNode : public vtkGeoTreeNode
{
public:
static vtkGeoTerrainNode *New();
vtkTypeMacro(vtkGeoTerrainNode, vtkGeoTreeNode);
void PrintSelf(ostream& os, vtkIndent indent);
//@{
/**
* Every subclass implements these methods returning the specific type.
* This is easier than templating.
*/
vtkGeoTerrainNode* GetChild(int idx);
vtkGeoTerrainNode* GetParent();
//@}
/**
* Given, a long, lat position, return altitude in meters
* relative to sea level.
*/
double GetAltitude(double longitude, double latitude);
//@{
/**
* Get the terrrain model. The user has to copy the terrain
* into this object.
*/
vtkPolyData* GetModel();
void SetModel(vtkPolyData* model);
//@}
//@{
/**
* Bounding sphere is precomputed for faster updates of terrain.
*/
void UpdateBoundingSphere();
vtkGetMacro(BoundingSphereRadius, double);
vtkGetVector3Macro(BoundingSphereCenter, double);
//@}
vtkGetVector3Macro(CornerNormal00,double);
vtkGetVector3Macro(CornerNormal01,double);
vtkGetVector3Macro(CornerNormal10,double);
vtkGetVector3Macro(CornerNormal11,double);
//@{
/**
* For 2D projections, store the bounds of the node in projected space
* to quickly determine if a node is offscreen.
*/
vtkGetVector4Macro(ProjectionBounds,double);
vtkSetVector4Macro(ProjectionBounds,double);
//@}
//@{
/**
* For 2D projections, store the granularity of the graticule in this node.
*/
vtkGetMacro(GraticuleLevel,int);
vtkSetMacro(GraticuleLevel,int);
//@}
//@{
/**
* For 2D projections, store the maximum deviation of line segment centers
* from the actual projection value.
*/
vtkGetMacro(Error,double);
vtkSetMacro(Error,double);
//@}
//@{
/**
* For 2D projections, store the maximum deviation of line segment centers
* from the actual projection value.
*/
vtkGetMacro(Coverage,float);
vtkSetMacro(Coverage,float);
//@}
//@{
/**
* Shallow and Deep copy.
*/
virtual void ShallowCopy(vtkGeoTreeNode *src);
virtual void DeepCopy(vtkGeoTreeNode *src);
//@}
/**
* Returns whether this node has valid data associated
* with it, or if it is an "empty" node.
*/
virtual bool HasData();
/**
* Deletes the data associated with the node to make this
* an "empty" node. This is performed when the node has
* been unused for a certain amount of time.
*/
virtual void DeleteData();
protected:
vtkGeoTerrainNode();
~vtkGeoTerrainNode();
vtkSmartPointer<vtkPolyData> Model;
double BoundingSphereRadius;
double BoundingSphereCenter[3];
// I hate having to store this, but it is the easiest
// way to determine if a node is not visible because
// it is on the other side of the earth.
double CornerNormal00[3];
double CornerNormal01[3];
double CornerNormal10[3];
double CornerNormal11[3];
double ProjectionBounds[4];
int GraticuleLevel;
double Error;
float Coverage;
private:
vtkGeoTerrainNode(const vtkGeoTerrainNode&) VTK_DELETE_FUNCTION;
void operator=(const vtkGeoTerrainNode&) VTK_DELETE_FUNCTION;
};
#endif