明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2236|回复: 6

[基础] 请帮改一下成能够开关指定图层表

[复制链接]
发表于 2014-8-3 21:20:16 | 显示全部楼层 |阅读模式
下面这个是开关图层的,想改成够开关laylst图层表,谢谢.
(defun c:tt(/ laylst mm_a mm_sw)
(setvar "cmdecho" 0)
(setvar "Expert" 1)
(setq laylst (list "图层1" "图层2" "图层2"))
    (vlax-for mm_layer (vla-get-Layers
                       (vla-get-ActiveDocument
                         (vlax-get-acad-object)
                       )
                     )
      (setq mm_a (vla-get-name mm_layer))
      (if (= mm_a laylst);;这里laylst换成单一"图层1"就行,
          (progn
            (setq mm_sw (vla-get-layeron mm_layer))
           (cond ((= mm_sw :vlax-true) (vl-cmdf "layer" "off" laylst ""))
                 ((= mm_sw :vlax-false) (vl-cmdf "layer" "on" laylst ""))
           );cond
        );progn
      );if
  )
(setvar "Expert" 0)
(setvar "cmdecho" 1)
(princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-8-4 08:52:32 | 显示全部楼层
应该不难改,自己试试,你都钻石会员了...
发表于 2014-8-4 09:55:04 | 显示全部楼层
改不如写。
话说楼主用vlisp开关图层,vl-cmdf不需要用。
  1. ;;图层反向开关 LST图层列表 如果开则关,关则开
  2. ;;code by edata @mjtd.com 2014-8-4
  3. (defun sk_layon&off(lst / a en sk_col)  
  4.   (if(=(type lst) 'LIST)
  5.     (while(setq a(car lst))
  6.       (if(and(= (type a) 'STR)(setq en(tblobjname "layer" a)))
  7.         (progn
  8.           (setq elist(entget en))
  9.           (setq sk_col(cdr(assoc 62 elist)))
  10.           (setq sk_col (* sk_col -1))
  11.           (entmod(subst(cons 62 sk_col)(assoc 62 elist)elist))
  12.           )
  13.         )
  14.       (setq lst(cdr lst))
  15.       )
  16.     )
  17.   )
  18. ;;图层开关 LST图层列表 on&off=T为开 nil为关
  19. ;;code by edata @mjtd.com 2014-8-4
  20. (defun sk_layon(lst on&off / a en sk_col)  
  21.   (if(=(type lst) 'LIST)
  22.     (while(setq a(car lst))
  23.       (if(and(= (type a) 'STR)(setq en(tblobjname "layer" a)))
  24.         (progn
  25.           (setq elist(entget en))
  26.           (setq sk_col(cdr(assoc 62 elist)))
  27.           (if ((if on&off < >) sk_col 0)
  28.             (progn
  29.               (setq sk_col (* sk_col -1))
  30.               (entmod(subst(cons 62 sk_col)(assoc 62 elist)elist))
  31.               )            
  32.             )
  33.           (entmod(subst(cons 62 sk_col)(assoc 62 elist)elist))
  34.           )
  35.         )
  36.       (setq lst(cdr lst))
  37.       )
  38.     )
  39.   )
  40. (defun c:tt(/ lst)
  41.   (setq lst '("0" "layer1" "layer2" "layer3" "layer4" "layer5" "layer6" "layer7" "layer8"  "layer10" "layer11" "layer12"))
  42.   ;(sk_layon&off lst);;图层反向开关 LST图层列表 如果开则关,关则开
  43.   (sk_layon lst nil);;图层开关 LST图层列表 on&off=T为开 nil为关
  44.   (princ)
  45.   )
  46.   

点评

谢谢!  发表于 2014-8-4 10:41

评分

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

查看全部评分

发表于 2014-8-4 10:50:23 | 显示全部楼层
VLISP方式
  1. ;;图层反向开关 LST图层列表 如果开则关,关则开
  2. ;;code by edata @mjtd.com 2014-8-4
  3. (defun sk_layon&off2(lst / obj)
  4.   (vlax-for obj (vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))
  5.     (if (member (strcase (vla-get-name obj)) (mapcar 'strcase lst))
  6.       (if (= (vla-get-layeron obj) :vlax-true)
  7.         (vla-put-layeron obj :vlax-false)
  8.         (vla-put-layeron obj :vlax-true)
  9.         )
  10.       )
  11.     )  
  12.   )
  13. ;;图层开关 LST图层列表 on&off=T为开 nil为关
  14. ;;code by edata @mjtd.com 2014-8-4
  15. (defun sk_layon2(lst on&off / obj)
  16.   (vlax-for obj (vla-get-layers(vla-get-activedocument(vlax-get-acad-object)))
  17.     (if (member (strcase (vla-get-name obj)) (mapcar 'strcase lst))
  18.       (if on&off (vla-put-layeron obj :vlax-true) (vla-put-layeron obj :vlax-false))
  19.       )
  20.     )  
  21.   )
  22. (defun c:tt()
  23.   (setq lst'("0" "layer1" "layer2" "layer3" "layer4" "layer5" "layer6" "layer7" "layer8" "layer9" "layer10" "layer11" "layer12"))
  24.   (sk_layon2 lst nil)
  25.   )

评分

参与人数 1明经币 +1 收起 理由
kwok + 1 更给力! 不同方法,

查看全部评分

 楼主| 发表于 2014-8-4 11:03:47 | 显示全部楼层
本帖最后由 kwok 于 2014-8-4 19:27 编辑
edata 发表于 2014-8-4 10:50
VLISP方式

3Q                .
 楼主| 发表于 2014-8-4 11:32:32 | 显示全部楼层
本帖最后由 kwok 于 2014-8-4 19:27 编辑

图层名列表表相减. (vl-remove-if '(lambda(x) (member x lst1)) lst))
不知有没有别的方法.
发表于 2023-5-11 10:57:20 | 显示全部楼层

大师,为什么我这边只能关图层  不能开图层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 03:10 , Processed in 0.176760 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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