diff -r 000000000000 -r 6fefd4afe506 front_processing/extern/TUIO_JAVA/src/TUIO/TuioObject.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/front_processing/extern/TUIO_JAVA/src/TUIO/TuioObject.java Fri Mar 09 14:52:11 2012 +0100 @@ -0,0 +1,251 @@ +/* + TUIO Java backend - part of the reacTIVision project + http://reactivision.sourceforge.net/ + + Copyright (c) 2005-2009 Martin Kaltenbrunner + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package TUIO; + +/** + * The TuioObject class encapsulates /tuio/2Dobj TUIO objects. + * + * @author Martin Kaltenbrunner + * @version 1.4 + */ +public class TuioObject extends TuioContainer { + + /** + * The individual symbol ID number that is assigned to each TuioObject. + */ + protected int symbol_id; + /** + * The rotation angle value. + */ + protected float angle; + /** + * The rotation speed value. + */ + protected float rotation_speed; + /** + * The rotation acceleration value. + */ + protected float rotation_accel; + /** + * Defines the ROTATING state. + */ + public static final int TUIO_ROTATING = 5; + + /** + * This constructor takes a TuioTime argument and assigns it along with the provided + * Session ID, Symbol ID, X and Y coordinate and angle to the newly created TuioObject. + * + * @param ttime the TuioTime to assign + * @param si the Session ID to assign + * @param sym the Symbol ID to assign + * @param xp the X coordinate to assign + * @param yp the Y coordinate to assign + * @param a the angle to assign + */ + public TuioObject (TuioTime ttime, long si, int sym, float xp, float yp, float a) { + super(ttime, si,xp,yp); + symbol_id = sym; + angle = a; + rotation_speed = 0.0f; + rotation_accel = 0.0f; + } + + /** + * This constructor takes the provided Session ID, Symbol ID, X and Y coordinate + * and angle, and assigs these values to the newly created TuioObject. + * + * @param si the Session ID to assign + * @param sym the Symbol ID to assign + * @param xp the X coordinate to assign + * @param yp the Y coordinate to assign + * @param a the angle to assign + */ + public TuioObject (long si, int sym, float xp, float yp, float a) { + super(si,xp,yp); + symbol_id = sym; + angle = angle; + rotation_speed = 0.0f; + rotation_accel = 0.0f; + } + + /** + * This constructor takes the atttibutes of the provided TuioObject + * and assigs these values to the newly created TuioObject. + * + * @param tobj the TuioObject to assign + */ + public TuioObject (TuioObject tobj) { + super(tobj); + symbol_id = tobj.getSymbolID(); + angle = tobj.getAngle(); + rotation_speed = 0.0f; + rotation_accel = 0.0f; + } + + /** + * Takes a TuioTime argument and assigns it along with the provided + * X and Y coordinate, angle, X and Y velocity, motion acceleration, + * rotation speed and rotation acceleration to the private TuioObject attributes. + * + * @param ttime the TuioTime to assign + * @param xp the X coordinate to assign + * @param yp the Y coordinate to assign + * @param a the angle coordinate to assign + * @param xs the X velocity to assign + * @param ys the Y velocity to assign + * @param rs the rotation velocity to assign + * @param ma the motion acceleration to assign + * @param ra the rotation acceleration to assign + */ + public void update (TuioTime ttime, float xp, float yp, float a, float xs, float ys, float rs, float ma, float ra) { + super.update(ttime,xp,yp,xs,ys,ma); + angle = a; + rotation_speed = rs; + rotation_accel = ra; + if ((rotation_accel!=0) && (state!=TUIO_STOPPED)) state = TUIO_ROTATING; + } + + /** + * Assigns the provided X and Y coordinate, angle, X and Y velocity, motion acceleration + * rotation velocity and rotation acceleration to the private TuioContainer attributes. + * The TuioTime time stamp remains unchanged. + * + * @param xp the X coordinate to assign + * @param yp the Y coordinate to assign + * @param a the angle coordinate to assign + * @param xs the X velocity to assign + * @param ys the Y velocity to assign + * @param rs the rotation velocity to assign + * @param ma the motion acceleration to assign + * @param ra the rotation acceleration to assign + */ + public void update (float xp, float yp, float a, float xs, float ys, float rs, float ma, float ra) { + super.update(xp,yp,xs,ys,ma); + angle = a; + rotation_speed = rs; + rotation_accel = ra; + if ((rotation_accel!=0) && (state!=TUIO_STOPPED)) state = TUIO_ROTATING; + } + + /** + * Takes a TuioTime argument and assigns it along with the provided + * X and Y coordinate and angle to the private TuioObject attributes. + * The speed and accleration values are calculated accordingly. + * + * @param ttime the TuioTime to assign + * @param xp the X coordinate to assign + * @param yp the Y coordinate to assign + * @param a the angle coordinate to assign + */ + public void update (TuioTime ttime, float xp, float yp, float a) { + TuioPoint lastPoint = path.lastElement(); + super.update(ttime,xp,yp); + + TuioTime diffTime = currentTime.subtract(lastPoint.getTuioTime()); + float dt = diffTime.getTotalMilliseconds()/1000.0f; + float last_angle = angle; + float last_rotation_speed = rotation_speed; + angle = a; + + float da = (this.angle-last_angle)/(2.0f*(float)Math.PI); + if (da>0.75f) da-=1.0f; + else if (da<-0.75f) da+=1.0f; + + rotation_speed = da/dt; + rotation_accel = (rotation_speed - last_rotation_speed)/dt; + if ((rotation_accel!=0) && (state!=TUIO_STOPPED)) state = TUIO_ROTATING; + } + + /** + * Takes the atttibutes of the provided TuioObject + * and assigs these values to this TuioObject. + * The TuioTime time stamp of this TuioContainer remains unchanged. + * + * @param tobj the TuioContainer to assign + */ + public void update (TuioObject tobj) { + super.update(tobj); + angle = tobj.getAngle(); + rotation_speed = tobj.getRotationSpeed(); + rotation_accel = tobj.getRotationAccel(); + if ((rotation_accel!=0) && (state!=TUIO_STOPPED)) state = TUIO_ROTATING; + } + + /** + * This method is used to calculate the speed and acceleration values of a + * TuioObject with unchanged position and angle. + * + * @param ttime the TuioTime to assign + */ + public void stop (TuioTime ttime) { + update(ttime,xpos,ypos, angle); + } + + /** + * Returns the symbol ID of this TuioObject. + * @return the symbol ID of this TuioObject + */ + public int getSymbolID() { + return symbol_id; + } + + /** + * Returns the rotation angle of this TuioObject. + * @return the rotation angle of this TuioObject + */ + public float getAngle() { + return angle; + } + + /** + * Returns the rotation angle in degrees of this TuioObject. + * @return the rotation angle in degrees of this TuioObject + */ + public float getAngleDegrees() { + return angle/(float)Math.PI*180.0f; + } + + /** + * Returns the rotation speed of this TuioObject. + * @return the rotation speed of this TuioObject + */ + public float getRotationSpeed() { + return rotation_speed; + } + + /** + * Returns the rotation acceleration of this TuioObject. + * @return the rotation acceleration of this TuioObject + */ + public float getRotationAccel() { + return rotation_accel; + } + + /** + * Returns true of this TuioObject is moving. + * @return true of this TuioObject is moving + */ + public boolean isMoving() { + if ((state==TUIO_ACCELERATING) || (state==TUIO_DECELERATING) || (state==TUIO_ROTATING)) return true; + else return false; + } + +}