Commit 2f438900 authored by Nico Mack's avatar Nico Mack

Minor fixes required for handling rotation

parent ff60923e
......@@ -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());
}
// ---------------------------------------------------------------------------
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment