Vb.net 确定哪些对象位于选择矩形(选框)内
我正在编写一个程序,它(除其他外)为用户提供了一个类似IDE的环境,用户可以使用矩形选择工具选择一个或多个对象 所有选择将是一个简单的矩形,所有可选择的对象也将是简单的矩形 我已经有了可视化创建橡皮筋效果的代码(VB.Net)——我需要的是一个高效的算法,可以告诉我哪些对象在最终选择矩形中至少有一部分区域 如果它有助于可视化,我想做的就是在Windows桌面上的图标上拖动一个选择框。。。无论哪个图标的区域中哪怕有一部分位于该选择框内,都会高亮显示(选中) 任何帮助都将不胜感激。。。提前感谢正如BigFunger已经提到的那样。但是,您也应该检查一个矩形是否与另一个矩形相交(只检查相交)Vb.net 确定哪些对象位于选择矩形(选框)内,vb.net,selection,marquee,Vb.net,Selection,Marquee,我正在编写一个程序,它(除其他外)为用户提供了一个类似IDE的环境,用户可以使用矩形选择工具选择一个或多个对象 所有选择将是一个简单的矩形,所有可选择的对象也将是简单的矩形 我已经有了可视化创建橡皮筋效果的代码(VB.Net)——我需要的是一个高效的算法,可以告诉我哪些对象在最终选择矩形中至少有一部分区域 如果它有助于可视化,我想做的就是在Windows桌面上的图标上拖动一个选择框。。。无论哪个图标的区域中哪怕有一部分位于该选择框内,都会高亮显示(选中) 任何帮助都将不胜感激。。。提前感谢正如B
Dim Rect1 As New Rectangle(10, 10, 20, 20)
Dim Rect2 As New Rectangle(5, 5, 20, 20)
Debug.Print(Rect1.IntersectsWith(Rect2))
一个小的示例表单演示了这一点:
Public Class SelectionRectangle
Private first As Point
Private allRectangles As New List(Of RectangleF)
Private Sub form_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown
first = New Point(e.X, e.Y)
End Sub
Private Sub form_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseUp
Dim p As New Pen(Brushes.Black, 2)
Dim g As Graphics
Dim second As New Point(e.X, e.Y)
Dim x, y, w, h As Int32
x = DirectCast(IIf(first.X > second.X, second.X, first.X), Int32)
y = DirectCast(IIf(first.Y > second.Y, second.Y, first.Y), Int32)
w = Math.Abs(second.X - first.X)
h = Math.Abs(second.Y - first.Y)
Dim nextRec As New RectangleF(x, y, w, h)
Dim intersects As Boolean = False
For Each rec As RectangleF In allRectangles
If rec.Contains(nextRec) OrElse rec.IntersectsWith(nextRec) Then
intersects = True
Exit For
End If
Next
If Not intersects Then
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
g = Me.CreateGraphics()
g.DrawLine(p, first.X, first.Y, second.X, first.Y)
g.DrawLine(p, second.X, second.Y, first.X, second.Y)
g.DrawLine(p, first.X, first.Y, first.X, second.Y)
g.DrawLine(p, second.X, second.Y, second.X, first.Y)
allRectangles.Add(nextRec)
Else
Beep()
End If
End Sub
End Class
更新:将此代码更改为1。首先检查两个方向和2。对您来说更重要的是:还检查一个矩形是否不仅与另一个矩形相交,而且还检查它是否包含另一个矩形。这不会检查一个矩形是否包含另一个矩形。/facepalm感谢您捕捉到这一点!