diff -r 0f31ebcc62b7 -r d2f735d7763f middleware/Debug/DebugWindow.xaml.cs --- a/middleware/Debug/DebugWindow.xaml.cs Thu Jun 21 17:51:27 2012 +0200 +++ b/middleware/Debug/DebugWindow.xaml.cs Fri Jun 29 15:37:26 2012 +0200 @@ -32,6 +32,7 @@ using System.Timers; using System.Configuration; using System.IO; +using System.Collections.Specialized; namespace Trakers.Debug { @@ -41,22 +42,8 @@ private ResourceManager rm; //Paramètres du serveur TUIO. - private string connexionHost; - private int connexionPort; - //Temps de rafraichissement pour le timer (Détection de gesture dans le serveur TUIO). - private int timerElapsing; - //Distances min/max délimitant le champ de recherche. - private float minDistHands; - private float maxDistHands; - private float minDist; - private float maxDist; - private float zeroPoint; - //Paramètres de la mosaïque. - private int imagesToShow; - //Paramètres de la recherche par courbes. - private int takenPoints; - private int directionChangeTresholdXY; - private float directionChangeTresholdZ; + private OrderedDictionary config; + //Images private String imgLocation; @@ -72,8 +59,6 @@ private bool closing; //Indique si l'image doit être raffraichie. private Boolean refreshImage; - //Fenêtre de paramètres - private DebugParameters param; /* * Constructeur : Affiche la fenêtre de debug en lui passant en paramètre une instanciation de la @@ -86,6 +71,8 @@ imgLocation = "Imgs"; + config = new OrderedDictionary(); + //On fait appel au gestionnaire de ressources. rm = new ResourceManager("Trakers.Debug.Properties.Resources", Assembly.GetExecutingAssembly()); //On tente de charger les paramètres du fichier params.ini. @@ -93,44 +80,33 @@ if (!loadParameters()) { ExceptionLbl.Content = rm.GetString("loadParametersFail"); + config.Clear(); //Distances de détection des mains par défaut pour la recherche (ici de 1m à 2m de la Kinect). - minDistHands = 1.0f; - maxDistHands = 1.5f; - minDist = 1.0f; - maxDist = 4.0f; - zeroPoint = 1.7f; - connexionHost = "127.0.0.1"; - connexionPort = 80; - timerElapsing = 1000; - imagesToShow = 20; - takenPoints = 10; - directionChangeTresholdXY = 10; - directionChangeTresholdZ = 0.01f; - /*minDistHands = 1.0f; - maxDistHands = 5.5f; - minDist = 1.0f; - maxDist = 6.0f; - zeroPoint = 1.7f; - connexionHost = "127.0.0.1"; - connexionPort = 80; - timerElapsing = 1000; - imagesToShow = 25; - takenPoints = 10; - directionChangeTresholdXY = 10; - directionChangeTresholdZ = 0.01f;*/ + config.Add("minDistHands", 1.0f); + config.Add("maxDistHands", 1.5f); + config.Add("minDist", 1.0f); + config.Add("maxDist", 4.0f); + config.Add("zeroPoint", 1.7f); + config.Add("tuioConnexionHost", "127.0.0.1"); + config.Add("tuioConnexionPort", 80); + config.Add("wsConnexionHost", "127.0.0.1"); + config.Add("wsConnexionPort", 81); + config.Add("tuioTimerElapsing", 1000); + config.Add("wsTimerElapsing", 1000); + config.Add("imagesToShow", 20); + config.Add("takenPoints", 10); + config.Add("directionChangeTresholdXY", 10); + config.Add("directionChangeTresholdZ", 0.01f); } - //On charge la fenêtre de paramètres. - param = new DebugParameters(this); - //kinectMain = main; on = true; closing = false; refreshImage = true; try { - //On instancie le timer à N ms. - _timer = new System.Timers.Timer(timerElapsing); + //On instancie les timers à N ms. + _timer = new System.Timers.Timer((int)config["tuioTimerElapsing"]); //Dès que le timer est expiré, on appelle _timer_Elapsed. _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed); } @@ -163,7 +139,7 @@ } /* - * Méthode appelée à l'expiration du timer pour les gestures et modes. + * Méthode appelée à l'expiration du timer ws pour les gestures et modes. */ public void _timer_Elapsed(object sender, ElapsedEventArgs e) { @@ -268,64 +244,6 @@ } } - /*public void showCorrect(bool C1, bool C2, bool C3, bool C4, bool C5, bool C6, bool C7, bool C8, bool C9, bool C10, bool C11) - { - if(C1) - R0.Fill = System.Windows.Media.Brushes.Blue; - else - R0.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C2) - R1.Fill = System.Windows.Media.Brushes.Blue; - else - R1.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C3) - R2.Fill = System.Windows.Media.Brushes.Blue; - else - R2.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C4) - R3.Fill = System.Windows.Media.Brushes.Blue; - else - R3.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C5) - R4.Fill = System.Windows.Media.Brushes.Blue; - else - R4.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C6) - R5.Fill = System.Windows.Media.Brushes.Blue; - else - R5.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C7) - R6.Fill = System.Windows.Media.Brushes.Blue; - else - R6.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C8) - R7.Fill = System.Windows.Media.Brushes.Blue; - else - R7.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C9) - R8.Fill = System.Windows.Media.Brushes.Blue; - else - R8.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C10) - R9.Fill = System.Windows.Media.Brushes.Blue; - else - R9.Fill = System.Windows.Media.Brushes.DarkGray; - - if (C11) - R10.Fill = System.Windows.Media.Brushes.Blue; - else - R10.Fill = System.Windows.Media.Brushes.DarkGray; - }*/ - /* * Affiche la distance de l'utilisateur dans le rendu visuel. * Sous forme de nombre en m et de rectangles changeant de couleur en fonction de la distance. @@ -652,21 +570,6 @@ } /* - * Méthode associée à l'événement : Ouvrir la fenêtre de paramétrage via le menu. - */ - private void Parameters_Click(object sender, RoutedEventArgs e) - { - try - { - param.ShowDialog(); - } - catch (Exception) - { - ExceptionLbl.Content = rm.GetString("loadParamFail"); - } - } - - /* * Méthode associée à l'événement : Quitter via le menu. */ public void Quit_Click(object sender, RoutedEventArgs e) @@ -773,62 +676,65 @@ } /* - * Méthode de chargement des paramètres (position du champ de recherche...). - */ - /*public bool loadParameters() - { - try - { - minDistHands = Properties.Settings.Default.searchMinDistance; - maxDistHands = Properties.Settings.Default.searchMaxDistance; - minDist = Properties.Settings.Default.minDistance; - maxDist = Properties.Settings.Default.maxDistance; - zeroPoint = Properties.Settings.Default.zeroPoint; - connexionHost = Properties.Settings.Default.connexionHost; - connexionPort = Properties.Settings.Default.connexionPort; - timerElapsing = Properties.Settings.Default.timerElapsing; - imagesToShow = Properties.Settings.Default.imagesToShow; - takenPoints = Properties.Settings.Default.takenPoints; - directionChangeTresholdXY = Properties.Settings.Default.directionChangeTresholdXY; - directionChangeTresholdZ = Properties.Settings.Default.directionChangeTresholdZ; - } - catch (Exception) - { - return false; - } - - if (maxDistHands <= 0f || minDistHands <= 0f || maxDistHands > maxDist || minDistHands > maxDist || - minDistHands >= maxDistHands || zeroPoint < maxDistHands || minDistHands > minDist || - zeroPoint >= maxDist || connexionPort < 0 || timerElapsing < 0 || imagesToShow < 1 || - takenPoints <= 0 || directionChangeTresholdXY < 0 || directionChangeTresholdZ < 0) - { - ExceptionLbl.Content = rm.GetString("loadParametersIncorrect"); - return false; - } - return true; - }*/ - + * Méthode de chargement des paramètres via le fichier de configuration. + */ public bool loadParameters() { try { + //On lit le fichier de config. String[] lines = System.IO.File.ReadAllLines("config.txt"); - minDistHands = float.Parse(lines[0].Split(':')[1]); - minDist = float.Parse(lines[1].Split(':')[1]); - connexionHost = lines[2].Split(':')[1]; - timerElapsing = int.Parse(lines[3].Split(':')[1]); - takenPoints = int.Parse(lines[4].Split(':')[1]); - directionChangeTresholdXY = int.Parse(lines[5].Split(':')[1]); - connexionPort = int.Parse(lines[6].Split(':')[1]); - imagesToShow = int.Parse(lines[7].Split(':')[1]); - maxDistHands = float.Parse(lines[8].Split(':')[1]); - maxDist = float.Parse(lines[9].Split(':')[1]); - zeroPoint = float.Parse(lines[10].Split(':')[1]); - directionChangeTresholdZ = float.Parse(lines[11].Split(':')[1]); + //On repère les paramètres supposés être des int ou float de manière à les parser. + String[] ints = { "tuioConnexionPort", "wsConnexionPort", "takenPoints", "tuioTimerElapsing", "wsTimerElapsing", "directionChangeTresholdXY", "imagesToShow" }; + String[] floats = { "minDistHands", "minDist", "maxDistHands", "maxDist", "zeroPoint", "directionChangeTresholdZ" }; + + //Indique si on a affecté le paramètre actuel. + bool goToNextParam = false; + + //Pour chaque ligne du fichier de config. + for (int i = 0 ; i < lines.Length ; i++) + { + //On récupère la clé et la valeur. + String key = lines[i].Split(':')[0]; + String value = lines[i].Split(':')[1]; + + //Si c'est un int on le parse. + for (int j = 0 ; j < ints.Length ; j++) + { + if (ints[j] == key) + { + config.Add(key, int.Parse(value)); + goToNextParam = true; + } + } + + //Si il n'était pas un int. + if (!goToNextParam) + { + //Si c'est un float on le parse. + for (int j = 0; j < floats.Length; j++) + { + if (floats[j] == key) + { + config.Add(key, float.Parse(value)); + goToNextParam = true; + } + } + + //Si c'était en fait un string. + if (!goToNextParam) + { + config.Add(key, value); + } + } + goToNextParam = false; + } } + //S'il s'est passé un problème durant la lecture du fichier de config. catch (Exception e) { + //On génère un fichier qui va afficher l'erreur. StreamWriter SW; try { @@ -841,31 +747,35 @@ return false; } - if (maxDistHands <= 0f || minDistHands <= 0f || maxDistHands > maxDist || minDistHands > maxDist || - minDistHands >= maxDistHands || zeroPoint < maxDistHands || minDistHands > minDist || - zeroPoint >= maxDist || connexionPort < 0 || timerElapsing < 0 || imagesToShow < 1 || - takenPoints <= 0 || directionChangeTresholdXY < 0 || directionChangeTresholdZ < 0) + //Si l'extraction s'est bien passé mais que les paramètres sont incohérents. + if ((float)config["maxDistHands"] <= 0f || (float)config["minDistHands"] <= 0f || (float)config["maxDistHands"] > (float)config["maxDist"] || (float)config["minDistHands"] > (float)config["maxDist"] || + (float)config["minDistHands"] >= (float)config["maxDistHands"] || (float)config["zeroPoint"] < (float)config["maxDistHands"] || (float)config["minDistHands"] > (float)config["minDist"] || + (float)config["zeroPoint"] >= (float)config["maxDist"] || (int)config["tuioConnexionPort"] < 0 || (int)config["wsConnexionPort"] < 0 || (int)config["tuioTimerElapsing"] < 0 || (int)config["wsTimerElapsing"] < 0 || (int)config["imagesToShow"] < 1 || + (int)config["takenPoints"] <= 0 || (int)config["directionChangeTresholdXY"] < 0 || (float)config["directionChangeTresholdZ"] < 0) { ExceptionLbl.Content = rm.GetString("loadParametersIncorrect"); StreamWriter SW; try { + //On indique les incohérences trouvées dans le fichier. SW = File.CreateText("ErrorFile.txt"); - if (maxDistHands <= 0f) { SW.WriteLine("searchMaxDistance <= 0"); } - if (minDistHands <= 0f) { SW.WriteLine("minDistance <= 0"); } - if (maxDistHands > maxDist) { SW.WriteLine("searchMaxDistance > maxDistance"); } - if (minDistHands > maxDist) { SW.WriteLine("searchMinDistance > maxDistance"); } - if (minDistHands >= maxDistHands) { SW.WriteLine("searchMinDistance >= searchMaxDistance"); } - if (zeroPoint < maxDistHands) { SW.WriteLine("zeroPoint < searchMaxDistance"); } - if (minDistHands > minDist) { SW.WriteLine("searchMinDistance > minDistance"); } - if (zeroPoint >= maxDist) { SW.WriteLine("zeroPoint >= maxDistance"); } - if (connexionPort < 0) { SW.WriteLine("connexionPort < 0"); } - if (timerElapsing < 0) { SW.WriteLine("timerElapsing < 0"); } - if (imagesToShow < 1) { SW.WriteLine("imagesToShow < 1"); } - if (takenPoints <= 0) { SW.WriteLine("takenPoints <= 0"); } - if (directionChangeTresholdXY < 0) { SW.WriteLine("directionChangeTresholdXY < 0"); } - if (directionChangeTresholdZ < 0) { SW.WriteLine("directionChangeTresholdZ < 0"); } + if ((float)config["maxDistHands"] <= 0f) { SW.WriteLine("searchMaxDistance <= 0"); } + if ((float)config["minDistHands"] <= 0f) { SW.WriteLine("minDistance <= 0"); } + if ((float)config["maxDistHands"] > (float)config["maxDist"]) { SW.WriteLine("searchMaxDistance > maxDistance"); } + if ((float)config["minDistHands"] > (float)config["maxDist"]) { SW.WriteLine("searchMinDistance > maxDistance"); } + if ((float)config["minDistHands"] >= (float)config["maxDistHands"]) { SW.WriteLine("searchMinDistance >= searchMaxDistance"); } + if ((float)config["zeroPoint"] < (float)config["maxDistHands"]) { SW.WriteLine("zeroPoint < searchMaxDistance"); } + if ((float)config["minDistHands"] > (float)config["minDist"]) { SW.WriteLine("searchMinDistance > minDistance"); } + if ((float)config["zeroPoint"] >= (float)config["maxDist"]) { SW.WriteLine("zeroPoint >= maxDistance"); } + if ((int)config["tuioConnexionPort"] < 0) { SW.WriteLine("tuioConnexionPort < 0"); } + if ((int)config["wsConnexionPort"] < 0) { SW.WriteLine("wsConnexionPort < 0"); } + if ((int)config["tuioTimerElapsing"] < 0) { SW.WriteLine("tuioTimerElapsing < 0"); } + if ((int)config["wsTimerElapsing"] < 0) { SW.WriteLine("wsTimerElapsing < 0"); } + if ((int)config["imagesToShow"] < 1) { SW.WriteLine("imagesToShow < 1"); } + if ((int)config["takenPoints"] <= 0) { SW.WriteLine("takenPoints <= 0"); } + if ((int)config["directionChangeTresholdXY"] < 0) { SW.WriteLine("directionChangeTresholdXY < 0"); } + if ((float)config["directionChangeTresholdZ"] < 0) { SW.WriteLine("directionChangeTresholdZ < 0"); } SW.Close(); Console.WriteLine("Error File Created SucacessFully"); } @@ -877,96 +787,67 @@ } /* - * Met à jour les nouveaux paramètres dans la configuration. - */ - public void updateParameters() - { - //userPositionDetector.setParams(minDist, maxDist, minDistHands, maxDistHands, zeroPoint); - //segmenter.setParams(takenPoints, directionChangeTresholdXY, directionChangeTresholdZ); - - //On récupère la config. - Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); - //On met à jour. - Properties.Settings.Default.Context.Remove("searchMinDistance"); - Properties.Settings.Default.Context.Add("searchMinDistance", minDistHands.ToString()); - Properties.Settings.Default.Context.Remove("searchMaxDistance"); - Properties.Settings.Default.Context.Add("searchMaxDistance", maxDistHands.ToString()); - Properties.Settings.Default.Context.Remove("minDistance"); - Properties.Settings.Default.Context.Add("minDistance", minDist.ToString()); - Properties.Settings.Default.Context.Remove("maxDistance"); - Properties.Settings.Default.Context.Add("maxDistance", maxDist.ToString()); - Properties.Settings.Default.Context.Remove("zeroPoint"); - Properties.Settings.Default.Context.Add("zeroPoint", zeroPoint.ToString()); - Properties.Settings.Default.Context.Remove("connexionHost"); - Properties.Settings.Default.Context.Add("connexionHost", connexionHost); - Properties.Settings.Default.Context.Remove("connexionPort"); - Properties.Settings.Default.Context.Add("connexionPort", connexionPort.ToString()); - Properties.Settings.Default.Context.Remove("timerElapsing"); - Properties.Settings.Default.Context.Add("timerElapsing", timerElapsing.ToString()); - Properties.Settings.Default.Context.Remove("imagesToShow"); - Properties.Settings.Default.Context.Add("imagesToShow", imagesToShow.ToString()); - Properties.Settings.Default.Context.Remove("takenPoints"); - Properties.Settings.Default.Context.Add("takenPoints", takenPoints.ToString()); - Properties.Settings.Default.Context.Remove("directionChangeTresholdXY"); - Properties.Settings.Default.Context.Add("directionChangeTresholdXY", directionChangeTresholdXY.ToString()); - Properties.Settings.Default.Context.Remove("directionChangeTresholdZ"); - Properties.Settings.Default.Context.Add("directionChangeTresholdZ", directionChangeTresholdZ.ToString()); - - //Sauvegarde la configuration. - Properties.Settings.Default.Save(); - Properties.Settings.Default.Reload(); - } - - /* * Getters et setters des paramètres du Middleware. */ public void setMinDistHands(float min) { - minDistHands = min; + config["minDistHands"] = min; } public void setMaxDistHands(float max) { - maxDistHands = max; + config["maxDistHands"] = max; } public void setMinDist(float min) { - minDist = min; + config["minDist"] = min; } public void setMaxDist(float max) { - maxDist = max; + config["maxDist"] = max; } public void setZeroPoint(float zero) { - zeroPoint = zero; + config["zeroPoint"] = zero; } - public void setConnexionHost(String host) + public void setTuioConnexionHost(String host) { - connexionHost = host; + config["tuioConnexionHost"] = host; + } + public void setTuioConnexionPort(int port) + { + config["tuioConnexionPort"] = port; } - public void setConnexionPort(int port) + public void setWsConnexionHost(String host) { - connexionPort = port; + config["wsConnexionHost"] = host; + } + public void setWsConnexionPort(int port) + { + config["wsConnexionPort"] = port; } - public void setTimerElapsing(int time) + public void setTuioTimerElapsing(int time) { - timerElapsing = time; + config["tuioTimerElapsing"] = time; + } + public void setWsTimerElapsing(int time) + { + config["wsTimerElapsing"] = time; } public void setImagesToShow(int _imagesToShow) { - imagesToShow = _imagesToShow; + config["imagesToShow"] = _imagesToShow; } public void setTakenPoints(int _takenPoints) { - takenPoints = _takenPoints; + config["takenPoints"] = _takenPoints; } public void setDirectionChangeTresholdXY(int _directionChangeTresholdXY) { - directionChangeTresholdXY = _directionChangeTresholdXY; + config["directionChangeTresholdXY"] = _directionChangeTresholdXY; } public void setDirectionChangeTresholdZ(float _directionChangeTresholdZ) { - directionChangeTresholdZ = _directionChangeTresholdZ; + config["directionChangeTresholdZ"] = _directionChangeTresholdZ; } public void setSwitch(Button _switch) { @@ -976,66 +857,66 @@ { on = _on; } - /*public void setQuitMenu(MenuItem quitMenu) - { - QuitMenu = quitMenu; - } - public void setParametersWindow(DebugParameters parameters) - { - param = parameters; - } - public void setParamMenu(MenuItem parameters) - { - ParamMenu = parameters; - }*/ - + public float getMinDistHands() { - return minDistHands; + return (float)config["minDistHands"]; } public float getMaxDistHands() { - return maxDistHands; + return (float)config["maxDistHands"]; } public float getMinDist() { - return minDist; + return (float)config["minDist"]; } public float getMaxDist() { - return maxDist; + return (float)config["maxDist"]; } public float getZeroPoint() { - return zeroPoint; + return (float)config["zeroPoint"]; } - public String getConnexionHost() + public String getTuioConnexionHost() { - return connexionHost; + return (String)config["tuioConnexionHost"]; + } + public int getTuioConnexionPort() + { + return (int)config["tuioConnexionPort"]; } - public int getConnexionPort() + public int getTuioTimerElapsing() { - return connexionPort; + return (int)config["tuioTimerElapsing"]; + } + public String getWsConnexionHost() + { + return (String)config["wsConnexionHost"]; } - public int getTimerElapsing() + public int getWsConnexionPort() { - return timerElapsing; + return (int)config["wsConnexionPort"]; + } + public int getWsTimerElapsing() + { + return (int)config["wsTimerElapsing"]; } public int getImagesToShow() { - return imagesToShow; + return (int)config["imagesToShow"]; } public int getTakenPoints() { - return takenPoints; + return (int)config["takenPoints"]; } public int getDirectionChangeTresholdXY() { - return directionChangeTresholdXY; + return (int)config["directionChangeTresholdXY"]; } public float getDirectionChangeTresholdZ() { - return directionChangeTresholdZ; + return (float)config["directionChangeTresholdZ"]; } public Button getSwitch() { @@ -1045,18 +926,6 @@ { return on; } - /*public MenuItem getQuitMenu() - { - return QuitMenu; - } - public DebugParameters getParametersWindow() - { - return param; - } - public MenuItem getParamMenu() - { - return ParamMenu; - }*/ public void onR0(bool b) {