2012-05-23 4 views
0

Je tente de dessiner une liste de polygones dans une imagebox. jusqu'à présent, je reçois seulement une ligne noire diagonale dans le coin supérieur gauche de l'écran. Les points sont les suivants:Erreur graphique ImageBox

20,20 0,20 20,0 40,40

200.100 0,20 20,0 20,20

100, 200 0, 200 200,0 250, 450

150.130 1,20 20,0 10,20

private void pictureBox1_Paint_1(object sender, PaintEventArgs e) 
    { 
     int jobIndex = 0; 
     int trussIndex = 0; 

     Graphics g = e.Graphics; 
     foreach (Member m in jobArray[jobIndex].trusses[trussIndex].members) 
     { 
      Point[] pointArray = new Point[m.poly.Points.Count()]; 
      //m.poly.Points.CopyTo(pointArray, 0); 
      int index =0; 
      foreach(System.Windows.Point p in m.poly.Points) 
      { 
       pointArray[index].X = (int)p.X; 
       pointArray[index].Y = (int)p.Y; 
       index++; 
      } 
      Pen myPen = new Pen(Color.Black); 
      SolidBrush myBrush = new SolidBrush(m.color); 

      g.DrawPolygon(myPen, pointArray); 
      g.FillPolygon(myBrush, pointArray); 

     } 
    } 

N'importe quelle idée pour expliquer pourquoi les polygones n'apparaissent pas sur la zone d'image? Les couleurs ne sont pas le problème ni la taille de la boîte

Répondre

0

On dirait que vous utilisez l'événement Paint pour appeler cette méthode, assurez-vous que vous avez les données disponibles quand il est appelé. L'événement paint n'est pas appelé en permanence, donc si vous ajoutez des données à dessiner, vous devrez appeler la méthode pictureBox1.Invalidate() pour forcer l'événement paint.

Je suis sûr que vous verrez cela tôt ou tard, mais vous devez créer un objet image (Bitmap) et l'assigner à la propriété Image du PictureBox. Ensuite, utilisez Graphics.FromImage (_image) pour obtenir votre objet graphique. Si vous ne le faites pas alors votre image ne restera pas si la fenêtre est couverte puis revient au point ou vous faites glisser hors de l'écran puis de retour quelque chose.

private Bitmap _bitMap; 
private Graphics _graphic; 
Pen myPen; 

public Constructor() 
{ 
    _bitMap = new Bitmap(pictureBox1.Width,pictureBox1.Height); 
    _graphic = Graphics.FromImage(_bitMap); 
    pictureBox1.Image = _bitMap; 
    myPen = new Pen(Color.Black); 
} 
private void DataAdded() 
{ 
    int jobIndex = 0; 
    int trussIndex = 0; 

    foreach (Member m in jobArray[jobIndex].trusses[trussIndex].members) 
    { 
     //Pen myPen = new Pen(Color.Black); //Don't instantiate in a loop 
     SolidBrush myBrush = new SolidBrush(m.color); 
     _graphic.DrawPolygon(myPen, m.poly.Points.ToArray()); 
     _graphic.FillPolygon(myBrush, m.poly.Points.ToArray()); 
    } 
    pictureBox1.Image = _bitMap; //Don't think you need this, but I don't remember 
} 

Hope this helps