明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7680|回复: 22

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

  [复制链接]
发表于 2004-1-3 12:10:00 | 显示全部楼层 |阅读模式
如何判断点(给定坐标X,Y)是否在闭合多段线内?
发表于 2004-1-3 13:39:00 | 显示全部楼层
这种方法是运行Boundary命令来判断,其它的是通过纯计算方法来实现。

  1. Sub test()
  2.    
  3.     ' 当前图纸的实体数目
  4.     Dim n As Long
  5.     n = ThisDrawing.ModelSpace.Count
  6.    
  7.     ' 调用BOUNDARY命令获取某一点处的边界
  8.     Dim Pt As Variant
  9.     Pt = ThisDrawing.Utility.GetPoint(, "指定内部点: ")
  10.     ThisDrawing.SendCommand "_-Boundary" & vbCr & Pt(0) & "," & Pt(1) & vbCr & vbCr
  11.    
  12.    
  13.     ' 如果存在边界,则会生成新的实体
  14.     Dim lwpLineObj As AcadLWPolyline
  15.     If ThisDrawing.ModelSpace.Count > n Then
  16.         Set lwpLineObj = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1)
  17.         ' 如果面积相等,则点在闭合多段线的内部
  18.         If Format(lwpLineObj.Area, "0.0000") = 762.9872 Then ' 762.9872为测试数据,可以换成其它的。
  19.             MsgBox "点在闭合多段线的内部"
  20.         End If
  21.         lwpLineObj.Delete
  22.     End If
  23. End Sub
 楼主| 发表于 2004-1-3 21:27:00 | 显示全部楼层
是个好办法!
还有其他方法。大家一起来讨论(如射线法)。
发表于 2004-1-3 21:27:00 | 显示全部楼层
请efan大师解释一下"vbCr"好吗?我能猜测出意思,可在帮助文件中找不到!
 楼主| 发表于 2004-1-3 21:28:00 | 显示全部楼层
"vbCr"就是回车符。
发表于 2004-1-4 11:06:00 | 显示全部楼层
三个问题
(1)不能够判断是否在我指定的封闭线内?
(2)如果我的图形内有多个面积相等的封闭线,程序不好做出判断。
(3)点会落在-Boundary产生新封闭线内,背离了莫名问题的初衷.
------------------------------------------------------------------------------------------------
思考思考
发表于 2004-1-4 11:32:00 | 显示全部楼层
用射线法可行,做水平线,判断左侧或右侧与指定封闭线的交点数量。
因为存在刚好通过顶点(转折点)位置产生误差,必须再判断交点的前一小段距离的一个点和后一小段距离的一个点是在水平线的上方还是下方。
发表于 2004-1-4 22:50:00 | 显示全部楼层
h_lon发表于2004-1-4 11:06:00三个问题
(1)不能够判断是否在我指定的封闭线内?
(2)如果我的图形内有多个面积相等的封闭线,程序不好做出判断。
(3)点会落在-Boundary产生新封闭线内,背离了莫名问题的初衷.



第1点,If Format(lwpLineObj.Area, "0.0000") = 762.9872 Then
这个就是与你指定的封闭多段线的面积做比较啊,把数值改成XXX.Area就行了。
第2点,这倒是会错判,还要增加比较,比如取新生成的多段线的某一点坐标与原来封闭多段线的某一点坐标进行比较。
第3点,lwpLineObj.Delete,这儿已经删除了新生成的实体,故不存在这个问题了。
发表于 2004-1-5 09:42:00 | 显示全部楼层
mccad发表于2004-1-4 11:32:00用射线法可行,做水平线,判断左侧或右侧与指定封闭线的交点数量。
因为存在刚好通过顶点(转折点)位置产生误差,必须再判断交点的前一小段距离的一个点和后一小段距离的一个点是在水平线的上


前一小段距离?
这个距离定多大为好呢?
发表于 2004-1-5 12:38:00 | 显示全部楼层
efan2000兄,你的方法的确可行,但在程序中使用ThisDrawing.SendCommand会
导致程序运行缓慢,有没有更好的更快捷的方法呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 18:45 , Processed in 0.205641 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表