From 2f438900dc4c5cfac8321f151dd4176738c4a785 Mon Sep 17 00:00:00 2001 From: Nico Mack Date: Thu, 13 Aug 2020 14:41:26 +0200 Subject: [PATCH] Minor fixes required for handling rotation --- .../itis/dkd/tui/widget/PositionWidget.java | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/CPS/src/lu/list/itis/dkd/tui/widget/PositionWidget.java b/CPS/src/lu/list/itis/dkd/tui/widget/PositionWidget.java index e6b92a6..8cfecf0 100644 --- a/CPS/src/lu/list/itis/dkd/tui/widget/PositionWidget.java +++ b/CPS/src/lu/list/itis/dkd/tui/widget/PositionWidget.java @@ -24,6 +24,7 @@ import lu.list.itis.dkd.tui.utility.CoordinateState; import lu.list.itis.dkd.tui.utility.Point; import lu.list.itis.dkd.tui.widget.builder.BasePositionWidgetBuilder; import lu.list.itis.dkd.tui.widget.state.StateManager; +import lu.list.itis.dkd.tui.widget.state.StateManager.Direction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -87,7 +88,22 @@ public class PositionWidget extends PointingWidget implements InformationProvide // *************************************************************************** // --------------------------------------------------------------------------- - private void updateFromMove(Point newPosition, boolean continuous) { + private float convertDirection(Direction direction) { + switch (direction) { + case UNKNOWN: + return 0; + case CLOCKWISE: + return 1f; + case ANTICLOCKWISE: + return -1f; + default: + return 0; + } + } + + // --------------------------------------------------------------------------- + + private void updateFromMove(Point newPosition, boolean continuous, Direction direction) { if (this.variable != null) { Point position = this.variable.getValue(); @@ -97,16 +113,16 @@ public class PositionWidget extends PointingWidget implements InformationProvide boolean doUpdate = false; if (modifyValueOnRotation && (!continuous || trackRotationContinuously)) { - position.setAngle(newPosition.getAngle()); - doUpdate = true; + newPosition.setRotationDirection(convertDirection(direction)); + doUpdate |= true; } if (modifyValueOnTranslation && (!continuous || trackTranslationContinuously)) { if (!Double.isNaN(this.stepSize)) { double distance = position.distance(newPosition); - doUpdate = distance >= this.stepSize; + doUpdate |= (distance >= this.stepSize); } else { - doUpdate = true; + doUpdate |= true; } } if (doUpdate) { @@ -131,7 +147,7 @@ public class PositionWidget extends PointingWidget implements InformationProvide public void actionDrop(TangibleObject tuioObject) { super.actionDrop(tuioObject); Point position = this.getPointingLocation(tuioObject.getPosition()); - this.updateFromMove(position, SINGLE); + this.updateFromMove(position, SINGLE, Direction.UNKNOWN); } // --------------------------------------------------------------------------- @@ -143,7 +159,7 @@ public class PositionWidget extends PointingWidget implements InformationProvide if (this.trackRotationContinuously || this.trackTranslationContinuously) { StateManager manager = objectStates.get(tuioObject.getObjectId()); if (manager.isMoving() || manager.isRotating()) { - this.updateFromMove(this.getPointingLocation(tuioObject.getPosition()), CONTINUOUS); + this.updateFromMove(this.getPointingLocation(tuioObject.getPosition()), CONTINUOUS, manager.getDirectionOfRotation()); } } } @@ -219,9 +235,10 @@ public class PositionWidget extends PointingWidget implements InformationProvide if (!this.modifyValueOnTranslation) return; - Point position = ((StateManager) event.getSource()).getLastPosition(); + StateManager manager = (StateManager) event.getSource(); + Point position = manager.getLastPosition(); Point pointer = this.getPointingLocation(position); - this.updateFromMove(pointer, SINGLE); + this.updateFromMove(pointer, SINGLE, Direction.UNKNOWN); } // --------------------------------------------------------------------------- @@ -233,9 +250,10 @@ public class PositionWidget extends PointingWidget implements InformationProvide if (!this.modifyValueOnRotation) return; - Point position = ((StateManager) event.getSource()).getLastPosition(); + StateManager manager = (StateManager) event.getSource(); + Point position = manager.getLastPosition(); Point pointer = this.getPointingLocation(position); - this.updateFromMove(pointer, SINGLE); + this.updateFromMove(pointer, SINGLE, manager.getDirectionOfRotation()); } // --------------------------------------------------------------------------- -- GitLab