Make it possible to send coordinates to GUI as well as code clean up and conversion of RA from hours to degrees upon data loading

This commit is contained in:
Ylva Selling
2021-04-14 13:20:58 +02:00
parent f6e4c33db3
commit 5653823522
3 changed files with 39 additions and 28 deletions

View File

@@ -65,8 +65,8 @@ namespace openspace {
res.name = "skybrowser";
res.functions = {
{
"create",
&skybrowser::luascriptfunctions::createBrowser,
"getListOfImages",
&skybrowser::luascriptfunctions::getListOfImages,
{},
"string or list of strings",
"Add one or multiple exoplanet systems to the scene, as specified by the "
@@ -89,8 +89,8 @@ namespace openspace {
"input. An input string should be the name of the system host star"
},
{
"loadCollection",
&skybrowser::luascriptfunctions::loadImgCollection,
"selectImage",
&skybrowser::luascriptfunctions::selectImage,
{},
"string or list of strings",
"Add one or multiple exoplanet systems to the scene, as specified by the "

View File

@@ -29,9 +29,9 @@ namespace {
namespace openspace::skybrowser::luascriptfunctions {
int loadImgCollection(lua_State* L) {
int selectImage(lua_State* L) {
// Load image
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::loadCollection");
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::selectImage");
const int i = ghoul::lua::value<int>(L, 1);
ScreenSpaceSkyBrowser* browser = dynamic_cast<ScreenSpaceSkyBrowser*>(global::renderEngine->screenSpaceRenderable("SkyBrowser1"));
@@ -52,11 +52,10 @@ namespace openspace::skybrowser::luascriptfunctions {
if (resultImage.hasCoords) {
// The RA from WWT is in the unit hours: to convert to degrees, multiply with 360 (deg) /24 (h)=15
glm::dvec3 imageCoordsGalactic = icrsToGalacticCartesian(resultImage.celestCoords.x * 15, resultImage.celestCoords.y, 1.0);
glm::dvec3 imageCoordsGalactic = icrsToGalacticCartesian(resultImage.celestCoords.x, resultImage.celestCoords.y, 1.0);
browser->getSkyTarget()->lookAtGalacticCoord(imageCoordsGalactic);
// In WWT, VFOV = ZoomLevel * 6
// In WWT, VFOV = ZoomLevel / 6
browser->setFieldOfView(resultImage.zoomLevel / 6);
}
browser->sendMessageToWWT(browser->createMessageForSettingForegroundOpacityWWT(100));
@@ -67,11 +66,11 @@ namespace openspace::skybrowser::luascriptfunctions {
// Load images from url
ghoul::lua::checkArgumentsAndThrow(L, 2, "lua::followCamera");
//SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
//std::string root = "https://raw.githubusercontent.com/WorldWideTelescope/wwt-web-client/master/assets/webclient-explore-root.wtml";
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::string root = "https://raw.githubusercontent.com/WorldWideTelescope/wwt-web-client/master/assets/webclient-explore-root.wtml";
//module->getWWTDataHandler()->loadWTMLCollectionsFromURL(root, "root");
//LINFO(std::to_string( module->getWWTDataHandler()->loadAllImagesFromXMLs()));
module->getWWTDataHandler()->loadWTMLCollectionsFromURL(root, "root");
LINFO(std::to_string( module->getWWTDataHandler()->loadAllImagesFromXMLs()));
return 1;
}
@@ -94,29 +93,40 @@ namespace openspace::skybrowser::luascriptfunctions {
return 1;
}
int createBrowser(lua_State* L) {
int getListOfImages(lua_State* L) {
// Send image list to GUI
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::createBrowser");
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::getListOfImages");
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
// If no data has been loaded yet, load it!
if (module->getWWTDataHandler()->getLoadedImages().size() == 0) {
// Read from disc
moveBrowser(L);
//followCamera(L);
// Read from URL
// followCamera(L);
}
// Create Lua table to send to the GUI
const std::vector<ImageData>& images = module->getWWTDataHandler()->getLoadedImages();
lua_newtable(L);
lua_newtable(L);
for (int i = 0; i < images.size(); i++) {
// Push a table { image name, image url } with index : number
lua_newtable(L);
lua_pushstring(L, images[i].name.c_str());
lua_rawseti(L, -2, 1);
lua_pushstring(L, images[i].thumbnailUrl.c_str());
lua_rawseti(L, -2, 2);
lua_rawseti(L, -2, i+1);
std::string name = images[i].name != "" ? images[i].name : "undefined";
std::string url = images[i].thumbnailUrl != "" ? images[i].thumbnailUrl : "undefined";
// Index for current ImageData
ghoul::lua::push(L, i + 1);
lua_newtable(L);
// Push ("Key", value)
ghoul::lua::push(L, "Name", name);
lua_settable(L, -3);
ghoul::lua::push(L, "Thumbnail", url);
lua_settable(L, -3);
ghoul::lua::push(L, "Ra", images[i].celestCoords.x);
lua_settable(L, -3);
ghoul::lua::push(L, "Dec", images[i].celestCoords.y);
lua_settable(L, -3);
// Set table for the current ImageData
lua_settable(L, -3);
}
return 1;

View File

@@ -203,7 +203,8 @@ namespace openspace {
img.name = node->FindAttribute("Name") ? node->FindAttribute("Name")->Value() : "";
img.hasCoords = node->FindAttribute("RA") && node->FindAttribute("Dec");
if (img.hasCoords) {
img.celestCoords.x = std::stof(node->FindAttribute("RA")->Value());
// The RA from WWT is in the unit hours: to convert to degrees, multiply with 360 (deg) /24 (h) = 15
img.celestCoords.x = 15.0f * std::stof(node->FindAttribute("RA")->Value());
img.celestCoords.y = std::stof(node->FindAttribute("Dec")->Value());
}
img.collection = collectionName;