Hi @user20 ,
I modified your ContainsCompletely method.
Now you can select a line segment by selecting a part of it.
Here is my code which you can refer to.
Public Function ContainsCompletely(r As Rectangle) As Boolean
If (r.X > Me.Pt_Start.X AndAlso r.X > Me.Pt_End.X) OrElse (r.Y > Me.Pt_Start.Y AndAlso r.Y > Me.Pt_End.Y) Then
Return False
ElseIf (r.X + r.Width < Me.m_ptStart.X AndAlso r.X + r.Width < Me.m_ptEnd.X) OrElse (r.Y + r.Height < Me.Pt_Start.Y AndAlso r.Y + r.Height < Me.Pt_End.Y) Then
Return False
Else
Dim a = (r.Y - Me.Pt_Start.Y) * (Me.Pt_End.X - Me.Pt_Start.X) / (Me.Pt_End.Y - Me.Pt_Start.Y) + Me.Pt_Start.X
Dim b = (r.Y + r.Height - Me.Pt_Start.Y) * (Me.Pt_End.X - Me.Pt_Start.X) / (Me.Pt_End.Y - Me.Pt_Start.Y) + Me.Pt_Start.X
If a < r.X Then
If b > r.X Then
Return True
ElseIf b > r.X + r.Width Then
Return True
Else
Return False
End If
ElseIf a > r.X + r.Width Then
If b < r.X Then
Return True
ElseIf b < r.X + r.Width Then
Return True
Else
Return False
End If
Else
Return True
End If
End If
Return False
End Function
Hope the code above could be helpful.
Best Regards.
Jiachen Li
----------
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.