⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 terraintile.cpp

📁 最新osg包
💻 CPP
字号:
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2008 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.*/#include "Exception.h"#include "TerrainTile.h"#include "Group.h"#include "Layer.h"#include <osgTerrain/GeometryTechnique>using namespace ive;void TerrainTile::write(DataOutputStream* out){    // Write Terrain's identification.    out->writeInt(IVETERRAINTILE);    // If the osg class is inherited by any other class we should also write this to file.    osg::Group*  group = dynamic_cast<osg::Group*>(this);    if(group)        ((ive::Group*)(group))->write(out);    else        throw Exception("Terrain::write(): Could not cast this osgTerrain::Terrain to an osg::Group.");    if (out->getVersion() >= VERSION_0026)    {        out->writeInt(getTileID().level);        out->writeInt(getTileID().x);        out->writeInt(getTileID().y);    }    if (out->getVersion() >= VERSION_0023)    {        out->writeLocator(getLocator());        out->writeLayer(getElevationLayer());        out->writeUInt(getNumColorLayers());        for(unsigned int i=0; i<getNumColorLayers(); ++i)        {            out->writeLayer(getColorLayer(i));        }    }    else    {        LayerHelper helper;        helper.writeLocator(out, getLocator());        helper.writeLayer(out, getElevationLayer());        out->writeUInt(getNumColorLayers());        for(unsigned int i=0; i<getNumColorLayers(); ++i)        {            helper.writeLayer(out, getColorLayer(i));        }    }            writeTerrainTechnique(out, getTerrainTechnique());    }void TerrainTile::read(DataInputStream* in){    // Peek on Terrain's identification.    int id = in->peekInt();    if (id != IVETERRAINTILE) throw Exception("TerrainTile::read(): Expected Terrain identification.");    // Read Terrain's identification.    id = in->readInt();    // If the osg class is inherited by any other class we should also read this from file.    osg::Group*  group = dynamic_cast<osg::Group*>(this);    if(group)        ((ive::Group*)(group))->read(in);    else        throw Exception("Terrain::read(): Could not cast this osgTerrain::Terrain to an osg::Group.");    if (in->getVersion() >= VERSION_0026)    {        int level = in->readInt();        int x = in->readInt();        int y = in->readInt();        setTileID(osgTerrain::TileID(level,x,y));    }    if (in->getVersion() >= VERSION_0023)    {        setLocator(in->readLocator());        setElevationLayer(in->readLayer());        unsigned int numColorLayers = in->readUInt();        for(unsigned int i=0; i<numColorLayers; ++i)        {            setColorLayer(i, in->readLayer());        }            }    else    {        LayerHelper helper;        setLocator(helper.readLocator(in));        setElevationLayer(helper.readLayer(in));        unsigned int numColorLayers = in->readUInt();        for(unsigned int i=0; i<numColorLayers; ++i)        {            setColorLayer(i, helper.readLayer(in));        }    }            setTerrainTechnique(readTerrainTechnique(in));    if (osgTerrain::TerrainTile::getTileLoadedCallback().valid())         osgTerrain::TerrainTile::getTileLoadedCallback()->loaded(this, in->getOptions());}void TerrainTile::writeTerrainTechnique(DataOutputStream* out, osgTerrain::TerrainTechnique* technique){    if (dynamic_cast<osgTerrain::GeometryTechnique*>(technique))    {        out->writeBool(true);        out->writeInt(IVEGEOMETRYTECHNIQUE);    }    else    {        out->writeBool(false);    }}osgTerrain::TerrainTechnique* TerrainTile::readTerrainTechnique(DataInputStream* in){    bool hasTechnique = in->readBool();    if (!hasTechnique) return 0;        int id = in->readInt();    if (id==IVEGEOMETRYTECHNIQUE)    {        return new osgTerrain::GeometryTechnique;    }    else    {        return 0;    }}

⌨️ 快捷键说明

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