front_processing/src/Trakers/Trakers.pde
author bastiena
Thu, 15 Mar 2012 13:33:21 +0100
changeset 3 92f19af39024
parent 0 6fefd4afe506
child 5 d40f84d77db4
permissions -rw-r--r--
Middleware : Swipe & Push & Jump(Experimental) Detectors ant events added Server modified for gesture detection TUIO Server C# Modified : Hand cursors redirected to /TUIO/3DCur channel New kind of OSC message created (TuioString) for gesture detection, using /TUIO/_siP channel. TUIO Processing Java Modified : Hand cursors redirected to /TUIO/3DCur channel New kind of OSC message created (TuioString) for gesture detection, using /TUIO/_siP channel. Front Processing : Mask added and modifications in the drawing process New front for gesture detection (just showing a text message in the mask for the moment)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     1
import TUIO.*;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
     2
//import TrakersNavierStokes;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     3
TuioProcessing tuioClient;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     4
boolean oneHandLeft;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     5
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     6
/*FONCTION D'INITIALISATION
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     7
Entrée :
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     8
Sortie : Création de la fenêtre et du client TUIO*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     9
void setup()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    10
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    11
    size (640, 480);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    12
    showMask();
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
    tuioClient = new TuioProcessing(this, 80);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
    textAlign(CENTER);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
    imageMode(CENTER);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
    smooth();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
/*FONCTION DE DESSIN
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
Entrée :
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
Sortie : Appel à la fonction de traitement d'input du serveur toutes les n millisecondes*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
void draw()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
    fill(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
    tuioInput();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
    noStroke();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
/*FONCTION DE RECEPTION DES MESSAGES OSC
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
Entrée :
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
Sortie : Appel aux différentes fonctions de dessin si un message est reçu*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
void tuioInput()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    34
    noFill();
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    35
    //rect(0, 0, 50, 50);
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
  
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
    Vector tuioCursorList = tuioClient.getTuioCursors();
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    38
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    39
    if(tuioCursorList.size() <= 0)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    40
    {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    41
        showMask();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    42
        text("Les mains sont trop loin ou trop près.", width/2 - 20, 20);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    43
        text("Je ne détecte aucune main.", width/2 - 20, 40);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    44
    }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    45
        
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
    if(tuioCursorList.size() == 1)
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    47
    {
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
        handleOneHand((TuioCursor)tuioCursorList.elementAt(0));
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    49
        fill(255);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    50
        text("Les mains sont dans la zone de captation.", width/2 - 20, 20);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    51
        text("Je détecte une main.", width/2 - 20, 40);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    52
    }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
    else if(tuioCursorList.size() == 2)
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    54
    {
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
        handleBothHands(tuioCursorList);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    56
        fill(255);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    57
        text("Les mains sont dans la zone de captation.", width/2 - 20, 20);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    58
        text("Je détecte les deux mains.", width/2 - 20, 40);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    59
    }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    60
}
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    61
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    62
/*FONCTION DE GENERATION DU MASQUE
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    63
Entrée :
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    64
Sortie : Place des rectangles autour de la zone de dessin*/
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    65
void showMask()
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    66
{
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    67
    background(0);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    68
    fill(255);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    69
    rect(0, 80, width, height-130);
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
/*FONCTION DE GESTION DES COURBES POUR UNE MAIN DETECTEE
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
Entrée : Un curseur TUIO
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
Sortie : Appel aux différentes fonctions de dessin si un message est reçu*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
void handleOneHand(TuioCursor handCursor)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
{
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    77
    showMask();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    78
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
    Vector pointList = handCursor.getPath();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
    for (int j=0;j<pointList.size();j++)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
    {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
        TuioPoint pt = (TuioPoint)pointList.get(j);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    83
        fill(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    84
        drawEllipse(pt.getX(), pt.getY(), pt.getZ(), !oneHandLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    85
        
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    86
        if(tuioClient.getTuioCursors().size() == 2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    87
            break;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    88
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    89
}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    90
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    91
/*FONCTION DE GESTION DES COURBES POUR DEUX MAINS DETECTEES
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    92
Entrée : La liste des curseurs TUIO
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    93
Sortie : Appel aux différentes fonctions de dessin si un message est reçu*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
void handleBothHands(Vector tuioCursorList)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
{
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    96
    showMask();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    97
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
    TuioCursor handLeftCursor = (TuioCursor)tuioCursorList.elementAt(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
    TuioCursor rightLeftCursor = (TuioCursor)tuioCursorList.elementAt(1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
    Vector handLeftPointList = handLeftCursor.getPath();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
    Vector handRightPointList = rightLeftCursor.getPath();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
    TuioPoint pt;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
    
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
    for(int j = 0, k = 0 ; j < handLeftPointList.size() || k < handRightPointList.size() ; j++, k++)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
    {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
        if(j < handLeftPointList.size())
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
            pt = (TuioPoint)handLeftPointList.get(j);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
            drawEllipse(pt.getX(), pt.getY(), pt.getZ(), true);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
        if(k < handRightPointList.size())
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   112
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   113
            pt = (TuioPoint)handRightPointList.get(k);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   114
            drawEllipse(pt.getX(), pt.getY(), pt.getZ(), false);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   115
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   116
        
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   117
        if(tuioCursorList.size() == 1)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   118
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
            if(j == handLeftPointList.size())
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   120
                oneHandLeft = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
            else if(k == handRightPointList.size())
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   122
                oneHandLeft = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   123
            //fill(0, 255, 0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   124
            break;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   129
/*FONCTION DE DESSIN D'UN POINT DE COURBE
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
Entrée : Coordonnées X, Y et Z d'un point
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
Sortie : Le point est dessiné avec une épaisseur et une luminosité dépendant de Z*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
void drawEllipse(float x, float y, float z, boolean leftHand)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
{
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   134
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   135
    fill(0, 0, 255);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   136
    stroke(0,0,0);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   137
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   138
    float weight = map(z, 1, 1.5, 50, 1);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   139
    float redColor = map(z, 1, 1.5, 255, 80);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   140
    
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
    if(leftHand)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
        fill(redColor,0,0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
    else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
        fill(0,redColor,0);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   145
    
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   146
    if(weight < 30)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   147
    {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   148
        //strokeWeight(0);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   149
    }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   150
    else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   151
    {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   152
        fill(0, 0, redColor);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   153
    }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   154
    
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   155
    
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   156
    ellipse(x+20, y+100, weight, weight);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   157
}