Add draft for creating the browser and target from GUI. Still problem with finding browser after creation

This commit is contained in:
Ylva Selling
2021-03-19 13:50:48 +01:00
parent e463e35e1b
commit d2d6899e7a
5 changed files with 46 additions and 35 deletions
+40 -24
View File
@@ -51,13 +51,14 @@
#include <ghoul/misc/dictionaryjsonformatter.h> // formatJson
#include <glm/gtx/string_cast.hpp>
#include <glm/gtx/rotate_vector.hpp >
#include <ghoul/filesystem/filesystem.h>
namespace {
constexpr const openspace::properties::Property::PropertyInfo TestInfo =
constexpr const openspace::properties::Property::PropertyInfo ShowSkyBrowserInfo =
{
"Test",
"Test Info",
"tjobidabidobidabidopp plopp"
"Show Sky Browser",
"Show Sky Browser",
"Show sky browser and target for WorldWide Telescope imagery."
};
constexpr const openspace::properties::Property::PropertyInfo ZoomInfo =
{
@@ -68,8 +69,8 @@ namespace {
struct [[codegen::Dictionary(SkyBrowserModule)]] Parameters {
// [[codegen::verbatim(TestInfo.description)]]
std::optional<std::string> test;
// [[codegen::verbatim(ShowSkyBrowserInfo.description)]]
std::optional<bool> show;
// [[codegen::verbatim(ZoomInfo.description)]]
std::optional<float> zoom;
@@ -84,7 +85,7 @@ namespace openspace {
SkyBrowserModule::SkyBrowserModule()
: OpenSpaceModule(SkyBrowserModule::Name)
, _testProperty(TestInfo)
, _showBrowserAndTarget(ShowSkyBrowserInfo)
, _zoomFactor(ZoomInfo, 50.f ,0.1f ,70.f)
, _skyBrowser(nullptr)
, _skyTarget(nullptr)
@@ -97,9 +98,25 @@ SkyBrowserModule::SkyBrowserModule()
, mouseIsOnTarget(false)
{
addProperty(_testProperty);
addProperty(_showBrowserAndTarget);
addProperty(_zoomFactor);
_showBrowserAndTarget.onChange([&]() {
if (_showBrowserAndTarget) {
std::string skyBrowserID;
// Tried thread so that the browser would be instantiated... didn't work
std::thread createBrowser = std::thread([&] {
skyBrowserID = this->createBrowser();
});
createBrowser.join();
// Sky browser is still nullptr
_skyBrowser = dynamic_cast<ScreenSpaceSkyBrowser*>(global::renderEngine->screenSpaceRenderable(skyBrowserID));
std::string skyTargetID = createTarget(_skyBrowser->getScreenSpaceDimensions());
_skyTarget = dynamic_cast<ScreenSpaceSkyTarget*>(global::renderEngine->screenSpaceRenderable(skyTargetID));
}
});
global::callback::mousePosition->emplace_back(
[&](double x, double y) {
glm::vec2 pos = glm::vec2(static_cast<float>(x), static_cast<float>(y));
@@ -255,7 +272,7 @@ float SkyBrowserModule::zoomFactor() const{
void SkyBrowserModule::internalInitialize(const ghoul::Dictionary& dict) {
const Parameters p = codegen::bake<Parameters>(dict);
_testProperty = p.test.value_or(_testProperty);
_showBrowserAndTarget = p.show.value_or(_showBrowserAndTarget);
_zoomFactor = p.zoom.value_or(_zoomFactor);
// register ScreenSpaceBrowser
@@ -384,8 +401,6 @@ ghoul::Dictionary SkyBrowserModule::createMessageForPausingWWTTime() const {
return msg;
}
void SkyBrowserModule::initializeBrowser(ScreenSpaceSkyBrowser* skyBrowser, ScreenSpaceSkyTarget* skyTarget) {
_skyBrowser = skyBrowser;
@@ -415,17 +430,18 @@ glm::dvec2 SkyBrowserModule::convertGalacticToCelestial(glm::dvec3 rGal) const {
return glm::dvec2(glm::degrees(ra), glm::degrees(dec));
}
void SkyBrowserModule::createTarget(glm::ivec2 dimension) {
std::string SkyBrowserModule::createTarget(glm::ivec2 dimension) {
std::string browserDim = fmt::format("{{{},{}}}", dimension.x, dimension.y);
LINFO(browserDim);
using namespace std::string_literals;
std::string ID = "'ScreenSpaceTarget'";
std::string node = "{"
"Type = 'ScreenSpaceSkyTarget',"
"Identifier = 'ScreenSpaceTarget',"
"Identifier = " + ID + ","
"Name = 'Screen Space Target',"
"FaceCamera = false,"
"TargetDimensions = " + browserDim + ""
@@ -435,15 +451,13 @@ void SkyBrowserModule::createTarget(glm::ivec2 dimension) {
"openspace.addScreenSpaceRenderable(" + node + ")",
scripting::ScriptEngine::RemoteScripting::Yes
);
return ID;
}
void SkyBrowserModule::createBrowser() {
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::string SkyBrowserModule::createBrowser() {
using namespace std::string_literals;
std::string node = "{"
"Type = 'ScreenSpaceSkyBrowser',"
"Identifier = 'ScreenSpaceBowser',"
@@ -451,19 +465,21 @@ void SkyBrowserModule::createBrowser() {
"Url = 'http://localhost:8000/',"
"FaceCamera = false"
"}";
/*
ghoul::Dictionary node;
node.setValue("Type", "ScreenSpaceBrowser"s);
node.setValue("Identifier", "ScreenSpaceBowser"s);
node.setValue("Name", "Screen Space Bowser"s);
node.setValue("Url", "http://localhost:8000/"s);
ghoul::Dictionary skyBrowser;
std::string ID = "ScreenSpaceSkyBrowser1";
skyBrowser.setValue("Type", "ScreenSpaceSkyBrowser"s);
skyBrowser.setValue("Identifier", "ScreenSpaceSkyBrowser1"s);
skyBrowser.setValue("Name", "Sky Browser"s);
skyBrowser.setValue("Url", "http://localhost:8000/"s);
skyBrowser.setValue("FaceCamera", "False"s);
*/
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + node + ")",
scripting::ScriptEngine::RemoteScripting::Yes
);
return "ScreenSpaceBowser";
}
+3 -3
View File
@@ -51,8 +51,8 @@ public:
void WWTfollowCamera();
void createBrowser();
void createTarget(glm::ivec2 dimension);
std::string createBrowser();
std::string createTarget(glm::ivec2 dimension);
ghoul::Dictionary createMessageForMovingWWTCamera(const glm::dvec2 celestCoords, const float fov, const bool moveInstantly = true) const;
ghoul::Dictionary createMessageForPausingWWTTime() const;
@@ -71,7 +71,7 @@ protected:
void internalInitialize(const ghoul::Dictionary& dict) override;
void internalDeinitialize() override;
properties::StringProperty _testProperty;
properties::BoolProperty _showBrowserAndTarget;
properties::FloatProperty _zoomFactor;
ScreenSpaceSkyBrowser* _skyBrowser;
ScreenSpaceSkyTarget* _skyTarget;
+2 -5
View File
@@ -44,12 +44,9 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::followCamera");
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
ScreenSpaceSkyTarget* target = nullptr;
while (!target) {
target = dynamic_cast<ScreenSpaceSkyTarget*>(global::renderEngine->screenSpaceRenderable("ScreenSpaceTarget"));
}
ScreenSpaceSkyTarget* target = dynamic_cast<ScreenSpaceSkyTarget*>(global::renderEngine->screenSpaceRenderable("ScreenSpaceTarget"));
ScreenSpaceSkyBrowser* browser = dynamic_cast<ScreenSpaceSkyBrowser*>(global::renderEngine->screenSpaceRenderable("ScreenSpaceBowser"));
module->initializeBrowser(browser, target);
module->skyBrowser()->translate(glm::vec3(-0.8, -0.4, 0.0));
@@ -137,9 +137,8 @@ namespace openspace {
// Resize the dimensions of the texture on the x axis
glm::vec2 newSize = abs(scalingFactor) * _startSize;
_texture->setDimensions(glm::ivec3(newSize, 1));
_objectSize = _texture->dimensions();
_browserDimensions = newSize;
// To not make it glitch... Makes it glitch in other ways however
//updateBrowserSize();
}
glm::mat4 ScreenSpaceSkyBrowser::scaleMatrix() {
@@ -18,7 +18,6 @@
#include <ghoul/io/texture/texturereader.h>
#include <ghoul/opengl/texture.h>
#include <ghoul/opengl/textureconversion.h>
#include <ghoul/filesystem/filesystem.h>
#include <optional>
#include <ghoul/opengl/openglstatecache.h>
#include <glm/gtx/string_cast.hpp>