Changeset 567


Ignore:
Timestamp:
05/17/11 14:52:24 (12 months ago)
Author:
mschlatt
Message:

TUIO-Receiver and Touch-Events adapted to /tuio/2Dobj and /tuio/2Dblb

Location:
trunk/avango-display
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/avango-display/include/avango/display/mt/MultitouchDevice.h

    r351 r567  
    7878          int finger_id; 
    7979          Vec2 position; 
     80                  float angle, width, height, area; 
    8081          Link<MultitouchFinger> finger; 
    8182          FingerAction(int _finger_id = -1) : do_add(false), do_move(false), do_remove(false), finger_id(_finger_id) 
  • trunk/avango-display/include/avango/display/mt/MultitouchFinger.h

    r351 r567  
    4444 
    4545      public: 
    46         MultitouchFinger(int _id = -1, OsgVec2 _position = OsgVec2(), float _creationTime= 0.0); 
     46        MultitouchFinger(int _id = -1, OsgVec2 _position = OsgVec2(), float _creationTime= 0.0, float _angle = 0.0, float _width = 0.0, float _height = 0.0, float _area = 0.0); 
    4747        virtual ~MultitouchFinger(); 
    4848 
    4949        av::SFInt Identifier; 
    5050        av::osg::SFVec2 Position; 
     51                av::SFFloat Angle, Width, Height, Area; 
    5152        av::SFFloat CreationTime; 
    5253 
  • trunk/avango-display/src/avango/display/mt/MultitouchDevice.cpp

    r353 r567  
    110110    if (action.do_add) 
    111111    { 
    112       action.finger = new MultitouchFinger(action.finger_id, ::osg::Vec2(action.position.x, action.position.y), time); 
     112      action.finger = new MultitouchFinger(action.finger_id, ::osg::Vec2(action.position.x, action.position.y), time, action.angle, action.width, action.height, action.area); 
    113113      Added.add1Value(action.finger); 
    114114      action.do_add = false; 
     
    117117    { 
    118118      action.finger->Position.setValue(::osg::Vec2(action.position.x, action.position.y)); 
     119          action.finger->Angle.setValue(action.angle); 
     120          action.finger->Width.setValue(action.width); 
     121          action.finger->Height.setValue(action.height); 
     122          action.finger->Area.setValue(action.area); 
    119123      action.do_move = false; 
    120124    } 
     
    122126    { 
    123127      action.finger->Position.setValue(::osg::Vec2(action.position.x, action.position.y)); 
     128          action.finger->Angle.setValue(action.angle); 
     129          action.finger->Width.setValue(action.width); 
     130          action.finger->Height.setValue(action.height); 
     131          action.finger->Area.setValue(action.area); 
    124132      Available.remove1Value(action.finger); 
    125133      Removed.add1Value(action.finger); 
     
    146154    FingerAction &action = iter->second; 
    147155    action.position = Filtering.getValue() ? pFingerInfo->getFilteredPosition() : pFingerInfo->getPosition(); 
     156        action.angle = pFingerInfo->getAngle(); 
     157        action.width = pFingerInfo->getWidth(); 
     158        action.height = pFingerInfo->getHeight(); 
     159        action.area = pFingerInfo->getArea(); 
    148160    action.do_add = true; 
    149161  } 
     
    160172    FingerAction &action = iter->second; 
    161173    action.position = Filtering.getValue() ? pFingerInfo->getFilteredPosition() : pFingerInfo->getPosition(); 
     174        action.angle = pFingerInfo->getAngle(); 
     175        action.width = pFingerInfo->getWidth(); 
     176        action.height = pFingerInfo->getHeight(); 
     177        action.area = pFingerInfo->getArea(); 
    162178    action.do_move = true; 
    163179  } 
     
    180196      // if a finger was added officially, it has to go through all the states correctly, so tag them here for remove 
    181197      action.position = Filtering.getValue() ? pFingerInfo->getFilteredPosition() : pFingerInfo->getPosition(); 
     198          action.angle = pFingerInfo->getAngle(); 
     199          action.width = pFingerInfo->getWidth(); 
     200          action.height = pFingerInfo->getHeight(); 
     201          action.area = pFingerInfo->getArea(); 
    182202      action.do_remove = true; 
    183203    } 
  • trunk/avango-display/src/avango/display/mt/MultitouchFinger.cpp

    r353 r567  
    3838AV_FIELD_DEFINE(av::display::mt::MFMultitouchFinger); 
    3939 
    40 av::display::mt::MultitouchFinger::MultitouchFinger(int _id, ::osg::Vec2 _position, float _creationTime) 
     40av::display::mt::MultitouchFinger::MultitouchFinger(int _id, ::osg::Vec2 _position, float _creationTime, float _angle, float _width, float _height, float _area) 
    4141{ 
    4242  AV_FC_ADD_FIELD(Identifier, _id); 
    4343  AV_FC_ADD_FIELD(Position, _position); 
    4444  AV_FC_ADD_FIELD(CreationTime, _creationTime); 
     45  AV_FC_ADD_FIELD(Angle, _angle); 
     46  AV_FC_ADD_FIELD(Width, _width); 
     47  AV_FC_ADD_FIELD(Height, _height); 
     48  AV_FC_ADD_FIELD(Area, _area); 
    4549} 
    4650 
  • trunk/avango-display/src/avango/display/mt/multitouch/FingerClient.cpp

    r353 r567  
    9797        osc::ReceivedMessageArgumentStream args = message.ArgumentStream(); 
    9898 
    99         if (strcmp(message.AddressPattern(), "/tuio/2Dcur") == 0) 
     99        if (strcmp(message.AddressPattern(), "/tuio/2Dcur") == 0 
     100                        || strcmp(message.AddressPattern(), "/tuio/2Dobj") == 0 
     101                        || strcmp(message.AddressPattern(), "/tuio/2Dblb") == 0) 
    100102        { 
    101103          const char *cmd; 
     
    146148FingerClient::ProcessMessage(const osc::ReceivedMessage &message, const IpEndpointName &remoteEndpoint) 
    147149{ 
    148   if (strcmp(message.AddressPattern(), "/tuio/2Dcur") == 0) 
     150        bool isBlob = false, isObject = false, isValid = true; 
     151        if(strcmp(message.AddressPattern(), "/tuio/2Dobj") == 0) 
     152                isObject = true; 
     153        else if(strcmp(message.AddressPattern(), "/tuio/2Dblb") == 0) 
     154                isBlob = true; 
     155        else if (strcmp(message.AddressPattern(), "/tuio/2Dcur") != 0) 
     156                isValid = false; 
     157 
     158  if(isValid) 
    149159  { 
    150160    osc::ReceivedMessageArgumentStream args = message.ArgumentStream(); 
     
    155165    if (strcmp(cmd, "set") == 0) 
    156166    { 
    157       osc::int32 s_id; 
    158       float xpos, ypos, xspeed, yspeed, maccel; 
    159  
    160       args >> s_id >> xpos >> ypos >> xspeed >> yspeed >> maccel >> osc::EndMessage; 
     167          static osc::int32 s_id, i_id; 
     168      static float xpos, ypos, xspeed, yspeed, maccel; 
     169          static float angle, width, height, area, rotSpeed, rotAccel; 
     170 
     171          if(isBlob) 
     172                  args >> s_id >> xpos >> ypos >> angle >> width >> height >> area >> xspeed >> yspeed >> rotSpeed >> maccel >> rotAccel >> osc::EndMessage; 
     173          else if(isObject) 
     174                  args >> s_id >> i_id >> xpos >> ypos >> angle >> xspeed >> yspeed >> rotSpeed >> maccel >> rotAccel >> osc::EndMessage; 
     175          else 
     176                  args >> s_id >> xpos >> ypos >> xspeed >> yspeed >> maccel >> osc::EndMessage; 
    161177 
    162178      std::map<osc::int32, FingerInfo*>::iterator iter = cursor_id_map.find(s_id); 
     
    171187            fingerlistener_secure = fingerlistener; 
    172188            fingerinfo->setPositionHistorySize(historysize); 
     189                        if(isBlob) 
     190                        { 
     191                                fingerinfo->setAngle(angle); 
     192                                fingerinfo->setWidthHeightArea(width, height, area); 
     193                        } 
     194                        else if(isObject) 
     195                                fingerinfo->setAngle(angle); 
    173196          } 
    174197          cursor_id_map[s_id] = fingerinfo; 
     
    189212            fingerlistener_secure = fingerlistener; 
    190213            fingerinfo->setPositionHistorySize(historysize); 
     214                        if(isBlob) 
     215                        { 
     216                                fingerinfo->setAngle(angle); 
     217                                fingerinfo->setWidthHeightArea(width, height, area); 
     218                        } 
     219                        else if(isObject) 
     220                                fingerinfo->setAngle(angle); 
    191221          } 
    192222          fingerinfo->addPosition(pos); 
  • trunk/avango-display/src/avango/display/mt/multitouch/FingerInfo.cpp

    r353 r567  
    2222FingerInfo::FingerInfo(int id, Vec2 position) : 
    2323  m_iFingerId(id), 
    24   m_iHistorySize(0) 
     24  m_iHistorySize(0), 
     25  m_angle(0), 
     26  m_width(0), 
     27  m_height(0), 
     28  m_area(0) 
    2529  { 
    2630  // first position 
     
    3539} 
    3640 
     41float FingerInfo::getAngle() const { return m_angle; } 
     42void FingerInfo::setAngle(const float angle) { m_angle = angle; } 
     43 
     44float FingerInfo::getWidth() const { return m_width; } 
     45float FingerInfo::getHeight() const { return m_height; } 
     46float FingerInfo::getArea() const { return m_area; } 
     47void FingerInfo::setWidthHeightArea(const float width, const float height, const float area) 
     48{ 
     49        m_width = width; 
     50        m_height = height; 
     51        m_area = area; 
     52} 
    3753 
    3854void 
  • trunk/avango-display/src/avango/display/mt/multitouch/FingerInfo.h

    r353 r567  
    2828  Vec2 getFilteredPosition(); 
    2929 
     30  float getAngle() const; 
     31  void setAngle(const float angle); 
     32 
     33  float getWidth() const; 
     34  float getHeight() const; 
     35  float getArea() const; 
     36  void setWidthHeightArea(const float width, const float height, const float area); 
     37 
    3038  void setPositionHistorySize(unsigned int size); 
    3139 
     
    3442 
    3543  int m_iFingerId; 
     44  float m_angle, m_width, m_height, m_area; 
    3645 
    3746  unsigned int m_iHistorySize; 
Note: See TracChangeset for help on using the changeset viewer.