From 1fe86fe843188abaaa3cc3effed021646cb3bec9 Mon Sep 17 00:00:00 2001 From: sylvass Date: Wed, 1 Dec 2021 13:48:12 -0500 Subject: [PATCH] Cleanup, make hover circle add itself via lua function to the module. Make functions consistent how they interact with WWT --- data/assets/customization/gui.asset | 2 +- data/assets/hoverCircle.asset | 38 +++++++----- modules/skybrowser/include/wwtdatahandler.h | 2 +- modules/skybrowser/skybrowsermodule.cpp | 64 ++++++--------------- modules/skybrowser/skybrowsermodule.h | 8 +-- modules/skybrowser/skybrowsermodule_lua.inl | 44 ++++++++++++-- 6 files changed, 86 insertions(+), 72 deletions(-) diff --git a/data/assets/customization/gui.asset b/data/assets/customization/gui.asset index e18cd44a7f..6a43444b0a 100644 --- a/data/assets/customization/gui.asset +++ b/data/assets/customization/gui.asset @@ -1,4 +1,4 @@ -asset.export("webguiDevelopmentMode", false) +asset.export("webguiDevelopmentMode", true) -- To make changes to the webgui: diff --git a/data/assets/hoverCircle.asset b/data/assets/hoverCircle.asset index c43db9634c..23c7fd2fbb 100644 --- a/data/assets/hoverCircle.asset +++ b/data/assets/hoverCircle.asset @@ -1,15 +1,27 @@ local assetHelper = asset.require('util/asset_helper') - local spec = { - Identifier = "HoverCircle", - Type = "ScreenSpaceImageLocal", - Name = "HoverCircle", - FaceCamera = false, - UseRadiusAzimuthElevation = false, - RadiusAzimuthElevation = {1.0, 0.0, 0.0}, -- use for dome - Scale= 0.015, - Enabled = false, - TexturePath = "${ASSETS}/circle.png", - CartesianPosition = { 0, 0, -2.1 }, - }; -assetHelper.registerScreenSpaceRenderables(asset, { spec }) +local id = "HoverCircle" + +local circle = { + Identifier = id, + Type = "ScreenSpaceImageLocal", + Name = "HoverCircle", + FaceCamera = false, + UseRadiusAzimuthElevation = false, + RadiusAzimuthElevation = {1.0, 0.0, 0.0}, -- use for dome + Scale= 0.015, + Enabled = false, + TexturePath = "${ASSETS}/circle.png", + CartesianPosition = { 0, 0, -2.1 }, +}; + +asset.onInitialize(function () + openspace.addScreenSpaceRenderable(circle) + openspace.skybrowser.setHoverCircle(id) +end) + +asset.onDeinitialize(function () + openspace.removeScreenSpaceRenderable(circle) +end) + +asset.export("circle", {circle}) diff --git a/modules/skybrowser/include/wwtdatahandler.h b/modules/skybrowser/include/wwtdatahandler.h index 71ea59e3d7..ab765087ed 100644 --- a/modules/skybrowser/include/wwtdatahandler.h +++ b/modules/skybrowser/include/wwtdatahandler.h @@ -59,7 +59,7 @@ namespace openspace { void loadImages(const std::string& root, const std::string& directory, std::vector& speckFiles); int nLoadedImages() const; - const ImageData& getImage(const int i) const; + const ImageData& getImage(int i) const; private: diff --git a/modules/skybrowser/skybrowsermodule.cpp b/modules/skybrowser/skybrowsermodule.cpp index 2a2f9affda..5935ef7991 100644 --- a/modules/skybrowser/skybrowsermodule.cpp +++ b/modules/skybrowser/skybrowsermodule.cpp @@ -57,6 +57,13 @@ namespace openspace { "Add one or multiple exoplanet systems to the scene, as specified by the " "input. An input string should be the name of the system host star" }, + { + "setHoverCircle", + &skybrowser::luascriptfunctions::setHoverCircle, + "string or list of strings", + "Add one or multiple exoplanet systems to the scene, as specified by the " + "input. An input string should be the name of the system host star" + }, { "moveCircleToHoverImage", &skybrowser::luascriptfunctions::moveCircleToHoverImage, @@ -209,15 +216,9 @@ namespace openspace { return res; } - - SkyBrowserModule::SkyBrowserModule() : OpenSpaceModule(SkyBrowserModule::Name) { - // Find the hover circle - _hoverCircle = dynamic_cast( - global::renderEngine->screenSpaceRenderable("HoverCircle")); - // Set callback functions global::callback::mouseButton->emplace_back( [&](MouseButton button, MouseAction action, KeyModifier modifier) -> bool { @@ -499,7 +500,7 @@ void SkyBrowserModule::createTargetBrowserPair() { glm::vec3 positionBrowser = { -1.0f, -0.5f, -2.1f }; std::string guiPath = "/SkyBrowser"; std::string url = "https://data.openspaceproject.com/dist/skybrowser/page/"; - //std::string localHostUrl = "http://localhost:8000"; + //std::string url = "http://localhost:8000"; const std::string browser = "{" "Identifier = '" + idBrowser + "'," @@ -575,42 +576,6 @@ void SkyBrowserModule::set3dBrowser(const std::string& id) } } -void SkyBrowserModule::selectImage2dBrowser(int i) -{ - Pair* selected = getPair(_selectedBrowser); - if (selected) { - - const ImageData& image = _dataHandler->getImage(i); - // Load image into browser - LINFO("Loading image " + image.name); - selected->selectImage(image, i); - - bool isInView = skybrowser::isCoordinateInView(image.equatorialCartesian); - // If the coordinate is not in view, rotate camera - if (image.hasCelestialCoords) { - if(!isInView) { - startRotatingCamera( - skybrowser::equatorialToGalactic(image.equatorialCartesian) - ); - } - } - } -} - -void SkyBrowserModule::selectImage3dBrowser(int i) -{ - if (!_browser3dNode) { - return; - } - RenderableSkyBrowser* renderable = dynamic_cast( - _browser3dNode->renderable()); - if (renderable) { - const ImageData& image = _dataHandler->getImage(i); - renderable->displayImage(image.imageUrl, i); - } - -} - void SkyBrowserModule::lookAtTarget(std::string id) { Pair* pair = getPair(id); @@ -619,6 +584,11 @@ void SkyBrowserModule::lookAtTarget(std::string id) } } +void SkyBrowserModule::setHoverCircle(ScreenSpaceImageLocal* circle) +{ + _hoverCircle = circle; +} + void SkyBrowserModule::moveHoverCircle(int i) { const ImageData& image = _dataHandler->getImage(i); @@ -626,20 +596,20 @@ void SkyBrowserModule::moveHoverCircle(int i) // Only move and show circle if the image has coordinates if (_hoverCircle && image.hasCelestialCoords && _isCameraInSolarSystem) { // Make circle visible - _hoverCircle->property("Enabled")->set(true); + _hoverCircle->setEnabled(true); // Calculate coords for the circle and translate glm::vec3 coordsScreen = skybrowser::equatorialToScreenSpace3d( image.equatorialCartesian ); - _hoverCircle->property("CartesianPosition")->set(coordsScreen); + _hoverCircle->setCartesianPosition(coordsScreen); } } void SkyBrowserModule::disableHoverCircle() { if (_hoverCircle && _hoverCircle->isEnabled()) { - _hoverCircle->property("Enabled")->set(false); + _hoverCircle->setEnabled(false); } } @@ -669,7 +639,7 @@ void SkyBrowserModule::add2dSelectedImagesTo3d(const std::string& pairId) } } -const std::unique_ptr& SkyBrowserModule::getWWTDataHandler() { +const std::unique_ptr& SkyBrowserModule::getWwtDataHandler() { return _dataHandler; } diff --git a/modules/skybrowser/skybrowsermodule.h b/modules/skybrowser/skybrowsermodule.h index 500ee1efb5..9764582b95 100644 --- a/modules/skybrowser/skybrowsermodule.h +++ b/modules/skybrowser/skybrowsermodule.h @@ -61,18 +61,18 @@ public: SceneGraphNode* get3dBrowserNode(); RenderableSkyBrowser* get3dBrowser(); RenderableSkyBrowser* get3dBrowser(const std::string& id); - const std::unique_ptr& getWWTDataHandler(); + const std::unique_ptr& getWwtDataHandler(); std::string selectedBrowserId(); // Setters void set3dBrowser(const std::string& id); void setSelectedBrowser(const std::string& id); - void selectImage2dBrowser(int i); - void selectImage3dBrowser(int i); void setSelectedObject(); // Manage mouse interactions + void setHoverCircle(ScreenSpaceImageLocal* circle); // Rotation, animation, placement void lookAtTarget(std::string id); + void startRotatingCamera(glm::dvec3 endAnimation); // Pass in galactic coordinate void incrementallyRotateCamera(double deltaTime); void incrementallyFadeBrowserTargets(Transparency goal, float deltaTime); void incrementallyAnimateTargets(double deltaTime); @@ -106,7 +106,7 @@ protected: private: - void startRotatingCamera(glm::dvec3 endAnimation); // Pass in galactic coordinate + // The browsers and targets std::vector> _targetsBrowsers; Pair* _mouseOnPair{ nullptr }; diff --git a/modules/skybrowser/skybrowsermodule_lua.inl b/modules/skybrowser/skybrowsermodule_lua.inl index 7a6a2f38d0..1856c002a3 100644 --- a/modules/skybrowser/skybrowsermodule_lua.inl +++ b/modules/skybrowser/skybrowsermodule_lua.inl @@ -23,15 +23,47 @@ int selectImage(lua_State* L) { SkyBrowserModule* module = global::moduleEngine->module(); if (module->isCameraInSolarSystem()) { - module->selectImage2dBrowser(i); + Pair* selected = module->getPair(module->selectedBrowserId()); + if (selected) { + + const ImageData& image = module->getWwtDataHandler()->getImage(i); + // Load image into browser + LINFO("Loading image " + image.name); + selected->selectImage(image, i); + + bool isInView = skybrowser::isCoordinateInView(image.equatorialCartesian); + // If the coordinate is not in view, rotate camera + if (image.hasCelestialCoords && !isInView) { + module->startRotatingCamera( + skybrowser::equatorialToGalactic(image.equatorialCartesian) + ); + } + } } - else { - module->selectImage3dBrowser(i); + else if (module->get3dBrowser()) { + RenderableSkyBrowser* renderable = dynamic_cast( + module->get3dBrowser()); + if (renderable) { + const ImageData& image = module->getWwtDataHandler()->getImage(i); + renderable->displayImage(image.imageUrl, i); + } } return 0; } +int setHoverCircle(lua_State* L) { + ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::setHoverCircle"); + SkyBrowserModule* module = global::moduleEngine->module(); + std::string id = ghoul::lua::value(L, 1); + + ScreenSpaceImageLocal* circle = dynamic_cast( + global::renderEngine->screenSpaceRenderable(id)); + module->setHoverCircle(circle); + + return 0; +} + int moveCircleToHoverImage(lua_State* L) { // Load image ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::moveCircleToHoverImage"); @@ -213,7 +245,7 @@ int getListOfImages(lua_State* L) { lua_newtable(L); for (int i = 0; i < module->nLoadedImages(); i++) { - const ImageData& img = module->getWWTDataHandler()->getImage(i); + const ImageData& img = module->getWwtDataHandler()->getImage(i); glm::dvec3 coords = img.equatorialCartesian; glm::dvec3 position = img.position3d; @@ -477,7 +509,7 @@ int place3dSkyBrowser(lua_State* L) { // Image index to place in 3D const int i = ghoul::lua::value(L, 1); SkyBrowserModule* module = global::moduleEngine->module(); - const ImageData image = module->getWWTDataHandler()->getImage(i); + const ImageData image = module->getWwtDataHandler()->getImage(i); module->place3dBrowser(image, i); @@ -491,7 +523,7 @@ int removeSelectedImageInBrowser(lua_State* L) { const std::string id = ghoul::lua::value(L, 1); // Get browser SkyBrowserModule* module = global::moduleEngine->module(); - const ImageData& image = module->getWWTDataHandler()->getImage(i); + const ImageData& image = module->getWwtDataHandler()->getImage(i); Pair* pair = module->getPair(id); if (pair) {