Merge resolve

This commit is contained in:
Ester Lindgren
2021-03-05 15:45:31 +01:00
5 changed files with 93 additions and 34 deletions
-1
View File
@@ -1,4 +1,3 @@
set(DEFAULT_MODULE ON)
set(OPENSPACE_DEPENDENCIES
webbrowser
)
+60 -21
View File
@@ -23,6 +23,7 @@
****************************************************************************************/
#include <modules/skybrowser/skybrowsermodule.h>
//#include <modules/webbrowser/webbrowsermodule.h>
//#include <modules/webbrowser/include/screenspacebrowser.h>
#include <modules/base/rendering/screenspaceimagelocal.h>
@@ -31,19 +32,21 @@
#include <openspace/rendering/renderable.h>
#include <openspace/rendering/renderengine.h>
#include <openspace/engine/moduleengine.h>
#include <openspace/engine/globals.h>
#include <openspace/engine/globalscallbacks.h>
#include <openspace/interaction/navigationhandler.h>
#include <openspace/rendering/renderengine.h>
#include <openspace/scene/scenegraphnode.h>
#include <openspace/scene/scene.h>
#include <openspace/util/factorymanager.h>
#include <thread>
#include <chrono>
#include <cmath> // For atan2
#include "skybrowsermodule_lua.inl"
#include <cmath> // For atan2
#include <ghoul/misc/dictionaryjsonformatter.h> // formatJson
namespace {
constexpr const openspace::properties::Property::PropertyInfo TestInfo =
@@ -78,7 +81,8 @@ namespace openspace {
SkybrowserModule::SkybrowserModule()
: OpenSpaceModule(Name)
, _testProperty(TestInfo)
, _zoomFactor(ZoomInfo, 70.f ,0.f ,150.f)
, _zoomFactor(ZoomInfo, 50.f ,0.1f ,70.f)
, _skyBrowser(nullptr)
{
addProperty(_testProperty);
addProperty(_zoomFactor);
@@ -127,26 +131,61 @@ void SkybrowserModule::internalInitialize(const ghoul::Dictionary& dict) {
const Parameters p = codegen::bake<Parameters>(dict);
_testProperty = p.test.value_or(_testProperty);
_zoomFactor = p.zoom.value_or(_zoomFactor);
/*
auto fBrowser = FactoryManager::ref().factory<ScreenSpaceBrowser>();
ghoul_assert(fBrowser, "No browser factory existed :'-(");
fBrowser->registerClass<ScreenSpaceBrowser>("ScreenSpaceBrowser");
*/
}
void SkybrowserModule::WWTfollowCamera() const {
// Get camera view direction
const glm::dvec3 viewDirection = global::navigationHandler->camera()->viewDirectionWorldSpace();
bool SkybrowserModule::sendMessageToWWT(const ghoul::Dictionary& msg) {
if (_skyBrowser) {
std::string script = "sendMessageToWWT(" + ghoul::formatJson(msg) + ");";
_skyBrowser->executeJavascript(script);
return true;
}
else {
LERROR("No sky browser added! Can't send message.");
return false;
}
}
// Convert to celestial coordinates
const SkybrowserModule* module = global::moduleEngine->module<SkybrowserModule>();
glm::dvec2 celestCoords = module->convertGalacticToCelestial(viewDirection);
void SkybrowserModule::WWTfollowCamera() {
while (true) {
// Get camera view direction
const glm::dvec3 viewDirection = global::navigationHandler->camera()->viewDirectionWorldSpace();
showTarget();
// Execute javascript on browser
ScreenSpaceBrowser* browser = dynamic_cast<ScreenSpaceBrowser*>(global::renderEngine->screenSpaceRenderable("ScreenSpaceBowser"));
std::string script = "window.frames[0].postMessage({event: 'center_on_coordinates', ra : Number(" + std::to_string(celestCoords[0]) + "), dec : Number(" + std::to_string(celestCoords[1]) + "), fov : Number(" + std::to_string(_zoomFactor) + "), instant : false})";
browser->executeJavascript(script);
// Convert to celestial coordinates
glm::dvec2 celestCoords = convertGalacticToCelestial(viewDirection);
ghoul::Dictionary message = createMessageForMovingWWTCamera(celestCoords, _zoomFactor);
sendMessageToWWT(message);
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
}
ghoul::Dictionary SkybrowserModule::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<double>(celestCoords[0]));
msg.setValue("dec", static_cast<double>(celestCoords[1]));
msg.setValue("fov", static_cast<double>(fov));
msg.setValue("instant", moveInstantly);
return msg;
}
ghoul::Dictionary SkybrowserModule::createMessageForPausingWWTTime() const {
using namespace std::string_literals;
ghoul::Dictionary msg;
msg.setValue("event", "pause_time"s);
return msg;
}
void SkybrowserModule::initializeBrowser(ScreenSpaceBrowser* skyBrowser) {
_skyBrowser = skyBrowser;
}
ScreenSpaceBrowser* SkybrowserModule::skyBrowser() {
return _skyBrowser;
}
glm::dvec2 SkybrowserModule::convertGalacticToCelestial(glm::dvec3 rGal) const {
@@ -163,7 +202,7 @@ glm::dvec2 SkybrowserModule::convertGalacticToCelestial(glm::dvec3 rGal) const {
float ra = atan2(rICRS[1], rICRS[0]);
float dec = atan2(rICRS[2], glm::sqrt((rICRS[0] * rICRS[0]) + (rICRS[1] * rICRS[1])));
std::cout << glm::degrees(dec) << std::endl;
ra = ra > 0 ? ra : ra + (2 * glm::pi<float>());
return glm::dvec2(glm::degrees(ra), glm::degrees(dec));
}
+13 -5
View File
@@ -28,16 +28,15 @@
#include <openspace/util/openspacemodule.h>
#include <openspace/documentation/documentation.h>
#include <openspace/properties/scalar/boolproperty.h>
#include <openspace/properties/scalar/floatproperty.h>
#include <openspace/properties/stringproperty.h>
namespace openspace {
class ScreenSpaceBrowser;
class SkybrowserModule : public OpenSpaceModule {
public:
constexpr static const char* Name = "Skybrowser";
@@ -47,8 +46,17 @@ public:
float zoomFactor() const;
glm::dvec2 convertGalacticToCelestial(glm::dvec3 coords) const;
void WWTfollowCamera() const;
void showTarget() const;
void WWTfollowCamera();
ghoul::Dictionary createMessageForMovingWWTCamera(const glm::dvec2 celestCoords, const float fov, const bool moveInstantly = true) const;
ghoul::Dictionary createMessageForPausingWWTTime() const;
bool sendMessageToWWT(const ghoul::Dictionary& msg);
void initializeBrowser(ScreenSpaceBrowser* skyBrowser_);
ScreenSpaceBrowser* skyBrowser();
scripting::LuaLibrary luaLibrary() const override;
//std::vector<documentation::Documentation> documentations() const override;
@@ -57,7 +65,7 @@ protected:
properties::StringProperty _testProperty;
properties::FloatProperty _zoomFactor;
ScreenSpaceBrowser* _skyBrowser;
};
} // namespace openspace
+19 -6
View File
@@ -19,6 +19,8 @@
#include <modules/webbrowser/include/screenspacebrowser.h>
#include <openspace/interaction/navigationhandler.h>
#include <openspace/util/camera.h>
#include <thread>
namespace {
constexpr const char _loggerCat[] = "SkybrowserModule";
@@ -29,16 +31,25 @@ namespace openspace::skybrowser::luascriptfunctions {
int followCamera(lua_State* L) {
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::followCamera");
const SkybrowserModule* module = global::moduleEngine->module<SkybrowserModule>();
ScreenSpaceBrowser* browser = dynamic_cast<ScreenSpaceBrowser*>(global::renderEngine->screenSpaceRenderable("ScreenSpaceBowser"));
module->WWTfollowCamera();
SkybrowserModule* module = global::moduleEngine->module<SkybrowserModule>();
//ghoul::Dictionary message = module->createMessageForPausingWWTTime();
//module->sendMessageToWWT(message);
std::thread thread(&SkybrowserModule::WWTfollowCamera, module);
thread.detach();
return 1;
}
int moveBrowser(lua_State* L) {
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::moveBrowser");
SkybrowserModule* module = global::moduleEngine->module<SkybrowserModule>();
ScreenSpaceBrowser* browser = dynamic_cast<ScreenSpaceBrowser*>(global::renderEngine->screenSpaceRenderable("ScreenSpaceBowser"));
browser->translate(glm::vec3(-0.8, -0.4, 0.0));
module->initializeBrowser(browser);
module->skyBrowser()->translate(glm::vec3(-0.8, -0.4, 0.0));
return 1;
}
@@ -46,7 +57,8 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::createBrowser");
ghoul::lua::value<std::string>(L, 1);
const SkybrowserModule* module = global::moduleEngine->module<SkybrowserModule>();
SkybrowserModule* module = global::moduleEngine->module<SkybrowserModule>();
using namespace std::string_literals;
@@ -64,13 +76,14 @@ namespace openspace::skybrowser::luascriptfunctions {
node.setValue("Identifier", "ScreenSpaceBowser"s);
node.setValue("Name", "Screen Space Bowser"s);
node.setValue("Url", "http://localhost:8000/"s);
*/
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + node + ")",
scripting::ScriptEngine::RemoteScripting::Yes
);
return 1;
}
@@ -59,7 +59,7 @@ namespace {
namespace openspace {
void ScreenSpaceBrowser::executeJavascript(std::string &script) const {
LINFOC(_loggerCat, "Executing javascript " + script);
//LINFOC(_loggerCat, "Executing javascript " + script);
CefRefPtr<CefFrame> frame = _browserInstance->getBrowser()->GetMainFrame();
frame->ExecuteJavaScript(script, frame->GetURL(), 0);