AutoCAD二次开发如何拾取两线的交点,我用的是VBA编程,请高手帮忙,跪谢!
2014-12-20 · 知道合伙人软件行家
关注
展开全部
在autoLISP里面,取得一条直线,然后搜索另一条直线,得到两线交点。由于搜索多了会造成运行速度变慢,尽量减少搜索次数。如以下为例;
(defun ZX ( / #k1 #k2 &k1 &k2 &kw1 &kw2 @p1 @p2 pt1 pt2 pt5 ss)
(setq &kw1 (ssget '((0 . "LINE"))));选择直线
(if (/= &kw1 nil)
(progn
(setq &k1 (ssname &kw1 0) ss '());取得一个对象,并建立空选择集
)
)
(while &k1;循环计算
(setq &kw1 (ssdel &k1 &kw1);选择集里面去掉这个对象
#k1 (entget &k1);取得直线属性列表
@p1 (cdr (assoc 10 #k1));取得起点
@p2 (cdr (assoc 11 #k1));取得端点
&kw2 (ssget "F" (list @p1 @p2) (list (cons 0 "LINE")));搜索直线
&kw2 (ssadd &k1 &kw2);本身直线加入选择集,如果选择集里面有这个对象就不增加对象
&kw2 (ssdel &k1 &kw2);去掉这个对象
)
(if (> (sslength &kw2) 0);如果选择集里面有对象
(progn
(setq &k2 (ssname &kw2 0));取得对象
(while &k2;循环计算
(setq &kw2 (ssdel &k2 &kw2);删除对象在这个选择集
#k2 (entget &k2);取得属性列表
pt1 (cdr (assoc 10 #k2));起点
pt2 (cdr (assoc 11 #k2));端点
pt5 (inters @p1 @p2 pt1 pt2);取得交点
)
(if (/= pt5 nil);如果有交点
(progn
(setq &kw1 (ssadd &k2 &kw1);这个对象加入选择集
&kw1 (ssdel &k2 &kw1);选择集里面取消这个对象
ss (cons pt5 ss);交点集合
)
)
)
(setq &k2 (ssname &kw2 0));下一条直线
)
)
)
(setq &k1 (ssname &kw1 0));下一条直线
);得到不重复的交点集合
ss
)
VBA还没有时间学习,给你参考思路。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询