我想把我的线放在我的圈子里。
我的代码:
Public Class Form1
Public Function pt(ByVal x As Integer, ByVal y As Integer, ByVal w As Integer, ByVal h As Integer)
Dim b As Bitmap = New Bitmap(Me.Width, Me.Height)
Dim g As Graphics = Graphics.FromImage(b)
g.DrawEllipse(Pens.Black, New Rectangle(x, y, h, w))
Me.BackgroundImage = b
Dim S As New Size
Dim loc As New Point
S.Width = 4
S.Height = 4
loc.X = x + w / 2 - 1
loc.Y = y + h / 2 - 1
Dim ptMove As New Panel
ptMove.Size = S
ptMove.Location = loc
ptMove.BackColor = Color.Aqua
Dim ptC As New Panel
ptC.Size = S
ptC.Location = New Point(loc.X, loc.Y - h / 2)
ptC.BackColor = Color.Red
Me.Controls.Add(ptC)
Me.Controls.Add(ptMove)
line(1, ptMove, ptC) ' < -- Draw The Line Between Two Point (I want To Keep Ptc Inside The Circle
Return True
End Function
Public Function line(ByVal w As Integer, ByVal pt1 As Panel, ByVal pt2 As Panel)
Dim b As Bitmap
b = Me.BackgroundImage
Dim g As Graphics
g = Graphics.FromImage(b)
g.DrawLine(Pens.Black, pt1.Location, pt2.Location)
Return True
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim x, y, w, h As Integer
x = 200
y = 40
w = 100
h = 100
pt(x, y, w, h)
End Sub
End Class
结果:
有两点:
point 1
point 2
第2点:在圆圈的中心。
第1点:在圆圈的边缘。
假设我正在将第1点移动到新位置(例如0,0
):
g.DrawLine(Pens.Black, new point(0,0) , pt2.Location)
结果:
该行已离开圈子
我想把这条线放在我的圈内。
如何将线(ptC面板)保持在圆的半径内?
答案 0 :(得分:1)
您需要创建剪切区域或路径并在绘制线之前应用它:
Using g = Me.CreateGraphics()
Using clip_path = New Drawing2D.GraphicsPath
clip_path.AddEllipse(100, 100, 100, 100)
g.DrawPath(Pens.Black, clip_path)
g.SetClip(clip_path)
g.DrawLine(Pens.Black, 0, 0, 150, 150)
End Using
End Using
我在这里绘制了圆圈和直线,你可能想要删除对DrawPath
的调用。