Add class Pair for skybrowser + skytarget pair

This commit is contained in:
sylvass
2021-11-03 10:37:40 -04:00
parent d5422f429d
commit b64fc94599
4 changed files with 22 additions and 56 deletions

View File

@@ -30,9 +30,10 @@ set(HEADER_FILES
include/screenspaceskybrowser.h
include/screenspaceskytarget.h
include/wwtdatahandler.h
tinyxml2/tinyxml2.h
include/utility.h
include/renderableskybrowser.h
include/pair.h
tinyxml2/tinyxml2.h
)
source_group("Header Files" FILES ${HEADER_FILES})
@@ -44,9 +45,10 @@ set(SOURCE_FILES
src/screenspaceskybrowser.cpp
src/screenspaceskytarget.cpp
src/wwtdatahandler.cpp
tinyxml2/tinyxml2.cpp
src/utility.cpp
src/renderableskybrowser.cpp
src/pair.cpp
tinyxml2/tinyxml2.cpp
)
source_group("Source Files" FILES ${SOURCE_FILES})

View File

@@ -37,6 +37,7 @@
#include <openspace/util/distanceconstants.h>
#include <openspace/util/factorymanager.h>
#include <modules/skybrowser/include/wwtdatahandler.h>
#include <modules/skybrowser/include/pair.h>
#include <modules/skybrowser/skybrowsermodule.h>
#include "skybrowsermodule_lua.inl"
#include <glm/gtx/vector_angle.hpp>
@@ -391,7 +392,7 @@ SkyBrowserModule::SkyBrowserModule()
double deltaTime = global::windowDelegate->deltaTime();
// Fade out or in browser & target
for (SkyBrowserModule::Pair pair : _targetsBrowsers) {
for (Pair pair : _targetsBrowsers) {
ScreenSpaceSkyBrowser* browser = pair.getBrowser();
// If outside solar system and browser is visible
if (!_cameraInSolarSystem && browser->isEnabled()) {
@@ -668,12 +669,12 @@ const WwtDataHandler* SkyBrowserModule::getWWTDataHandler() {
return _dataHandler;
}
std::vector<SkyBrowserModule::Pair>& SkyBrowserModule::getPairs()
std::vector<Pair>& SkyBrowserModule::getPairs()
{
return _targetsBrowsers;
}
SkyBrowserModule::Pair* SkyBrowserModule::getPair(std::string id)
Pair* SkyBrowserModule::getPair(std::string id)
{
auto it = std::find_if(std::begin(_targetsBrowsers), std::end(_targetsBrowsers),
[&](Pair& pair) {

View File

@@ -43,11 +43,11 @@ namespace openspace {
class ScreenSpaceSkyBrowser;
class ScreenSpaceSkyTarget;
class RenderableSkyBrowser;
class ScreenSpaceRenderable;
class ScreenSpaceImageLocal;
class WwtDataHandler;
class SceneGraphNode;
class ImageData;
class Pair;
class SkyBrowserModule : public OpenSpaceModule {
@@ -55,41 +55,6 @@ public:
constexpr static const char* Name = "SkyBrowser";
class Pair {
public:
Pair(ScreenSpaceSkyBrowser* browser, ScreenSpaceSkyTarget* target)
: _target(target), _browser(browser) {}
Pair(Pair const&) = default;
Pair& operator=(Pair other)
{
std::swap(_target, other._target);
std::swap(_browser, other._browser);
return *this;
}
ScreenSpaceSkyTarget* getTarget() {
return _target;
}
ScreenSpaceSkyBrowser* getBrowser() {
return _browser;
}
friend bool operator==(const Pair& lhs, const Pair& rhs) {
return lhs._target == rhs._target && lhs._browser == rhs._browser;
}
friend bool operator!=(const Pair& lhs, const Pair& rhs) {
return !(lhs == rhs);
}
private:
ScreenSpaceSkyTarget* _target{ nullptr };
ScreenSpaceSkyBrowser* _browser{ nullptr };
};
// Constructor & destructor
SkyBrowserModule();
virtual ~SkyBrowserModule();

View File

@@ -11,6 +11,7 @@
#include <modules/skybrowser/include/screenspaceskybrowser.h>
#include <modules/skybrowser/include/screenspaceskytarget.h>
#include <modules/skybrowser/include/renderableskybrowser.h>
#include <modules/skybrowser/include/pair.h>
#include <modules/skybrowser/skybrowsermodule.h>
#include <modules/skybrowser/include/utility.h>
#include <ghoul/misc/dictionaryluaformatter.h>
@@ -75,8 +76,7 @@ namespace openspace::skybrowser::luascriptfunctions {
const std::string id = ghoul::lua::value<std::string>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getPair(id)) {
SkyBrowserModule::Pair* pair = module->getPair(id);
pair->getTarget()->lock();
module->getPair(id)->lock();
}
return 0;
}
@@ -86,8 +86,7 @@ namespace openspace::skybrowser::luascriptfunctions {
const std::string id = ghoul::lua::value<std::string>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getPair(id)) {
SkyBrowserModule::Pair* pair = module->getPair(id);
pair->getTarget()->unlock();
module->getPair(id)->unlock();
}
return 0;
}
@@ -101,8 +100,7 @@ namespace openspace::skybrowser::luascriptfunctions {
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->getPair(id)) {
SkyBrowserModule::Pair* pair = module->getPair(id);
pair->getBrowser()->setImageOrder(i, order);
module->getPair(id)->setImageOrder(i, order);
}
else if (module->get3dBrowser() != nullptr) {
RenderableSkyBrowser* browser3d = dynamic_cast<RenderableSkyBrowser*>(
@@ -153,8 +151,8 @@ namespace openspace::skybrowser::luascriptfunctions {
// Send out ID's to the browsers
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::vector<SkyBrowserModule::Pair> pairs = module->getPairs();
for (SkyBrowserModule::Pair pair : pairs) {
std::vector<Pair> pairs = module->getPairs();
for (Pair pair : pairs) {
pair.getBrowser()->sendIdToBrowser();
}
SceneGraphNode* node = module->get3dBrowser();
@@ -362,9 +360,9 @@ namespace openspace::skybrowser::luascriptfunctions {
// Pass data for all the browsers and the corresponding targets
if (module->cameraInSolarSystem()) {
std::vector<SkyBrowserModule::Pair> pairs = module->getPairs();
std::vector<Pair> pairs = module->getPairs();
for (SkyBrowserModule::Pair pair : pairs) {
for (Pair pair : pairs) {
ScreenSpaceSkyBrowser* browser = pair.getBrowser();
ScreenSpaceSkyTarget* target = pair.getTarget();
std::string id = browser->identifier();
@@ -461,7 +459,7 @@ namespace openspace::skybrowser::luascriptfunctions {
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if(module->cameraInSolarSystem() && module->getPair(id)) {
SkyBrowserModule::Pair* pair = module->getPair(id);
Pair* pair = module->getPair(id);
module->startRotation(pair->getTarget()->targetDirectionGalactic());
}
else if (!module->cameraInSolarSystem() && module->get3dBrowser()) {
@@ -475,7 +473,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::set3dSelectedImagesAs2dSelection");
const std::string id = ghoul::lua::value<std::string>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
SkyBrowserModule::Pair* pair = module->getPair(id);
Pair* pair = module->getPair(id);
if (pair && module->get3dBrowser()) {
RenderableSkyBrowser* browser3d = dynamic_cast<RenderableSkyBrowser*>(
@@ -502,7 +500,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::Dictionary message = wwtmessage::setImageOpacity(i, opacity);
if (module->getPair(id)) {
SkyBrowserModule::Pair* pair = module->getPair(id);
Pair* pair = module->getPair(id);
pair->getBrowser()->sendMessageToWwt(message);
}
else if (module->get3dBrowser() != nullptr) {
@@ -518,7 +516,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::centerTargetOnScreen");
const std::string id = ghoul::lua::value<std::string>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
SkyBrowserModule::Pair* pair = module->getPair(id);
Pair* pair = module->getPair(id);
if (pair) {
// Animate the target to the center of the screen
pair->getTarget()->unlock();
@@ -591,7 +589,7 @@ namespace openspace::skybrowser::luascriptfunctions {
if (module->getPair(id)) {
SkyBrowserModule::Pair* pair = module->getPair(id);
Pair* pair = module->getPair(id);
// Remove image
pair->getBrowser()->removeSelectedImage(image, i);
}