diff --git a/modules/iswa/rendering/iswacontainer.cpp b/modules/iswa/rendering/iswacontainer.cpp index 1be6f54f92..65b8e58d24 100644 --- a/modules/iswa/rendering/iswacontainer.cpp +++ b/modules/iswa/rendering/iswacontainer.cpp @@ -47,6 +47,7 @@ bool ISWAContainer::initialize(){ addISWACygnet("${OPENSPACE_DATA}/BATSRUS.cdf"); // addISWACygnet("${OPENSPACE_DATA}/ENLIL.cdf"); //addISWACygnet("${OPENSPACE_DATA}/test.png"); + addISWACygnet(5); addISWACygnet(7); return true; @@ -72,18 +73,19 @@ void ISWAContainer::render(const RenderData& data){ void ISWAContainer::update(const UpdateData& data){ - int i = 0; - for(auto& extFuture : _extFutures){ - if(extFuture->isFinished){ - std::string path = "${OPENSPACE_DATA}/scene/iswa/" + std::to_string(extFuture->id) + extFuture->extension; - std::shared_ptr cygnet = ISWAManager::ref().createISWACygnet(extFuture->id, std::move(path)); + for (auto it = _extFutures.begin(); it != _extFutures.end(); ) + { + if ((*it)->isFinished) { + std::string path = "${OPENSPACE_DATA}/scene/iswa/" + std::to_string((*it)->id) + (*it)->extension; + std::shared_ptr cygnet = ISWAManager::ref().createISWACygnet((*it)->id, std::move(path)); if(cygnet){ _iSWACygnets.push_back(cygnet); - _extFutures.erase( _extFutures.begin() + i ); - } else { - ++i; } + _extFutures.erase( it ); } + else { + ++it; + } } if(!_deletedCygnets.empty()) @@ -107,6 +109,12 @@ void ISWAContainer::addISWACygnet(int id){ _extFutures.push_back(extFuture); } +void ISWAContainer::addISWACygnet(std::shared_ptr cygnet){ + if(cygnet){ + _iSWACygnets.push_back(cygnet); + } +} + void ISWAContainer::deleteCygnet(std::string name){ std::shared_ptr c = iSWACygnet(name); diff --git a/modules/iswa/rendering/iswacontainer.h b/modules/iswa/rendering/iswacontainer.h index ba17698b10..433ded12fb 100644 --- a/modules/iswa/rendering/iswacontainer.h +++ b/modules/iswa/rendering/iswacontainer.h @@ -46,9 +46,10 @@ public: void addISWACygnet(std::string path); void addISWACygnet(int id); + void addISWACygnet(std::shared_ptr cygnet); - void deleteCygnet(ISWACygnet*); - void deleteCygnet(std::string); + void deleteCygnet(ISWACygnet* cygnet); + void deleteCygnet(std::string name); std::shared_ptr iSWACygnet(std::string name); diff --git a/modules/iswa/rendering/iswacygnet.h b/modules/iswa/rendering/iswacygnet.h index abddf6660f..46c4e40969 100644 --- a/modules/iswa/rendering/iswacygnet.h +++ b/modules/iswa/rendering/iswacygnet.h @@ -38,6 +38,8 @@ #include #include #include +#include +#include namespace openspace{ class ISWACygnet : public properties::PropertyOwner{ diff --git a/modules/iswa/rendering/screenspacecygnet.cpp b/modules/iswa/rendering/screenspacecygnet.cpp index af3a18ec72..42b80f3f21 100644 --- a/modules/iswa/rendering/screenspacecygnet.cpp +++ b/modules/iswa/rendering/screenspacecygnet.cpp @@ -40,6 +40,7 @@ ScreenSpaceCygnet::ScreenSpaceCygnet(int cygnetId, std::string path) , _cygnetId(cygnetId) , _path(path) { + std::cout << "screenspacecygnet constructor 1" << std::endl; _id = id(); setName("ScreenSpaceCygnet" + std::to_string(_id)); addProperty(_updateInterval); @@ -55,14 +56,12 @@ ScreenSpaceCygnet::ScreenSpaceCygnet(int cygnetId, std::string path) OsEng.gui()._iSWAproperty.registerProperty(&_updateInterval); OsEng.gui()._iSWAproperty.registerProperty(&_delete); - } ScreenSpaceCygnet::~ScreenSpaceCygnet(){} bool ScreenSpaceCygnet::initialize(){ _originalViewportSize = OsEng.windowWrapper().currentWindowResolution(); - createPlane(); createShaders(); updateTexture(); @@ -112,31 +111,24 @@ void ScreenSpaceCygnet::render(){ } void ScreenSpaceCygnet::update(){ - //if(_path != ""){ - _time = Time::ref().currentTime(); - _openSpaceUpdateInterval = abs(Time::ref().deltaTime()*_updateInterval); - if(_openSpaceUpdateInterval){ - if(abs(_time-_lastUpdateTime) >= _updateInterval){ - updateTexture(); - _lastUpdateTime = _time; - } - } - if(_futureTexture && _futureTexture->isFinished){ - //_path = absPath("${OPENSPACE_DATA}/"+_futureTexture->filePath); - loadTexture(); - - delete _futureTexture; - _futureTexture = nullptr; - } -/* } else { - if(_fileExtension == ""){ - //send new request - } else{ - _path = "${OPENSPACE_DATA}/"+ name()+_fileExtension; + _time = Time::ref().currentTime(); + _openSpaceUpdateInterval = abs(Time::ref().deltaTime()*_updateInterval); + if(_openSpaceUpdateInterval){ + if(abs(_time-_lastUpdateTime) >= _updateInterval){ updateTexture(); + _lastUpdateTime = _time; } - }*/ + } + + if(_futureTexture && _futureTexture->isFinished){ + + loadTexture(); + + delete _futureTexture; + _futureTexture = nullptr; + } + } void ScreenSpaceCygnet::updateTexture(){ diff --git a/modules/iswa/util/iswamanager.cpp b/modules/iswa/util/iswamanager.cpp index bd858afda0..babd2ef5cc 100644 --- a/modules/iswa/util/iswamanager.cpp +++ b/modules/iswa/util/iswamanager.cpp @@ -29,7 +29,7 @@ #include #include #include - +#include namespace openspace{ ISWAManager::ISWAManager() @@ -51,8 +51,39 @@ namespace openspace{ ISWAManager::~ISWAManager(){} - std::shared_ptr ISWAManager::createISWACygnet(int id, std::string path){ + void ISWAManager::addCygnet(std::string info){ + std::string token; + std::stringstream ss(info); + getline(ss,token,','); + int cygnetId = std::stoi(token); + /* // std::cout << token << std::endl; + getline(ss,token,','); + std::string parent = token;*/ + //if(parent == "Earth" || parent == "Sun"){ + /*std::shared_ptr cygnet; + cygnet = std::make_shared(); + cygnet->initialize();*/ + // cygnet->cygnetId(cygnetId); + // cygnet->parent(parent); + //_container->addISWACygnet(cygnet); + _container->addISWACygnet(cygnetId); + + //}else{ + // OsEng.renderEngine().registerScreenSpaceRenderable(std::make_shared(cygnetId)); + + //} + // std::cout << token << std::endl; + // if(token = ""){ + // std::cout << "empty" << std::endl; + // } + + // std::shared_ptr cygnet; + // _container->addCygnet(cygnet); + } + + std::shared_ptr ISWAManager::createISWACygnet(int id, std::string path){ + std::cout << "createISWACygnet " << id << std::endl; if(path != ""){ const std::string& extension = ghoul::filesystem::File(absPath(path)).fileExtension(); std::shared_ptr cygnet; @@ -63,6 +94,7 @@ namespace openspace{ } else if(id == 5) { //check some other condition that id==5 (based on metadata maybe?) OsEng.renderEngine().registerScreenSpaceRenderable(std::make_shared(id, path)); + return nullptr; } else { cygnet = std::make_shared(id, path); } @@ -94,7 +126,7 @@ namespace openspace{ std::shared_ptr extFuture = std::make_shared(); extFuture->isFinished = false; extFuture->id = id; - + std::cout << "extension id: "<< id << std::endl; DlManager.getFileExtension( iSWAurl(id), [extFuture](std::string extension){ diff --git a/modules/iswa/util/iswamanager.h b/modules/iswa/util/iswamanager.h index 816bbbc4a5..2953b0fca3 100644 --- a/modules/iswa/util/iswamanager.h +++ b/modules/iswa/util/iswamanager.h @@ -48,7 +48,10 @@ public: ISWAManager(); ~ISWAManager(); + std::shared_ptr createISWACygnet(int, std::string); + void addCygnet(std::string info); + DownloadManager::FileFuture* downloadImage(int, std::string); void downloadData(); diff --git a/modules/onscreengui/src/gui.cpp b/modules/onscreengui/src/gui.cpp index f97bae80fa..133c1c94e7 100644 --- a/modules/onscreengui/src/gui.cpp +++ b/modules/onscreengui/src/gui.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include @@ -141,7 +142,6 @@ namespace openspace { OsEng.renderEngine().registerScreenSpaceRenderable(std::make_shared(filepath)); } - namespace gui { GUI::GUI() @@ -417,12 +417,20 @@ void GUI::renderMainWindow() { ImGui::Checkbox("Help", &_help._isEnabled); - static const int bufferSize = 256; - static char buffer[bufferSize]; - ImGui::InputText("", buffer, bufferSize); + static const int addImageBufferSize = 256; + static char addImageBuffer[addImageBufferSize]; + ImGui::InputText("addImage", addImageBuffer, addImageBufferSize); if(ImGui::SmallButton("Add Image")){ - addScreenSpaceRenderable(std::string(buffer)); + addScreenSpaceRenderable(std::string(addImageBuffer)); + } + + static const int addCygnetBufferSize = 256; + static char addCygnetBuffer[addCygnetBufferSize]; + ImGui::InputText("addCynget", addCygnetBuffer, addCygnetBufferSize); + + if(ImGui::SmallButton("Add Cygnet")){ + ISWAManager::ref().addCygnet(std::string(addCygnetBuffer)); } ImGui::End();