下面的程序是用面域相交的方法判断是否点在封闭的PLine内部。
思路:
1.根据点的坐标生成一个半径很小的圆。
2.将圆和PLine转换为面域。
3.判断生成的两个面域是否相交。
程序如下:

- Public Function PtInPline(pts As Variant, pline As AcadEntity) As Boolean
- Const radius = 0.0001 '减少此值可以增加精度
-
- Dim cir As AcadCircle
- Dim regions As Variant
- Dim reg1 As AcadRegion
- Dim reg2 As AcadRegion
- '生成圆
- Set cir = ThisDrawing.ModelSpace.AddCircle(pts, radius)
-
- '转换为面域
- Dim objToRegion(0 To 1) As Object
- Set objToRegion(0) = cir
- Set objToRegion(1) = pline
- regions = ThisDrawing.ModelSpace.AddRegion(objToRegion)
- Set reg1 = regions(0)
- Set reg2 = regions(1)
-
- reg1.Boolean acIntersection, reg2
- '判断是否相交
- PtInPline = False
- ' If reg1.Area > 0 Then
- If reg1.Area > 0.9 * 3.14 * radius * radius Then
- PtInPline = True
- End If
- '删除临时生成物体
- cir.Delete
- reg1.Delete
-
- End Function
|