乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 122|回复: 9

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

[复制链接]

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-1-3 12:10:00 | 显示全部楼层 |阅读模式
如何判断点(给定坐标X,Y)是否在闭合多段线内?
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 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
回复

使用道具 举报

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-1-3 21:27:00 | 显示全部楼层
是个好办法!
还有其他方法。大家一起来讨论(如射线法)。
回复

使用道具 举报

46

主题

261

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
445
发表于 2004-1-3 21:27:00 | 显示全部楼层
请efan大师解释一下"vbCr"好吗?我能猜测出意思,可在帮助文件中找不到!
回复

使用道具 举报

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-1-3 21:28:00 | 显示全部楼层
"vbCr"就是回车符。
回复

使用道具 举报

11

主题

37

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2004-1-4 11:06:00 | 显示全部楼层
三个问题
(1)不能够判断是否在我指定的封闭线内?
(2)如果我的图形内有多个面积相等的封闭线,程序不好做出判断。
(3)点会落在-Boundary产生新封闭线内,背离了莫名问题的初衷.
------------------------------------------------------------------------------------------------
思考思考
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2004-1-4 11:32:00 | 显示全部楼层
用射线法可行,做水平线,判断左侧或右侧与指定封闭线的交点数量。
因为存在刚好通过顶点(转折点)位置产生误差,必须再判断交点的前一小段距离的一个点和后一小段距离的一个点是在水平线的上方还是下方。
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2004-1-4 22:50:00 | 显示全部楼层

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

使用道具 举报

15

主题

285

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
345
发表于 2004-1-5 09:42:00 | 显示全部楼层

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

使用道具 举报

11

主题

37

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2004-1-5 12:38:00 | 显示全部楼层
efan2000兄,你的方法的确可行,但在程序中使用ThisDrawing.SendCommand会
导致程序运行缓慢,有没有更好的更快捷的方法呢?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 11:47 , Processed in 0.507003 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表