# HG changeset patch # User bastiena # Date 1345120339 -7200 # Node ID 9eff851668683fd3d5741010206659726210f797 # Parent 52277fe2279c926d672275f94265af899e5df78d Front IDILL : spaces in img names removed touch interactions finished can't select timeline before player is reading diff -r 52277fe2279c -r 9eff85166868 front_idill/doc/Documentation - Front IDILL.html --- a/front_idill/doc/Documentation - Front IDILL.html Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/doc/Documentation - Front IDILL.html Thu Aug 16 14:32:19 2012 +0200 @@ -1,297 +1,297 @@ - - - - - - - BROWSE BY MOTION - Documentation Front IDILL - - - -

Sommaire

- -
    -
  1. Introduction
  2. -
  3. Lancement
  4. -
  5. Fonctionnalités
  6. -
  7. Configuration
  8. -
  9. Notices à prendre en compte
  10. -
- -
- -
    -

  1. Introduction
  2. -
- -

Ce front est un prototype sous forme d'application web développée en javascript permettant de naviguer au sein d'une mosaïque de vidéos indexées.

- -

Elements requis : -

-

- -

Si vous souhaitez utiliser le prototype en mode d'interaction Kinect : -

-

- -
- -
    -

  1. Lancement
  2. -
- -

-

    -
  1. Lancer wamp.
  2. -
  3. Aller sur Google Chrome à l'adresse : http://localhost/Front%20IDILL
  4. -
  5. Par défaut, le prototype est réglé pour les interactions à la souris. Vous pouvez néanmoins le configurer (voir Configuration) pour qu'il puisse se connecter à un Middleware utilisant Kinect.
  6. -
-

- -

Lancement en mode Kinect (après avoir réglé le paramètre dans la configuration).

- -

-

    -
  1. Lorsque vous vous trouvez dans ce Front, vous pouvez voir deux boutons, chacun mène à un mode d'interaction particulier. Le premier vous envoie sur le Front IDILL en mode d'interaction souris et le second en mode d'interaction Kinect (le middleware est requis pour ce mode d'interaction). -
  2. Après avoir lancé le Front, il faut cliquer sur le raccourci l'exécutable "BBM - Middleware.exe". Si vous l'avez supprimé, vous pouvez le retrouvé ainsi : dossier d'installation de BBM\Browse by Motion\Middleware\MainModule.exe.
  3. -
  4. La fenêtre s'ouvre. Dès que vous voyez la sortie vidéo de la Kinect apparaître à l'écran, vous avez connecté le Middleware.
  5. -
  6. Relancez le Front en cliquant dessus et en appuyant sur F5 afin de raffraichir la fenêtre du navigateur.
  7. -
-

- -
- -
    -

  1. Fonctionnalités
  2. -
- -

Dans cette partie, on déclinera les fonctionnalités selon le mode d'interaction utilisé (Souris/Kinect).

- -

Mode d'interaction souris :

- -
    -

  1. Actions de contrôle de l'interface.
  2. - -
      -

    1. Sélection de la vidéo dans la mosaïque.
    2. - -

      Lorsque vous vous trouvez dans la mosaïque, vous pouvez survoler les images, qui zoomeront légèrement. Un clic sur une image zoomée vous permettra d'accéder à sa vidéo.

      -
    - -
      -

    1. Revenir à la mosaïque.
    2. - -

      Il y a deux interactions possibles pour revenir à la mosaïque.

      - -
    - -
      -

    1. Aller d'une vidéo à une autre.
    2. - -

      Dans une vidéo, vous pourrez voir 4 bordures, respectivement en haut, en bas, à droite et à gauche de la vidéo centrale. Il y en a 4, sauf si vous vous trouvez sur une extrémité de la mosaïque. - Pour passer à une vidéo voisine, il faut mettre la souris sur la vidéo voulue, attendre qu'elle bleuisse et que la notification de changement de vidéo apparaisse en haut de la fenêtre. Ensuite, vous pouvez :

      - - -
    -
- -
    -

  1. Recherche par courbes.
  2. - -

    Dans le mode d'intéraction souris, une icone d'aide apparaît en haut à droite de la fenêtre. Lorsque la souris passe dessus, il grandit. Un clic sur la grande icone fait apparaître le panneau d'aide. Il est possible de cliquer ou de tracer une nouvelle courbe de recherche pour faire disparaître le panneau d'aide.

    - -
      -

    1. Tracé de courbes.
    2. - -

      Lorsque vous vous trouvez dans la mosaïque, ou sur le lecteur vidéo (au dessus de la timeline), il vous est possible d'effectuer une recherche par courbe en maintenant le bouton gauche de la souris et en la déplaçant. La courbe sera alors tracée par le mouvement du curseur.
      Dès que l'utilisateur lâche le bouton, la courbe disparaît.

      -
    - -
      -

    1. Reconnaissance de courbes.
    2. - -

      Durant le tracé, il peut arriver 4 choses :

      - -

      Une recherche par courbes dans la mosaïque résulte en un filtrage. Plus les vidéos sont opaques et plus le nombre de marqueurs trouvés dans celles-ci sont importants.
      Une recherche dans une vidéo mettra en surbrillance les marqueurs correspondant au type de marqueur recherché.

      -

      Une nouvelle requête de recherche écrase la précédente.

      -

      Si une recherche est effectuée dans la mosaïque, la recherche s'étend à toutes les vidéos contenues.

      -

      A l'inverse, une recherche dans une vidéo n'affecte pas la mosaïque.

      -
    - -
      -

    1. Quitter la recherche.
    2. - -

      Pour quitter une recherche en cours, il suffit de placer le curseur sur le macaron de recherche, qui apparaîtra alors barré. Ensuite, un clic le fait disparaître et quitte la recherche.

      -
    -
- -

Mode d'interaction Kinect :

- -

Deux pointeurs sont affichées lorsque les mains se situent à un certain intervalle de profondeur par rapport à la Kinect. Cet intervalle peut être modifié dans la configuration. Il s'agit de la zone de recherche.

- -
    -

  1. Actions de contrôle de l'interface.
  2. - -
      -

    1. Sélection de la vidéo dans la mosaïque.
    2. - -

      Lorsque vous vous trouvez dans la mosaïque, vous pouvez pointer les images avec un bras, l'image sur laquelle le pointeur correspondant à une de vos mains se trouve zoomera légèrement. Lorsque vous maintenez le pointeur sur une image, une mire se remplira progressivement. Lorsqu'elle sera entièrement remplie, un zoom s'effectuera sur l'image afin de donner l'accès à sa vidéo.

      -
    - -
      -

    1. Revenir à la mosaïque.
    2. - -

      Il faut placer les deux pointeurs correspondants aux mains sur les bordures des voisins de la vidéo centrale pour revenir à la mosaïque. Il est possible de le faire horizontalement ou verticalement.

      -
    - -
      -

    1. Aller d'une vidéo à une autre.
    2. - -

      Dans une vidéo, vous pourrez voir 4 bordures, respectivement en haut, en bas, à droite et à gauche de la vidéo centrale. Il y en a 4, sauf si vous vous trouvez sur une extrémité de la mosaïque. - Pour passer à une vidéo voisine, il faut mettre le pointeur sur la vidéo voulue, attendre qu'elle bleuisse et que la notification de changement de vidéo apparaisse en haut de la fenêtre. Ensuite, vous pouvez déplacer rapidement le pointeur vers la bordure opposée

      -
    -
- -
    -

  1. Recherche par courbes.
  2. - -

    La recherche dans le mode d'interaction Kinect diffère de celle du mode d'interaction souris dans la mesure où il faut effectuer une demande de recherche. Celle-ci se fait en placant les deux mains dans la zone de recherche et en ne les bougeant plus jusqu'à ce qu'une notification de recherche apparaisse. Dans la mosaïque, les mains peuvent se placer à n'importe quel endroit, alors que dans une vidéo, il faut les placer sur la vidéo centrale.

    - -
      -

    1. Tracé de courbes.
    2. - -

      Lorsque vous vous trouvez dans la mosaïque, ou sur le lecteur vidéo (au dessus de la timeline), il vous est possible d'effectuer une recherche par courbe en demandant une recherche, puis en déplacant les deux mains dans la zone de recherche. Seul les débuts de courbes valides seront pris en compte (afin d'éviter que le positionnement des mains ne génère trop d'erreurs de reconnaissance). La courbe sera alors tracée par le mouvement du curseur.
      Dès que l'utilisateur enlève les deux mains de la zone de recherche, la courbe disparaît.

      -

      Chaque pointeur génère une courbe. L'analyse de courbes est donc double.

      -
    - -
      -

    1. Reconnaissance de courbes.
    2. - -

      Durant le tracé, il peut arriver 4 choses :

      - -

      Il est possible aussi d'afficher l'aide en effectuant le geste wave (secouer la main droite horizontalement, le coude formant un angle droit). Au préalable il faut avoir effectué une demande de recherche. Il est possible d'effectuer une recherche gestuelle (voir plus bas) ou de tracer une nouvelle courbe pour faire disparaître le panneau d'aide.

      -

      Une recherche par courbes dans la mosaïque résulte en un filtrage. Plus les vidéos sont opaques et plus le nombre de marqueurs trouvés dans celles-ci sont importants.
      Une recherche dans une vidéo mettra en surbrillance les marqueurs correspondant au type de marqueur recherché.

      -

      Une nouvelle requête de recherche écrase la précédente.

      -

      Si une recherche est effectuée dans la mosaïque, la recherche s'étend à toutes les vidéos contenues.

      -

      A l'inverse, une recherche dans une vidéo n'affecte pas la mosaïque.

      -
    - -
      -

    1. Reconnaissance de gestures.
    2. - -

      Une fois une demande de recherche effectuée, vous pouvez lancer une recherche en effectuant 4 gestures (correspondantes aux 4 marqueurs représentés par ces gestures) :

      - -
    - -
      -

    1. Quitter la recherche.
    2. - -

      Pour quitter une recherche en cours, il suffit de placer un pointeur sur le macaron de recherche, qui apparaîtra alors barré. Ensuite, une mire se remplit au fur et à mesure. Lorsque la mire est pleine, la notification et la recherche sont enlevées.

      -
    -
- -
- -
    -

  1. Configuration
  2. - -

    Le Front IDILL possède deux configurations :

    - -
- -
- -
    -

  1. Notices à prendre en compte
  2. - -

    Ce projet étant un prototype, il est possible que certains bugs surviennent. Si vous expérimentez ce genre de désagrément, vous pouvez nous en faire part (actions menant au problème + description du problème + capture d'écran).

    -

    Si vous voulez évaluer convenablement le champ de liberté des pointeurs dans la fenêtre du Front, en fonction de la position de la Kinect, vous pouvez bouger les pointeurs jusqu'à ce que vos bras ne puissent plus aller plus loin. Ensuite, allez dans la console de Google Chrome (F12), et entrez les variables : mos.minX, mos.minY, mos.maxX, mos.maxY pour obtenir respectivement les valeurs de kinectMinCoordX, kinectMinCoordY, kinectMaxCoordX et kinectMaxCoordY.

    -
- -

Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.

- + + + + + + + BROWSE BY MOTION - Documentation Front IDILL + + + +

Sommaire

+ +
    +
  1. Introduction
  2. +
  3. Lancement
  4. +
  5. Fonctionnalités
  6. +
  7. Configuration
  8. +
  9. Notices à prendre en compte
  10. +
+ +
+ +
    +

  1. Introduction
  2. +
+ +

Ce front est un prototype sous forme d'application web développée en javascript permettant de naviguer au sein d'une mosaïque de vidéos indexées.

+ +

Elements requis : +

+

+ +

Si vous souhaitez utiliser le prototype en mode d'interaction Kinect : +

+

+ +
+ +
    +

  1. Lancement
  2. +
+ +

+

    +
  1. Lancer wamp.
  2. +
  3. Aller sur Google Chrome à l'adresse : http://localhost/Front%20IDILL
  4. +
  5. Par défaut, le prototype est réglé pour les interactions à la souris. Vous pouvez néanmoins le configurer (voir Configuration) pour qu'il puisse se connecter à un Middleware utilisant Kinect.
  6. +
+

+ +

Lancement en mode Kinect (après avoir réglé le paramètre dans la configuration).

+ +

+

    +
  1. Lorsque vous vous trouvez dans ce Front, vous pouvez voir deux boutons, chacun mène à un mode d'interaction particulier. Le premier vous envoie sur le Front IDILL en mode d'interaction souris et le second en mode d'interaction Kinect (le middleware est requis pour ce mode d'interaction). +
  2. Après avoir lancé le Front, il faut cliquer sur le raccourci l'exécutable "BBM - Middleware.exe". Si vous l'avez supprimé, vous pouvez le retrouvé ainsi : dossier d'installation de BBM\Browse by Motion\Middleware\MainModule.exe.
  3. +
  4. La fenêtre s'ouvre. Dès que vous voyez la sortie vidéo de la Kinect apparaître à l'écran, vous avez connecté le Middleware.
  5. +
  6. Relancez le Front en cliquant dessus et en appuyant sur F5 afin de raffraichir la fenêtre du navigateur.
  7. +
+

+ +
+ +
    +

  1. Fonctionnalités
  2. +
+ +

Dans cette partie, on déclinera les fonctionnalités selon le mode d'interaction utilisé (Souris/Kinect).

+ +

Mode d'interaction souris :

+ +
    +

  1. Actions de contrôle de l'interface.
  2. + +
      +

    1. Sélection de la vidéo dans la mosaïque.
    2. + +

      Lorsque vous vous trouvez dans la mosaïque, vous pouvez survoler les images, qui zoomeront légèrement. Un clic sur une image zoomée vous permettra d'accéder à sa vidéo.

      +
    + +
      +

    1. Revenir à la mosaïque.
    2. + +

      Il y a deux interactions possibles pour revenir à la mosaïque.

      + +
    + +
      +

    1. Aller d'une vidéo à une autre.
    2. + +

      Dans une vidéo, vous pourrez voir 4 bordures, respectivement en haut, en bas, à droite et à gauche de la vidéo centrale. Il y en a 4, sauf si vous vous trouvez sur une extrémité de la mosaïque. + Pour passer à une vidéo voisine, il faut mettre la souris sur la vidéo voulue, attendre qu'elle bleuisse et que la notification de changement de vidéo apparaisse en haut de la fenêtre. Ensuite, vous pouvez :

      + + +
    +
+ +
    +

  1. Recherche par courbes.
  2. + +

    Dans le mode d'intéraction souris, une icone d'aide apparaît en haut à droite de la fenêtre. Lorsque la souris passe dessus, il grandit. Un clic sur la grande icone fait apparaître le panneau d'aide. Il est possible de cliquer ou de tracer une nouvelle courbe de recherche pour faire disparaître le panneau d'aide.

    + +
      +

    1. Tracé de courbes.
    2. + +

      Lorsque vous vous trouvez dans la mosaïque, ou sur le lecteur vidéo (au dessus de la timeline), il vous est possible d'effectuer une recherche par courbe en maintenant le bouton gauche de la souris et en la déplaçant. La courbe sera alors tracée par le mouvement du curseur.
      Dès que l'utilisateur lâche le bouton, la courbe disparaît.

      +
    + +
      +

    1. Reconnaissance de courbes.
    2. + +

      Durant le tracé, il peut arriver 4 choses :

      + +

      Une recherche par courbes dans la mosaïque résulte en un filtrage. Plus les vidéos sont opaques et plus le nombre de marqueurs trouvés dans celles-ci sont importants.
      Une recherche dans une vidéo mettra en surbrillance les marqueurs correspondant au type de marqueur recherché.

      +

      Une nouvelle requête de recherche écrase la précédente.

      +

      Si une recherche est effectuée dans la mosaïque, la recherche s'étend à toutes les vidéos contenues.

      +

      A l'inverse, une recherche dans une vidéo n'affecte pas la mosaïque.

      +
    + +
      +

    1. Quitter la recherche.
    2. + +

      Pour quitter une recherche en cours, il suffit de placer le curseur sur le macaron de recherche, qui apparaîtra alors barré. Ensuite, un clic le fait disparaître et quitte la recherche.

      +
    +
+ +

Mode d'interaction Kinect :

+ +

Deux pointeurs sont affichées lorsque les mains se situent à un certain intervalle de profondeur par rapport à la Kinect. Cet intervalle peut être modifié dans la configuration. Il s'agit de la zone de recherche.

+ +
    +

  1. Actions de contrôle de l'interface.
  2. + +
      +

    1. Sélection de la vidéo dans la mosaïque.
    2. + +

      Lorsque vous vous trouvez dans la mosaïque, vous pouvez pointer les images avec un bras, l'image sur laquelle le pointeur correspondant à une de vos mains se trouve zoomera légèrement. Lorsque vous maintenez le pointeur sur une image, une mire se remplira progressivement. Lorsqu'elle sera entièrement remplie, un zoom s'effectuera sur l'image afin de donner l'accès à sa vidéo.

      +
    + +
      +

    1. Revenir à la mosaïque.
    2. + +

      Il faut placer les deux pointeurs correspondants aux mains sur les bordures des voisins de la vidéo centrale pour revenir à la mosaïque. Il est possible de le faire horizontalement ou verticalement.

      +
    + +
      +

    1. Aller d'une vidéo à une autre.
    2. + +

      Dans une vidéo, vous pourrez voir 4 bordures, respectivement en haut, en bas, à droite et à gauche de la vidéo centrale. Il y en a 4, sauf si vous vous trouvez sur une extrémité de la mosaïque. + Pour passer à une vidéo voisine, il faut mettre le pointeur sur la vidéo voulue, attendre qu'elle bleuisse et que la notification de changement de vidéo apparaisse en haut de la fenêtre. Ensuite, vous pouvez déplacer rapidement le pointeur vers la bordure opposée

      +
    +
+ +
    +

  1. Recherche par courbes.
  2. + +

    La recherche dans le mode d'interaction Kinect diffère de celle du mode d'interaction souris dans la mesure où il faut effectuer une demande de recherche. Celle-ci se fait en placant les deux mains dans la zone de recherche et en ne les bougeant plus jusqu'à ce qu'une notification de recherche apparaisse. Dans la mosaïque, les mains peuvent se placer à n'importe quel endroit, alors que dans une vidéo, il faut les placer sur la vidéo centrale.

    + +
      +

    1. Tracé de courbes.
    2. + +

      Lorsque vous vous trouvez dans la mosaïque, ou sur le lecteur vidéo (au dessus de la timeline), il vous est possible d'effectuer une recherche par courbe en demandant une recherche, puis en déplacant les deux mains dans la zone de recherche. Seul les débuts de courbes valides seront pris en compte (afin d'éviter que le positionnement des mains ne génère trop d'erreurs de reconnaissance). La courbe sera alors tracée par le mouvement du curseur.
      Dès que l'utilisateur enlève les deux mains de la zone de recherche, la courbe disparaît.

      +

      Chaque pointeur génère une courbe. L'analyse de courbes est donc double.

      +
    + +
      +

    1. Reconnaissance de courbes.
    2. + +

      Durant le tracé, il peut arriver 4 choses :

      + +

      Il est possible aussi d'afficher l'aide en effectuant le geste wave (secouer la main droite horizontalement, le coude formant un angle droit). Au préalable il faut avoir effectué une demande de recherche. Il est possible d'effectuer une recherche gestuelle (voir plus bas) ou de tracer une nouvelle courbe pour faire disparaître le panneau d'aide.

      +

      Une recherche par courbes dans la mosaïque résulte en un filtrage. Plus les vidéos sont opaques et plus le nombre de marqueurs trouvés dans celles-ci sont importants.
      Une recherche dans une vidéo mettra en surbrillance les marqueurs correspondant au type de marqueur recherché.

      +

      Une nouvelle requête de recherche écrase la précédente.

      +

      Si une recherche est effectuée dans la mosaïque, la recherche s'étend à toutes les vidéos contenues.

      +

      A l'inverse, une recherche dans une vidéo n'affecte pas la mosaïque.

      +
    + +
      +

    1. Reconnaissance de gestures.
    2. + +

      Une fois une demande de recherche effectuée, vous pouvez lancer une recherche en effectuant 4 gestures (correspondantes aux 4 marqueurs représentés par ces gestures) :

      + +
    + +
      +

    1. Quitter la recherche.
    2. + +

      Pour quitter une recherche en cours, il suffit de placer un pointeur sur le macaron de recherche, qui apparaîtra alors barré. Ensuite, une mire se remplit au fur et à mesure. Lorsque la mire est pleine, la notification et la recherche sont enlevées.

      +
    +
+ +
+ +
    +

  1. Configuration
  2. + +

    Le Front IDILL possède deux configurations :

    + +
+ +
+ +
    +

  1. Notices à prendre en compte
  2. + +

    Ce projet étant un prototype, il est possible que certains bugs surviennent. Si vous expérimentez ce genre de désagrément, vous pouvez nous en faire part (actions menant au problème + description du problème + capture d'écran).

    +

    Si vous voulez évaluer convenablement le champ de liberté des pointeurs dans la fenêtre du Front, en fonction de la position de la Kinect, vous pouvez bouger les pointeurs jusqu'à ce que vos bras ne puissent plus aller plus loin. Ensuite, allez dans la console de Google Chrome (F12), et entrez les variables : mos.minX, mos.minY, mos.maxX, mos.maxY pour obtenir respectivement les valeurs de kinectMinCoordX, kinectMinCoordY, kinectMaxCoordX et kinectMaxCoordY.

    +
+ +

Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.

+ \ No newline at end of file diff -r 52277fe2279c -r 9eff85166868 front_idill/src/communication/js/client.js --- a/front_idill/src/communication/js/client.js Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/src/communication/js/client.js Thu Aug 16 14:32:19 2012 +0200 @@ -25,17 +25,17 @@ */ function Client(host, port, _mosaic) { - this.socket = null; - this.mosaic = _mosaic; - - this.pointerLeft = false; - this.pointerRight = false; - this.timePointers = 100; - this.pointerLeftTimeout = null; - this.pointerRightTimeout = null; - this.isLeftHanded = false; - - this.createWebSocket('ws://' + host + ':' + port + '/'); + this.socket = null; + this.mosaic = _mosaic; + + this.pointerLeft = false; + this.pointerRight = false; + this.timePointers = 100; + this.pointerLeftTimeout = null; + this.pointerRightTimeout = null; + this.isLeftHanded = false; + + this.createWebSocket('ws://' + host + ':' + port + '/'); } /* @@ -45,46 +45,46 @@ */ Client.prototype.createWebSocket = function(host) { - var _this = this; - - //Initialise la fonctionnalité websocket du naviguateur. + var _this = this; + + //Initialise la fonctionnalité websocket du naviguateur. if(window.MozWebSocket) - { + { window.WebSocket = window.MozWebSocket; - } - - //Si le naviguateur ne supporte pas les websockets, on s'arrête là. + } + + //Si le naviguateur ne supporte pas les websockets, on s'arrête là. if(!window.WebSocket) - { + { alert('Votre navigateur ne supporte pas les webSocket!'); return false; } - //Sinon - else - { - //On initialise la socket. - this.socket = new WebSocket(host); - - //Si elle est ouverte, on notifie le Front. - this.socket.onopen = function() - { - console.log('Socket ouverte.'); - } - //Si elle est fermée, on notifie le Front. - this.socket.onclose = function() - { - console.log('Socket fermée.'); - } - //S'il y a un problème dans la connection, on notifie le Front. - this.socket.onerror = function() - { - console.log('Une erreur est survenue dans le module de Communication.'); - } - //Si on reçoit un message. - this.socket.onmessage = function(msg) - { - _this.processMsg(msg); - } + //Sinon + else + { + //On initialise la socket. + this.socket = new WebSocket(host); + + //Si elle est ouverte, on notifie le Front. + this.socket.onopen = function() + { + console.log('Socket ouverte.'); + } + //Si elle est fermée, on notifie le Front. + this.socket.onclose = function() + { + console.log('Socket fermée.'); + } + //S'il y a un problème dans la connection, on notifie le Front. + this.socket.onerror = function() + { + console.log('Une erreur est survenue dans le module de Communication.'); + } + //Si on reçoit un message. + this.socket.onmessage = function(msg) + { + _this.processMsg(msg); + } } } @@ -95,234 +95,234 @@ */ Client.prototype.processMsg = function(msg) { - if(typeof msg === 'undefined' || typeof msg.data === 'undefined') - { - return; - } - - var _this = this; - - - //S'il s'agit d'une string et non d'une instruction pour les pointeurs. - if(msg.data[0] === '2') - { - var instruction = msg.data.substring(2, msg.data.length); - - // if(instruction.indexOf("INCOMING") == -1 && instruction.indexOf('NO-USER') == -1) - // { - this.mosaic.manageControlEvents(instruction); - // } - } - //Sinon si ce sont les coordonnées de la main droite. - // /!\/!\ // - else if(msg.data[0] == '1') - { - var instruction = msg.data.substring(2, msg.data.length); - pt = instruction.split(';'); - var x = Math.abs(parseFloat(pt[0])), y = Math.abs(parseFloat(pt[1])); - // console.log(Math.abs(parseFloat(pt[0])), Math.abs(parseFloat(pt[1]))); - - this.pointerRight = true; - clearTimeout(this.pointerRightTimeout); - - if(!this.mosaic.mouseInteractions && this.mosaic.currentMode != 'NO-USER' && this.mosaic.currentMode.indexOf('INCOMING') == -1) - { - // console.log('pt'); - this.mosaic.refreshPointers(x, y, true); - } - - // /!\ // - if(!this.mosaic.isMainPointerDisplayed) - { - this.mosaic.mainPointerDisplay(true); - this.mosaic.isMainPointerDisplayed = true; - } - - this.pointerRightTimeout = setTimeout(function() - { - // console.log('RELEASE LEFT'); - //Timeout indiquant quand la main gauche part. - _this.pointerRight = false; - - if(_this.mosaic.isMainPointerDisplayed) - { - _this.mosaic.isMainPointerDisplayed = false; - _this.mosaic.mainPointerDisplay(false); - } - - if(_this.mosaic.isSearchByCurvesOn) - { - _this.mosaic.isSearchByCurvesOn = false; - if(_this.mosaic.searchCanvas) - { - _this.mosaic.searchCanvas.onPointerOut(); - - $('#mainPointer').css('background-image', 'url(./img/cursors/pointerC.png)'); - $('#secondPointer').css('background-image', 'url(./img/cursors/pointer2C.png)'); - } - } - //On peut effectuer de nouveau une recherche par courbes. - if(!_this.pointerLeft) - { - _this.mosaic.mustTakeOutHands = false; - } - }, this.timePointers); - } - //Sinon si ce sont les coordonnées de la main gauche. - else if(msg.data[0] == '0') - { - var instruction = msg.data.substring(2, msg.data.length); - pt = instruction.split(';'); - var x = Math.abs(parseFloat(pt[0])), y = Math.abs(parseFloat(pt[1])); - // console.log(Math.abs(parseFloat(pt[0])), Math.abs(parseFloat(pt[1]))); - - this.pointerLeft = true; - clearTimeout(this.pointerLeftTimeout); - - if(!this.mosaic.mouseInteractions && this.mosaic.currentMode != 'NO-USER' && this.mosaic.currentMode.indexOf('INCOMING') == -1) - { - this.mosaic.refreshPointers(x, y, false); - } - - if(!this.mosaic.isSecondPointerDisplayed) - { - this.mosaic.secondPointerDisplay(true); - this.mosaic.isSecondPointerDisplayed = true; - } - - //Timeout indiquant quand la main droite part. - this.pointerLeftTimeout = setTimeout(function() - { - // console.log('RELEASE RIGHT'); - _this.pointerLeft = false; - - if(_this.mosaic.isSecondPointerDisplayed) - { - _this.mosaic.isSecondPointerDisplayed = false; - _this.mosaic.secondPointerDisplay(false); - } - - if(_this.mosaic.isSearchByCurvesOn) - { - _this.mosaic.isSearchByCurvesOn = false; - if(_this.mosaic.searchCanvas) - { - _this.mosaic.searchCanvas.onPointerOut(); - - $('#mainPointer').css('background-image', 'url(./img/cursors/pointerC.png)'); - $('#secondPointer').css('background-image', 'url(./img/cursors/pointer2C.png)'); - } - } - //On peut effectuer de nouveau une recherche par courbes. - if(!_this.pointerRight) - { - _this.mosaic.mustTakeOutHands = false; - } - }, this.timePointers); - } - - if(this.pointerLeft && !this.pointerRight || !this.pointerLeft && this.pointerRight) - { - //On interrompt l'idle des pointeurs. - this.mosaic.pointersIdleAvailable = false; - this.mosaic.removeIdlePointers(); - this.mosaic.areBothPointersHere = false; - } - if(!this.pointerLeft && !this.pointerRight) - { - //On interrompt l'idle des pointeurs. - this.mosaic.pointersIdleAvailable = false; - this.mosaic.removeIdlePointers(); - this.mosaic.areBothPointersHere = false; - - this.mosaic.deselectAllNeighbours(); - this.mosaic.preUnzoom(); - } - - if(this.pointerLeft && this.pointerRight) - { - this.mosaic.areBothPointersHere = true; - this.mosaic.removeCheckForBothPointersHere(); - - //On enlève les requêtes de zoom. - this.mosaic.preUnzoom(); - - if(this.mosaic.currentMode == 'MOSAIC' || this.mosaic.currentMode == 'FILTER' && !this.mosaic.isSearchByCurvesOn) - { - $('#mainPointer').css('background-image', 'url(./img/cursors/pointer.png)'); - $('#secondPointer').css('background-image', 'url(./img/cursors/pointer2.png)'); - } - - //Si on est dans un des modes de recherche et que les mains ont été retirées après la précédente recherche. - if((this.mosaic.currentMode == 'FILTER' || this.mosaic.currentMode == 'SEARCH') && !this.mosaic.mustTakeOutHands) - { - // console.log('ON'); - if(this.mosaic.searchCanvas) - { - var mainPointerX = +$('#mainPointer').position().left + $('#mainPointer').width() / 2; - var mainPointerY = +$('#mainPointer').position().top - this.mosaic.MPTop_margin + $('#mainPointer').height() / 2; - var secondPointerX = +$('#secondPointer').position().left + $('#secondPointer').width() / 2; - var secondPointerY = +$('#secondPointer').position().top - this.mosaic.MPTop_margin + $('#secondPointer').height() / 2; - - if(!this.mosaic.isSearchByCurvesOn) - { - this.mosaic.isSearchByCurvesOn = true; - this.mosaic.searchCanvas.onPointerOut(); - this.mosaic.searchCanvas.onPointerIn(mainPointerX, mainPointerY, secondPointerX, secondPointerY); - this.mosaic.canDrawNextCurve = true; - - this.mosaic.pointersGreen(); - } - else if(this.mosaic.isSearchByCurvesOn) - { - if(this.mosaic.canDrawNextCurve) - { - this.mosaic.canDrawNextCurve = false; - if(Math.abs(mainPointerX - this.mosaic.mainPointerLastX) > 10 || Math.abs(mainPointerY - this.mosaic.mainPointerLastY) > 10 || Math.abs(secondPointerX - this.mosaic.secondPointerLastX) > 10 || Math.abs(secondPointerY - this.mosaic.secondPointerLastY) > 10) - { - this.mosaic.searchCanvas.onPointerMove(mainPointerX, mainPointerY, secondPointerX, secondPointerY); - this.mosaic.pointersGreen(); - } - } - else - { - this.mosaic.nextDrawCurveTimeout = setTimeout(function() - { - _this.mosaic.canDrawNextCurve = true; - }, this.mosaic.config.timeoutNextDrawCurve); - } - } - } - else - { - this.mosaic.startSearch(); - } - } - } - - //Quant on a reçu un message, on vérifie la présence des deux pointeurs. - this.mosaic.checkForBothPointersHere(); - - if(this.mosaic.pointersIdleAvailable) - { - //On effectue une vérification de la position des pointeurs pour l'idle. - this.mosaic.detectIdlePointers(); - } - - //Si le timeout a besoin d'être relancé ou bien que l'affichage de l'aide est disponible. - if(this.mosaic.pointersIdleNeedLaunch || this.mosaic.canNotifyHelp) - { - // console.log('launch idle'); - this.mosaic.launchIdlePointers(); - this.mosaic.pointersIdleNeedLaunch = false; - } - - //Si la détection d'idle n'est pas activée et qu'on est dans un mode permettant l'interaction de l'utilisateur. - if(!this.mosaic.pointersIdleAvailable && this.mosaic.currentMode != "NO-USER" && this.mosaic.currentMode.indexOf("INCOMING") == -1 && this.mosaic.areBothPointersHere) - { - //On enclenche la détection d'idle. - this.mosaic.pointersIdleAvailable = true; - this.mosaic.pointersIdleNeedLaunch = true; - } - // /!\/!\ // + if(typeof msg === 'undefined' || typeof msg.data === 'undefined') + { + return; + } + + var _this = this; + + + //S'il s'agit d'une string et non d'une instruction pour les pointeurs. + if(msg.data[0] === '2') + { + var instruction = msg.data.substring(2, msg.data.length); + + // if(instruction.indexOf("INCOMING") == -1 && instruction.indexOf('NO-USER') == -1) + // { + this.mosaic.manageControlEvents(instruction); + // } + } + //Sinon si ce sont les coordonnées de la main droite. + // /!\/!\ // + else if(msg.data[0] == '1') + { + var instruction = msg.data.substring(2, msg.data.length); + pt = instruction.split(';'); + var x = Math.abs(parseFloat(pt[0])), y = Math.abs(parseFloat(pt[1])); + // console.log(Math.abs(parseFloat(pt[0])), Math.abs(parseFloat(pt[1]))); + + this.pointerRight = true; + clearTimeout(this.pointerRightTimeout); + + if(!this.mosaic.mouseInteractions && this.mosaic.currentMode != 'NO-USER' && this.mosaic.currentMode.indexOf('INCOMING') == -1) + { + // console.log('pt'); + this.mosaic.refreshPointers(x, y, true); + } + + // /!\ // + if(!this.mosaic.isMainPointerDisplayed) + { + this.mosaic.mainPointerDisplay(true); + this.mosaic.isMainPointerDisplayed = true; + } + + this.pointerRightTimeout = setTimeout(function() + { + // console.log('RELEASE LEFT'); + //Timeout indiquant quand la main gauche part. + _this.pointerRight = false; + + if(_this.mosaic.isMainPointerDisplayed) + { + _this.mosaic.isMainPointerDisplayed = false; + _this.mosaic.mainPointerDisplay(false); + } + + if(_this.mosaic.isSearchByCurvesOn) + { + _this.mosaic.isSearchByCurvesOn = false; + if(_this.mosaic.searchCanvas) + { + _this.mosaic.searchCanvas.onPointerOut(); + + $('#mainPointer').css('background-image', 'url(./img/cursors/pointerC.png)'); + $('#secondPointer').css('background-image', 'url(./img/cursors/pointer2C.png)'); + } + } + //On peut effectuer de nouveau une recherche par courbes. + if(!_this.pointerLeft) + { + _this.mosaic.mustTakeOutHands = false; + } + }, this.timePointers); + } + //Sinon si ce sont les coordonnées de la main gauche. + else if(msg.data[0] == '0') + { + var instruction = msg.data.substring(2, msg.data.length); + pt = instruction.split(';'); + var x = Math.abs(parseFloat(pt[0])), y = Math.abs(parseFloat(pt[1])); + // console.log(Math.abs(parseFloat(pt[0])), Math.abs(parseFloat(pt[1]))); + + this.pointerLeft = true; + clearTimeout(this.pointerLeftTimeout); + + if(!this.mosaic.mouseInteractions && this.mosaic.currentMode != 'NO-USER' && this.mosaic.currentMode.indexOf('INCOMING') == -1) + { + this.mosaic.refreshPointers(x, y, false); + } + + if(!this.mosaic.isSecondPointerDisplayed) + { + this.mosaic.secondPointerDisplay(true); + this.mosaic.isSecondPointerDisplayed = true; + } + + //Timeout indiquant quand la main droite part. + this.pointerLeftTimeout = setTimeout(function() + { + // console.log('RELEASE RIGHT'); + _this.pointerLeft = false; + + if(_this.mosaic.isSecondPointerDisplayed) + { + _this.mosaic.isSecondPointerDisplayed = false; + _this.mosaic.secondPointerDisplay(false); + } + + if(_this.mosaic.isSearchByCurvesOn) + { + _this.mosaic.isSearchByCurvesOn = false; + if(_this.mosaic.searchCanvas) + { + _this.mosaic.searchCanvas.onPointerOut(); + + $('#mainPointer').css('background-image', 'url(./img/cursors/pointerC.png)'); + $('#secondPointer').css('background-image', 'url(./img/cursors/pointer2C.png)'); + } + } + //On peut effectuer de nouveau une recherche par courbes. + if(!_this.pointerRight) + { + _this.mosaic.mustTakeOutHands = false; + } + }, this.timePointers); + } + + if(this.pointerLeft && !this.pointerRight || !this.pointerLeft && this.pointerRight) + { + //On interrompt l'idle des pointeurs. + this.mosaic.pointersIdleAvailable = false; + this.mosaic.removeIdlePointers(); + this.mosaic.areBothPointersHere = false; + } + if(!this.pointerLeft && !this.pointerRight) + { + //On interrompt l'idle des pointeurs. + this.mosaic.pointersIdleAvailable = false; + this.mosaic.removeIdlePointers(); + this.mosaic.areBothPointersHere = false; + + this.mosaic.deselectAllNeighbours(); + this.mosaic.preUnzoom(); + } + + if(this.pointerLeft && this.pointerRight) + { + this.mosaic.areBothPointersHere = true; + this.mosaic.removeCheckForBothPointersHere(); + + //On enlève les requêtes de zoom. + this.mosaic.preUnzoom(); + + if(this.mosaic.currentMode == 'MOSAIC' || this.mosaic.currentMode == 'FILTER' && !this.mosaic.isSearchByCurvesOn) + { + $('#mainPointer').css('background-image', 'url(./img/cursors/pointer.png)'); + $('#secondPointer').css('background-image', 'url(./img/cursors/pointer2.png)'); + } + + //Si on est dans un des modes de recherche et que les mains ont été retirées après la précédente recherche. + if((this.mosaic.currentMode == 'FILTER' || this.mosaic.currentMode == 'SEARCH') && !this.mosaic.mustTakeOutHands) + { + // console.log('ON'); + if(this.mosaic.searchCanvas) + { + var mainPointerX = +$('#mainPointer').position().left + $('#mainPointer').width() / 2; + var mainPointerY = +$('#mainPointer').position().top - this.mosaic.MPTop_margin + $('#mainPointer').height() / 2; + var secondPointerX = +$('#secondPointer').position().left + $('#secondPointer').width() / 2; + var secondPointerY = +$('#secondPointer').position().top - this.mosaic.MPTop_margin + $('#secondPointer').height() / 2; + + if(!this.mosaic.isSearchByCurvesOn) + { + this.mosaic.isSearchByCurvesOn = true; + this.mosaic.searchCanvas.onPointerOut(); + this.mosaic.searchCanvas.onPointerIn(mainPointerX, mainPointerY, secondPointerX, secondPointerY); + this.mosaic.canDrawNextCurve = true; + + this.mosaic.pointersGreen(); + } + else if(this.mosaic.isSearchByCurvesOn) + { + if(this.mosaic.canDrawNextCurve) + { + this.mosaic.canDrawNextCurve = false; + if(Math.abs(mainPointerX - this.mosaic.mainPointerLastX) > 10 || Math.abs(mainPointerY - this.mosaic.mainPointerLastY) > 10 || Math.abs(secondPointerX - this.mosaic.secondPointerLastX) > 10 || Math.abs(secondPointerY - this.mosaic.secondPointerLastY) > 10) + { + this.mosaic.searchCanvas.onPointerMove(mainPointerX, mainPointerY, secondPointerX, secondPointerY); + this.mosaic.pointersGreen(); + } + } + else + { + this.mosaic.nextDrawCurveTimeout = setTimeout(function() + { + _this.mosaic.canDrawNextCurve = true; + }, this.mosaic.config.timeoutNextDrawCurve); + } + } + } + else + { + this.mosaic.startSearch(); + } + } + } + + //Quant on a reçu un message, on vérifie la présence des deux pointeurs. + this.mosaic.checkForBothPointersHere(); + + if(this.mosaic.pointersIdleAvailable) + { + //On effectue une vérification de la position des pointeurs pour l'idle. + this.mosaic.detectIdlePointers(); + } + + //Si le timeout a besoin d'être relancé ou bien que l'affichage de l'aide est disponible. + if(this.mosaic.pointersIdleNeedLaunch || this.mosaic.canNotifyHelp) + { + // console.log('launch idle'); + this.mosaic.launchIdlePointers(); + this.mosaic.pointersIdleNeedLaunch = false; + } + + //Si la détection d'idle n'est pas activée et qu'on est dans un mode permettant l'interaction de l'utilisateur. + if(!this.mosaic.pointersIdleAvailable && this.mosaic.currentMode != "NO-USER" && this.mosaic.currentMode.indexOf("INCOMING") == -1 && this.mosaic.areBothPointersHere) + { + //On enclenche la détection d'idle. + this.mosaic.pointersIdleAvailable = true; + this.mosaic.pointersIdleNeedLaunch = true; + } + // /!\/!\ // } \ No newline at end of file diff -r 52277fe2279c -r 9eff85166868 front_idill/src/defaults.js --- a/front_idill/src/defaults.js Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/src/defaults.js Thu Aug 16 14:32:19 2012 +0200 @@ -1,72 +1,72 @@ -/* -* This file is part of the TraKERS\Front IDILL package. -* -* (c) IRI -* -* For the full copyright and license information, please view the LICENSE -* file that was distributed with this source code. -*/ - -/* - * Projet : TraKERS - * Module : Front IDILL - * Fichier : defaults.js - * - * Auteur : alexandre.bastien@iri.centrepompidou.fr - * - * Fonctionnalités : Ce fichier contient la configuration par défaut du Front IDILL. - */ - - var default_parameters = { - local : true, - mouseInteractions : true, - noUserModeEnabled : true, - kinectMinCoordX : 40, - kinectMinCoordY : 30, - kinectMaxCoordX : 520, - kinectMaxCoordY : 260, - videoConfigFileLocal : "./player/json/local_videos.json", - videoConfigFileOnline : "./player/json/online_videos.json", - timeReloadAfterResize : 1000, - imagesByLine : 5, - imagesToShow : 20, - totalImages : 23, - timePrezoom : 500, - timePreUnzoom : 200, - zoomTime : 500, - timeUnzoom : 400, - timeNeighbourGlowing : 1000, - timeNeighbourUnglowing : 1000, - timeMovingToNeighbour : 1000, - timeSearchFade : 2000, - timeNotifyFade : 2000, - timeFilterFade : 2000, - timeANFade : 500, - timeFilling : 500, - timeShowBigHelp : 1000, - timeoutZoom : 2000, - timeoutUnzoom : 1000, - timeoutMoveToNeighbour : 250, - timeoutPointersIdle : 2000, - timeoutAreBothPointersHere : 500, - timeoutRemoveNotificationByGesture : 1500, - timeoutNotifySwipe : 1000, - timeoutSelectTL : 100, - timeoutSlideTL : 1000, - timeoutCanNotifyHelp : 1000, - timeoutRemoveSpinner : 1000, - timeoutNouser : 3000, - timeoutNexrDrawCurve : 500, - zoomPercentage : 0.80, - prezoomPercentage : 0.25, - zoomedMargin : 42, - host : '127.0.0.1', - port : '8080', - touchUpDownDeltaTreshold : 100, - mouseUpDownDeltaTreshold : 15, - kinectUpDownDeltaTreshold : 100, - curveDictionaryMI : './dicoMI.json', - curveDictionaryKI : './dicoKI.json', - lang : navigator.language, - langs : ["en", "fr"] +/* +* This file is part of the TraKERS\Front IDILL package. +* +* (c) IRI +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +/* + * Projet : TraKERS + * Module : Front IDILL + * Fichier : defaults.js + * + * Auteur : alexandre.bastien@iri.centrepompidou.fr + * + * Fonctionnalités : Ce fichier contient la configuration par défaut du Front IDILL. + */ + + var default_parameters = { + local : true, + mouseInteractions : true, + noUserModeEnabled : true, + kinectMinCoordX : 40, + kinectMinCoordY : 30, + kinectMaxCoordX : 520, + kinectMaxCoordY : 260, + videoConfigFileLocal : "./player/json/local_videos.json", + videoConfigFileOnline : "./player/json/online_videos.json", + timeReloadAfterResize : 1000, + imagesByLine : 5, + imagesToShow : 20, + totalImages : 23, + timePrezoom : 500, + timePreUnzoom : 200, + zoomTime : 500, + timeUnzoom : 400, + timeNeighbourGlowing : 1000, + timeNeighbourUnglowing : 1000, + timeMovingToNeighbour : 1000, + timeSearchFade : 2000, + timeNotifyFade : 2000, + timeFilterFade : 2000, + timeANFade : 500, + timeFilling : 500, + timeShowBigHelp : 1000, + timeoutZoom : 2000, + timeoutUnzoom : 1000, + timeoutMoveToNeighbour : 250, + timeoutPointersIdle : 2000, + timeoutAreBothPointersHere : 500, + timeoutRemoveNotificationByGesture : 1500, + timeoutNotifySwipe : 1000, + timeoutSelectTL : 100, + timeoutSlideTL : 1000, + timeoutCanNotifyHelp : 1000, + timeoutRemoveSpinner : 1000, + timeoutNouser : 3000, + timeoutNexrDrawCurve : 500, + zoomPercentage : 0.80, + prezoomPercentage : 0.25, + zoomedMargin : 42, + host : '127.0.0.1', + port : '8080', + touchUpDownDeltaTreshold : 100, + mouseUpDownDeltaTreshold : 15, + kinectUpDownDeltaTreshold : 100, + curveDictionaryMI : './dicoMI.json', + curveDictionaryKI : './dicoKI.json', + lang : navigator.language, + langs : ["en", "fr"] } \ No newline at end of file diff -r 52277fe2279c -r 9eff85166868 front_idill/src/dicoKI.json --- a/front_idill/src/dicoKI.json Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/src/dicoKI.json Thu Aug 16 14:32:19 2012 +0200 @@ -34,9 +34,9 @@ "name":"screw", "codes":["D1D0D5D4D3:D4D5D0D1D2"] }, - { - "name":"arc", - "codes":["D4D5D0:D1D0D5", "D5D0D1:D0D5D4"] - } - ] + { + "name":"arc", + "codes":["D4D5D0:D1D0D5", "D5D0D1:D0D5D4"] + } + ] } \ No newline at end of file diff -r 52277fe2279c -r 9eff85166868 front_idill/src/dicoMI.json --- a/front_idill/src/dicoMI.json Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/src/dicoMI.json Thu Aug 16 14:32:19 2012 +0200 @@ -50,9 +50,9 @@ "name":"screw", "codes":["D4D5D0D1D2D3D4D1D2", "D4D5D0D1D2D0D1D2"] }, - { - "name":"arc", - "codes":["D0"] - } + { + "name":"arc", + "codes":["D0"] + } ] } \ No newline at end of file diff -r 52277fe2279c -r 9eff85166868 front_idill/src/img/play_button.png Binary file front_idill/src/img/play_button.png has changed diff -r 52277fe2279c -r 9eff85166868 front_idill/src/index.html --- a/front_idill/src/index.html Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/src/index.html Thu Aug 16 14:32:19 2012 +0200 @@ -35,80 +35,80 @@ diff -r 52277fe2279c -r 9eff85166868 front_idill/src/index_kinect.html --- a/front_idill/src/index_kinect.html Wed Aug 08 18:42:01 2012 +0200 +++ b/front_idill/src/index_kinect.html Thu Aug 16 14:32:19 2012 +0200 @@ -50,14 +50,11 @@ - - + +
- -
- @@ -33,7 +33,7 @@ - + @@ -53,35 +53,13 @@ - - + +
- -
-