AutoCAD二次开发如何拾取两线的交点,我用的是VBA编程,请高手帮忙,跪谢!

2026年09月23日 14:39
有2个网友回答
网友(1):

在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还没有时间学习,给你参考思路。

网友(2):

对象捕捉不行嘛...