Exemplo n.º 1
0
TouchEvent::TouchEvent(int id, Type eventType, BlobPtr pBlob, const IntPoint& pos, 
        Source source, const glm::vec2& speed)
    : CursorEvent(id, eventType, pos, source),
      m_pBlob(pBlob),
      m_bHasHandOrientation(false)
{
    setSpeed(speed);
    if (pBlob) {
        m_Orientation = pBlob->getOrientation();
        m_Area = pBlob->getArea();
        m_Center = pBlob->getCenter();
        m_Eccentricity = pBlob->getEccentricity();
        const glm::vec2& axis0 = m_pBlob->getScaledBasis(0);
        const glm::vec2& axis1 = m_pBlob->getScaledBasis(1);
        if (glm::length(axis0) > glm::length(axis1)) {
            m_MajorAxis = axis0;
            m_MinorAxis = axis1;
        } else {
            m_MajorAxis = axis1;
            m_MinorAxis = axis0;
        }
    } else {
        m_Orientation = 0;
        m_Area = 20;
        m_Center = glm::vec2(0, 0);
        m_Eccentricity = 0;
        m_MajorAxis = glm::vec2(5, 0);
        m_MinorAxis = glm::vec2(0, 5);
    }
}
Exemplo n.º 2
0
void TrackerThread::correlateHands(BlobVectorPtr pTrackBlobs, BlobVectorPtr pTouchBlobs)
{
   if (!pTrackBlobs || !pTouchBlobs) {
       return;
   }
    for (BlobVector::iterator it1 = pTouchBlobs->begin(); it1 != pTouchBlobs->end();
            ++it1) 
    {
        BlobPtr pTouchBlob = *it1;
        IntPoint touchCenter = (IntPoint)(pTouchBlob->getCenter());
        for (BlobVector::iterator it2 = pTrackBlobs->begin(); it2 != pTrackBlobs->end(); 
                ++it2) 
        {
            BlobPtr pTrackBlob = *it2;
            if (pTrackBlob->contains(touchCenter)) {
                pTouchBlob->addRelated(pTrackBlob);
                pTrackBlob->addRelated(pTouchBlob);
                break;
            }
        }
    }
}