From d6d26d5baed348f19cb1431cb9b27454f4a60878 Mon Sep 17 00:00:00 2001 From: Furqaan Date: Tue, 5 Apr 2016 14:51:16 -0700 Subject: [PATCH 1/2] Update BasicDragger.java --- src/gov/nasa/worldwind/util/BasicDragger.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/gov/nasa/worldwind/util/BasicDragger.java b/src/gov/nasa/worldwind/util/BasicDragger.java index 6979fd2dd8..ca4be83729 100644 --- a/src/gov/nasa/worldwind/util/BasicDragger.java +++ b/src/gov/nasa/worldwind/util/BasicDragger.java @@ -21,6 +21,7 @@ public class BasicDragger implements SelectListener private final WorldWindow wwd; private boolean dragging = false; private boolean useTerrain = true; + private boolean isGround = false; private Point dragRefCursorPoint; private Vec4 dragRefObjectPoint; @@ -77,6 +78,7 @@ public void selected(SelectEvent event) if (event.getEventAction().equals(SelectEvent.DRAG_END)) { + this.isGround = false; this.dragging = false; event.consume(); } @@ -99,7 +101,15 @@ else if (dragObject instanceof Movable) refPos = ((Movable) dragObject).getReferencePosition(); if (refPos == null) return; - + + //Check if the symbol is a ground symbol + if(refPos.getAltitude() == 0) + this.isGround = true; + + //Change the altitude for ground symbols only + if(this.wwd.getCurrentPosition() != null && this.isGround) + refPos = new Position(refPos, this.wwd.getCurrentPosition().getElevation()); + Vec4 refPoint = globe.computePointFromPosition(refPos); if (!this.isDragging()) // Dragging started @@ -110,20 +120,23 @@ else if (dragObject instanceof Movable) // Save cursor position this.dragRefCursorPoint = dragEvent.getPreviousPickPoint(); // Save start altitude - this.dragRefAltitude = globe.computePositionFromPoint(refPoint).getElevation(); + this.dragRefAltitude = refPos.getElevation(); } - + // Compute screen-coord delta since drag started. int dx = dragEvent.getPickPoint().x - this.dragRefCursorPoint.x; int dy = dragEvent.getPickPoint().y - this.dragRefCursorPoint.y; + double dz = refPos.getElevation() - this.dragRefAltitude; // Find intersection of screen coord (refObjectPoint + delta) with globe. double x = this.dragRefObjectPoint.x + dx; double y = event.getMouseEvent().getComponent().getSize().height - this.dragRefObjectPoint.y + dy - 1; + double altitude = this.dragRefAltitude + dz; + Line ray = view.computeRayFromScreenPoint(x, y); Position pickPos = null; // Use intersection with sphere at reference altitude. - Intersection inters[] = globe.intersect(ray, this.dragRefAltitude); + Intersection inters[] = globe.intersect(ray, altitude); if (inters != null) pickPos = globe.computePositionFromPoint(inters[0].getIntersectionPoint()); @@ -131,14 +144,19 @@ else if (dragObject instanceof Movable) { // Intersection with globe. Move reference point to the intersection point, // but maintain current altitude. - Position p = new Position(pickPos, refPos.getElevation()); + Position p = new Position(pickPos, altitude); if (dragObject instanceof Movable2) ((Movable2) dragObject).moveTo(globe, p); else ((Movable) dragObject).moveTo(p); } + + //Set ground symbol altitude back to 0 for the next check + if(this.isGround) + refPos = new Position(refPos, 0); + this.dragging = true; event.consume(); } } -} \ No newline at end of file +} From 1986cee2aa4b051edf08b11067e3762c2d0e92ac Mon Sep 17 00:00:00 2001 From: Furqaan Date: Tue, 5 Apr 2016 14:52:01 -0700 Subject: [PATCH 2/2] Update BasicDragger.java --- src/gov/nasa/worldwind/util/BasicDragger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gov/nasa/worldwind/util/BasicDragger.java b/src/gov/nasa/worldwind/util/BasicDragger.java index ca4be83729..f96dabab15 100644 --- a/src/gov/nasa/worldwind/util/BasicDragger.java +++ b/src/gov/nasa/worldwind/util/BasicDragger.java @@ -78,7 +78,7 @@ public void selected(SelectEvent event) if (event.getEventAction().equals(SelectEvent.DRAG_END)) { - this.isGround = false; + this.isGround = false; this.dragging = false; event.consume(); }