我继承了Control类来创建一个用于放置一些形状的自定义用户控件,我想在控件中绘制一个三角形,我在三角形中绘制一个内边框但是我用指针搞砸了我的脑袋,我无法找到正确的点数计算(数学不是我的专长),而是一个三角形,我得到了这个丑陋的数字:
下面是绘制线条的代码的相关部分,我认为问题是第四个PointF
注释
p
object是我用来绘制线条的Pen
实例。
上图中属性网格的BorderWidth
属性只是设置p.Width
代码
Case Figures.Triangle
Dim trianglePoints As PointF() =
{
New PointF(p.Width / 4.0F, CSng(Me.Height) + (p.Width / 2.0F)),
New PointF(CSng(Me.Width) / 2.0F, p.Width),
New PointF(CSng(Me.Width) - (p.Width / 4.0F), CSng(Me.Height) + (p.Width / 2.0F)),
New PointF(-CSng(Me.Height) + p.Width, CSng(Me.Width / 2) - p.Width)
}
Using gp As New Drawing2D.GraphicsPath(FillMode.Alternate)
gp.AddLines(trianglePoints)
gp.CloseFigure()
With e.Graphics
If Not Me._InnerColor = Color.Transparent Then
Using b As New SolidBrush(Me._InnerColor)
.FillPath(b, gp)
End Using
End If
.DrawLines(p, trianglePoints)
End With
End Using
答案 0 :(得分:2)
数组的最后一个元素必须与第一个元素相同(关闭图形)
Dim trianglePoints As PointF() =
{
New PointF(p.Width / 2.0F, CSng(Me.Height) - (p.Width / 2.0F)),
New PointF(CSng(Me.Width) / 2.0F, p.Width / 2F),
New PointF(CSng(Me.Width) - (p.Width / 2.0F), CSng(Me.Height) - (p.Width / 2.0F)),
New PointF(p.Width / 2.0F, CSng(Me.Height) - (p.Width / 2.0F))
}