Added option to Locator to help specify here the locator value was defined from.
Update wrappers and Gdal plugin to use this new parameter
This commit is contained in:
@@ -102,6 +102,9 @@ class OSGTERRAIN_EXPORT Locator : public osg::Object
|
||||
}
|
||||
|
||||
bool computeLocalBounds(Locator& source, osg::Vec3d& bottomLeft, osg::Vec3d& topRight);
|
||||
|
||||
void setDefinedInFile(bool flag) { _definedInFile = flag; }
|
||||
bool getDefinedInFile() const { return _definedInFile; }
|
||||
|
||||
protected:
|
||||
|
||||
@@ -115,6 +118,8 @@ class OSGTERRAIN_EXPORT Locator : public osg::Object
|
||||
|
||||
osg::Matrixd _transform;
|
||||
osg::Matrixd _inverse;
|
||||
|
||||
bool _definedInFile;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -120,6 +120,11 @@ void DataSetLayer::setUpLocator()
|
||||
0.0, 0.0, 1.0, 0.0,
|
||||
geoTransform[0], geoTransform[3], 0.0, 1.0);
|
||||
|
||||
locator->setTransform(matrix);
|
||||
locator->setDefinedInFile(true);
|
||||
|
||||
setLocator(locator.get());
|
||||
|
||||
}
|
||||
else if (_dataset->GetGCPCount()>0 && _dataset->GetGCPProjection())
|
||||
{
|
||||
@@ -162,23 +167,15 @@ void DataSetLayer::setUpLocator()
|
||||
adfDstGeoTransform[2], adfDstGeoTransform[5], 0.0, 0.0,
|
||||
0.0, 0.0, 1.0, 0.0,
|
||||
adfDstGeoTransform[0], adfDstGeoTransform[3], 0.0, 1.0);
|
||||
|
||||
locator->setTransform(matrix);
|
||||
locator->setDefinedInFile(true);
|
||||
|
||||
setLocator(locator.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
osg::notify(osg::NOTICE) << " No GeoTransform or GCP's - unable to compute position in space"<< std::endl;
|
||||
|
||||
matrix.set( 1.0, 0.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
0.0, 0.0, 1.0, 0.0,
|
||||
0.0, 0.0, 0.0, 1.0);
|
||||
|
||||
}
|
||||
|
||||
osg::notify(osg::NOTICE)<<"Matrix = "<<matrix<<std::endl;
|
||||
|
||||
// need to invert y and scale by pixel size.
|
||||
locator->setTransform(matrix);
|
||||
|
||||
setLocator(locator.get());
|
||||
|
||||
}
|
||||
|
||||
@@ -26,275 +26,246 @@ osgDB::RegisterDotOsgWrapperProxy Terrain_Proxy
|
||||
Terrain_writeLocalData
|
||||
);
|
||||
|
||||
osgTerrain::Layer* readLayer(osgDB::Input& fr)
|
||||
osgTerrain::Layer* readLayer(osgDB::Input& fr, bool& itrAdvanced)
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::Layer> layer;
|
||||
osg::ref_ptr<osgTerrain::Locator> locator;
|
||||
|
||||
int entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>entry)
|
||||
// read any locator data first.
|
||||
if (fr.matchSequence("Locator %w %f %f %f"))
|
||||
{
|
||||
bool itrAdvanced = false;
|
||||
|
||||
if (fr.matchSequence("CompositeLayer {"))
|
||||
{
|
||||
|
||||
osg::ref_ptr<osgTerrain::CompositeLayer> cl = new osgTerrain::CompositeLayer;
|
||||
|
||||
int local_entry = fr[0].getNoNestedBrackets();
|
||||
double x,y,w,h;
|
||||
fr[2].getFloat(x);
|
||||
fr[3].getFloat(y);
|
||||
fr[4].getFloat(w);
|
||||
fr[5].getFloat(h);
|
||||
|
||||
fr += 2;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry)
|
||||
{
|
||||
osgTerrain::Layer* layer = readLayer(fr);
|
||||
if (layer) cl->addLayer(layer);
|
||||
locator = new osgTerrain::Locator;
|
||||
|
||||
++fr;
|
||||
}
|
||||
|
||||
layer = cl.get();
|
||||
|
||||
itrAdvanced = true;
|
||||
|
||||
++fr;
|
||||
if (fr[1].matchWord("GEOCENTRIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOCENTRIC);
|
||||
else if (fr[1].matchWord("GEOGRAPHIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOGRAPHIC);
|
||||
else locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
|
||||
locator->setTransformAsExtents(x,y,x+w,y+h);
|
||||
|
||||
}
|
||||
|
||||
if (fr.matchSequence("ProxyLayer %w") || fr.matchSequence("ProxyLayer %w"))
|
||||
{
|
||||
osg::ref_ptr<osg::Object> image = osgDB::readObjectFile(std::string(fr[1].getStr())+".gdal");
|
||||
osgTerrain::ProxyLayer* proxyLayer = dynamic_cast<osgTerrain::ProxyLayer*>(image.get());
|
||||
if (proxyLayer)
|
||||
{
|
||||
layer = proxyLayer;
|
||||
|
||||
osgTerrain::Locator* locator = layer->getLocator();
|
||||
osg::notify(osg::NOTICE)<<"Locator = "<<locator<<std::endl;
|
||||
if (layer->getLocator())
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<" format = "<<locator->getFormat()<<std::endl;
|
||||
osg::notify(osg::NOTICE)<<" cs = "<<locator->getCoordinateSystem()<<std::endl;
|
||||
osg::notify(osg::NOTICE)<<" transform "<<locator->getTransform()<<std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Warning: Failed to create ProxyLayer "<<fr[1].getStr()<<std::endl;
|
||||
}
|
||||
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Images {") || fr.matchSequence("images {"))
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::CompositeLayer> cl = new osgTerrain::CompositeLayer;
|
||||
|
||||
int local_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry)
|
||||
{
|
||||
cl->addLayer(fr[0].getStr());
|
||||
++fr;
|
||||
}
|
||||
|
||||
layer = cl.get();
|
||||
|
||||
itrAdvanced = true;
|
||||
|
||||
++fr;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Image %w") || fr.matchSequence("image %w") ||
|
||||
fr.matchSequence("Image %s") || fr.matchSequence("image %s"))
|
||||
{
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readImageFile(fr[1].getStr());
|
||||
if (image.valid())
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::ImageLayer> imagelayer = new osgTerrain::ImageLayer;
|
||||
imagelayer->setImage(image.get());
|
||||
|
||||
layer = imagelayer.get();
|
||||
}
|
||||
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("HeightField %w") || fr.matchSequence("HeightField %s"))
|
||||
{
|
||||
osg::ref_ptr<osg::HeightField> hf = osgDB::readHeightFieldFile(fr[1].getStr());
|
||||
if (hf.valid())
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::HeightFieldLayer> hflayer = new osgTerrain::HeightFieldLayer;
|
||||
hflayer->setHeightField(hf.get());
|
||||
|
||||
layer = hflayer.get();
|
||||
}
|
||||
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Locator %w %f %f %f"))
|
||||
{
|
||||
|
||||
double x,y,w,h;
|
||||
fr[2].getFloat(x);
|
||||
fr[3].getFloat(y);
|
||||
fr[4].getFloat(w);
|
||||
fr[5].getFloat(h);
|
||||
|
||||
locator = new osgTerrain::Locator;
|
||||
|
||||
if (fr[1].matchWord("GEOCENTRIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOCENTRIC);
|
||||
else if (fr[1].matchWord("GEOGRAPHIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOGRAPHIC);
|
||||
else locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
|
||||
locator->setTransformAsExtents(x,y,x+w,y+h);
|
||||
|
||||
fr += 6;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Locator {"))
|
||||
{
|
||||
locator = new osgTerrain::Locator;
|
||||
|
||||
int local_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry)
|
||||
{
|
||||
bool localAdvanced = false;
|
||||
|
||||
if (fr.matchSequence("Format %w") || fr.matchSequence("Format %s") )
|
||||
{
|
||||
locator->setFormat(fr[1].getStr());
|
||||
|
||||
fr += 2;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("CoordinateSystemType %w"))
|
||||
{
|
||||
if (fr[1].matchWord("GEOCENTRIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOCENTRIC);
|
||||
else if (fr[1].matchWord("GEOGRAPHIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOGRAPHIC);
|
||||
else locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
|
||||
|
||||
fr += 2;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
|
||||
if (fr.matchSequence("CoordinateSystem %w") || fr.matchSequence("CoordinateSystem %s") )
|
||||
{
|
||||
locator->setCoordinateSystem(fr[1].getStr());
|
||||
|
||||
fr += 2;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Transform {"))
|
||||
{
|
||||
int tansform_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
|
||||
int row=0;
|
||||
int col=0;
|
||||
double v;
|
||||
osg::Matrixd matrix;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>tansform_entry)
|
||||
{
|
||||
if (fr[0].getFloat(v))
|
||||
{
|
||||
matrix(row,col)=v;
|
||||
++col;
|
||||
if (col>=4)
|
||||
{
|
||||
col = 0;
|
||||
++row;
|
||||
}
|
||||
++fr;
|
||||
}
|
||||
else fr.advanceOverCurrentFieldOrBlock();
|
||||
}
|
||||
|
||||
locator->setTransform(matrix);
|
||||
|
||||
++fr;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
|
||||
if (fr.matchSequence("Extents %f %f %f %f"))
|
||||
{
|
||||
double minX,minY,maxX,maxY;
|
||||
fr[1].getFloat(minX);
|
||||
fr[2].getFloat(minY);
|
||||
fr[3].getFloat(maxX);
|
||||
fr[4].getFloat(maxY);
|
||||
|
||||
locator->setTransformAsExtents(minX, minY, maxX, maxY);
|
||||
|
||||
fr += 5;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
if (!localAdvanced) ++fr;
|
||||
}
|
||||
|
||||
itrAdvanced = true;
|
||||
|
||||
++fr;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("EllipsoidLocator %f %f %f %f"))
|
||||
{
|
||||
double x,y,w,h;
|
||||
fr[1].getFloat(x);
|
||||
fr[2].getFloat(y);
|
||||
fr[3].getFloat(w);
|
||||
fr[4].getFloat(h);
|
||||
|
||||
locator = new osgTerrain::Locator;
|
||||
locator->setCoordinateSystemType(osgTerrain::Locator::GEOCENTRIC);
|
||||
locator->setTransformAsExtents(x,y,x+w,y+h);
|
||||
|
||||
fr += 5;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("CartesianLocator %f %f %f %f"))
|
||||
{
|
||||
double x,y,w,h;
|
||||
fr[1].getFloat(x);
|
||||
fr[2].getFloat(y);
|
||||
fr[3].getFloat(w);
|
||||
fr[4].getFloat(h);
|
||||
|
||||
locator = new osgTerrain::Locator;
|
||||
locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
|
||||
locator->setTransformAsExtents(x,y,x+w,y+h);
|
||||
|
||||
fr += 5;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (!itrAdvanced)
|
||||
{
|
||||
if (fr[0].getStr()) osg::notify(osg::NOTICE)<<"Layer - unreconised token : "<<fr[0].getStr() << std::endl;
|
||||
++fr;
|
||||
}
|
||||
fr += 6;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
// step over trailing }
|
||||
++fr;
|
||||
if (fr.matchSequence("Locator {"))
|
||||
{
|
||||
locator = new osgTerrain::Locator;
|
||||
|
||||
int local_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry)
|
||||
{
|
||||
bool localAdvanced = false;
|
||||
|
||||
if (fr.matchSequence("Format %w") || fr.matchSequence("Format %s") )
|
||||
{
|
||||
locator->setFormat(fr[1].getStr());
|
||||
|
||||
fr += 2;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("CoordinateSystemType %w"))
|
||||
{
|
||||
if (fr[1].matchWord("GEOCENTRIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOCENTRIC);
|
||||
else if (fr[1].matchWord("GEOGRAPHIC")) locator->setCoordinateSystemType(osgTerrain::Locator::GEOGRAPHIC);
|
||||
else locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
|
||||
|
||||
fr += 2;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
|
||||
if (fr.matchSequence("CoordinateSystem %w") || fr.matchSequence("CoordinateSystem %s") )
|
||||
{
|
||||
locator->setCoordinateSystem(fr[1].getStr());
|
||||
|
||||
fr += 2;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Transform {"))
|
||||
{
|
||||
int tansform_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
|
||||
int row=0;
|
||||
int col=0;
|
||||
double v;
|
||||
osg::Matrixd matrix;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>tansform_entry)
|
||||
{
|
||||
if (fr[0].getFloat(v))
|
||||
{
|
||||
matrix(row,col)=v;
|
||||
++col;
|
||||
if (col>=4)
|
||||
{
|
||||
col = 0;
|
||||
++row;
|
||||
}
|
||||
++fr;
|
||||
}
|
||||
else fr.advanceOverCurrentFieldOrBlock();
|
||||
}
|
||||
|
||||
locator->setTransform(matrix);
|
||||
|
||||
++fr;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
|
||||
if (fr.matchSequence("Extents %f %f %f %f"))
|
||||
{
|
||||
double minX,minY,maxX,maxY;
|
||||
fr[1].getFloat(minX);
|
||||
fr[2].getFloat(minY);
|
||||
fr[3].getFloat(maxX);
|
||||
fr[4].getFloat(maxY);
|
||||
|
||||
locator->setTransformAsExtents(minX, minY, maxX, maxY);
|
||||
|
||||
fr += 5;
|
||||
localAdvanced = true;
|
||||
}
|
||||
|
||||
if (!localAdvanced) ++fr;
|
||||
}
|
||||
|
||||
itrAdvanced = true;
|
||||
|
||||
++fr;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("EllipsoidLocator %f %f %f %f"))
|
||||
{
|
||||
double x,y,w,h;
|
||||
fr[1].getFloat(x);
|
||||
fr[2].getFloat(y);
|
||||
fr[3].getFloat(w);
|
||||
fr[4].getFloat(h);
|
||||
|
||||
locator = new osgTerrain::Locator;
|
||||
locator->setCoordinateSystemType(osgTerrain::Locator::GEOCENTRIC);
|
||||
locator->setTransformAsExtents(x,y,x+w,y+h);
|
||||
|
||||
fr += 5;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("CartesianLocator %f %f %f %f"))
|
||||
{
|
||||
double x,y,w,h;
|
||||
fr[1].getFloat(x);
|
||||
fr[2].getFloat(y);
|
||||
fr[3].getFloat(w);
|
||||
fr[4].getFloat(h);
|
||||
|
||||
locator = new osgTerrain::Locator;
|
||||
locator->setCoordinateSystemType(osgTerrain::Locator::PROJECTED);
|
||||
locator->setTransformAsExtents(x,y,x+w,y+h);
|
||||
|
||||
fr += 5;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
|
||||
if (fr.matchSequence("CompositeLayer {"))
|
||||
{
|
||||
|
||||
osg::ref_ptr<osgTerrain::CompositeLayer> cl = new osgTerrain::CompositeLayer;
|
||||
|
||||
int local_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Composite layer "<<fr[0].getStr()<<std::endl;
|
||||
bool localAdvanced = false;
|
||||
osgTerrain::Layer* layer = readLayer(fr, localAdvanced);
|
||||
if (layer) cl->addLayer(layer);
|
||||
if (!localAdvanced) ++fr;
|
||||
|
||||
}
|
||||
|
||||
layer = cl.get();
|
||||
|
||||
osg::notify(osg::NOTICE)<<"End of Composite layer "<<fr[0].getStr()<<std::endl;
|
||||
|
||||
++fr;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("ProxyLayer %w") || fr.matchSequence("ProxyLayer %s"))
|
||||
{
|
||||
osg::ref_ptr<osg::Object> image = osgDB::readObjectFile(std::string(fr[1].getStr())+".gdal");
|
||||
osgTerrain::ProxyLayer* proxyLayer = dynamic_cast<osgTerrain::ProxyLayer*>(image.get());
|
||||
if (proxyLayer)
|
||||
{
|
||||
layer = proxyLayer;
|
||||
}
|
||||
else
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Warning: Failed to create ProxyLayer "<<fr[1].getStr()<<std::endl;
|
||||
}
|
||||
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Images {") || fr.matchSequence("images {"))
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::CompositeLayer> cl = new osgTerrain::CompositeLayer;
|
||||
|
||||
int local_entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>local_entry)
|
||||
{
|
||||
cl->addLayer(fr[0].getStr());
|
||||
++fr;
|
||||
}
|
||||
|
||||
layer = cl.get();
|
||||
++fr;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("Image %w") || fr.matchSequence("image %w") ||
|
||||
fr.matchSequence("Image %s") || fr.matchSequence("image %s"))
|
||||
{
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readImageFile(fr[1].getStr());
|
||||
if (image.valid())
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::ImageLayer> imagelayer = new osgTerrain::ImageLayer;
|
||||
imagelayer->setImage(image.get());
|
||||
layer = imagelayer.get();
|
||||
}
|
||||
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (fr.matchSequence("HeightField %w") || fr.matchSequence("HeightField %s"))
|
||||
{
|
||||
osg::ref_ptr<osg::HeightField> hf = osgDB::readHeightFieldFile(fr[1].getStr());
|
||||
if (hf.valid())
|
||||
{
|
||||
osg::ref_ptr<osgTerrain::HeightFieldLayer> hflayer = new osgTerrain::HeightFieldLayer;
|
||||
hflayer->setHeightField(hf.get());
|
||||
layer = hflayer.get();
|
||||
}
|
||||
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
if (layer.valid() && locator.valid())
|
||||
{
|
||||
@@ -304,6 +275,48 @@ osgTerrain::Layer* readLayer(osgDB::Input& fr)
|
||||
return layer.release();
|
||||
}
|
||||
|
||||
osgTerrain::Layer* readNestedLayer(osgDB::Input& fr)
|
||||
{
|
||||
int entry = fr[0].getNoNestedBrackets();
|
||||
|
||||
fr += 2;
|
||||
|
||||
osg::ref_ptr<osgTerrain::CompositeLayer> compositeLayer = 0;
|
||||
osg::ref_ptr<osgTerrain::Layer> layer = 0;
|
||||
|
||||
while (!fr.eof() && fr[0].getNoNestedBrackets()>entry)
|
||||
{
|
||||
bool itrAdvanced = false;
|
||||
|
||||
osg::ref_ptr<osgTerrain::Layer> new_layer = readLayer(fr,itrAdvanced);
|
||||
if (new_layer.valid())
|
||||
{
|
||||
if (layer.valid())
|
||||
{
|
||||
compositeLayer = new osgTerrain::CompositeLayer;
|
||||
compositeLayer->addLayer(layer.get());
|
||||
compositeLayer->addLayer(new_layer.get());
|
||||
layer = 0;
|
||||
}
|
||||
else if (compositeLayer.valid())
|
||||
{
|
||||
compositeLayer->addLayer(new_layer.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
layer = new_layer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!itrAdvanced) ++fr;
|
||||
}
|
||||
|
||||
if (compositeLayer.valid()) return compositeLayer.release();
|
||||
if (layer.valid()) return layer.release();
|
||||
return 0;
|
||||
}
|
||||
|
||||
osg::TransferFunction* readTransferFunction(osgDB::Input& fr)
|
||||
{
|
||||
osg::ref_ptr<osg::TransferFunction1D> tf = new osg::TransferFunction1D;
|
||||
@@ -399,7 +412,7 @@ bool Terrain_readLocalData(osg::Object& obj, osgDB::Input &fr)
|
||||
|
||||
if (fr.matchSequence("ElevationLayer {"))
|
||||
{
|
||||
osgTerrain::Layer* layer = readLayer(fr);
|
||||
osgTerrain::Layer* layer = readNestedLayer(fr);
|
||||
|
||||
if (layer) terrain.setElevationLayer(layer);
|
||||
|
||||
@@ -416,7 +429,7 @@ bool Terrain_readLocalData(osg::Object& obj, osgDB::Input &fr)
|
||||
++fr;
|
||||
}
|
||||
|
||||
osgTerrain::Layer* layer = readLayer(fr);
|
||||
osgTerrain::Layer* layer = readNestedLayer(fr);
|
||||
if (layer) terrain.setColorLayer(layerNum, layer);
|
||||
|
||||
itrAdvanced = true;
|
||||
|
||||
@@ -24,7 +24,8 @@ using namespace osgTerrain;
|
||||
//
|
||||
Locator::Locator():
|
||||
_coordinateSystemType(PROJECTED),
|
||||
_ellipsoidModel(new osg::EllipsoidModel())
|
||||
_ellipsoidModel(new osg::EllipsoidModel()),
|
||||
_definedInFile(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -34,7 +35,8 @@ Locator::Locator(const Locator& locator,const osg::CopyOp& copyop):
|
||||
_ellipsoidModel(locator._ellipsoidModel),
|
||||
_format(locator._format),
|
||||
_cs(locator._cs),
|
||||
_transform(locator._transform)
|
||||
_transform(locator._transform),
|
||||
_definedInFile(locator._definedInFile)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -147,6 +147,16 @@ BEGIN_OBJECT_REFLECTOR(osgTerrain::Locator)
|
||||
__bool__computeLocalBounds__Locator_R1__osg_Vec3d_R1__osg_Vec3d_R1,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setDefinedInFile, IN, bool, flag,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setDefinedInFile__bool,
|
||||
"",
|
||||
"");
|
||||
I_Method0(bool, getDefinedInFile,
|
||||
Properties::NON_VIRTUAL,
|
||||
__bool__getDefinedInFile,
|
||||
"",
|
||||
"");
|
||||
I_StaticMethod4(bool, convertLocalCoordBetween, IN, const osgTerrain::Locator &, source, IN, const osg::Vec3d &, sourceNDC, IN, const osgTerrain::Locator &, destination, IN, osg::Vec3d &, destinationNDC,
|
||||
__bool__convertLocalCoordBetween__C5_Locator_R1__C5_osg_Vec3d_R1__C5_Locator_R1__osg_Vec3d_R1_S,
|
||||
"",
|
||||
@@ -157,6 +167,9 @@ BEGIN_OBJECT_REFLECTOR(osgTerrain::Locator)
|
||||
I_SimpleProperty(osgTerrain::Locator::CoordinateSystemType, CoordinateSystemType,
|
||||
__CoordinateSystemType__getCoordinateSystemType,
|
||||
__void__setCoordinateSystemType__CoordinateSystemType);
|
||||
I_SimpleProperty(bool, DefinedInFile,
|
||||
__bool__getDefinedInFile,
|
||||
__void__setDefinedInFile__bool);
|
||||
I_SimpleProperty(osg::EllipsoidModel *, EllipsoidModel,
|
||||
__osg_EllipsoidModel_P1__getEllipsoidModel,
|
||||
__void__setEllipsoidModel__osg_EllipsoidModel_P1);
|
||||
|
||||
Reference in New Issue
Block a user