/usr/include/osgEarthAnnotation/OrthoNode is in libosgearth-dev 2.5.0+dfsg-2+b2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | /* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
* Copyright 2008-2013 Pelican Mapping
* http://osgearth.org
*
* osgEarth is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
#ifndef OSGEARTH_ANNO_ORTHO_NODE_H
#define OSGEARTH_ANNO_ORTHO_NODE_H 1
#include <osgEarthAnnotation/AnnotationNode>
#include <osgEarth/Decluttering>
#include <osgEarth/SpatialReference>
#include <osgEarth/CullingUtils>
#include <osg/AutoTransform>
#include <osg/MatrixTransform>
namespace osgEarth { namespace Annotation
{
using namespace osgEarth;
/**
* Base class for an annotation node that it drawn in screen-space
* (as an orthographic overlay)
*
* Don't use this class directly. Use one of its subclasses instead like
* LabelNode or PlaceNode.
*/
class OSGEARTHANNO_EXPORT OrthoNode : public PositionedAnnotationNode,
public SupportsDecluttering
{
public:
META_AnnotationNode( osgEarthAnnotation, OrthoNode );
/**
* Constructs an relative-position ortho node
*/
OrthoNode();
/**
* Constructs an ortho node that resides at an absolute position on the map
* @param mapNode MapNode used to referenced the ortho node
* @param position Starting position
*/
OrthoNode(
MapNode* mapNode,
const GeoPoint& position );
/**
* Attaches a child node to the transforms. Use this instead of addChild.
*/
virtual osg::Group* getAttachPoint() { return _attachPoint; }
public: // PositionedAnnotationNode
/** Sets the node position */
virtual bool setPosition( const GeoPoint& pos );
/** Gets the position (in map coordinates) of the node */
virtual GeoPoint getPosition() const;
public:
/**
* Sets a "local offset" position - for an ECEF map, this is an offset in
* the local tangent plane of the node that is applied to the geometry.
*/
void setLocalOffset( const osg::Vec3d& offset );
/**
* Gets the local tangent plane -space offset.
*/
const osg::Vec3d& getLocalOffset() const;
/**
* Enables or disable automatic horizon culling
*/
void setHorizonCulling( bool value );
bool getHorizonCulling() const;
/**
* Enables or disables ray based occlusion culling
*/
bool getOcclusionCulling() const;
void setOcclusionCulling( bool value );
/**
* Gets or sets the maximum altitude that the occlusion culling takes place.
*/
double getOcclusionCullingMaxAltitude() const;
void setOcclusionCullingMaxAltitude( double occlusionCullingMaxAltitude );
public: // AnnotationNode
virtual void applyStyle(const Style& style);
public: // MapNodeObserver
virtual void setMapNode( MapNode* mapNode );
public: // osg::Node
virtual void traverse( osg::NodeVisitor& nv );
virtual osg::BoundingSphere computeBound() const;
protected:
/** virtual dtor */
virtual ~OrthoNode() { }
private:
osg::Switch* _switch;
osg::Group* _oq;
osg::AutoTransform* _autoxform;
osg::MatrixTransform* _matxform;
osg::Group* _attachPoint;
bool _horizonCulling;
bool _occlusionCulling;
optional< double > _occlusionCullingMaxAltitude;
GeoPoint _mapPosition;
osg::Vec3d _localOffset;
osg::ref_ptr< CullNodeByHorizon > _horizonCuller;
osg::ref_ptr< OcclusionCullingCallback > _occlusionCuller;
void init();
osg::Vec3d adjustOcclusionCullingPoint( const osg::Vec3d& world );
// required by META_Node, but this object is not cloneable
OrthoNode( const OrthoNode& rhs, const osg::CopyOp& op =osg::CopyOp::DEEP_COPY_ALL ) { }
// autoclamping.
virtual void reclamp( const TileKey& key, osg::Node* tile, const Terrain* );
bool updateTransforms( const GeoPoint& mappos, osg::Node* patch =0L );
};
} } // namespace osgEarth::Annotation
#endif // OSGEARTH_ANNO_LOCALIZED_NODE_H
|