Files
OpenSceneGraph/src/osgPlugins/osgTerrain/Layer.cpp

109 lines
2.6 KiB
C++

#include <osgTerrain/Layer>
#include <iostream>
#include <string>
#include <osg/Vec3>
#include <osg/Vec4>
#include <osg/io_utils>
#include <osgDB/ReadFile>
#include <osgDB/Registry>
#include <osgDB/Input>
#include <osgDB/Output>
#include <osgDB/ParameterOutput>
bool Layer_readLocalData(osg::Object &obj, osgDB::Input &fr);
bool Layer_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
osgDB::RegisterDotOsgWrapperProxy Layer_Proxy
(
new osgTerrain::Layer,
"Layer",
"Object Layer",
Layer_readLocalData,
Layer_writeLocalData
);
bool Layer_readLocalData(osg::Object& obj, osgDB::Input &fr)
{
osgTerrain::Layer& layer = static_cast<osgTerrain::Layer&>(obj);
bool itrAdvanced = false;
osg::ref_ptr<osg::Object> readObject = fr.readObjectOfType(osgDB::type_wrapper<osgTerrain::Locator>());
osgTerrain::Locator* locator = dynamic_cast<osgTerrain::Locator*>(readObject.get());
if (locator) layer.setLocator(locator);
if (fr[0].matchWord("Filter"))
{
unsigned int layerNum = 0;
if (fr.matchSequence("Filter %i"))
{
fr[1].getUInt(layerNum);
fr += 2;
}
else
{
++fr;
}
if (fr[0].matchWord("NEAREST")) layer.setFilter(osgTerrain::Layer::NEAREST);
else if (fr[0].matchWord("LINEAR")) layer.setFilter(osgTerrain::Layer::LINEAR);
++fr;
itrAdvanced = true;
}
unsigned int minLevel=0;
if (fr.read("MinLevel",minLevel))
{
itrAdvanced = true;
layer.setMinLevel(minLevel);
}
unsigned int maxLevel = MAXIMUM_NUMBER_OF_LEVELS;
if (fr.read("MaxLevel",maxLevel))
{
itrAdvanced = true;
layer.setMaxLevel(maxLevel);
}
return itrAdvanced;
}
bool Layer_writeLocalData(const osg::Object& obj, osgDB::Output& fw)
{
const osgTerrain::Layer& layer = static_cast<const osgTerrain::Layer&>(obj);
if (layer.getLocator() && !(layer.getLocator()->getDefinedInFile()))
{
fw.writeObject(*layer.getLocator());
}
if (layer.getFilter()!=osgTerrain::Layer::LINEAR)
{
if (layer.getFilter()==osgTerrain::Layer::LINEAR)
{
fw.indent()<<"Filter LINEAER"<<std::endl;
}
else
{
fw.indent()<<"Filter NEAREST"<<std::endl;
}
}
if (layer.getMinLevel()!=0)
{
fw.indent()<<"MinLevel "<<layer.getMinLevel()<<std::endl;
}
if (layer.getMaxLevel()!=MAXIMUM_NUMBER_OF_LEVELS)
{
fw.indent()<<"MaxLevel "<<layer.getMaxLevel()<<std::endl;
}
return true;
}