mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-04-23 20:50:59 -05:00
Implement fine tuning of target in world space coordinates
This commit is contained in:
@@ -56,7 +56,8 @@ public:
|
||||
// Mouse interaction
|
||||
bool checkMouseIntersection(const glm::vec2& mousePosition);
|
||||
glm::vec2 selectedScreenSpacePosition() const;
|
||||
void fineTuneTarget(const glm::vec2& start, const glm::vec2& translation);
|
||||
void fineTuneTarget(const glm::dvec3& startWorld, const glm::vec2& startMouse,
|
||||
const glm::vec2& translation);
|
||||
void translateSelected(const glm::vec2& start, const glm::vec2& translation);
|
||||
void synchronizeAim();
|
||||
|
||||
@@ -94,7 +95,7 @@ public:
|
||||
std::string selectedId();
|
||||
glm::vec2 size() const;
|
||||
|
||||
RenderableSkyTarget* target() const;
|
||||
SceneGraphNode* targetNode() const;
|
||||
ScreenSpaceSkyBrowser* browser() const;
|
||||
const std::deque<int>& selectedImages() const;
|
||||
|
||||
|
||||
@@ -312,7 +312,11 @@ SkyBrowserModule::SkyBrowserModule()
|
||||
_mouseOnPair->translateSelected(_startDragPosition, translation);
|
||||
break;
|
||||
case MouseInteraction::FineTune:
|
||||
_mouseOnPair->fineTuneTarget(_startDragPosition, translation);
|
||||
_mouseOnPair->fineTuneTarget(
|
||||
_startTargetPosition,
|
||||
_startDragPosition,
|
||||
translation
|
||||
);
|
||||
break;
|
||||
default:
|
||||
setSelectedObject();
|
||||
@@ -534,7 +538,7 @@ void SkyBrowserModule::handleMouseClick(const MouseButton& button) {
|
||||
// Change view (by moving target) within browser if right mouse
|
||||
// click on browser
|
||||
_startMousePosition = _mousePosition;
|
||||
//_startDragPosition = _mouseOnPair->target()->screenSpacePosition();
|
||||
_startTargetPosition = _mouseOnPair->targetNode()->worldPosition();
|
||||
_interactionMode = MouseInteraction::FineTune;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,6 +131,7 @@ private:
|
||||
glm::vec2 _mousePosition; // Current mouse position in screen space coordinates
|
||||
glm::vec2 _startMousePosition;
|
||||
glm::vec2 _startDragPosition;
|
||||
glm::dvec3 _startTargetPosition;
|
||||
|
||||
// Animation of rotation of camera to look at coordinate galactic coordinates
|
||||
glm::dvec3 _startAnimation;
|
||||
|
||||
@@ -208,6 +208,10 @@ void ScreenSpaceSkyBrowser::render() {
|
||||
localRotationMatrix() *
|
||||
scaleMatrix()
|
||||
);
|
||||
|
||||
// scale and translation probably
|
||||
//if(global::windowDelegate->isMaster() && property)
|
||||
|
||||
}
|
||||
|
||||
void ScreenSpaceSkyBrowser::update() {
|
||||
|
||||
@@ -123,12 +123,23 @@ glm::vec2 TargetBrowserPair::selectedScreenSpacePosition() const {
|
||||
// The fine tune of the target is a way to "drag and drop" the target with right click
|
||||
// drag on the sky browser window. This is to be able to drag the target around when it
|
||||
// has a very small field of view
|
||||
void TargetBrowserPair::fineTuneTarget(const glm::vec2& start,
|
||||
const glm::vec2& translation)
|
||||
void TargetBrowserPair::fineTuneTarget(const glm::dvec3& startWorldPosition,
|
||||
const glm::vec2& startMouse,
|
||||
const glm::vec2& translation)
|
||||
{
|
||||
glm::vec2 fineTune = _browser->fineTuneVector(translation);
|
||||
glm::vec2 endMouse = startMouse + fineTune;
|
||||
|
||||
// Translation world
|
||||
glm::dvec3 startWorld = skybrowser::localCameraToGalactic(
|
||||
glm::vec3(startMouse, skybrowser::ScreenSpaceZ)
|
||||
);
|
||||
glm::dvec3 endWorld = skybrowser::localCameraToGalactic(
|
||||
glm::vec3(endMouse, skybrowser::ScreenSpaceZ)
|
||||
);
|
||||
|
||||
|
||||
glm::dvec3 translationWorld = endWorld - startWorld;
|
||||
aimTargetGalactic(startWorldPosition + translationWorld);
|
||||
}
|
||||
|
||||
void TargetBrowserPair::translateSelected(const glm::vec2& start,
|
||||
@@ -361,8 +372,8 @@ bool TargetBrowserPair::isUsingRadiusAzimuthElevation() const {
|
||||
return _browser->isUsingRaeCoords();
|
||||
}
|
||||
|
||||
RenderableSkyTarget* TargetBrowserPair::target() const {
|
||||
return _targetRenderable;
|
||||
SceneGraphNode* TargetBrowserPair::targetNode() const {
|
||||
return _targetNode;
|
||||
}
|
||||
|
||||
ScreenSpaceSkyBrowser* TargetBrowserPair::browser() const {
|
||||
|
||||
Reference in New Issue
Block a user