public void Add(IntPoint point) { if (Points.Count != 0) { Length += point.DistanceTo(Points.Last()); } Points.Add(point); }
/* fonction cubes */ private void mergePosition(List<Cub> lst) { List<bool> tab = new List<bool>(); for (int i = 0; i < LstCube.Count; i++) tab.Add(false); // Parcours de la liste des cubes recu par l'image for (int i = 0; i < lst.Count; i++) { bool trouv = false; // Si il y a déjà des cubes dans la liste if (LstCube.Count > 0) { for (int j = 0; j < LstCube.Count; j++) { // Verification de la couleur if (LstCube[j].Color == lst[i].Color) { IntPoint milieu = new IntPoint(lst[i].rec.X + lst[i].rec.Width / 2, lst[i].rec.Y + lst[i].rec.Height / 2); //milieu.X = (int)(milieu.X * ratioCmParPixel[0]); //milieu.Y = (int)(milieu.Y * ratioCmParPixel[1]); float distance = milieu.DistanceTo(new IntPoint(LstCube[j].contour.X + LstCube[j].contour.Width / 2, LstCube[j].contour.Y + LstCube[j].contour.Height / 2)); if (distance < ( LstCube[j].contour.Width + LstCube[j].contour.Height) * 1.1) // Verification de la proximite { if (tab[j] == false) { LstCube[j].Update(lst[i].rec); tab[j] = true; } trouv = true; break; } } } } if (trouv == false) // Aucun cube correspondant => AJOUT DU CUBE { LstCube.Add(new ObjColor(lst[i].rec, lst[i].Color, lastIdCube++)); tab.Add(true); } } // Preparation de la liste pour envoie if (LstCube.Count > 0) { List<int> delete = new List<int>(); List<PositionCube> lstpos = new List<PositionCube>(); for (int i = 0; i < LstCube.Count; i++) { PositionCube po = new PositionCube(); po.ID = LstCube[i].Identifiant; po.IDZone = LstCube[i].Color; po.Position = new PositionElement(); // Position en pixel IntPoint milieu = new IntPoint(LstCube[i].contour.X + LstCube[i].contour.Width / 2, LstCube[i].contour.Y + LstCube[i].contour.Height / 2); TimeSpan t = DateTime.Now - LstCube[i].DerniereVisualisation; if (t.Seconds > 3) { po.Position.X = -1; po.Position.Y = -1; delete.Add(i); } else { po.Position.X = (int)(milieu.X * ratioCmParPixel[0]); po.Position.Y = (int)(milieu.Y * ratioCmParPixel[1]); } lstpos.Add(po); } envoieListe(lstpos); if (delete.Count > 0) { for(int i = delete.Count -1; i>=0;i--) { LstCube.RemoveAt(delete[i]); } Logger.GlobalLogger.debug("Suppression de " + delete.Count + " Cubes"); } } }
/* Fonction Robot */ private void mergePosition(List<PositionRobot> LstTmp) { if (LstTmp.Count == 0) return; List<PositionRobot> ListEnvoi = new List<PositionRobot>(); for (int i = 0; i < LstTmp.Count; i++) { bool Trouve = false; PositionRobot tmp = LstTmp[i]; tmp.Position.X = (int)(ratioCmParPixel[0] * tmp.Position.X); tmp.Position.Y = (int)(ratioCmParPixel[1] * tmp.Position.Y); for (int j = 0; j < LstRobot.Count; j++) { if (LstRobot[j].Identifiant == LstTmp[i].Identifiant) { IntPoint itmp = new IntPoint((int)(tmp.Position.X), (int)(tmp.Position.Y)); IntPoint p = new IntPoint(LstRobot[j].Position.X, LstRobot[j].Position.Y); if (p.DistanceTo(itmp) > 5) // Sueil a 2 cm { LstRobot[j] = tmp; ListEnvoi.Add(tmp); } tmp.DerniereModification = DateTime.Now; Trouve = true; break; } } if (Trouve == false) { tmp.DerniereModification = DateTime.Now; ListEnvoi.Add(tmp); LstRobot.Add(tmp); } } if (ListEnvoi.Count > 0) { //Logger.GlobalLogger.debug("" + ListEnvoi.Count); envoieListe(ListEnvoi); } for(int i = LstRobot.Count -1; i>=0;i--) { if (LstRobot[i].Position.X == -1) LstRobot.RemoveAt(i); } }