找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1251|回复: 5

[VBA程序]:如何通过一个已知点获取一个多义线实体

[复制链接]
发表于 2002-3-18 10:32:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如果已知一点在一条多义线上,如何通过点的坐标获取改多义线,而不需要重新选择,即不使用getentity entobj,point方法。feelblue@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-3-19 00:35:55 | 显示全部楼层

Re: [VBA程序]:如何通过一个已知点获取一个多义线实体

最初由 feelblue 发布
[B]如果已知一点在一条多义线上,如何通过点的坐标获取改多义线,而不需要重新选择,即不使用getentity entobj,point方法。feelblue@163.com [/B]


特点:点到多义线的距离为0。
关键:用vlax-curve-getdistatpoint函数来实现:

函数说明:
(vlax-curve-getDistAtPoint  curve-obj point)

curve-obj - VLA object to be measured
point - 3-d point list (in WCS coordinates) on the curve

Returns:

Real number if successful, otherwise nil

步骤:
1  在点周围开一个矩形窗口,大小可以为 1x1。
2  通过矩形选取多义线选择集
3  判断:同时满足:A到点的距离最小;B距离小于0.01 这两个条件的那条多义线就是。

注意:本办法不能用于判断 3dpoly,这是因为本函数不能适用与该类实体。通常,不会用到3dpoly,如果真要用,自己写算法吧:3dpoly没有弧线段,关键是计算点到直线的距离。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-3-27 21:18:26 | 显示全部楼层
“运行后你会发现,并没有向(像)预期的那样选择到通过点(1,1,0)的所有实体,而只是选择到了一个——只有一个实体高亮度显示(见图11.2),msgbox提示也只有一个实体。该方法的实际功能可能没有AUTODESK公司预期的那样好。”——《AutoCAD Visaul Basic开发技术》 张国宝  科学出版社
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-1 11:10:51 | 显示全部楼层
最初由 唐僧肉 发布
[B]“运行后你会发现,并没有向(像)预期的那样选择到通过点(1,1,0)的所有实体,而只是选择到了一个——只有一个实体高亮度显示(见图11.2),msgbox提示也只有一个实体。该方法的实际功能可能没有AUTODESK公司预?.. [/B]


应该有误差的,比如若你的图范围是(0,0)--(1e20 1e20)这么大,那么开个1X1的矩形窗口肯定不行了,所以好的方法应该是得到当前屏幕的高度值,然后用这个高度值除以一个定值(比如400),也就是说不管图的范围任意变化,这个窗口都是固定的(和屏幕高度的比),然后构造这个窗口的选择集就入你说的AUTODESK的预想的那么好了,ADESK也肯定是这么做的:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-2 00:24:35 | 显示全部楼层
在vba中若采用SelectAtPoint方法,在构造选择集的时候,只能选择一个物体,我试下来的结果好像是选择max(handle),若通过一点,重新构造SELECT BY CROSS,因该有你说的结果了。我向东方兄的本意大概是通过SELECTATPOINT的方法来选择SPLINE,需要指出,当该点有两个OBJCET时,选择的结果没有预期的那样好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-2 00:31:16 | 显示全部楼层
订正:
上贴由唐僧肉发布(我用了人家的机器;))
漏了标题:在VBA中使用SELECTATPOINT
------------------------------------------
在vba中若采用SelectAtPoint方法,在构造选择集的时候,只能选择一个物体,我试下来的结果好像是选择max(handle),若通过一点,重新构造SELECT BY CROSS,因该有你说的结果了。我向东方兄的本意大概是通过SELECTATPOINT的方法来选择SPLINE,需要指出,当该点有两个OBJCET时,选择的结果没有预期的那样好了。
-----------------
向黎明同志致谦。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-24 21:14 , Processed in 0.272409 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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