tilemapper.h

来自「最新osg包」· C头文件 代码 · 共 144 行

H
144
字号
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2004 Robert Osfield  * * This library is open source and may be redistributed and/or modified under   * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or  * (at your option) any later version.  The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. *  * This library 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  * OpenSceneGraph Public License for more details.*/#ifndef __TILEMAPPER_H_#define __TILEMAPPER_H_#include "trpage_sys.h"#include "trpage_read.h"#include <osg/CullStack>#include <osg/NodeVisitor>#include <set>namespace txp{struct TileIdentifier : public osg::Referenced{    TileIdentifier():        x(-1),        y(-1),        lod(-1)	{}    TileIdentifier(int ax, int ay, int alod):        x(ax),        y(ay),        lod(alod)	{}        TileIdentifier(const TileIdentifier& rhs):        osg::Referenced(),        x(rhs.x),        y(rhs.y),        lod(rhs.lod)	{}    TileIdentifier& operator = (const TileIdentifier& rhs)    {        if (this==&rhs) return *this;        x = rhs.x;        y = rhs.y;        lod = rhs.lod;        return *this;    }    void set(int ax, int ay, int alod)    {        x = ax;        y = ay;        lod = alod;    }    bool operator < (const TileIdentifier& rhs) const    {        if (lod<rhs.lod)            return true;        if (lod>rhs.lod)            return false;        if (x<rhs.x)            return true;        if (x>rhs.x)            return false;        if (y<rhs.y)            return true;        if (y>rhs.y)            return false;        return false;    }    int x,y,lod;};class TileMapper : public osg::NodeVisitor, public osg::CullStack{public:        typedef osg::Matrix::value_type value_type;    TileMapper():        osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ACTIVE_CHILDREN) {}                virtual osg::Vec3 getEyePoint() const    {	return getEyeLocal();    }    virtual float getDistanceToEyePoint(const osg::Vec3& pos, bool withLODScale) const;    virtual float getDistanceFromEyePoint(const osg::Vec3& pos, bool withLODScale) const;    virtual void apply(osg::Node& node);    virtual void apply(osg::Group& node);    virtual void apply(osg::Geode& node);    virtual void apply(osg::PagedLOD& node);        void insertTile(const TileIdentifier& tid);        bool canParentBeTraversed(const TileIdentifier& tid) const;        void checkValidityOfAllVisibleTiles();        bool containsBlackListedNodes() const    {        return !_blackListedNodeSet.empty();    }    inline bool isNodeBlackListed(const osg::Node* node) const    {        return _blackListedNodeSet.count(node)!=0;    }        bool isTileNeighbourALowerLODLevel(const TileIdentifier& tid, int dx, int dy) const;    protected:    typedef std::vector< std::pair<TileIdentifier,osg::Node*> > TileStack;    typedef std::map< TileIdentifier, TileStack > TileMap;    typedef std::set< const osg::Node* > BlacklistedNodeSet;        TileStack           _tileStack;    TileMap             _tileMap;    bool                _containsGeode;        BlacklistedNodeSet  _blackListedNodeSet;    };} // namespace#endif // __TILEMAPPER_H_

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?