在Windows窗体应用程序中绘制形状

时间:2016-03-23 13:48:25

标签: c# forms drawing

我正在尝试绘制一个有4个角的形状。角部细节以X和Y坐标给出(如下图所示)。我尝试了这个链接给出的方法: Drawing Colors in a picturebox?。但问题是它只适用于矩形。 Shape with X and Y

任何人都可以提出一些建议。我基本上需要它来生成汽车的扫掠路径(驾驶时乘车的区域)。所以,我在X和Y中得到了汽车的中心,在度数上得到了方向。从那里我确定了X和Y空间中汽车的角点。现在我需要展示它可视化它。请帮忙。

3 个答案:

答案 0 :(得分:2)

您可以在表单/控件的Graphics.DrawPolygon方法中使用Graphics.FillPolygon(或OnDraw)方法,如下所示:

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);
}

答案 1 :(得分:1)

由于你知道旋转度,你可以使用Graphics.RotateTransform。这样你就不需要自己计算角落(猜测这个实现更快)。

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);
}

请注意,它会围绕(0;0)旋转,因此您可能需要翻译它(使用Graphics.TranslateTransform)。

答案 2 :(得分:1)

您可以使用Rectangle类和Matrix类创建一个矩形,然后按照您的方向旋转它,如下所示:

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)