mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-08 04:20:14 -05:00
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:
@@ -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:
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user