Changeset 8805
- Timestamp:
- 08/28/08 18:15:57
- Files:
-
- OpenSceneGraph/trunk/include/osgTerrain/Layer (modified) (6 diffs)
- OpenSceneGraph/trunk/src/osgPlugins/ive/CompositeLayer.cpp (modified) (1 diff)
- OpenSceneGraph/trunk/src/osgPlugins/ive/SwitchLayer.cpp (modified) (3 diffs)
- OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/CompositeLayer.cpp (modified) (3 diffs)
- OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/HeightFieldLayer.cpp (modified) (2 diffs)
- OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/ImageLayer.cpp (modified) (2 diffs)
- OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/SwitchLayer.cpp (modified) (3 diffs)
- OpenSceneGraph/trunk/src/osgTerrain/Layer.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenSceneGraph/trunk/include/osgTerrain/Layer
r8803 r8805 27 27 #define MAXIMUM_NUMBER_OF_LEVELS 30 28 28 29 /** Extact the setname and filename from a compound string in the from set:setname:filename". 30 * Returns a setname of "" when non set:setname: entry is present.*/ 31 void extractSetNameAndFileName(const std::string& compoundstring, std::string& setname, std::string& filename); 32 33 /** Create a compound string in the form set:setname:filename, or just filename if setname is "".*/ 34 std::string createCompondSetNameAndFileName(const std::string& setname, const std::string& filename); 35 29 36 class OSGTERRAIN_EXPORT Layer : public osg::Object 30 37 { … … 43 50 /** Get the file name of the layer. */ 44 51 virtual const std::string& getFileName() const { return _filename; } 45 52 53 /** Return the compound name of the layer in the form set::name::filename string.*/ 54 std::string getCompoundName() const { return createCompondSetNameAndFileName(getName(), getFileName()); } 46 55 47 56 void setLocator(Locator* locator) { _locator = locator; } … … 332 341 333 342 334 class OSGTERRAIN_EXPORT CompositeLayer : public Layer335 {336 public:337 338 CompositeLayer();339 340 /** Copy constructor using CopyOp to manage deep vs shallow copy.*/341 CompositeLayer(const CompositeLayer& compositeLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);342 343 META_Object(osgTerrain, CompositeLayer);344 345 void clear();346 347 void setFileName(unsigned int i, const std::string& filename) { _layers[i].first = filename; if (_layers[i].second.valid()) _layers[i].second->setFileName(filename); }348 const std::string& getFileName(unsigned int i) const { return _layers[i].second.valid() ? _layers[i].second->getFileName() : _layers[i].first; }349 350 void setLayer(unsigned int i, Layer* layer) { _layers[i].second = layer; }351 Layer* getLayer(unsigned int i) { return _layers[i].second.get(); }352 const Layer* getLayer(unsigned int i) const { return _layers[i].second.get(); }353 354 void addLayer(const std::string& filename) { _layers.push_back(FileNameLayerPair(filename,0)); }355 356 void addLayer(Layer* layer) { _layers.push_back(FileNameLayerPair(layer->getFileName(),layer)); }357 358 void removeLayer(unsigned int i) { _layers.erase(_layers.begin()+i); }359 360 unsigned int getNumLayers() const { return _layers.size(); }361 362 protected:363 364 virtual ~CompositeLayer() {}365 366 typedef std::pair< std::string, osg::ref_ptr<Layer> > FileNameLayerPair;367 368 typedef std::vector< FileNameLayerPair > Layers;369 370 Layers _layers;371 };372 373 343 class OSGTERRAIN_EXPORT ProxyLayer : public Layer 374 344 { … … 419 389 }; 420 390 421 422 423 class OSGTERRAIN_EXPORT SwitchLayer : public Layer 391 class OSGTERRAIN_EXPORT CompositeLayer : public Layer 392 { 393 public: 394 395 CompositeLayer(); 396 397 /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ 398 CompositeLayer(const CompositeLayer& compositeLayer,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); 399 400 META_Object(osgTerrain, CompositeLayer); 401 402 void clear(); 403 404 void setSetName(unsigned int i, const std::string& setname) { _layers[i].setname = setname; if (_layers[i].layer.valid()) _layers[i].layer->setName(setname); } 405 const std::string& getSetName(unsigned int i) const { return _layers[i].layer.valid() ? _layers[i].layer->getName() : _layers[i].setname; } 406 407 void setFileName(unsigned int i, const std::string& filename) { _layers[i].filename = filename; if (_layers[i].layer.valid()) _layers[i].layer->setFileName(filename); } 408 const std::string& getFileName(unsigned int i) const { return _layers[i].layer.valid() ? _layers[i].layer->getFileName() : _layers[i].filename; } 409 410 void setCompoundName(unsigned int i, const std::string& compoundname); 411 std::string getCompoundName(unsigned int i) const; 412 413 414 void setLayer(unsigned int i, Layer* layer) { _layers[i].layer = layer; } 415 Layer* getLayer(unsigned int i) { return _layers[i].layer.get(); } 416 const Layer* getLayer(unsigned int i) const { return _layers[i].layer.get(); } 417 418 void addLayer(const std::string& compoundname); 419 420 void addLayer(Layer* layer) { _layers.push_back(CompoundNameLayer(layer->getName(),layer->getFileName(),layer)); } 421 422 void removeLayer(unsigned int i) { _layers.erase(_layers.begin()+i); } 423 424 unsigned int getNumLayers() const { return _layers.size(); } 425 426 protected: 427 428 virtual ~CompositeLayer() {} 429 430 struct CompoundNameLayer 431 { 432 CompoundNameLayer() {} 433 434 CompoundNameLayer(const CompoundNameLayer& cnl): 435 setname(cnl.setname), 436 filename(cnl.filename), 437 layer(cnl.layer) {} 438 439 CompoundNameLayer(const std::string& sn, const std::string& fn, Layer* l): 440 setname(sn), 441 filename(fn), 442 layer(l) {} 443 444 CompoundNameLayer& operator = (const CompoundNameLayer& cnl) 445 { 446 if (&cnl==this) return *this; 447 448 setname = cnl.setname; 449 filename = cnl.filename; 450 layer = cnl.layer; 451 return *this; 452 } 453 454 std::string setname; 455 std::string filename; 456 osg::ref_ptr<Layer> layer; 457 }; 458 459 typedef std::vector< CompoundNameLayer > Layers; 460 461 Layers _layers; 462 }; 463 464 465 class OSGTERRAIN_EXPORT SwitchLayer : public CompositeLayer 424 466 { 425 467 public: … … 434 476 void clear(); 435 477 436 void setActiveLayer(unsigned int i) { _activeLayer = i; } 437 unsigned int getActiveLayer() const { return _activeLayer; } 438 439 void setFileName(unsigned int i, const std::string& filename) { _layers[i].first = filename; if (_layers[i].second.valid()) _layers[i].second->setFileName(filename); } 440 const std::string& getFileName(unsigned int i) const { return _layers[i].second.valid() ? _layers[i].second->getFileName() : _layers[i].first; } 441 442 void setLayer(unsigned int i, Layer* layer) { _layers[i].second = layer; } 443 Layer* getLayer(unsigned int i) { return _layers[i].second.get(); } 444 const Layer* getLayer(unsigned int i) const { return _layers[i].second.get(); } 445 446 void addLayer(const std::string& filename) { _layers.push_back(FileNameLayerPair(filename,0)); } 447 448 void addLayer(Layer* layer) { _layers.push_back(FileNameLayerPair(layer->getFileName(),layer)); } 449 450 void removeLayer(unsigned int i) { _layers.erase(_layers.begin()+i); } 451 452 unsigned int getNumLayers() const { return _layers.size(); } 478 void setActiveLayer(int i) { _activeLayer = i; } 479 int getActiveLayer() const { return _activeLayer; } 453 480 454 481 protected: … … 456 483 virtual ~SwitchLayer() {} 457 484 458 typedef std::pair< std::string, osg::ref_ptr<Layer> > FileNameLayerPair; 459 460 typedef std::vector< FileNameLayerPair > Layers; 461 462 unsigned int _activeLayer; 463 Layers _layers; 464 }; 485 int _activeLayer; 486 }; 487 488 465 489 466 490 } OpenSceneGraph/trunk/src/osgPlugins/ive/CompositeLayer.cpp
r7786 r8805 43 43 { 44 44 out->writeBool(false); 45 out->writeString(get FileName(i));45 out->writeString(getCompoundName(i)); 46 46 } 47 47 } OpenSceneGraph/trunk/src/osgPlugins/ive/SwitchLayer.cpp
r8803 r8805 14 14 #include "Exception.h" 15 15 #include "SwitchLayer.h" 16 #include " Layer.h"16 #include "CompositeLayer.h" 17 17 18 18 using namespace ive; … … 24 24 25 25 // If the osg class is inherited by any other class we should also write this to file. 26 osgTerrain:: Layer* layer = dynamic_cast<osgTerrain::Layer*>(this);26 osgTerrain::CompositeLayer* layer = dynamic_cast<osgTerrain::CompositeLayer*>(this); 27 27 if (layer) 28 ((ive:: Layer*)(layer))->write(out);28 ((ive::CompositeLayer*)(layer))->write(out); 29 29 else 30 30 throw Exception("SwitchLayer::write(): Could not cast this osgLayer::SwitchLayer to an osgTerrain::Layer."); 31 31 32 32 33 out->writeUInt(getActiveLayer()); 34 35 LayerHelper helper; 36 37 out->writeUInt(getNumLayers()); 38 for(unsigned int i=0; i<getNumLayers(); ++i) 39 { 40 if(getLayer(i)) 41 { 42 out->writeBool(true); 43 helper.writeLayer(out, getLayer(i)); 44 } 45 else 46 { 47 out->writeBool(false); 48 out->writeString(getFileName(i)); 49 } 50 } 33 out->writeInt(getActiveLayer()); 51 34 } 52 35 … … 62 45 63 46 // If the osg class is inherited by any other class we should also read this from file. 64 osgTerrain:: Layer* layer = dynamic_cast<osgTerrain::Layer*>(this);47 osgTerrain::CompositeLayer* layer = dynamic_cast<osgTerrain::CompositeLayer*>(this); 65 48 if (layer) 66 ((ive:: Layer*)(layer))->read(in);49 ((ive::CompositeLayer*)(layer))->read(in); 67 50 else 68 51 throw Exception("SwitchLayer::read(): Could not cast this osgLayer::Layer to an osg::Group."); 69 52 70 71 setActiveLayer(in->readUInt()); 72 73 LayerHelper helper; 74 75 unsigned int numLayers = in->readUInt(); 76 for(unsigned int i=0; i<numLayers; ++i) 77 { 78 bool readInlineLayer = in->readBool(); 79 if (readInlineLayer) 80 { 81 addLayer(helper.readLayer(in)); 82 } 83 else 84 { 85 addLayer(in->readString()); 86 } 87 } 53 setActiveLayer(in->readInt()); 88 54 } OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/CompositeLayer.cpp
r7925 r8805 76 76 else if (fr.matchSequence("ProxyLayer %s") || fr.matchSequence("ProxyLayer %w")) 77 77 { 78 osgTerrain::ProxyLayer* proxyLayer = new osgTerrain::ProxyLayer; 79 proxyLayer->setFileName(fr[1].getStr()); 78 std::string setname; 79 std::string filename; 80 osgTerrain::extractSetNameAndFileName(fr[1].getStr(),setname, filename); 81 if (!filename.empty()) 82 { 83 osgTerrain::ProxyLayer* proxyLayer = new osgTerrain::ProxyLayer; 84 proxyLayer->setFileName(filename); 85 proxyLayer->setName(setname); 80 86 81 if (locator.valid()) proxyLayer->setLocator(locator.get()); 82 if (minLevel!=0) proxyLayer->setMinLevel(minLevel); 83 if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) proxyLayer->setMaxLevel(maxLevel); 87 if (locator.valid()) proxyLayer->setLocator(locator.get()); 88 if (minLevel!=0) proxyLayer->setMinLevel(minLevel); 89 if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) proxyLayer->setMaxLevel(maxLevel); 90 84 91 85 layer.addLayer(proxyLayer); 86 92 layer.addLayer(proxyLayer); 93 } 94 87 95 fr += 2; 88 96 … … 146 154 } 147 155 148 fw.indent()<<"ProxyLayer "<<proxyLayer->get FileName()<<std::endl;156 fw.indent()<<"ProxyLayer "<<proxyLayer->getCompoundName()<<std::endl; 149 157 } 150 158 } … … 156 164 else if (!layer.getFileName(i).empty()) 157 165 { 158 fw.indent()<<"file "<<layer.get FileName(i)<<std::endl;166 fw.indent()<<"file "<<layer.getCompoundName(i)<<std::endl; 159 167 } 160 168 } OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/HeightFieldLayer.cpp
r7780 r8805 34 34 if (fr.matchSequence("file %w") || fr.matchSequence("file %s")) 35 35 { 36 osg::ref_ptr<osg::HeightField> hf = osgDB::readHeightFieldFile(fr[1].getStr()); 37 if (hf.valid()) 36 std::string setname; 37 std::string filename; 38 osgTerrain::extractSetNameAndFileName(fr[1].getStr(),setname, filename); 39 if (!filename.empty()) 38 40 { 39 layer.setHeightField(hf.get()); 41 osg::ref_ptr<osg::HeightField> hf = osgDB::readHeightFieldFile(filename); 42 if (hf.valid()) 43 { 44 layer.setName(setname); 45 layer.setFileName(filename); 46 layer.setHeightField(hf.get()); 47 } 40 48 } 41 42 49 fr += 2; 43 50 itrAdvanced = true; … … 62 69 if (!layer.getFileName().empty()) 63 70 { 64 fw.indent()<<"file "<<layer.getFileName()<<std::endl; 71 std::string str = osgTerrain::createCompondSetNameAndFileName(layer.getName(), layer.getFileName()); 72 fw.indent()<<"file "<< str << std::endl; 65 73 } 66 74 else OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/ImageLayer.cpp
r7780 r8805 34 34 if (fr.matchSequence("file %w") || fr.matchSequence("file %s")) 35 35 { 36 osg::ref_ptr<osg::Image> image = osgDB::readImageFile(fr[1].getStr()); 37 if (image.valid()) 36 std::string setname; 37 std::string filename; 38 osgTerrain::extractSetNameAndFileName(fr[1].getStr(),setname, filename); 39 if (!filename.empty()) 38 40 { 39 layer.setImage(image.get()); 41 osg::ref_ptr<osg::Image> image = osgDB::readImageFile(filename); 42 if (image.valid()) 43 { 44 layer.setName(setname); 45 layer.setFileName(filename); 46 layer.setImage(image.get()); 47 } 40 48 } 41 49 42 50 fr += 2; 43 51 itrAdvanced = true; … … 54 62 if (!layer.getFileName().empty()) 55 63 { 56 fw.indent()<<"file "<<layer.getFileName()<<std::endl; 64 std::string str = osgTerrain::createCompondSetNameAndFileName(layer.getName(), layer.getFileName()); 65 fw.indent()<<"file "<< str << std::endl; 57 66 } 58 67 OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/SwitchLayer.cpp
r8803 r8805 34 34 new osgTerrain::SwitchLayer, 35 35 "SwitchLayer", 36 "Object SwitchLayer Layer",36 "Object SwitchLayer CompositeLayer Layer", 37 37 SwitchLayer_readLocalData, 38 38 SwitchLayer_writeLocalData … … 44 44 45 45 bool itrAdvanced = false; 46 47 osg::ref_ptr<osgTerrain::Locator> locator = 0;48 46 49 unsigned int i; 50 if (fr.read("ActiveLayer",i)) layer.setActiveLayer(i); 51 52 do 47 int i; 48 if (fr.read("ActiveLayer",i)) 53 49 { 54 itrAdvanced = false; 55 56 osg::ref_ptr<osg::Object> readObject = fr.readObjectOfType(osgDB::type_wrapper<osgTerrain::Locator>()); 57 locator = dynamic_cast<osgTerrain::Locator*>(readObject.get()); 58 if (readObject.valid()) itrAdvanced = true; 59 60 unsigned int minLevel=0; 61 if (fr.read("MinLevel",minLevel)) 62 { 63 itrAdvanced = true; 64 } 65 66 unsigned int maxLevel = MAXIMUM_NUMBER_OF_LEVELS; 67 if (fr.read("MaxLevel",maxLevel)) 68 { 69 itrAdvanced = true; 70 } 71 72 if (fr.matchSequence("file %s") || fr.matchSequence("file %w") ) 73 { 74 layer.addLayer(fr[1].getStr()); 75 fr += 2; 76 77 itrAdvanced = true; 78 } 79 else if (fr.matchSequence("ProxyLayer %s") || fr.matchSequence("ProxyLayer %w")) 80 { 81 osgTerrain::ProxyLayer* proxyLayer = new osgTerrain::ProxyLayer; 82 proxyLayer->setFileName(fr[1].getStr()); 83 84 if (locator.valid()) proxyLayer->setLocator(locator.get()); 85 if (minLevel!=0) proxyLayer->setMinLevel(minLevel); 86 if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) proxyLayer->setMaxLevel(maxLevel); 87 88 layer.addLayer(proxyLayer); 89 90 fr += 2; 91 92 itrAdvanced = true; 93 } 94 else 95 { 96 osg::ref_ptr<osg::Object> readObject = fr.readObjectOfType(osgDB::type_wrapper<osgTerrain::Layer>()); 97 osgTerrain::Layer* readLayer = dynamic_cast<osgTerrain::Layer*>(readObject.get()); 98 if (readLayer) 99 { 100 if (locator.valid()) 101 { 102 readLayer->setLocator(locator.get()); 103 locator = 0; 104 } 105 106 if (minLevel!=0) readLayer->setMinLevel(minLevel); 107 if (maxLevel!=MAXIMUM_NUMBER_OF_LEVELS) readLayer->setMaxLevel(maxLevel); 108 109 layer.addLayer(readLayer); 110 } 111 112 if (readObject.valid()) itrAdvanced = true; 113 } 114 115 } while (itrAdvanced); 116 117 if (locator.valid()) layer.setLocator(locator.get()); 50 layer.setActiveLayer(i); 51 itrAdvanced = true; 52 }; 118 53 119 54 return itrAdvanced; … … 126 61 fw.indent()<<"ActiveLayer "<<layer.getActiveLayer()<<std::endl; 127 62 128 for(unsigned int i=0; i<layer.getNumLayers();++i)129 {130 if (layer.getLayer(i))131 {132 const osgTerrain::ProxyLayer* proxyLayer = dynamic_cast<const osgTerrain::ProxyLayer*>(layer.getLayer(i));133 if (proxyLayer)134 {135 if (!proxyLayer->getFileName().empty())136 {137 const osgTerrain::Locator* locator = proxyLayer->getLocator();138 if (locator && !locator->getDefinedInFile())139 {140 fw.writeObject(*locator);141 }142 143 if (proxyLayer->getMinLevel()!=0)144 {145 fw.indent()<<"MinLevel "<<proxyLayer->getMinLevel()<<std::endl;146 }147 148 if (proxyLayer->getMaxLevel()!=MAXIMUM_NUMBER_OF_LEVELS)149 {150 fw.indent()<<"MaxLevel "<<proxyLayer->getMaxLevel()<<std::endl;151 }152 153 fw.indent()<<"ProxyLayer "<<proxyLayer->getFileName()<<std::endl;154 }155 }156 else157 {158 fw.writeObject(*(layer.getLayer(i)));159 }160 }161 else if (!layer.getFileName(i).empty())162 {163 fw.indent()<<"file "<<layer.getFileName(i)<<std::endl;164 }165 }166 167 168 169 63 return true; 170 64 } OpenSceneGraph/trunk/src/osgTerrain/Layer.cpp
r8803 r8805 16 16 17 17 using namespace osgTerrain; 18 19 void osgTerrain::extractSetNameAndFileName(const std::string& compoundstring, std::string& setname, std::string& filename) 20 { 21 std::string::size_type setcolonpos = compoundstring.find("set:"); 22 if (setcolonpos==std::string::npos) 23 { 24 setname = ""; 25 filename = compoundstring; 26 return; 27 } 28 29 if (compoundstring.size()==4) 30 { 31 setname = ""; 32 filename = ""; 33 return; 34 } 35 36 std::string::size_type secondcolonpos = compoundstring.find_first_of(':', setcolonpos+4); 37 if (secondcolonpos==std::string::npos) 38 { 39 setname = compoundstring.substr(setcolonpos+4,std::string::npos); 40 filename = ""; 41 return; 42 } 43 44 setname = compoundstring.substr(setcolonpos+4,secondcolonpos-setcolonpos-4); 45 filename = compoundstring.substr(secondcolonpos+1, std::string::npos); 46 } 47 48 std::string osgTerrain::createCompondSetNameAndFileName(const std::string& setname, const std::string& filename) 49 { 50 if (setname.empty()) return filename; 51 return std::string("set:")+setname+std::string(":")+filename; 52 } 53 18 54 19 55 Layer::Layer(): … … 457 493 } 458 494 495 ///////////////////////////////////////////////////////////////////////////// 496 // 497 // ProxyLayer 498 // 499 ProxyLayer::ProxyLayer() 500 { 501 } 502 503 ProxyLayer::ProxyLayer(const ProxyLayer& proxyLayer,const osg::CopyOp& copyop): 504 Layer(proxyLayer,copyop) 505 { 506 } 507 508 ProxyLayer::~ProxyLayer() 509 { 510 } 511 512 void ProxyLayer::setFileName(const std::string& filename) 513 { 514 _filename = filename; 515 if (_implementation.valid()) 516 { 517 _implementation->setFileName(_filename); 518 } 519 } 520 521 unsigned int ProxyLayer::getNumColumns() const 522 { 523 if (_implementation.valid()) return _implementation->getNumColumns(); 524 else return 0; 525 } 526 527 unsigned int ProxyLayer::getNumRows() const 528 { 529 if (_implementation.valid()) return _implementation->getNumRows(); 530 else return 0; 531 } 532 533 bool ProxyLayer::transform(float offset, float scale) 534 { 535 if (_implementation.valid()) return _implementation->transform(offset,scale); 536 else return false; 537 } 538 539 bool ProxyLayer::getValue(unsigned int i, unsigned int j, float& value) const 540 { 541 if (_implementation.valid()) return _implementation->getValue(i,j,value); 542 else return false; 543 } 544 545 bool ProxyLayer::getValue(unsigned int i, unsigned int j, osg::Vec2& value) const 546 { 547 if (_implementation.valid()) return _implementation->getValue(i,j,value); 548 else return false; 549 } 550 551 bool ProxyLayer::getValue(unsigned int i, unsigned int j, osg::Vec3& value) const 552 { 553 if (_implementation.valid()) return _implementation->getValue(i,j,value); 554 else return false; 555 } 556 557 bool ProxyLayer::getValue(unsigned int i, unsigned int j, osg::Vec4& value) const 558 { 559 if (_implementation.valid()) return _implementation->getValue(i,j,value); 560 else return false; 561 } 562 563 void ProxyLayer::dirty() 564 { 565 if (_implementation.valid()) _implementation->dirty(); 566 } 567 568 void ProxyLayer::setModifiedCount(unsigned int value) 569 { 570 if (_implementation.valid()) _implementation->setModifiedCount(value); 571 }; 572 573 unsigned int ProxyLayer::getModifiedCount() const 574 { 575 return _implementation.valid() ? _implementation->getModifiedCount() : 0; 576 } 577 578 579 osg::BoundingSphere ProxyLayer::computeBound(bool treatAsElevationLayer) const 580 { 581 if (_implementation.valid()) return _implementation->computeBound(treatAsElevationLayer); 582 else return osg::BoundingSphere(); 583 } 584 585 459 586 460 587 ///////////////////////////////////////////////////////////////////////////// … … 477 604 } 478 605 606 void CompositeLayer::setCompoundName(unsigned int i, const std::string& compoundname) 607 { 608 std::string setname; 609 std::string filename; 610 extractSetNameAndFileName(compoundname, setname, filename); 611 612 _layers[i].setname = setname; 613 _layers[i].filename = filename; 614 } 615 616 std::string CompositeLayer::getCompoundName(unsigned int i) const 617 { 618 return createCompondSetNameAndFileName(_layers[i].setname, _layers[i].filename); 619 } 620 621 void CompositeLayer::addLayer(const std::string& compoundname) 622 { 623 std::string setname; 624 std::string filename; 625 extractSetNameAndFileName(compoundname, setname, filename); 626 627 _layers.push_back(CompoundNameLayer(setname,filename,0)); 628 } 629 479 630 ///////////////////////////////////////////////////////////////////////////// 480 631 // 481 // ProxyLayer482 //483 ProxyLayer::ProxyLayer()484 {485 }486 487 ProxyLayer::ProxyLayer(const ProxyLayer& proxyLayer,const osg::CopyOp& copyop):488 Layer(proxyLayer,copyop)489 {490 }491 492 ProxyLayer::~ProxyLayer()493 {494 }495 496 void ProxyLayer::setFileName(const std::string& filename)497 {498 _filename = filename;499 if (_implementation.valid())500 {501 _implementation->setFileName(_filename);502 }503 }504 505 unsigned int ProxyLayer::getNumColumns() const506 {507 if (_implementation.valid()) return _implementation->getNumColumns();508 else return 0;509 }510 511 unsigned int ProxyLayer::getNumRows() const512 {513 if (_implementation.valid()) return _implementation->getNumRows();514 else return 0;515 }516 517 bool ProxyLayer::transform(float offset, float scale)518 {519 if (_implementation.valid()) return _implementation->transform(offset,scale);520 else return false;521 }522 523 bool ProxyLayer::getValue(unsigned int i, unsigned int j, float& value) const524 {525 if (_implementation.valid()) return _implementation->getValue(i,j,value);526 else return false;527 }528 529 bool ProxyLayer::getValue(unsigned int i, unsigned int j, osg::Vec2& value) const530 {531 if (_implementation.valid()) return _implementation->getValue(i,j,value);532 else return false;533 }534 535 bool ProxyLayer::getValue(unsigned int i, unsigned int j, osg::Vec3& value) const536 {537 if (_implementation.valid()) return _implementation->getValue(i,j,value);538 else return false;539 }540 541 bool ProxyLayer::getValue(unsigned int i, unsigned int j, osg::Vec4& value) const542 {543 if (_implementation.valid()) return _implementation->getValue(i,j,value);544 else return false;545 }546 547 void ProxyLayer::dirty()548 {549 if (_implementation.valid()) _implementation->dirty();550 }551 552 void ProxyLayer::setModifiedCount(unsigned int value)553 {554 if (_implementation.valid()) _implementation->setModifiedCount(value);555 };556 557 unsigned int ProxyLayer::getModifiedCount() const558 {559 return _implementation.valid() ? _implementation->getModifiedCount() : 0;560 }561 562 563 osg::BoundingSphere ProxyLayer::computeBound(bool treatAsElevationLayer) const564 {565 if (_implementation.valid()) return _implementation->computeBound(treatAsElevationLayer);566 else return osg::BoundingSphere();567 }568 569 570 /////////////////////////////////////////////////////////////////////////////571 //572 632 // SwitchLayer 573 633 // 574 634 SwitchLayer::SwitchLayer(): 575 _activeLayer( 0)635 _activeLayer(-1) 576 636 { 577 637 } 578 638 579 639 SwitchLayer::SwitchLayer(const SwitchLayer& switchLayer,const osg::CopyOp& copyop): 580 Layer(switchLayer,copyop), 581 _activeLayer(0) 582 { 583 } 584 585 586 void SwitchLayer::clear() 587 { 588 _layers.clear(); 589 } 590 640 CompositeLayer(switchLayer,copyop), 641 _activeLayer(-1) 642 { 643 }
