Remove pair from module when one of them are deleted

This commit is contained in:
ENG-VIDAVIZ-0\ylvas
2021-12-16 11:43:02 -05:00
parent e839ee05b7
commit e923f9c805
5 changed files with 22 additions and 8 deletions

View File

@@ -430,7 +430,7 @@ void SkyBrowserModule::setSelectedObject()
}
}
void SkyBrowserModule::addTargetBrowserPair(std::string targetId, std::string browserId) {
void SkyBrowserModule::addTargetBrowserPair(const std::string& targetId, const std::string& browserId) {
ScreenSpaceSkyTarget* target = dynamic_cast<ScreenSpaceSkyTarget*>(
global::renderEngine->screenSpaceRenderable(targetId)
@@ -445,12 +445,14 @@ void SkyBrowserModule::addTargetBrowserPair(std::string targetId, std::string br
}
}
void SkyBrowserModule::removeTargetBrowserPair(std::string& id) {
void SkyBrowserModule::removeTargetBrowserPair(const std::string& id) {
Pair* found = getPair(id);
if (!found) {
return;
}
found->getTarget()->setSkyBrowser(nullptr);
auto it = std::remove_if(std::begin(_targetsBrowsers), std::end(_targetsBrowsers),
[&](const std::unique_ptr<Pair>& pair) {
return *found == *(pair.get());

View File

@@ -91,8 +91,8 @@ public:
bool isCameraInSolarSystem();
// Managing the target browser pairs
void removeTargetBrowserPair(std::string& browserId);
void addTargetBrowserPair(std::string targetId, std::string browserId);
void removeTargetBrowserPair(const std::string& browserId);
void addTargetBrowserPair(const std::string& targetId, const std::string& browserId);
// Hover circle
void moveHoverCircle(int i);

View File

@@ -536,23 +536,23 @@ int createTargetBrowserPair(lua_State* L) {
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + browser + ");",
scripting::ScriptEngine::RemoteScripting::No
scripting::ScriptEngine::RemoteScripting::Yes
);
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + target + ");",
scripting::ScriptEngine::RemoteScripting::No
scripting::ScriptEngine::RemoteScripting::Yes
);
openspace::global::scriptEngine->queueScript(
"openspace.skybrowser.addPairToSkyBrowserModule('" + idTarget + "','"
+ idBrowser + "');",
scripting::ScriptEngine::RemoteScripting::No
scripting::ScriptEngine::RemoteScripting::Yes
);
openspace::global::scriptEngine->queueScript(
"openspace.skybrowser.setSelectedBrowser('" + idBrowser + "');",
scripting::ScriptEngine::RemoteScripting::No
scripting::ScriptEngine::RemoteScripting::Yes
);
return 0;

View File

@@ -1,8 +1,10 @@
#include <modules/skybrowser/include/screenspaceskybrowser.h>
#include <modules/skybrowser/skybrowsermodule.h>
#include <modules/skybrowser/include/utility.h>
#include <openspace/engine/globals.h>
#include <openspace/engine/windowdelegate.h>
#include <openspace/engine/moduleengine.h>
#include <openspace/rendering/renderengine.h>
#include <ghoul/logging/logmanager.h>
#include <ghoul/misc/dictionaryjsonformatter.h> // formatJson
@@ -121,7 +123,11 @@ namespace openspace {
}
ScreenSpaceSkyBrowser::~ScreenSpaceSkyBrowser() {
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getPair(identifier())) {
module->removeTargetBrowserPair(identifier());
}
}
bool ScreenSpaceSkyBrowser::initializeGL() {

View File

@@ -1,8 +1,10 @@
#include <modules/skybrowser/include/screenspaceskytarget.h>
#include <modules/skybrowser/skybrowsermodule.h>
#include <modules/skybrowser/include/screenspaceskybrowser.h>
#include <modules/skybrowser/include/utility.h>
#include <openspace/engine/globals.h>
#include <openspace/engine/moduleengine.h>
#include <openspace/navigation/navigationhandler.h>
#include <openspace/rendering/renderengine.h>
#include <openspace/rendering/helper.h>
@@ -112,7 +114,11 @@ namespace openspace {
}
ScreenSpaceSkyTarget::~ScreenSpaceSkyTarget() {
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getPair(identifier())) {
module->removeTargetBrowserPair(identifier());
}
}
// Pure virtual in the screen space renderable class and hence must be defined