莫名 发表于 2004-1-3 12:10:00

[讨论]如何判断坐标点是否在闭合多段线内

如何判断点(给定坐标X,Y)是否在闭合多段线内?

efan2000 发表于 2004-1-3 13:39:00

这种方法是运行Boundary命令来判断,其它的是通过纯计算方法来实现。

Sub test()
   
    ' 当前图纸的实体数目
    Dim n As Long
    n = ThisDrawing.ModelSpace.Count
   
    ' 调用BOUNDARY命令获取某一点处的边界
    Dim Pt As Variant
    Pt = ThisDrawing.Utility.GetPoint(, "指定内部点: ")
    ThisDrawing.SendCommand "_-Boundary" & vbCr & Pt(0) & "," & Pt(1) & vbCr & vbCr
   
   
    ' 如果存在边界,则会生成新的实体
    Dim lwpLineObj As AcadLWPolyline
    If ThisDrawing.ModelSpace.Count > n Then
      Set lwpLineObj = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1)
      ' 如果面积相等,则点在闭合多段线的内部
      If Format(lwpLineObj.Area, "0.0000") = 762.9872 Then ' 762.9872为测试数据,可以换成其它的。
            MsgBox "点在闭合多段线的内部"
      End If
      lwpLineObj.Delete
    End If
End Sub

莫名 发表于 2004-1-3 21:27:00

是个好办法!
还有其他方法。大家一起来讨论(如射线法)。

ahlzl 发表于 2004-1-3 21:27:00

请efan大师解释一下"vbCr"好吗?我能猜测出意思,可在帮助文件中找不到!

莫名 发表于 2004-1-3 21:28:00

"vbCr"就是回车符。

h_lon 发表于 2004-1-4 11:06:00

三个问题
(1)不能够判断是否在我指定的封闭线内?
(2)如果我的图形内有多个面积相等的封闭线,程序不好做出判断。
(3)点会落在-Boundary产生新封闭线内,背离了莫名问题的初衷.
------------------------------------------------------------------------------------------------
思考思考

mccad 发表于 2004-1-4 11:32:00

用射线法可行,做水平线,判断左侧或右侧与指定封闭线的交点数量。
因为存在刚好通过顶点(转折点)位置产生误差,必须再判断交点的前一小段距离的一个点和后一小段距离的一个点是在水平线的上方还是下方。

efan2000 发表于 2004-1-4 22:50:00

h_lon发表于2004-1-4 11:06:00static/image/common/back.gif三个问题
(1)不能够判断是否在我指定的封闭线内?
(2)如果我的图形内有多个面积相等的封闭线,程序不好做出判断。
(3)点会落在-Boundary产生新封闭线内,背离了莫名问题的初衷.




第1点,If Format(lwpLineObj.Area, "0.0000") = 762.9872 Then
这个就是与你指定的封闭多段线的面积做比较啊,把数值改成XXX.Area就行了。
第2点,这倒是会错判,还要增加比较,比如取新生成的多段线的某一点坐标与原来封闭多段线的某一点坐标进行比较。
第3点,lwpLineObj.Delete,这儿已经删除了新生成的实体,故不存在这个问题了。

bluemoon 发表于 2004-1-5 09:42:00

mccad发表于2004-1-4 11:32:00static/image/common/back.gif用射线法可行,做水平线,判断左侧或右侧与指定封闭线的交点数量。
因为存在刚好通过顶点(转折点)位置产生误差,必须再判断交点的前一小段距离的一个点和后一小段距离的一个点是在水平线的上


前一小段距离?
这个距离定多大为好呢?

h_lon 发表于 2004-1-5 12:38:00

efan2000兄,你的方法的确可行,但在程序中使用ThisDrawing.SendCommand会
导致程序运行缓慢,有没有更好的更快捷的方法呢?
页: [1] 2 3
查看完整版本: [讨论]如何判断坐标点是否在闭合多段线内