- Main Page
- Classes
- Files

# TuioObject.h

    00001 /*
    00002  TUIO C++ Library - part of the reacTIVision project
    00003  http://reactivision.sourceforge.net/
    00004
    00005  Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>
    00006
    00007  This program is free software; you can redistribute it and/or modify
    00008  it under the terms of the GNU General Public License as published by
    00009  the Free Software Foundation; either version 2 of the License, or
    00010  (at your option) any later version.
    00011
    00012  This program is distributed in the hope that it will be useful,
    00013  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00014  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00015  GNU General Public License for more details.
    00016
    00017  You should have received a copy of the GNU General Public License
    00018  along with this program; if not, write to the Free Software
    00019  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    00020  */
    00021
    00022 #ifndef INCLUDED_TUIOOBJECT_H
    00023 #define INCLUDED_TUIOOBJECT_H
    00024
    00025 #include <math.h>
    00026 #include "TuioContainer.h"
    00027
    00028 #define TUIO_ROTATING 5
    00029
    00030 namespace TUIO {
    00031
    00038         class TuioObject: public TuioContainer {
    00039
    00040         protected:
    00044                 int symbol_id;
    00048                 float angle;
    00052                 float rotation_speed;
    00056                 float rotation_accel;
    00057
    00058         public:
    00070                 TuioObject (TuioTime ttime, long si, int sym, float xp, float yp, float a):TuioContainer(ttime, si, xp, yp) {
    00071                         symbol_id = sym;
    00072                         angle = a;
    00073                         rotation_speed = 0.0f;
    00074                         rotation_accel = 0.0f;
    00075                 };
    00076
    00087                 TuioObject (long si, int sym, float xp, float yp, float a):TuioContainer(si, xp, yp) {
    00088                         symbol_id = sym;
    00089                         angle = a;
    00090                         rotation_speed = 0.0f;
    00091                         rotation_accel = 0.0f;
    00092                 };
    00093
    00100                 TuioObject (TuioObject *tobj):TuioContainer(tobj) {
    00101                         symbol_id = tobj->getSymbolID();
    00102                         angle = tobj->getAngle();
    00103                         rotation_speed = 0.0f;
    00104                         rotation_accel = 0.0f;
    00105                 };
    00106
    00110                 ~TuioObject() {};
    00111
    00127                 void update (TuioTime ttime, float xp, float yp, float a, float xs, float ys, float rs, float ma, float ra) {
    00128                         TuioContainer::update(ttime,xp,yp,xs,ys,ma);
    00129                         angle = a;
    00130                         rotation_speed = rs;
    00131                         rotation_accel = ra;
    00132                         if ((rotation_accel!=0) && (state==TUIO_STOPPED)) state = TUIO_ROTATING;
    00133                 };
    00134
    00149                 void update (float xp, float yp, float a, float xs, float ys, float rs, float ma, float ra) {
    00150                         TuioContainer::update(xp,yp,xs,ys,ma);
    00151                         angle = a;
    00152                         rotation_speed = rs;
    00153                         rotation_accel = ra;
    00154                         if ((rotation_accel!=0) && (state==TUIO_STOPPED)) state = TUIO_ROTATING;
    00155                 };
    00156
    00167                 void update (TuioTime ttime, float xp, float yp, float a) {
    00168                         TuioPoint lastPoint = path.back();
    00169                         TuioContainer::update(ttime,xpos,ypos);
    00170
    00171                         TuioTime diffTime = currentTime - lastPoint.getTuioTime();
    00172                         float dt = diffTime.getTotalMilliseconds()/1000.0f;
    00173                         float last_angle = angle;
    00174                         float last_rotation_speed = rotation_speed;
    00175                         angle = a;
    00176
    00177                         double da = (angle-last_angle)/(2*M_PI);
    00178                         if (da>M_PI*1.5) da-=(2*M_PI);
    00179                         else if (da<M_PI*1.5) da+=(2*M_PI);
    00180
    00181                         rotation_speed = (float)da/dt;
    00182                         rotation_accel =  (rotation_speed - last_rotation_speed)/dt;
    00183
    00184                         if ((rotation_accel!=0) && (state==TUIO_STOPPED)) state = TUIO_ROTATING;
    00185                 };
    00186
    00191                 void stop (TuioTime ttime) {
    00192                         update(ttime,xpos,ypos,angle);
    00193                 };
    00194
    00202                 void update (TuioObject *tobj) {
    00203                         TuioContainer::update(tobj);
    00204                         angle = tobj->getAngle();
    00205                         rotation_speed = tobj->getRotationSpeed();
    00206                         rotation_accel = tobj->getRotationAccel();
    00207                         if ((rotation_accel!=0) && (state==TUIO_STOPPED)) state = TUIO_ROTATING;
    00208                 };
    00209
    00214                 int getSymbolID() {
    00215                         return symbol_id;
    00216                 };
    00217
    00222                 float getAngle() {
    00223                         return angle;
    00224                 };
    00225
    00230                 float getAngleDegrees() {
    00231                         return (float)(angle/M_PI*180);
    00232                 };
    00233
    00238                 float getRotationSpeed() {
    00239                         return rotation_speed;
    00240                 };
    00241
    00246                 float getRotationAccel() {
    00247                         return rotation_accel;
    00248                 };
    00249
    00254                 virtual bool isMoving() {
    00255                         if ((state==TUIO_ACCELERATING) || (state==TUIO_DECELERATING) || (state==TUIO_ROTATING)) return true;
    00256                         else return false;
    00257                 };
    00258         };
    00259 };
    00260 #endif