From e19f87ddced1f95dc62e780aa4dd69f9509c0ac7 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 19 Dec 2003 22:55:35 +0000 Subject: [PATCH] Added support for tagging the required resolutions from the source data. --- examples/osgdem/DataSet.cpp | 102 +++++++++++++++++++++++++++++++----- examples/osgdem/DataSet.h | 31 +++++++++-- 2 files changed, 117 insertions(+), 16 deletions(-) diff --git a/examples/osgdem/DataSet.cpp b/examples/osgdem/DataSet.cpp index 660e1a6c1..462f93ead 100644 --- a/examples/osgdem/DataSet.cpp +++ b/examples/osgdem/DataSet.cpp @@ -257,6 +257,11 @@ DataSet::SpatialProperties DataSet::SourceData::computeSpatialProperties(osgTerr return *this; } +bool DataSet::SourceData::intersects(const SpatialProperties& sp) const +{ + return sp._extents.intersects(getExtents(sp._cs.get())); +} + void DataSet::SourceData::read(DestinationData& destination) { if (!_source) return; @@ -574,7 +579,7 @@ DataSet::Source* DataSet::Source::doReproject(const std::string& filename, osgTe return 0; } - if (targetResolution>=0.0f) + if (targetResolution>0.0f) { std::cout<<"recomputing the target transform size"<addRequiredResolutions(_sourceGraph.get()); + + + for(CompositeSource::source_iterator itr(_sourceGraph.get());itr.valid();++itr) + { + Source* source = itr->get(); + std::cout<<"Source File "<getFileName()<getRequiredResolutions(); + std::cout<<" resolutions.size() "<consolodateRequiredResolutions(); + + std::cout<<" consolodated resolutions.size() "<addRequiredResolutions(_sourceGraph.get()); - } - - // do sampling of data to required values. { for(CompositeSource::source_iterator itr(_sourceGraph.get());itr.valid();++itr) @@ -1723,6 +1794,11 @@ void DataSet::updateSourcesForDestinationGraphNeeds() std::cout<<" LOD "<<(*csitr)->getFileName()<_source = this; } SourceData* getSourceData() { return _sourceData.get(); } + bool intersects(const SpatialProperties& sp) const + { + return _sourceData.valid()?_sourceData->intersects(sp):false; + } + void loadSourceData(); @@ -201,16 +206,36 @@ class DataSet : public osg::Referenced void buildOverviews(); - typedef std::pair ResolutionPair; - typedef std::set ResolutionList; + struct ResolutionPair + { + ResolutionPair(): + _resX(0.0),_resY(0.0) {} + + ResolutionPair(double x,double y): + _resX(x),_resY(y) {} + + bool operator < (const ResolutionPair& rhs) const + { + double minLHS = osg::minimum(_resX,_resY); + double minRHS = osg::minimum(rhs._resX,rhs._resY); + return minLHS ResolutionList; + + void addRequiredResolution(double resX, double resY) { _requiredResolutions.push_back(ResolutionPair(resX,resY)); } void setRequiredResolutions(ResolutionList& resolutions) { _requiredResolutions = resolutions; } ResolutionList& getRequiredResolutions() { return _requiredResolutions; } const ResolutionList& getRequiredResolutions() const { return _requiredResolutions; } + + void consolodateRequiredResolutions(); protected: