Cleanup, make hover circle add itself via lua function to the module. Make functions consistent how they interact with WWT

This commit is contained in:
sylvass
2021-12-01 13:48:12 -05:00
parent 69eb10cdda
commit 1fe86fe843
6 changed files with 86 additions and 72 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ namespace openspace {
void loadImages(const std::string& root, const std::string& directory,
std::vector<std::filesystem::path>& speckFiles);
int nLoadedImages() const;
const ImageData& getImage(const int i) const;
const ImageData& getImage(int i) const;
private:
+17 -47
View File
@@ -57,6 +57,13 @@ namespace openspace {
"Add one or multiple exoplanet systems to the scene, as specified by the "
"input. An input string should be the name of the system host star"
},
{
"setHoverCircle",
&skybrowser::luascriptfunctions::setHoverCircle,
"string or list of strings",
"Add one or multiple exoplanet systems to the scene, as specified by the "
"input. An input string should be the name of the system host star"
},
{
"moveCircleToHoverImage",
&skybrowser::luascriptfunctions::moveCircleToHoverImage,
@@ -209,15 +216,9 @@ namespace openspace {
return res;
}
SkyBrowserModule::SkyBrowserModule()
: OpenSpaceModule(SkyBrowserModule::Name)
{
// Find the hover circle
_hoverCircle = dynamic_cast<ScreenSpaceImageLocal*>(
global::renderEngine->screenSpaceRenderable("HoverCircle"));
// Set callback functions
global::callback::mouseButton->emplace_back(
[&](MouseButton button, MouseAction action, KeyModifier modifier) -> bool {
@@ -499,7 +500,7 @@ void SkyBrowserModule::createTargetBrowserPair() {
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 localHostUrl = "http://localhost:8000";
//std::string url = "http://localhost:8000";
const std::string browser = "{"
"Identifier = '" + idBrowser + "',"
@@ -575,42 +576,6 @@ void SkyBrowserModule::set3dBrowser(const std::string& id)
}
}
void SkyBrowserModule::selectImage2dBrowser(int i)
{
Pair* selected = getPair(_selectedBrowser);
if (selected) {
const ImageData& image = _dataHandler->getImage(i);
// Load image into browser
LINFO("Loading image " + image.name);
selected->selectImage(image, i);
bool isInView = skybrowser::isCoordinateInView(image.equatorialCartesian);
// If the coordinate is not in view, rotate camera
if (image.hasCelestialCoords) {
if(!isInView) {
startRotatingCamera(
skybrowser::equatorialToGalactic(image.equatorialCartesian)
);
}
}
}
}
void SkyBrowserModule::selectImage3dBrowser(int i)
{
if (!_browser3dNode) {
return;
}
RenderableSkyBrowser* renderable = dynamic_cast<RenderableSkyBrowser*>(
_browser3dNode->renderable());
if (renderable) {
const ImageData& image = _dataHandler->getImage(i);
renderable->displayImage(image.imageUrl, i);
}
}
void SkyBrowserModule::lookAtTarget(std::string id)
{
Pair* pair = getPair(id);
@@ -619,6 +584,11 @@ void SkyBrowserModule::lookAtTarget(std::string id)
}
}
void SkyBrowserModule::setHoverCircle(ScreenSpaceImageLocal* circle)
{
_hoverCircle = circle;
}
void SkyBrowserModule::moveHoverCircle(int i)
{
const ImageData& image = _dataHandler->getImage(i);
@@ -626,20 +596,20 @@ void SkyBrowserModule::moveHoverCircle(int i)
// Only move and show circle if the image has coordinates
if (_hoverCircle && image.hasCelestialCoords && _isCameraInSolarSystem) {
// Make circle visible
_hoverCircle->property("Enabled")->set(true);
_hoverCircle->setEnabled(true);
// Calculate coords for the circle and translate
glm::vec3 coordsScreen = skybrowser::equatorialToScreenSpace3d(
image.equatorialCartesian
);
_hoverCircle->property("CartesianPosition")->set(coordsScreen);
_hoverCircle->setCartesianPosition(coordsScreen);
}
}
void SkyBrowserModule::disableHoverCircle()
{
if (_hoverCircle && _hoverCircle->isEnabled()) {
_hoverCircle->property("Enabled")->set(false);
_hoverCircle->setEnabled(false);
}
}
@@ -669,7 +639,7 @@ void SkyBrowserModule::add2dSelectedImagesTo3d(const std::string& pairId)
}
}
const std::unique_ptr<WwtDataHandler>& SkyBrowserModule::getWWTDataHandler() {
const std::unique_ptr<WwtDataHandler>& SkyBrowserModule::getWwtDataHandler() {
return _dataHandler;
}
+4 -4
View File
@@ -61,18 +61,18 @@ public:
SceneGraphNode* get3dBrowserNode();
RenderableSkyBrowser* get3dBrowser();
RenderableSkyBrowser* get3dBrowser(const std::string& id);
const std::unique_ptr<WwtDataHandler>& getWWTDataHandler();
const std::unique_ptr<WwtDataHandler>& getWwtDataHandler();
std::string selectedBrowserId();
// Setters
void set3dBrowser(const std::string& id);
void setSelectedBrowser(const std::string& id);
void selectImage2dBrowser(int i);
void selectImage3dBrowser(int i);
void setSelectedObject(); // Manage mouse interactions
void setHoverCircle(ScreenSpaceImageLocal* circle);
// Rotation, animation, placement
void lookAtTarget(std::string id);
void startRotatingCamera(glm::dvec3 endAnimation); // Pass in galactic coordinate
void incrementallyRotateCamera(double deltaTime);
void incrementallyFadeBrowserTargets(Transparency goal, float deltaTime);
void incrementallyAnimateTargets(double deltaTime);
@@ -106,7 +106,7 @@ protected:
private:
void startRotatingCamera(glm::dvec3 endAnimation); // Pass in galactic coordinate
// The browsers and targets
std::vector<std::unique_ptr<Pair>> _targetsBrowsers;
Pair* _mouseOnPair{ nullptr };
+38 -6
View File
@@ -23,15 +23,47 @@ int selectImage(lua_State* L) {
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
if (module->isCameraInSolarSystem()) {
module->selectImage2dBrowser(i);
Pair* selected = module->getPair(module->selectedBrowserId());
if (selected) {
const ImageData& image = module->getWwtDataHandler()->getImage(i);
// Load image into browser
LINFO("Loading image " + image.name);
selected->selectImage(image, i);
bool isInView = skybrowser::isCoordinateInView(image.equatorialCartesian);
// If the coordinate is not in view, rotate camera
if (image.hasCelestialCoords && !isInView) {
module->startRotatingCamera(
skybrowser::equatorialToGalactic(image.equatorialCartesian)
);
}
}
}
else {
module->selectImage3dBrowser(i);
else if (module->get3dBrowser()) {
RenderableSkyBrowser* renderable = dynamic_cast<RenderableSkyBrowser*>(
module->get3dBrowser());
if (renderable) {
const ImageData& image = module->getWwtDataHandler()->getImage(i);
renderable->displayImage(image.imageUrl, i);
}
}
return 0;
}
int setHoverCircle(lua_State* L) {
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::setHoverCircle");
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
std::string id = ghoul::lua::value<std::string>(L, 1);
ScreenSpaceImageLocal* circle = dynamic_cast<ScreenSpaceImageLocal*>(
global::renderEngine->screenSpaceRenderable(id));
module->setHoverCircle(circle);
return 0;
}
int moveCircleToHoverImage(lua_State* L) {
// Load image
ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::moveCircleToHoverImage");
@@ -213,7 +245,7 @@ int getListOfImages(lua_State* L) {
lua_newtable(L);
for (int i = 0; i < module->nLoadedImages(); i++) {
const ImageData& img = module->getWWTDataHandler()->getImage(i);
const ImageData& img = module->getWwtDataHandler()->getImage(i);
glm::dvec3 coords = img.equatorialCartesian;
glm::dvec3 position = img.position3d;
@@ -477,7 +509,7 @@ int place3dSkyBrowser(lua_State* L) {
// Image index to place in 3D
const int i = ghoul::lua::value<int>(L, 1);
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
const ImageData image = module->getWWTDataHandler()->getImage(i);
const ImageData image = module->getWwtDataHandler()->getImage(i);
module->place3dBrowser(image, i);
@@ -491,7 +523,7 @@ int removeSelectedImageInBrowser(lua_State* L) {
const std::string id = ghoul::lua::value<std::string>(L, 1);
// Get browser
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
const ImageData& image = module->getWWTDataHandler()->getImage(i);
const ImageData& image = module->getWwtDataHandler()->getImage(i);
Pair* pair = module->getPair(id);
if (pair) {