mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-04 02:29:49 -06:00
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:
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace openspace {
|
||||
GLuint _vertexBuffer = 0;
|
||||
float _fieldOfView = 100.f;
|
||||
ScreenSpaceSkyBrowser* _skyBrowser;
|
||||
glm::vec3 _borderColor;
|
||||
glm::ivec3 _borderColor;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user