【发布时间】:2015-08-28 13:02:42
【问题描述】:
我想在右上角将多边形旋转 -90 度。
这是我绘制多边形的代码:
Private Sub Form1_Click(sender As Object, e As EventArgs) Handles MyBase.Click
Dim g As Graphics = Me.CreateGraphics()
Dim p As New Drawing2D.GraphicsPath()
Dim startPoint As Point = PointToClient(Cursor.Position)
Dim littleAngle As Integer = 4
Dim anglesDifference As Integer = 2
Dim bigAngle As Integer = littleAngle + anglesDifference
Dim bigSegment As Integer = 50
Dim p1, p2, p3, p4, p5 As Point
p1 = New Point(startPoint.X + littleAngle, startPoint.Y - littleAngle)
p2 = New Point(startPoint.X + littleAngle + bigSegment, startPoint.Y - littleAngle)
p3 = New Point(startPoint.X + littleAngle + bigSegment + littleAngle, startPoint.Y)
p4 = New Point(startPoint.X + littleAngle - anglesDifference + bigSegment, startPoint.Y + bigAngle)
p5 = New Point(startPoint.X + bigAngle, startPoint.Y + bigAngle)
p.AddLines({startPoint, p1, p2, p3, p4, p5})
Dim pen As New Pen(Color.Red, 1)
g.FillPath(New SolidBrush(Color.Red), p)
g.DrawPath(pen, p)
Dim translateMatrix As New Matrix
translateMatrix.RotateAt(-90, New PointF(p.GetBounds.Width, 0))
p.Transform(translateMatrix)
g.FillPath(New SolidBrush(Color.Red), p)
g.DrawPath(pen, p)
End Sub
这是使用上面的代码绘制的:
这是我想要的一个例子:
【问题讨论】:
-
你真的应该使用
Paint事件进行绘画并使用e.Graphics。 -
@varocarbas 你说得对,这就是我没有采纳他建议的原因。
-
@ChrisDunaway 您不知道这段代码的确切用途。如上所述,当前版本是 100% 便携的,可以在任何情况下使用。根据具体情况,可能值得考虑(此控件或任何其他控件的)绘制事件;但请始终牢记,这些事件被多次调用,应尽可能避免。因此,在知道此代码的确切用法之前,先验的不依赖于绘制的原始版本对我来说似乎更好。
-
哈哈。我不是为你而战。我正在为未来的读者而战。此外,没有战斗。这是为了澄清问题而进行的礼貌讨论。当您提出/批评某事时,您应该准备好用理由捍卫自己的立场和/或学习。 “我被告知”/“我认为”这样的论点……不太有效;更不用说尝试与他人分享知识了,比如这里。
-
是的,我也不觉得我在打架。我读过的所有内容都表明
CreateGraphics几乎总是错误的选择。它的用途非常有限。甚至 OP 都说这只是为了测试 - 这很好,但是当图形需要持续存在时会发生什么?它不会出现在他的申请中,这就是我所指出的。此外,如果您创建了所有图形对象,则应将其处理掉 - 他们没有这样做,并且还指出了最佳做法。
标签: vb.net graphics polygon rotatetransform