Move lua scripting to create target browser pair to lua functions

This commit is contained in:
ENG-VIDAVIZ-0\ylvas
2021-12-15 11:21:38 -05:00
parent 67d32c4c17
commit 733dc09a30
3 changed files with 92 additions and 81 deletions

View File

@@ -37,11 +37,9 @@
#include <openspace/engine/globalscallbacks.h>
#include <openspace/engine/windowdelegate.h>
#include <openspace/navigation/navigationhandler.h>
#include <openspace/scripting/scriptengine.h>
#include <openspace/camera/camera.h>
#include <openspace/util/factorymanager.h>
#include <glm/gtx/color_space.hpp> // For hsv color
#include <random> // For random color
namespace {
@@ -246,18 +244,7 @@ namespace openspace {
return res;
}
glm::ivec3 randomBorderColor() {
// Generate a random border color with sufficient lightness and a n
std::random_device rd;
// Hue is in the unit degrees [0, 360]
std::uniform_real_distribution<float> hue(0.f, 360.f);
// Value in saturation are in the unit percent [0,1]
float value = 0.95f; // Brightness
float saturation = 0.5f;
glm::vec3 hsvColor = glm::vec3(hue(rd), saturation, value);
glm::ivec3 rgbColor = glm::ivec3(glm::rgbColor(hsvColor) * 255.f);
return rgbColor;
}
SkyBrowserModule::SkyBrowserModule()
: OpenSpaceModule(SkyBrowserModule::Name)
@@ -458,57 +445,6 @@ void SkyBrowserModule::addTargetBrowserPair(std::string targetId, std::string br
}
}
void SkyBrowserModule::createTargetBrowserPair() {
int noOfPairs = static_cast<int>(_targetsBrowsers.size()) + 1;
std::string nameBrowser = "Sky Browser " + std::to_string(noOfPairs);
std::string nameTarget = "Sky Target " + std::to_string(noOfPairs);
std::string idBrowser = "SkyBrowser" + std::to_string(noOfPairs);
std::string idTarget = "SkyTarget" + std::to_string(noOfPairs);
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 url = "http://localhost:8000"; // check webgl version
//std::string url = "https://get.webgl.org";
glm::ivec3 color = randomBorderColor();
const std::string browser = "{"
"Identifier = '" + idBrowser + "',"
"Type = 'ScreenSpaceSkyBrowser',"
"Name = '" + nameBrowser + "',"
"Url = '"+ url +"',"
"FaceCamera = false,"
"CartesianPosition = " + ghoul::to_string(positionBrowser) + ","
"BorderColor = " + ghoul::to_string(color) + ","
"}";
const std::string target = "{"
"Identifier = '" + idTarget + "',"
"Type = 'ScreenSpaceSkyTarget',"
"Name = '" + nameTarget + "',"
"FaceCamera = false,"
"}";
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + browser + ");",
scripting::ScriptEngine::RemoteScripting::No
);
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + target + ");",
scripting::ScriptEngine::RemoteScripting::No
);
openspace::global::scriptEngine->queueScript(
"openspace.skybrowser.addPairToSkyBrowserModule('" + idTarget + "','"
+ idBrowser + "');",
scripting::ScriptEngine::RemoteScripting::No
);
openspace::global::scriptEngine->queueScript(
"openspace.skybrowser.setSelectedBrowser('" + idBrowser + "');",
scripting::ScriptEngine::RemoteScripting::No
);
}
void SkyBrowserModule::removeTargetBrowserPair(std::string& id) {
Pair* found = getPair(id);
@@ -519,18 +455,6 @@ void SkyBrowserModule::removeTargetBrowserPair(std::string& id) {
[&](const std::unique_ptr<Pair>& pair) {
return *found == *(pair.get());
});
std::string targetId = found->getTarget()->identifier();
// Remove from engine
openspace::global::scriptEngine->queueScript(
"openspace.removeScreenSpaceRenderable('" + found->browserId() + "');",
scripting::ScriptEngine::RemoteScripting::Yes
);
openspace::global::scriptEngine->queueScript(
"openspace.removeScreenSpaceRenderable('" + targetId + "');",
scripting::ScriptEngine::RemoteScripting::Yes
);
_targetsBrowsers.erase(it, std::end(_targetsBrowsers));
_mouseOnPair = nullptr;
@@ -646,6 +570,11 @@ std::vector<std::unique_ptr<Pair>>& SkyBrowserModule::getPairs()
return _targetsBrowsers;
}
int SkyBrowserModule::nPairs()
{
return static_cast<int>(_targetsBrowsers.size());
}
Pair* SkyBrowserModule::getPair(const std::string& id)
{
auto it = std::find_if(std::begin(_targetsBrowsers), std::end(_targetsBrowsers),

View File

@@ -64,6 +64,7 @@ public:
// Getters
std::vector<std::unique_ptr<Pair>>& getPairs();
int nPairs();
Pair* getPair(const std::string& id);
SceneGraphNode* get3dBrowserNode();
RenderableSkyBrowser* get3dBrowser();
@@ -90,7 +91,6 @@ public:
bool isCameraInSolarSystem();
// Managing the target browser pairs
void createTargetBrowserPair();
void removeTargetBrowserPair(std::string& browserId);
void addTargetBrowserPair(std::string targetId, std::string browserId);

View File

@@ -4,14 +4,29 @@
#include <modules/skybrowser/include/utility.h>
#include <openspace/engine/moduleengine.h>
#include <openspace/engine/globals.h>
#include <openspace/scripting/scriptengine.h>
#include <openspace/rendering/renderengine.h>
#include <ghoul/filesystem/filesystem.h>
#include <ghoul/logging/logmanager.h>
#include <glm/gtx/color_space.hpp> // For hsv color
#include <random> // For random color
namespace {
constexpr const char _loggerCat[] = "SkyBrowserModule";
} // namespace
glm::ivec3 randomBorderColor() {
// Generate a random border color with sufficient lightness and a n
std::random_device rd;
// Hue is in the unit degrees [0, 360]
std::uniform_real_distribution<float> hue(0.f, 360.f);
// Value in saturation are in the unit percent [0,1]
float value = 0.95f; // Brightness
float saturation = 0.5f;
glm::vec3 hsvColor = glm::vec3(hue(rd), saturation, value);
glm::ivec3 rgbColor = glm::ivec3(glm::rgbColor(hsvColor) * 255.f);
return rgbColor;
}
namespace openspace::skybrowser::luascriptfunctions {
@@ -490,7 +505,55 @@ int setSelectedBrowser(lua_State* L) {
int createTargetBrowserPair(lua_State* L) {
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::createTargetBrowserPair");
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
module->createTargetBrowserPair();
int noOfPairs = module->nPairs();
std::string nameBrowser = "Sky Browser " + std::to_string(noOfPairs);
std::string nameTarget = "Sky Target " + std::to_string(noOfPairs);
std::string idBrowser = "SkyBrowser" + std::to_string(noOfPairs);
std::string idTarget = "SkyTarget" + std::to_string(noOfPairs);
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 url = "http://localhost:8000"; // check webgl version
//std::string url = "https://get.webgl.org";
glm::ivec3 color = randomBorderColor();
const std::string browser = "{"
"Identifier = '" + idBrowser + "',"
"Type = 'ScreenSpaceSkyBrowser',"
"Name = '" + nameBrowser + "',"
"Url = '" + url + "',"
"FaceCamera = false,"
"CartesianPosition = " + ghoul::to_string(positionBrowser) + ","
"BorderColor = " + ghoul::to_string(color) + ","
"}";
const std::string target = "{"
"Identifier = '" + idTarget + "',"
"Type = 'ScreenSpaceSkyTarget',"
"Name = '" + nameTarget + "',"
"FaceCamera = false,"
"}";
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + browser + ");",
scripting::ScriptEngine::RemoteScripting::No
);
openspace::global::scriptEngine->queueScript(
"openspace.addScreenSpaceRenderable(" + target + ");",
scripting::ScriptEngine::RemoteScripting::No
);
openspace::global::scriptEngine->queueScript(
"openspace.skybrowser.addPairToSkyBrowserModule('" + idTarget + "','"
+ idBrowser + "');",
scripting::ScriptEngine::RemoteScripting::No
);
openspace::global::scriptEngine->queueScript(
"openspace.skybrowser.setSelectedBrowser('" + idBrowser + "');",
scripting::ScriptEngine::RemoteScripting::No
);
return 0;
}
@@ -499,7 +562,26 @@ int removeTargetBrowserPair(lua_State* L) {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::removeTargetBrowserPair");
std::string id = ghoul::lua::value<std::string>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
module->removeTargetBrowserPair(id);
Pair* found = module->getPair(id);
if (found) {
std::string browser = found->browserId();
std::string target = found->targetId();
found = nullptr;
module->removeTargetBrowserPair(id);
// Remove from engine
openspace::global::scriptEngine->queueScript(
"openspace.removeScreenSpaceRenderable('" + browser + "');",
scripting::ScriptEngine::RemoteScripting::Yes
);
openspace::global::scriptEngine->queueScript(
"openspace.removeScreenSpaceRenderable('" + target + "');",
scripting::ScriptEngine::RemoteScripting::Yes
);
}
return 0;
}