private void setGrilleView()// Dessine les cases de la grille { tabForme = new FormeRectangle[25, 25]; string color = ""; if (tabEntrepot == null) { tabEntrepot = GenericNode.InitialiserEntrepot(); } else { for (int i = 0; i < tabEntrepot.GetLength(0); i++)// On récupère tout les éléments du tableau et suivant les valeurs passées dans GenericNode.InitialiserEntrepot on définit la couleur correspondante à la case. { for (int j = 0; j < tabEntrepot.GetLength(1); j++) { int positionX = 25 + i * 25; int positionY = 25 + j * 25; int value = tabEntrepot[i, j]; switch (value) { case 0: color = "white"; break; case -1: color = "blue"; break; case -2: color = "green"; break; } FormeRectangle r = new FormeRectangle(color, positionX, positionY); tabForme[i, j] = r; } } } }
public static void creationFormeColorée(FormeRectangle f, Form form) // la mettre dans la classe forme et la généraliser avec celle de perception { int largeur = 25; int hauteur = 25; SolidBrush blueBrush = new SolidBrush(Color.Blue); SolidBrush whiteBrush = new SolidBrush(Color.White); SolidBrush greenBrush = new SolidBrush(Color.Green); SolidBrush blackBrush = new SolidBrush(Color.Black); SolidBrush orangebrush = new SolidBrush(Color.Orange); SolidBrush redbrush = new SolidBrush(Color.Red); SolidBrush purplebrush = new SolidBrush(Color.Purple); Pen blackPen = new Pen(Brushes.Black); blackPen.Width = 1.0F; Graphics formGraphics = form.CreateGraphics(); Rectangle rect = new Rectangle(f.positionX, f.positionY, largeur, hauteur); int l = Convert.ToInt32(Math.Round(0.5 * largeur)); int h = Convert.ToInt32(Math.Round(0.5 * hauteur)); int lx = Convert.ToInt32(Math.Round(0.25 * largeur)); int hy = Convert.ToInt32(Math.Round(0.25 * hauteur)); Rectangle rectPetit = new Rectangle(f.positionX + lx, f.positionY + hy, l, h); switch (f.couleur) { case "blue": formGraphics.FillRectangle(blueBrush, rect); formGraphics.DrawRectangle(blackPen, rect); blueBrush.Dispose(); formGraphics.Dispose(); break; case "white": formGraphics.FillRectangle(whiteBrush, rect); formGraphics.DrawRectangle(blackPen, rect); whiteBrush.Dispose(); formGraphics.Dispose(); break; case "green": formGraphics.FillRectangle(greenBrush, rect); formGraphics.DrawRectangle(blackPen, rect); greenBrush.Dispose(); formGraphics.Dispose(); break; case "black": formGraphics.FillRectangle(blackBrush, rect); formGraphics.DrawRectangle(blackPen, rect); blackBrush.Dispose(); formGraphics.Dispose(); break; case "orange": formGraphics.FillRectangle(orangebrush, rect); formGraphics.DrawRectangle(blackPen, rect); orangebrush.Dispose(); formGraphics.Dispose(); break; case "red": formGraphics.FillEllipse(redbrush, rect); formGraphics.DrawEllipse(blackPen, rect); redbrush.Dispose(); formGraphics.Dispose(); break; case "purple": formGraphics.FillEllipse(purplebrush, rectPetit); formGraphics.DrawEllipse(blackPen, rectPetit); purplebrush.Dispose(); formGraphics.Dispose(); break; } }
protected override void OnPaint(PaintEventArgs e) // fonction dessinant l'ensemble de la grille et des chemins parcourus par le chariot { base.OnPaint(e); if (tabForme != null) { for (int i = 0; i < tabEntrepot.GetLength(0); i++)//Pour toute les formes dans tabForme { for (int j = 0; j < tabEntrepot.GetLength(1); j++) { FormeRectangle.creationFormeColorée(tabForme[i, j], this);//On dessine la forme avec sa taille et sa couleur passée au préalable dans setGrilleView() } } foreach (Chariot c in tabChariot)//Pour tout les chariots on les dessine sur la grille { int positionX = 25 * c.posX; int positionY = 25 * c.posY; FormeRectangle chariot = new FormeRectangle("black", positionX, positionY);//Un chariot est un carré noir sur la grille. FormeRectangle.creationFormeColorée(chariot, this); } foreach (Objet o in tabObjet)//Pour tout les objets on les dessine sur la grille { int positionX = 25 * o.posX; int positionY = 25 * o.posY; FormeRectangle objet = new FormeRectangle("orange", positionX, positionY);// Un objet est un carré orange sur la grille FormeRectangle.creationFormeColorée(objet, this); } // Colorie le chemin du noeud initial jusqu'à l'objet if (Lres != null) { foreach (GenericNode n in Lres) { int positionX = 0; int positionY = 0; if (nodeTemps) // Si on gère des nodeTemps ou des NodeDistance { NodeTemps node = (NodeTemps)n; positionX = 25 + 25 * node.posX; positionY = 25 + 25 * node.posY; } else { NodeDistance node = (NodeDistance)n; positionX = 25 + 25 * node.posX; positionY = 25 + 25 * node.posY; } FormeRectangle objet = new FormeRectangle("red", positionX, positionY); //colorie la case de la grille correspondnat à chaque noeud en rouge; le chemin suivi par le chariot apparait tout en rouge FormeRectangle.creationFormeColorée(objet, this); //} } //Colore le chemin retour : de l'objet à une des cases 1 la plus proche de la grille if (bestTrajectoire != null) { foreach (GenericNode n in bestTrajectoire) { int positionX = 0; int positionY = 0; if (nodeTemps) { NodeTemps node = (NodeTemps)n; positionX = 25 + 25 * node.posX; positionY = 25 + 25 * node.posY; } else { NodeDistance node = (NodeDistance)n; positionX = 25 + 25 * node.posX; positionY = 25 + 25 * node.posY; } FormeRectangle objet = new FormeRectangle("purple", positionX, positionY); FormeRectangle.creationFormeColorée(objet, this); } } } } }