nN1
nN1

Reputation: 88

VB.NET keep line inside circle

I want to keep my line inside my circle.

My code:

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

The result:

enter image description here

There are two points:

point 1
point 2

Point 2: in the center of the circle.

Point 1: on the edge of the circle.

Let's say that I'm moving point 1 to a new location (for example 0,0):

g.DrawLine(Pens.Black, new point(0,0) , pt2.Location)

The result:

enter image description here

The Line is out from the circle

I want to keep the line inside me circle.

How can I keep the line (ptC panel) inside the radius of the circle?

Upvotes: 0

Views: 734

Answers (1)

GSerg
GSerg

Reputation: 78185

You need to create a clipping region or path and apply it before drawing the line:

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

Here I'm drawing both the circle and the line, you might want to remove the call to DrawPath.

Upvotes: 1

Related Questions