front_idill/src/search/js/curvesDetector.js
author bastiena
Thu, 05 Jul 2012 16:04:33 +0200
changeset 45 0e29ae4568a0
child 46 9d7a2aa112fb
permissions -rw-r--r--
Front IDILL: Segment detector created for mouse interactions curves detection
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     1
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     2
* This file is part of the TraKERS\Front IDILL package.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     3
*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     5
*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     6
* For the full copyright and license information, please view the LICENSE
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     7
* file that was distributed with this source code.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     8
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
     9
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    10
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    11
 * Projet : TraKERS
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    12
 * Module : Front IDILL
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    13
 * Fichier : curvesDetector.js
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    14
 * 
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    15
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    16
 * 
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    17
 * Fonctionnalités : Détecteur de courbes de recherche, appelé par la classe de création du canvas de recherche.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    18
 */
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    19
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    20
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    21
 * Détecteur de courbes (lignes droites, arcs de cercles et cercles).
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    22
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    23
function curvesDetector(divisions, sizeTreshold, dictionary, mosaic)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    24
{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    25
	//Précision de la détection de direction en divisions (par défaut 12, selon une modélisation horaire et non mathématique).
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    26
	this.divisions = divisions;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    27
	//Taille limite pour un segment/courbe pour être considéré comme tel en px.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    28
	this.sizeTreshold = sizeTreshold;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    29
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    30
	this.dictionary = dictionary;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    31
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    32
	this.mosaic = mosaic;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    33
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    34
	//Code actuel généré. Il représente la structure de la courbe de recherche.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    35
	this.actualCode = '';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    36
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    37
	this.joints = [];
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    38
	this.jInc = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    39
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    40
	//Longueur totale de la courbe.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    41
	this.MPTotalDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    42
	this.SPTotalDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    43
	//Longueur de la partie actuelle (après début ou changement de direction).
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    44
	this.MPActualDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    45
	this.SPActualDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    46
	//Angles actuels.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    47
	this.MPActualAngle = -1;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    48
	this.SPActualAngle = -1;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    49
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    50
	//Centre du repère du pointeur principal.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    51
	this.MPrepX;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    52
	this.MPrepY;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    53
	//Centre du repère du pointeur secondaire.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    54
	this.SPrepX;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    55
	this.SPrepY;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    56
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    57
	//Coordonnées actuelles du/des pointeur/s.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    58
	this.MPx = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    59
	this.MPy = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    60
	this.SPx = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    61
	this.SPy = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    62
	//Coordonnées précédentes du/des pointeur/s.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    63
	this.MPpx = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    64
	this.MPpy = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    65
	this.SPpx = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    66
	this.SPpy = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    67
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    68
	//Si les paramètres sont incorrects, on leur donne une valeur par défaut.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    69
	if(isNaN(divisions) || divisions < 1 || divisions > 360)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    70
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    71
		this.divisions = 12;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    72
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    73
	if(sizeTreshold < 1)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    74
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    75
		sizeTreshold = 30;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    76
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    77
}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    78
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    79
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    80
 * Reinit les paramètres du détecteur.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    81
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    82
curvesDetector.prototype.reinit = function()
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    83
{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    84
	this.MPrepX = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    85
	this.MPrepY = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    86
	this.MPpx = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    87
	this.MPpy = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    88
	this.MPActualAngle = -1;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    89
	this.SPActualAngle = -1;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    90
	this.actualCode = '';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    91
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    92
	for(var i = 0 ; i < this.joints.length ; i++)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    93
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    94
		if(this.joints[i])
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    95
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    96
			this.joints[i].remove();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    97
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    98
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
    99
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   100
	this.jInc = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   101
	this.MPActualDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   102
	this.MPTotalDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   103
}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   104
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   105
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   106
 * Met à jour les positions des pointeurs
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   107
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   108
curvesDetector.prototype.updatePos = function(mpx, mpy, spx, spy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   109
{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   110
	//On met à jour les coordonnées récentes.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   111
	this.MPx = mpx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   112
	this.MPy = mpy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   113
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   114
	//Si les coordonnées précédentes n'existent pas, alors on les met à jour.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   115
	if(!this.MPpx)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   116
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   117
		this.MPpx = mpx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   118
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   119
	if(!this.MPpy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   120
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   121
		this.MPpy = mpy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   122
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   123
	if(!this.MPrepX)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   124
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   125
		this.MPrepX = mpx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   126
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   127
	if(!this.MPrepY)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   128
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   129
		this.MPrepY = mpy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   130
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   131
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   132
	//Si on a un second pointeur.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   133
	if(spx && spy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   134
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   135
		//On met les coordonnées à jour.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   136
		this.SPx = spx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   137
		this.SPy = spy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   138
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   139
		//Si les coordonnées précédentes n'existent pas, alors on les met à jour.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   140
		if(!this.SPpx)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   141
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   142
			this.SPpx = spx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   143
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   144
		if(!this.SPpy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   145
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   146
			this.SPpy = spy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   147
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   148
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   149
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   150
	this.updateDists();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   151
}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   152
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   153
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   154
 * Met à jour les distances parcourues.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   155
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   156
curvesDetector.prototype.updateDists = function()
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   157
{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   158
	var foundGestures;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   159
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   160
	//Si on a de quoi calculer les distances.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   161
	if(this.MPx && this.MPy && this.MPpx && this.MPpy && this.MPrepX && this.MPrepY)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   162
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   163
		var MPDist = Math.floor(Math.sqrt((this.MPx - this.MPpx) * (this.MPx - this.MPpx) + (this.MPy - this.MPpy) * (this.MPy - this.MPpy)));
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   164
		this.MPTotalDist += MPDist;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   165
		this.MPActualDist += MPDist;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   166
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   167
		var MPCurrentA = -1;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   168
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   169
		if(MPDist > 0)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   170
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   171
			MPCurrentA = this.currentAngle(this.MPrepX, this.MPrepY, this.MPx, this.MPy);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   172
			// console.log(MPCurrentA);//, this.MPActualDist);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   173
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   174
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   175
		if(this.MPActualDist > this.sizeTreshold && MPCurrentA != -1)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   176
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   177
			console.log(this.MPActualAngle, MPCurrentA, this.MPActualAngle != -1, this.MPActualAngle != MPCurrentA);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   178
			if(this.MPActualAngle == -1 || this.MPActualAngle != MPCurrentA)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   179
			{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   180
				this.MPActualAngle = MPCurrentA;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   181
				this.actualCode += 'D' + MPCurrentA;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   182
				this.mosaic.actualCode = this.actualCode;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   183
				
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   184
				foundGestures = this.codeToGestures(this.actualCode);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   185
				
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   186
				console.log(+this.jInc+1, this.MPActualDist);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   187
				console.log(this.actualCode);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   188
				console.log(foundGestures);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   189
				
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   190
				if(foundGestures.length == 0 || foundGestures.split(';').length != 1)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   191
				{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   192
					console.log('many curves');
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   193
					this.mosaic.curvesGesturesFound = true;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   194
					$('.notifications').remove();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   195
					this.mosaic.curvesGestures(foundGestures);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   196
				}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   197
				else
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   198
				{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   199
					// console.log(this.mosaic.currentMode);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   200
					this.mosaic.currentSearchGesture = foundGestures;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   201
					
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   202
					if(this.mosaic.currentMode == "SEARCH" && this.mosaic.playerIsReady)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   203
					{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   204
						this.mosaic.player.widgets[0].searchByGesture(foundGestures);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   205
						this.mosaic.isCurrentlyInASearchByGesture = this.mosaic.player.widgets[0].isCurrentlyInASearchByGesture;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   206
						
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   207
						$('.notifications').remove();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   208
						this.mosaic.searchGesture(foundGestures, 'valid');
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   209
						
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   210
						foundGestures = '';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   211
						this.mosaic.curvesGesturesFound = false;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   212
						
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   213
						this.mosaic.isSearchByCurvesOn = false;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   214
						this.mosaic.leaveSearch();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   215
					}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   216
					else if(this.mosaic.currentMode == "FILTER")
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   217
					{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   218
						if(this.mosaic.isMosaicFiltered)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   219
						{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   220
							console.log('1 curve : ' + foundGestures);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   221
							$('.notifications').remove();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   222
							this.mosaic.filterSearchedType = foundGestures;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   223
							this.mosaic.filterGesture(foundGestures, 'valid');
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   224
							this.mosaic.searchFilter(foundGestures);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   225
							foundGestures = '';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   226
							this.mosaic.curvesGesturesFound = false;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   227
							
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   228
							this.mosaic.isSearchByCurvesOn = false;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   229
							this.mosaic.leaveSearch();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   230
						}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   231
					}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   232
				}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   233
				
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   234
				this.MPActualDist = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   235
				this.jInc++
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   236
			}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   237
			else
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   238
			{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   239
				this.MPrepX = this.MPpx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   240
				this.MPrepY = this.MPpy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   241
				
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   242
				if(this.joints[this.jInc])
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   243
				{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   244
					this.joints[this.jInc].remove();
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   245
				}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   246
				this.joints[this.jInc] = new paper.Path.Circle(new paper.Point(this.MPrepX, this.MPrepY), 10);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   247
				this.joints[this.jInc].strokeColor = 'black';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   248
				this.joints[this.jInc].fillColor = 'green';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   249
			}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   250
			
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   251
			if(this.MPActualAngle == -1)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   252
			{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   253
				this.MPActualAngle = MPCurrentA;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   254
			}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   255
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   256
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   257
		//On met à jour les coordonnées précédentes.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   258
		if(this.MPpx != this.MPx)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   259
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   260
			this.MPpx = this.MPx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   261
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   262
		if(this.MPpy != this.MPy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   263
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   264
			this.MPpy = this.MPy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   265
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   266
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   267
	//Idem au cas où on aurait un deuxième pointeur.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   268
	if(this.SPx && this.SPy && this.SPpx && this.SPpy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   269
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   270
		var SPDist = Math.floor(Math.sqrt((this.SPx - this.SPpx) * (this.SPx - this.SPpx) + (this.SPy - this.SPpy) * (this.SPy - this.SPpy)));
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   271
		this.SPTotalDist += SPDist;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   272
		this.SPActualDist += SPDist;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   273
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   274
		if(SPDist > 0)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   275
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   276
			this.currentAngle(this.SPpx, this.SPpy, this.SPx, this.SPy);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   277
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   278
		
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   279
		//On met à jour les coordonnées précédentes.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   280
		if(this.SPpx != this.SPx)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   281
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   282
			this.SPpx = this.SPx;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   283
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   284
		if(this.SPpy != this.SPy)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   285
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   286
			this.SPpy = this.SPy;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   287
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   288
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   289
}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   290
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   291
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   292
 * Renvoie les noms de gestures du dictionnaire qui ont un code qui commence par le code en entrée.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   293
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   294
curvesDetector.prototype.codeToGestures = function(code)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   295
{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   296
	//Variable qui va stocker tous les noms trouvés.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   297
	var retNames = '';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   298
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   299
	//Pour tout le dictionnaire.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   300
	for(var i = 0 ; i < this.dictionary.length ; i++)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   301
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   302
		//Pour touts les codes de chaque gesture du dictionnaire.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   303
		for(var j = 0 ; j < this.dictionary[i].codes.length ; j++)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   304
		{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   305
			//Si le code en entrée est une partie début d'un des codes.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   306
			if(this.dictionary[i].codes[j].indexOf(code) == 0)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   307
			{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   308
				//On ajoute le nom de la gesture et on passe à la gesture suivante.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   309
				retNames += this.dictionary[i].name + ';';
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   310
				break;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   311
			}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   312
		}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   313
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   314
	//Comme on sépare chaque nom par un ;, il faut supprimer le dernier si au moins un nom a été trouvé.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   315
	if(retNames.length > 0)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   316
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   317
		retNames = retNames.substring(0, retNames.length-1);
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   318
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   319
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   320
	//On renvoit les noms.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   321
	return retNames;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   322
}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   323
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   324
/*
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   325
 * Calcule l'angle emprunté par le morceau de segment actuel. On prend A va vers B.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   326
*/
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   327
curvesDetector.prototype.currentAngle = function(xa, ya, xb, yb)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   328
{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   329
	//On calcule l'angle de la droite AB et des abscisses, et on effectue une rotation de 90° vers la gauche.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   330
	var angleRad = Math.atan2((ya - yb), (xa - xb)) - Math.PI / 2;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   331
	//On traduit les radians en divisions en passant de [-PI/2 ; PI/2] à [0 ; divisions - 1].
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   332
	var angleDiv = Math.floor((angleRad > 0 ? angleRad : (2*Math.PI + angleRad)) * this.divisions / (2*Math.PI));
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   333
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   334
	//L'angle initial est 0.
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   335
	if(angleDiv == this.divisions)
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   336
	{
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   337
		angleDiv = 0;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   338
	}
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   339
	
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   340
	return angleDiv;
0e29ae4568a0 Front IDILL:
bastiena
parents:
diff changeset
   341
}