diff --git a/modules/skybrowser/include/screenspaceskybrowser.h b/modules/skybrowser/include/screenspaceskybrowser.h index b5a0f7f5a6..ba582cdc46 100644 --- a/modules/skybrowser/include/screenspaceskybrowser.h +++ b/modules/skybrowser/include/screenspaceskybrowser.h @@ -28,7 +28,7 @@ namespace openspace { void sendMouseEvent(CefStructBase event, int x, int y) const; void WWTfollowCamera(); float fieldOfView() const; - void setFieldOfView(float fov); + void setVerticalFieldOfView(float fov); void scrollZoom(float scroll); ScreenSpaceSkyTarget* getSkyTarget(); @@ -49,7 +49,7 @@ namespace openspace { glm::ivec3 getColor(); // Flag for dimensions bool _browserDimIsDirty; - properties::FloatProperty _fieldOfView; + properties::FloatProperty _vfieldOfView; properties::StringProperty _skyTargetID; private: glm::vec2 _startDimensionsSize; diff --git a/modules/skybrowser/skybrowsermodule_lua.inl b/modules/skybrowser/skybrowsermodule_lua.inl index 1b4f92af91..2a03c411b5 100644 --- a/modules/skybrowser/skybrowsermodule_lua.inl +++ b/modules/skybrowser/skybrowsermodule_lua.inl @@ -56,7 +56,7 @@ namespace openspace::skybrowser::luascriptfunctions { browser->getSkyTarget()->lookAtGalacticCoord(imageCoordsGalactic); // In WWT, the definition of ZoomLevel is: VFOV = ZoomLevel / 6 - browser->setFieldOfView(resultImage.zoomLevel / 6); + browser->setVerticalFieldOfView(resultImage.zoomLevel / 6); } browser->sendMessageToWWT(browser->createMessageForSettingForegroundOpacityWWT(100)); return 1; @@ -64,8 +64,8 @@ namespace openspace::skybrowser::luascriptfunctions { int followCamera(lua_State* L) { // Load images from url - ghoul::lua::checkArgumentsAndThrow(L, 2, "lua::followCamera"); - + ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::followCamera"); + LINFO("Loading images from url"); SkyBrowserModule* module = global::moduleEngine->module(); std::string root = "https://raw.githubusercontent.com/WorldWideTelescope/wwt-web-client/master/assets/webclient-explore-root.wtml"; diff --git a/modules/skybrowser/src/screenspaceskybrowser.cpp b/modules/skybrowser/src/screenspaceskybrowser.cpp index 06b1010544..bdbee1780c 100644 --- a/modules/skybrowser/src/screenspaceskybrowser.cpp +++ b/modules/skybrowser/src/screenspaceskybrowser.cpp @@ -65,7 +65,7 @@ namespace openspace { ScreenSpaceSkyBrowser::ScreenSpaceSkyBrowser(const ghoul::Dictionary& dictionary) : ScreenSpaceBrowser(dictionary) , _browserDimensions(BrowserDimensionInfo, _dimensions, glm::ivec2(0.f), glm::ivec2(300.f)) - , _fieldOfView(ZoomInfo, 50.f, 0.1f, 70.f) + , _vfieldOfView(ZoomInfo, 50.f, 0.1f, 70.f) , _skyTargetID(TargetIDInfo) , _camIsSyncedWWT(true) , _skyTarget(nullptr) @@ -85,8 +85,8 @@ namespace openspace { }); addProperty(_browserDimensions); - _fieldOfView = p.zoom.value_or(_fieldOfView); - addProperty(_fieldOfView); + _vfieldOfView = p.zoom.value_or(_vfieldOfView); + addProperty(_vfieldOfView); _skyTargetID = p.targetID.value_or(_skyTargetID); addProperty(_skyTargetID); @@ -95,9 +95,9 @@ namespace openspace { setConnectedTarget(); }); - _fieldOfView.onChange([&]() { + _vfieldOfView.onChange([&]() { if (_skyTarget) { - _skyTarget->updateFOV(_fieldOfView); + _skyTarget->updateFOV(_vfieldOfView); } }); @@ -154,18 +154,18 @@ namespace openspace { } float ScreenSpaceSkyBrowser::fieldOfView() const { - return _fieldOfView; + return _vfieldOfView; } - void ScreenSpaceSkyBrowser::setFieldOfView(float fov) { - _fieldOfView = fov; + void ScreenSpaceSkyBrowser::setVerticalFieldOfView(float fov) { + _vfieldOfView = fov; } void ScreenSpaceSkyBrowser::scrollZoom(float scroll) { - float zoomFactor = log(_fieldOfView + 1.1f); + float zoomFactor = log(_vfieldOfView + 1.1f); float zoom = scroll > 0.0 ? -zoomFactor : zoomFactor; - _fieldOfView = std::clamp(_fieldOfView + zoom, 0.001f, 70.0f); + _vfieldOfView = std::clamp(_vfieldOfView + zoom, 0.001f, 70.0f); } void ScreenSpaceSkyBrowser::executeJavascript(std::string& script) const { @@ -196,6 +196,7 @@ namespace openspace { ghoul::Dictionary ScreenSpaceSkyBrowser::createMessageForMovingWWTCamera(const glm::dvec2 celestCoords, const float fov, const bool moveInstantly) const { using namespace std::string_literals; ghoul::Dictionary msg; + msg.setValue("event", "center_on_coordinates"s); msg.setValue("ra", static_cast(celestCoords[0])); msg.setValue("dec", static_cast(celestCoords[1])); @@ -264,7 +265,7 @@ namespace openspace { while (_camIsSyncedWWT) { glm::vec2 celestCoordsTarget = _skyTarget ? _skyTarget->getCelestialCoords() : glm::vec2(0.f); - ghoul::Dictionary message = createMessageForMovingWWTCamera(celestCoordsTarget, _fieldOfView); + ghoul::Dictionary message = createMessageForMovingWWTCamera(celestCoordsTarget, _vfieldOfView); // Sleep so we don't bombard WWT with too many messages std::this_thread::sleep_for(std::chrono::milliseconds(50)); diff --git a/modules/skybrowser/src/screenspaceskytarget.cpp b/modules/skybrowser/src/screenspaceskytarget.cpp index 9b4a4cc4f9..36d983ac0e 100644 --- a/modules/skybrowser/src/screenspaceskytarget.cpp +++ b/modules/skybrowser/src/screenspaceskytarget.cpp @@ -325,10 +325,14 @@ namespace openspace { return glm::dvec2(glm::degrees(ra), glm::degrees(dec)); } - void ScreenSpaceSkyTarget::updateFOV(float browserFOV) { + void ScreenSpaceSkyTarget::updateFOV(float VFOV) { float horizFOV = global::windowDelegate->getHorizFieldOfView(); - _scale = std::max((browserFOV/horizFOV),(_showCrosshairThreshold.value()/horizFOV)); - _fieldOfView = browserFOV; + glm::ivec2 windowRatio = global::windowDelegate->currentWindowSize(); + + float verticFOV = horizFOV * (static_cast(windowRatio.y) / static_cast(windowRatio.x)); + _scale = std::max((VFOV / verticFOV),(_showCrosshairThreshold.value()/ verticFOV)); + + _fieldOfView = VFOV; } }