明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: fire9527

有关联图层控制程序吗?

[复制链接]
 楼主| 发表于 2013-5-1 23:38 | 显示全部楼层
xsso 发表于 2013-5-1 23:02
呵呵!用通配符来分组,应该是可以的,只是我对wcmatch不熟识,慢慢来

恭候恭候,多谢多谢!
回复

使用道具 举报

发表于 2013-5-2 20:00 | 显示全部楼层
高手解决啊!
回复

使用道具 举报

发表于 2013-5-2 22:45 | 显示全部楼层
http://bbs.mjtd.com/forum.php?mo ... mp;extra=#pid584081
加载12楼的fas再执行
  1. (defun c:q2 (/ layers ent lay la1 la2 la3 for)
  2.   (defun for (layer`s / val)
  3.     (FOREACH val layer`s
  4.       (if (= (type val) 'list)
  5.         (for val)
  6.         (if (= val lay)
  7.           ;;(wcmatch lay val)
  8.           (lay_iso_* layer`s)
  9.         ) ;_ 结束if
  10.       ) ;_ 结束FOREACH
  11.     ) ;_ 结束FOREACH
  12.   ) ;_ 结束defun
  13.   (setq        la1    (lay_wcmatch "E*")
  14.         la2    (lay_wcmatch "D*")
  15.         la3    (lay_wcmatch "P*")
  16.         layers (list la1 la2 la3)
  17.         ent    (entget (car (entsel "\n选择物")))
  18.         lay    (cdr (assoc 8 ent))
  19.   ) ;_ 结束setq
  20.   (for layers)
  21. ) ;_ 结束defun

本帖子中包含更多资源

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

x

点评

哈哈,我们交流的有点让人看不明了了,FAS在这里下 http://bbs.mjtd.com/thread-101166-2-1.html  发表于 2013-5-3 07:01

评分

参与人数 1明经币 +1 收起 理由
fire9527 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-5-2 22:49 | 显示全部楼层
经此一役开始学习wcmatch函数
回复

使用道具 举报

发表于 2013-5-3 00:54 | 显示全部楼层
本帖最后由 夏生生 于 2013-5-3 00:57 编辑

写的还是不够好,缺点是命名图层组的时候要用单字符,最好是1~9和非A英文字母,楼主的要求是基本达到了,请大家指正,个人认为用对话框模式写这种程序是最好的,但是本人的DCL太烂,待高人完善。谢谢。
  1. (vl-load-com)
  2. (defun x_ssn (ss / n lst)
  3.   (repeat (setq N (sslength ss))
  4.     (setq LST (cons (ssname SS (setq N (1- N))) LST))
  5.   )
  6. )
  7. (defun del_lst_eq (lst)
  8.   (if lst
  9.     (cons (car lst)
  10.     (del_lst_eq (vl-remove (car lst) (cdr lst)))
  11.     )
  12.   )
  13. )
  14. (defun str-strlst (str br / n lst)
  15.   (while (setq n (vl-string-search br str))
  16.     (setq lst (cons (substr str 1 n) lst))
  17.     (setq str (substr str (+ 2 n)))
  18.   )
  19.   (reverse lst)
  20. )
  21. (defun off_lay (layernamelst / x ent)
  22.   (mapcar '(lambda (x)
  23.        (setq ent (entget (tblobjname "layer" x))
  24.        ent (subst (cons 62 (- (cdr (assoc 62 ent))))
  25.             (assoc 62 ent)
  26.             ent
  27.            )
  28.        )
  29.        (entmod ent)
  30.      )
  31.     layernamelst
  32.   )
  33. )
  34. ;;;选择关层
  35. (defun c:x_lon (/ ss tcz_lst OI zn en x oldtcz lst lay)
  36.   (setq  tcz_lst  (vl-remove-if-not
  37.       '(lambda (x) (wcmatch x "`*`*图层组*`*`*"))
  38.       (atoms-family 1)
  39.     )
  40.   )
  41. ;;;  (mapcar 'eval(mapcar'read tcz_lst))
  42.   (initget "Make Delete Join Off")
  43.   (setq
  44.     OI (getkword "\n图层组操作[新建(M)/删除(D)/增补(J)/关闭(O)]<O>"
  45.        )
  46.   )
  47.   (cond
  48.     ((= OI "Make")
  49.      (setq zm (getstring "\n输入需定义的图层组名:"))
  50.      (while (eval (read (strcat "**图层组" zm "**")))
  51.           ;(member (strcat "**图层组" zm "**") tcz_lst)
  52.        (princ "\n图层组名已定义,重定义。")
  53.        (setq zm (getstring "\n输入需定义的图层组名:"))
  54.      )
  55.      (prompt "\n选择特征图元")
  56.      (setq ss (ssget))
  57.      (set (read (strcat "**图层组" zm "**"))
  58.     (apply
  59.       'strcat
  60.       (mapcar '(lambda (en) (strcat en ","))
  61.         (del_lst_eq
  62.           (mapcar '(lambda (en) (cdr (assoc 8 (entget en))))
  63.             (x_ssn ss)
  64.           )
  65.         )
  66.       )
  67.     )
  68.      )
  69.      (textpage)
  70.      (princ (strcat "新建图层组"
  71.         zm
  72.         "\n包含图层:"
  73.         (eval (read (strcat "**图层组" zm "**")))
  74.       )
  75.      )
  76.     )
  77.     ((= OI "Delete")
  78.      (setq zm (getstring "\n输入图层组名或 [?]"))
  79.      (while (or  (= zm "?")
  80.     (null (eval (read (strcat "**图层组" zm "**"))))
  81.       )
  82.        (if (= zm "?")
  83.    (progn
  84.      (mapcar '(lambda (x)
  85.           (setq x (substr x 9))
  86.           (princ (strcat "\n" (substr x 1 (- (strlen x) 2))))
  87.         )
  88.        tcz_lst
  89.      )
  90.      (textpage)
  91.      (setq zm (getstring "\n输入图层组名或 [?]"))
  92.    )
  93.    (progn  (princ "\n图层组名不存在")
  94.     (setq zm (getstring "\n输入图层组名或 [?]"))
  95.    )
  96.        )
  97.      )
  98.      (set (read (strcat "**图层组" zm "**")) nil)
  99.     )
  100.     ((= OI "Join")
  101.      (setq zm (getstring "\n输入图层组名或 [?]"))
  102.      (while (or  (= zm "?")
  103.     (null (eval (read (strcat "**图层组" zm "**"))))
  104.       )
  105.        (if (= zm "?")
  106.    (progn
  107.      (mapcar '(lambda (x)
  108.           (setq x (substr x 9))
  109.           (princ (strcat "\n" (substr x 1 (- (strlen x) 2))))
  110.         )
  111.        tcz_lst
  112.      )
  113.      (textpage)
  114.      (setq zm (getstring "\n输入图层组名或 [?]"))
  115.    )
  116.    (progn  (princ "\n图层组名不存在")
  117.     (setq zm (getstring "\n输入图层组名或 [?]"))
  118.    )
  119.        )
  120.      )
  121.      (setq oldtcz (eval (read (strcat "**图层组" zm "**"))))
  122.      (prompt "\n选择增加的特征图元:")
  123.      (setq ss (ssget))
  124.      (set
  125.        (read (strcat "**图层组" zm "**"))
  126.        (apply
  127.    'strcat
  128.    (mapcar
  129.      '(lambda (en) (strcat en ","))
  130.      (del_lst_eq
  131.        (append
  132.          (mapcar '(lambda (en) (cdr (assoc 8 (entget en))))
  133.            (x_ssn ss)
  134.          )
  135.          (str-strlst oldtcz ",")
  136.        )
  137.      )
  138.    )
  139.        )
  140.      )
  141.      (princ (strcat "\n图层组"
  142.         zm
  143.         "包含图层由:"
  144.         oldtcz
  145.         "\n变为:"
  146.         (eval (read (strcat "**图层组" zm "**")))
  147.       )
  148.      )
  149.     )
  150.     ((= OI "Off")
  151.      (setq en
  152.       (cdr
  153.         (assoc 8 (entget (car (entsel "\n选择图层组中特征图元:"))))
  154.       )
  155.      )
  156. ;;;     (setq lst(mapcar '(lambda(x)(cons x (str-strlst(eval(read x))",")))tcz_lst))
  157.      (setq lst
  158.       (vl-remove-if-not
  159.         '(lambda (x) (member en (str-strlst (eval (read x)) ",")))
  160.         tcz_lst
  161.       )
  162.      )
  163.      (if (> (length lst) 1)
  164.        (progn
  165.    (initget
  166.      (strcat
  167.        (apply 'strcat
  168.         (mapcar '(lambda (x)
  169.              (setq x (substr x 9))
  170.              (strcat (substr x 1 (- (strlen x) 2)) " ")
  171.            )
  172.           lst
  173.         )
  174.        )
  175.        "ALL"
  176.      )
  177.    )
  178.    (setq OI
  179.     (getkword
  180.       (strcat
  181.         "\n图元属多个组["
  182.         (apply 'strcat
  183.          (mapcar '(lambda (x)
  184.               (setq x (substr x 3))
  185.               (setq x (substr x 1 (- (strlen x) 2)))
  186.               (strcat x "(" (substr x 7) ")/")
  187.             )
  188.            lst
  189.          )
  190.         )
  191.         "全部所属(A)]<A>"
  192.       )
  193.     )
  194.    )
  195.    (cond
  196.      ((= OI "ALL")
  197.       (setq
  198.         lay (del_lst_eq
  199.         (apply
  200.           'append
  201.           (mapcar
  202.       '(lambda (x) (str-strlst (eval (read x)) ","))
  203.       lst
  204.           )
  205.         )
  206.       )
  207.       )
  208.       (off_lay lay)
  209.      )
  210.      ((/= OI "ALL")
  211.       (setq lay(vl-remove-if-not'(lambda(x)(wcmatch x (strcat "**图层组"oi"**")))tcz_lst))
  212.       (off_lay (str-strlst (eval (read (car lay))) ","))
  213.      )
  214.    )
  215.        )
  216.        (off_lay (str-strlst (eval (read (car lst))) ","))
  217.      )
  218.     )
  219.   )
  220.   (princ)
  221. )

本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +10 收起 理由
fire9527 + 10 感谢参与,晚些汇报程序效果哈

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-5-3 07:04 | 显示全部楼层
xsso 发表于 2013-5-2 22:45
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=101166&pid=584081&page=2&extra=#pid584081
加载12楼 ...

程序效果很好,当前层问题也解决了,只是各分组只能添加单一前缀的图层?比如在分组一里面,我希望是可以添加如下图层:E*,EE,EC,EC*……,这样一来分组就更人性化了,已经接近最理想的 答案了,有劳朋友继续!
回复

使用道具 举报

发表于 2013-5-3 09:04 | 显示全部楼层
试试这个



本帖子中包含更多资源

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

x

点评

功能多!图层功能都集一身了,不过选项多了点,如果每3项功能占一行,由Q、W、E、A、S、D....的顺序排列会方便按和看  发表于 2013-5-3 23:07
效果很好,但不够直观,要能像图层管理器那样直观就好了,例如添加JZ 就可以对所有的JZ*图层操作  发表于 2013-5-3 10:09
回复

使用道具 举报

发表于 2013-5-3 10:11 | 显示全部楼层
效果很好,但不够直观,要能像图层管理器那样直观就好了,例如添加JZ 就可以对所有的JZ*图层操作
你看一下帮助说明。
回复

使用道具 举报

发表于 2013-5-3 22:09 | 显示全部楼层
本帖最后由 xsso 于 2013-5-3 22:10 编辑
fire9527 发表于 2013-5-3 07:04
程序效果很好,当前层问题也解决了,只是各分组只能添加单一前缀的图层?比如在分组一里面,我希望是可以 ...

这是原来的分组
  1. (setq        la1    (lay_wcmatch "E*")
  2.         la2    (lay_wcmatch "D*")
  3.         la3    (lay_wcmatch "P*")
  4.         layers (list la1 la2 la3)
  5.         ent    (entget (car (entsel "\n选择物")))
  6.         lay    (cdr (assoc 8 ent))
  7.   ) ;_ 结束setq
但其实可以这样分组的
  1. (setq        la1    (lay_wcmatch "E*,F*,A[1-3],B[a-z]")
  2.         la2    (lay_wcmatch "D*")
  3.         la3    (lay_wcmatch "P*")
  4.         layers (list (append '("abc") la1 la2 ) la3);_ 这里决定如何分组
  5.         ent    (entget (car (entsel "\n选择物")))
  6.         lay    (cdr (assoc 8 ent))
  7.   ) ;_ 结束setq
在我所知,它的分组条件已经很无限
回复

使用道具 举报

发表于 2013-5-3 22:44 | 显示全部楼层
夏生生 发表于 2013-5-3 00:54
写的还是不够好,缺点是命名图层组的时候要用单字符,最好是1~9和非A英文字母,楼主的要求是基本达到了,请 ...

高手!参考一下有什么可以学习
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 01:14 , Processed in 0.173217 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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