2016-03-23 28 views
0

4 köşeli bir şekil çizmeye çalışıyorum. Köşe ayrıntıları X ve Y koordinatlarında verilmiştir (aşağıdaki resimde gösterildiği gibi). Bu bağlantı tarafından verilen bir yöntemi denedim: Drawing Colors in a picturebox?. Ama sorun sadece dikdörtgenler için. Shape with X and YWindows Form uygulamasında şekil çizme

Herhangi biri bir şey önerebilir. Arabaya bir süpürme yolu (araba kullanırken araba sürdüğü alan) oluşturmak için ihtiyacım var. Böylece, X'in ve Y'nin ve Oryantasyonun derecelerini derece olarak aldım. Buradan, arabanın Köşe Noktalarını X ve Y uzayında belirledim. Şimdi bunu görselleştirmeliyim. Lütfen yardım et.

cevap

1

Bir dikdörtgen oluşturmak için Matrix sınıfıyla birlikte Rectangle sınıfını kullanabilir ve daha sonra yöneliminize göre döndürün:

Graphics g = new Graphics() 
Rectangle car = new Rectangle(200, 200, 100, 50) 
Matrix m = new Matrix() 
m.RotateAt(orientation, new PointF(car.Left + (car.Width/2), car.Top + (car.Height/2))); 
g.Transform = m 
g.FillRectangle(Pens.Red, car) 
+0

Bence bu en iyi cevap. –

1

Döndürme derecesini bildiğiniz için, bunun için Graphics.RotateTransform kullanabilirsiniz. Bu şekilde köşeleri kendiniz hesaplamanız gerekmez (bu uygulamanın daha hızlı olduğunu tahmin edin). Sen de (Graphics.TranslateTransform kullanarak) çevirmek gerekebilir yüzden, (0;0) etrafında döndüğünü

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    e.Graphics.RotateTransform(45 /* your degrees here */); 
    e.Graphics.FillRectangle(Brushes.Red, 10, 10, 200, 100); 
} 

Not.

2

aşağıdaki gibi Sen, Form/Kontrol OnDraw yönteminde Graphics.DrawPolygon (veya Graphics.FillPolygon) yöntemini kullanabilirsiniz:

protected override void OnPaint(PaintEventArgs e) 
{ 
    // If there is an image and it has a location, 
    // paint it when the Form is repainted. 
    base.OnPaint(e); 
    PointF[] rotatedVertices = // Your rotated rectangle vertices 
    e.Graphics.DrawPolygon(yourPen, rotatedVertices); 
    // OR 
    e.Graphics.FillPolygon(new SolidBrush(Color.Red), rotatedVertices); 
} 
İlgili konular