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

 我来答
朱06CAD
2014-12-20 · 知道合伙人软件行家
朱06CAD
知道合伙人软件行家
采纳数:4172 获赞数:18068
高中,熟悉AutoCAD。会autolisp及VBA程序。

向TA提问 私信TA
展开全部

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

sulian282402
高粉答主

2014-12-19 · 每个回答都超有意思的
知道大有可为答主
回答量:4.4万
采纳率:73%
帮助的人:4079万
展开全部
对象捕捉不行嘛...
追问
不是画图,是编程拾取
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式