Add random colored borders to browsers and targets that are sufficiently bright, and add function to pass them to GUI

This commit is contained in:
Ylva Selling
2021-05-04 09:14:35 +02:00
parent 70642b0a55
commit 2eecb08bcf
7 changed files with 82 additions and 32 deletions

View File

@@ -51,15 +51,14 @@ namespace openspace {
bool _browserDimIsDirty;
properties::FloatProperty _vfieldOfView;
properties::StringProperty _skyTargetID;
properties::Vec3Property _borderColor;
private:
glm::vec2 _startDimensionsSize;
float _startScale;
properties::Vec2Property _browserDimensions;
bool _camIsSyncedWWT;
ScreenSpaceSkyTarget* _skyTarget;
std::thread _threadWWTMessages;
glm::ivec3 _borderColor;
std::thread _threadWWTMessages;
};
}

View File

@@ -59,7 +59,7 @@ namespace openspace {
GLuint _vertexBuffer = 0;
float _fieldOfView = 100.f;
ScreenSpaceSkyBrowser* _skyBrowser;
glm::vec3 _borderColor;
glm::ivec3 _borderColor;
};
}

View File

@@ -357,6 +357,16 @@ WWTDataHandler* SkyBrowserModule::getWWTDataHandler() {
return dataHandler;
}
std::vector<ScreenSpaceSkyBrowser*> SkyBrowserModule::getSkyBrowsers() {
std::vector<ScreenSpaceSkyBrowser*> browsers;
for (ScreenSpaceRenderable* renderable : renderables) {
if (to_browser(renderable)) {
browsers.push_back(to_browser(renderable));
}
}
return browsers;
}
/*
std::vector<documentation::Documentation> SkyBrowserModule::documentations() const {
return {

View File

@@ -54,6 +54,7 @@ public:
glm::vec2 getMousePositionInScreenSpaceCoords(glm::vec2& mousePos);
void addRenderable(ScreenSpaceRenderable* object);
WWTDataHandler* getWWTDataHandler();
std::vector<ScreenSpaceSkyBrowser*> getSkyBrowsers();
scripting::LuaLibrary luaLibrary() const override;
//std::vector<documentation::Documentation> documentations() const override;

View File

@@ -178,29 +178,41 @@ namespace openspace::skybrowser::luascriptfunctions {
// Send image list to GUI
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::getTargetData");
ScreenSpaceSkyBrowser* browser = dynamic_cast<ScreenSpaceSkyBrowser*>(global::renderEngine->screenSpaceRenderable("SkyBrowser1"));
ScreenSpaceSkyTarget* target = dynamic_cast<ScreenSpaceSkyTarget*>(global::renderEngine->screenSpaceRenderable("SkyTarget1"));
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
float FOV = browser->fieldOfView();
glm::dvec3 coords = target->getTargetDirection();
glm::dvec2 celestCoords = skybrowser::galacticCartesianToJ2000(coords);
lua_newtable(L);
int index = 1;
// Pass data for all the browsers and the corresponding targets
std::vector<ScreenSpaceSkyBrowser*> browsers = module->getSkyBrowsers();
// Index for many browsers
// For now it's only one
ghoul::lua::push(L, 1);
lua_newtable(L);
// Push ("Key", value)
ghoul::lua::push(L, "FOV", FOV);
lua_settable(L, -3);
ghoul::lua::push(L, "RA", celestCoords.x);
lua_settable(L, -3);
ghoul::lua::push(L, "Dec", celestCoords.y);
lua_settable(L, -3);
// Set table for the current ImageData
lua_settable(L, -3);
for (int i = 0; i < browsers.size(); i++) {
// Only add browsers that have an initialized target
ScreenSpaceSkyTarget* target = browsers[i]->getSkyTarget();
if (target) {
glm::dvec3 coords = target->getTargetDirection();
glm::dvec2 celestCoords = skybrowser::galacticCartesianToJ2000(coords);
// Convert color to vector so ghoul can read it
glm::ivec3 color = browsers[i]->_borderColor.value();
std::vector<int> colorVec = { color.r, color.g, color.b };
ghoul::lua::push(L, index);
index++;
lua_newtable(L);
// Push ("Key", value)
ghoul::lua::push(L, "FOV", browsers[i]->fieldOfView());
lua_settable(L, -3);
ghoul::lua::push(L, "RA", celestCoords.x);
lua_settable(L, -3);
ghoul::lua::push(L, "Dec", celestCoords.y);
lua_settable(L, -3);
ghoul::lua::push(L, "Color", colorVec);
lua_settable(L, -3);
// Set table for the current ImageData
lua_settable(L, -3);
}
}
return 1;
}

View File

@@ -44,6 +44,12 @@ namespace {
"Target Info",
"tjobidabidobidabidopp plupp"
};
constexpr const openspace::properties::Property::PropertyInfo BorderColorInfo =
{
"BorderColor",
"Border color Info",
"tjobidabidobidabidopp plupp"
};
struct [[codegen::Dictionary(ScreenSpaceSkyBrowser)]] Parameters {
@@ -56,6 +62,9 @@ namespace {
// [[codegen::verbatim(TargetIDInfo.description)]]
std::optional<std::string> targetID;
// [[codegen::verbatim(BorderColorInfo.description)]]
std::optional<glm::ivec3> borderColor;
};
#include "screenspaceskybrowser_codegen.cpp"
@@ -66,12 +75,19 @@ namespace openspace {
ScreenSpaceSkyBrowser::ScreenSpaceSkyBrowser(const ghoul::Dictionary& dictionary)
: ScreenSpaceBrowser(dictionary)
, _browserDimensions(BrowserDimensionInfo, _dimensions, glm::ivec2(0), glm::ivec2(300))
, _vfieldOfView(ZoomInfo, 50.f, 0.1f, 70.f)
, _vfieldOfView(ZoomInfo, 10.f, 0.1f, 70.f)
, _borderColor(BorderColorInfo, glm::ivec3(rand() % 256, rand() % 256, rand() % 256))
, _skyTargetID(TargetIDInfo)
, _camIsSyncedWWT(true)
, _skyTarget(nullptr)
, _borderColor(220, 220, 220)
{
// Ensure the color of the border is bright enough.
// Make sure the RGB color at least is 50% brightness
// By making each channel 50% bright in general
// 222 = sqrt(3*(0.5*256)^2)
while (glm::length(_borderColor.value()) < 222) {
_borderColor = glm::ivec3(rand() % 256, rand() % 256, rand() % 256);
}
// Handle target dimension property
const Parameters p = codegen::bake<Parameters>(dictionary);
_browserDimensions = p.browserDimensions.value_or(_browserDimensions);
@@ -145,7 +161,13 @@ namespace openspace {
}
bool ScreenSpaceSkyBrowser::setConnectedTarget() {
setBorderColor(_borderColor.value());
_skyTarget = dynamic_cast<ScreenSpaceSkyTarget*>(global::renderEngine->screenSpaceRenderable(_skyTargetID.value()));
if (_skyTarget) {
_skyTarget->setBorderColor(_borderColor.value());
_skyTarget->updateFOV(_vfieldOfView.value());
_skyTarget->setDimensions(getBrowserPixelDimensions());
}
return _skyTarget != nullptr;
}
@@ -178,7 +200,7 @@ namespace openspace {
}
glm::ivec3 ScreenSpaceSkyBrowser::getColor() {
return _borderColor;
return _borderColor.value();
}
void ScreenSpaceSkyBrowser::setBorderColor(glm::ivec3 col) {
@@ -188,9 +210,9 @@ namespace openspace {
}
bool ScreenSpaceSkyBrowser::sendMessageToWWT(const ghoul::Dictionary& msg) {
std::string script = "sendMessageToWWT(" + ghoul::formatJson(msg) + ");";
executeJavascript(script);
return true;
std::string script = "sendMessageToWWT(" + ghoul::formatJson(msg) + ");";
executeJavascript(script);
return true;
}

View File

@@ -76,7 +76,7 @@ namespace openspace {
, _targetDimensions(TargetDimensionInfo, glm::ivec2(1000.f), glm::ivec2(0.f), glm::ivec2(6000.f))
, _skyBrowserID(BrowserIDInfo)
, _showCrosshairThreshold(CrosshairThresholdInfo, 2.f, 1.f, 70.f)
, _borderColor(220.f, 220.f, 220.f)
, _borderColor(220, 220, 220)
{
// Handle target dimension property
const Parameters p = codegen::bake<Parameters>(dictionary);
@@ -123,6 +123,12 @@ namespace openspace {
void ScreenSpaceSkyTarget::setConnectedBrowser() {
_skyBrowser = dynamic_cast<ScreenSpaceSkyBrowser*>(global::renderEngine->screenSpaceRenderable(_skyBrowserID.value()));
if (_skyBrowser) {
_skyBrowser->setBorderColor(_skyBrowser->getColor());
_borderColor = _skyBrowser->getColor();
updateFOV(_skyBrowser->_vfieldOfView.value());
_targetDimensions = _skyBrowser->getBrowserPixelDimensions();
}
}
bool ScreenSpaceSkyTarget::isReady() const {
@@ -219,7 +225,7 @@ namespace openspace {
_shader->setUniform(_uniformCache.borderWidth, borderWidth);
_shader->setUniform(_uniformCache.targetDimensions, targetDim);
_shader->setUniform(_uniformCache.modelTransform, modelTransform);
_shader->setUniform(_uniformCache.borderColor, _borderColor);
_shader->setUniform(_uniformCache.borderColor, glm::vec3(_borderColor));
_shader->setUniform(
_uniformCache.viewProj,