明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2449|回复: 8

想不明白,只好求助了,,如何创建,按指定顺序的选择集

[复制链接]
发表于 2012-7-16 19:58:09 | 显示全部楼层 |阅读模式



目标:
1,在图中上面三个图里,分别手动选择点A到点B的直线,再捕捉点B到点C的直线,确定方向去选择图形,创建个选择集,最后
    (command "pedit" "m" ss "" "y"  "j" "j"  ""  0.1 "");;;ss是选择集名称     ,变成了如图中下面三个图形中的多段线

本帖子中包含更多资源

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

x

点评

根据直线端点坐标pt,(ssget pt '((0 . "line")),逐个选择  发表于 2012-7-17 09:18
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-12-22 00:04:54 | 显示全部楼层
690994 发表于 2012-7-19 10:23
线割编程我们一般用MASTERCAD,软件本身有串接功能,在众多CAD软件中,唯有AUTOCAD没这个功能,
我给一 ...

果真是参考代码啊,
回复 支持 0 反对 1

使用道具 举报

发表于 2012-7-16 23:15:14 | 显示全部楼层
LZ是用作线割路径吧,
简单一点的话,选择时先选AB再选DC后全选,连接时将ABC两实体连成多义线再与其他的连接
复杂一点,选AB后判断在B点连结的两段线,作出方向提示选择,下去直到结束
发表于 2012-7-17 08:17:09 | 显示全部楼层
留下来听讲座
发表于 2012-7-17 19:12:36 | 显示全部楼层
本帖最后由 preone 于 2012-7-17 19:12 编辑
690994 发表于 2012-7-16 23:15
LZ是用作线割路径吧,
简单一点的话,选择时先选AB再选DC后全选,连接时将ABC两实体连成多义线再与其他的连 ...


方向提示 应该怎么做呢?不会~
发表于 2012-7-17 21:06:31 | 显示全部楼层
preone 发表于 2012-7-17 19:12
方向提示 应该怎么做呢?不会~

就你提供的图档而言,只有B点才有三个端点在一起,通过判断出两个方向,再选择你想要的方向即可。
发表于 2012-7-18 18:25:12 | 显示全部楼层
690994 发表于 2012-7-17 21:06
就你提供的图档而言,只有B点才有三个端点在一起,通过判断出两个方向,再选择你想要的方向即可。

恩  具体操作 代码 能具体写几行么~~
发表于 2012-7-19 10:23:43 | 显示全部楼层
本帖最后由 690994 于 2012-7-19 10:25 编辑
preone 发表于 2012-7-18 18:25
恩  具体操作 代码 能具体写几行么~~


线割编程我们一般用MASTERCAD,软件本身有串接功能,在众多CAD软件中,唯有AUTOCAD没这个功能,
我给一段代码你参考,返回结果是一个表"tem",连续起点/终点/实体句柄的表,
有三个自定函数你可自己写或论坛里百度一下。
后面几行是测试用的,方向不对你可将表反转即可。

(defun c:te( / ang bu ent i len lst r ss ss_op tem)
  
  (setq tem '()
         ss_op(ssget)
  )
          (if (>(sslength ss_op)0);判别开口实体是否有组成闭合环
                  (progn
                  (setq i 0        lst '()        ss '())
                  (repeat (sslength ss_op)
                          (setq ent (ssname ss_op i)
                                        i (1+ i)
                                        tem(sam_smel ent);(起点,中点,末点,长度)表
                                        lst (append lst(list(list
                                                                   (reverse(cdr(reverse(nth 0 tem))))
                                                                   (reverse(cdr(reverse(nth 2 tem))))
                                                                   (list(sam_dxf ent 5)))))        ;取句柄
                           )
                   )
                  (setq tem '()
                                    ss lst                                
                  )
                  (while ss
                         (setq r (car ss)                                       
                                   lst ss
                                   bu ss                                       
                         )
                         (while r
                           (setq len r)
                           (foreach itm lst
                                        (cond
                                          ((and(=(last r)(last itm))
                                                   (=(length r)(length itm))
                                           )
                                           (setq ss(cdr ss))
                                          );only 1
                                          ((equal (nth 0 r)(nth 0 itm) 0.001);头头相连
                                                (setq r(append (list(nth 1 itm)(nth 1 r))(list(nth 2 itm))(cddr r))        
                                                          ang (member itm ss)
                                                          ss(sam_subst_n (-(length ss)(length ang)) nil ss);将第N个表元素换成NIL
                                                          ss (vl-remove nil ss)
                                                          ang (member itm bu)
                                                          bu(sam_subst_n (-(length bu)(length ang)) nil bu)                                                                  
                                                )
                                          )
                                          ((equal (nth 1 r)(nth 1 itm) 0.001);尾尾相连
                                                (setq r(append (list(nth 0 r)(nth 0 itm))(cddr r)(list(nth 2 itm)))                                                              
                                                          ang (member itm ss)
                                                          ss(sam_subst_n (-(length ss)(length ang)) nil ss)
                                                          ss (vl-remove nil ss)
                                                          ang (member itm bu)
                                                          bu(sam_subst_n (-(length bu)(length ang)) nil bu)
                                                )
                                          )
                                          ((equal (nth 0 r)(nth 1 itm)0.001);头尾相连
                                                (setq r(append (list(nth 0 itm)(nth 1 r))(list(nth 2 itm))(cddr r))
                                                          ang (member itm ss)
                                                          ss(sam_subst_n (-(length ss)(length ang)) nil ss)
                                                          ss (vl-remove nil ss)
                                                          ang (member itm bu)
                                                          bu(sam_subst_n (-(length bu)(length ang)) nil bu)
                                                )
                                          )
                                          ((equal (nth 1 r)(nth 0 itm)0.001);尾头相连
                                                (setq r(append (list(nth 0 r)(nth 1 itm))(cddr r)(list(nth 2 itm)))
                                                          ang (member itm ss)
                                                          ss(sam_subst_n (-(length ss)(length ang)) nil ss)
                                                          ss (vl-remove nil ss)
                                                          ang (member itm bu)
                                                          bu(sam_subst_n (-(length bu)(length ang)) nil bu)
                                                )
                                          )
                                          (t (princ))
                                        )
                          );foreach
                          (setq lst (vl-remove nil bu))
                          (if (or(null lst)
                                             (equal (nth 0 r)(nth 1 r)0.001)
                                             (equal len r 0.001)
                                  )
                                  (setq tem(append tem (list r))
                                                    r nil
                                  )
                         )                                       
                  );wh
                  (if(=(length ss)1)(setq ss nil))
                 );while
                );progn
          );if  ;判别开口实体是否有组成闭合环
         
         
(princ "\n             tem = ") (princ tem);Erase_DV
(getstring "\nPress Enter to continue...");Erase_DV
          (setq r 0
                tem (cddar tem)
           )
(princ "\n             tem = ") (princ tem);Erase_DV
(getstring "\nPress Enter to continue...");Erase_DV
           
          (repeat (length tem)
                                                                    (command "text""mc" (cadr(sam_smel (handent (car(nth r tem))))) 3 0 (itoa(setq r (1+ r))))
          )
)
发表于 2012-7-19 18:01:10 | 显示全部楼层
690994 发表于 2012-7-19 10:23
线割编程我们一般用MASTERCAD,软件本身有串接功能,在众多CAD软件中,唯有AUTOCAD没这个功能,
我给一 ...

恩 谢谢你  好好学习下~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-3 09:52 , Processed in 0.302464 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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