明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: lonshinyoo

求不装ET不用VLX等插件,直接用LISP实现图层控制

  [复制链接]
发表于 2011-4-22 19:55:48 | 显示全部楼层
(defun lay_ac_ulk (style / oldcmde)
  (setq oldcmde (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (if (= style "AC")
    (progn
      (command "_.layer" "on" "*" "")
      (princ "\n所有图层已开启!")
    )
    (progn
      (command "_.layer" "U" "*" "")
      (princ "\n所有图层已解锁!")
    )
  )
  (setvar "cmdecho" oldcmde)
)


(defun lay_GC_LCK (STYPE En / CLAY LAY OLDCMDE)
  (setq oldcmde (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq lay (cdr (assoc 8 (entget (car en)))))
  (if (= STYPE "GC")
    (progn
      (setq clay (getvar "clayer"))
      (if (= lay clay)
        (command "_.layer" "off" lay "Y" "")
        (command "_.layer" "off" lay "")
      )
    )
    (progn
      (command "_.layer" "LO" lay "")
      (princ (strcat "\n" lay "层已锁定!"))
    )
  )
  (setvar "cmdecho" oldcmde)
)



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun C:Layoff (/ EN)
  (while (setq en (entsel "\n选择实体所在层:"))
    (lay_GC_LCK "GC" EN)
  )
  (prin1)
)


(defun c:Layon ()
  (lay_ac_ulk "AC")
  (prin1)
)


(defun c:LayISO (/ ENS I LAY LAY_LST LAY_STR LENG OLDCMDE)
  (if (setq ens (ssget))
    (progn
      (setq oldcmde (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (setq leng (sslength ens) i 0)
      (repeat leng
        (setq lay (cdr (assoc 8 (entget (ssname ens i)))))
        (if (Not (member lay lay_lst))  (setq Lay_Lst (cons lay Lay_Lst)))
        (setq i (1+ i))
      )
      (setq lay_str "")
      (foreach n Lay_Lst (setq lay_str (strcat lay_str "," n)))
      (setq lay_str (vl-string-trim "," lay_str))
      (command "_.layer" "off" "*" "y" "on" lay_str "")
      (setvar "cmdecho" oldcmde)
    )
  )
  (prin1)
)


(defun c:LayLck        (/ EN)
  (while (setq en (entsel "\n选择实体所在层:"))
    (lay_GC_LCK "LCK" EN)
  )
  (prin1)
)


(defun c:LayULK        ()
  (lay_ac_ulk "ULK")
  (prin1)
)


(defun c:LAYDEL (/ EN LAY cmde)
  (if (setq en (entsel "\n选择实体所在层:"))
    (progn
      (setq cmde (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (setq lay (cdr (assoc 8 (entget (car en)))))
      (command "_.erase" (ssget "x" (list (cons 8 lay))) "")
      (setvar "cmdecho" cmde)
    )
  )
  (prin1)
)

发表于 2011-4-22 19:58:26 | 显示全部楼层
(defun lay_ac_ulk (style / oldcmde)
  (setq oldcmde (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (if (= style "AC")
    (progn
      (command "_.layer" "on" "*" "")
      (princ "\n所有图层已开启!")
    )
    (progn
      (command "_.layer" "U" "*" "")
      (princ "\n所有图层已解锁!")
    )
  )
  (setvar "cmdecho" oldcmde)
)


(defun lay_GC_LCK (STYPE En / CLAY LAY OLDCMDE)
  (setq oldcmde (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq lay (cdr (assoc 8 (entget (car en)))))
  (if (= STYPE "GC")
    (progn
      (setq clay (getvar "clayer"))
      (if (= lay clay)
        (command "_.layer" "off" lay "Y" "")
        (command "_.layer" "off" lay "")
      )
    )
    (progn
      (command "_.layer" "LO" lay "")
      (princ (strcat "\n" lay "层已锁定!"))
    )
  )
  (setvar "cmdecho" oldcmde)
)



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun C:Layoff (/ EN)
  (while (setq en (entsel "\n选择实体所在层:"))
    (lay_GC_LCK "GC" EN)
  )
  (prin1)
)


(defun c:Layon ()
  (lay_ac_ulk "AC")
  (prin1)
)


(defun c:LayISO (/ ENS I LAY LAY_LST LAY_STR LENG OLDCMDE)
  (if (setq ens (ssget))
    (progn
      (setq oldcmde (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (setq leng (sslength ens) i 0)
      (repeat leng
        (setq lay (cdr (assoc 8 (entget (ssname ens i)))))
        (if (Not (member lay lay_lst))  (setq Lay_Lst (cons lay Lay_Lst)))
        (setq i (1+ i))
      )
      (setq lay_str "")
      (foreach n Lay_Lst (setq lay_str (strcat lay_str "," n)))
      (setq lay_str (vl-string-trim "," lay_str))
      (command "_.layer" "off" "*" "y" "on" lay_str "")
      (setvar "cmdecho" oldcmde)
    )
  )
  (prin1)
)


(defun c:LayLck        (/ EN)
  (while (setq en (entsel "\n选择实体所在层:"))
    (lay_GC_LCK "LCK" EN)
  )
  (prin1)
)


(defun c:LayULK        ()
  (lay_ac_ulk "ULK")
  (prin1)
)


(defun c:LAYDEL (/ EN LAY cmde)
  (if (setq en (entsel "\n选择实体所在层:"))
    (progn
      (setq cmde (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (setq lay (cdr (assoc 8 (entget (car en)))))
      (command "_.erase" (ssget "x" (list (cons 8 lay))) "")
      (setvar "cmdecho" cmde)
    )
  )
  (prin1)
)

点评

支持楼主这种精神! 只是这样简单的东西,还是要本人自行解决的好!  发表于 2011-12-26 08:23

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 楼主真热情!赞一个!

查看全部评分

发表于 2011-12-26 00:21:58 | 显示全部楼层
LC,        *LAYCUR
LEAD,      *LEADER
LF,        *LAYFRZ
LI,        *LAYISO
LL,        *LAYLCK
LM,        *AI_MOLC
LN,        *LAYON
LO,        *LAYOFF
LT,        *LAYTHW
LU,        *LAYULK
LZ,        *GPS_LAY_FRZ
我喜欢用命令去编写
发表于 2011-12-26 19:46:57 | 显示全部楼层
谢谢 zark 大师提供源码,可以学习一下!
发表于 2011-12-27 09:37:22 | 显示全部楼层
本帖最后由 無恒的地盘 于 2011-12-27 20:08 编辑
  1. ;;;1、切换到0图层
  2. (defun c:0 nil (command "CLAYER" "0"))

  3. ;;;2、将对象物体层置为当前图层
  4. (defun c:FS (/ x )
  5.        (princ "\n将对象物体层置为当前图层")
  6.        (setq x (entsel "\nSelect object whos layer is to be matched: "))
  7.        (command "layer" "S" (cdr (assoc 8 (entget (car x)))) "" ))

  8. ;;;3、关闭目标图层
  9. (defun c:t5 (/ x )
  10.        (princ "\n关闭目标图层")
  11.        (setq x (entsel "\nSelect object whos layer is to be OFF: "))
  12.        (command "layer" "set" "0" "OF" (cdr (assoc 8 (entget (car x)))) "" ))

  13. ;;;4、冻结目标图层
  14. (defun c:t1 (/ x )(princ "\n冻结目标图层")
  15.        (setq x (entsel "\nSelect object whos layer is to be FROZEN: "))
  16.        (command "layer" "T" "0" "s" "0" "")
  17.        (command "layer" "F" (cdr (assoc 8 (entget (car x)))) "" ))

  18. ;;;5、锁定目标图层
  19. (defun c:t7 (/ x )
  20.        (princ "\n锁定目标图层")
  21.        (setq x (entsel "\nSelect object whos layer is to be LOCK: "))
  22.        (command "layer" "LO" (cdr (assoc 8 (entget (car x)))) "" ))

  23. ;;;6、将当前锁定图层解锁,并锁定其它全部图层
  24. (defun c:t77(/ x )
  25.        (princ "\n将当前锁定图层解锁,并锁定其它全部图层")
  26.        (setq x (entsel "\nSelect object whos layer only will be displayed: "))
  27.        (command "layer" "LO" "*" "U" (cdr (assoc 8 (entget (car x)))) "" ))

  28. ;;;7、将对象物体层改为0图层
  29. (DEFUN C:SF ()
  30.        (princ "\n将对象物体层改为0图层")
  31.        (SETQ CH (SSGET))
  32.        (command "setvar" "highlight" "1")
  33.        (SETQ LA2 (GETVAR "CLAYER"))
  34.        (COMMAND "CHANGE" CH "" "PROP" "LAYER" LA2 "")
  35.        (COMMAND "CHANGE" CH "" "PROP" "COLOR" "BYL" "LT" "BYLAYER" "")
  36.        (command "setvar" "highlight" "1"))

  37. ;;;8、将对象物体层更换到目标图层
  38. (DEFUN C:SZ ()
  39.        (princ "\n将对象物体层更换到目标图层")
  40.        (SETQ CH (SSGET))
  41.        (SETQ TARGET (CAR (ENTSEL "\nSelect object on desired layer: ")))
  42.        (SETQ NA2 (ENTGET      TARGET))
  43.        (SETQ LA2 (CDR (ASSOC 8 NA2)))
  44.        (COMMAND "CHANGE" CH "" "PROP" "LAYER" LA2 ""))

  45. ;;;9、
  46. (defun c:oooo nil (command "layer" "Z" "*" ""))

  47. ;;;10、解冻全部图层
  48. (defun c:t2 nil (princ "\n解冻全部图层")(command "layer" "T" "*" ""))

  49. ;;;11、除当前图层,冻结全部图层
  50. (defun c:t11 nil (princ "\n除当前图层,冻结全部图层")(command "layer" "F" "*" ""))

  51. ;;;12、锁定全部图层
  52. (defun c:t8 nil (princ "\n锁定全部图层")(command "layer" "LO" "*" ""))

  53. ;;;13、解锁全部图层
  54. (defun c:t9 nil (princ "\n解锁全部图层")(command "layer" "U" "*" ""))

  55. ;;;14、除当前图层,关闭全部图层
  56. (defun c:t55 nil (princ "\n除当前图层,关闭全部图层")(command "LAYER" "OFF" "*" "" ""))

  57. ;;;15、打开全部图层
  58. (defun c:t6 nil (princ "\n打开全部图层")(command "LAYER" "ON" "*" ""))

  59. ;;;16、除当前锁定图层外,关闭冻锁定其它全部图层
  60. (defun c:XU nil (princ "\n除当前锁定图层外,关闭冻锁定其它全部图层")(command "LAYER" "LO" "*" "F" "*" "OFF" "*" "" ""))

  61. ;;;17、打开解冻解锁全部图层
  62. (defun c:UX nil (princ "\n打开解冻解锁全部图层")(command "LAYER" "U" "*" "T" "*" "ON" "*" "" ""))

  63. ;;;18、在视口冻结图层
  64. (defun C:tf ( / Ent Entlist Lay)
  65.       (setq Ent (car (entsel "\nSelect an entity on the layer to be frozen: "))
发表于 2013-7-21 20:19:54 | 显示全部楼层
;图层全开
(defun c:qk ()
  (command "-layer" "on" "*" "")
  (princ "\n:所有图层已开")
)

;图层全关
(defun c:qg ()
  (command "-layer" "OFF" "*" "y" "")
  (princ "\n:所有图层已关")
)

;关闭指定图层
(defun c:gtc ()
  (setq mc (getstring "输入图层名:"))
  (command "-layer" "off" mc  "")
  (princ "\n:指定图层已关")
)

;打开指定图层
(defun c:ktc ()
  (setq mc (getstring "输入图层名:"))
  (command "-layer" "on" mc  "")
  (princ "\n:指定图层已开")
)

;关闭对象所在图层
(defun c:gtc1 ()
  (setq ss (ssget))
  (setq cnt (sslength ss))
  (setq cnt1 (- 1 cnt))
  (setq c 0)
  (while (<= c cnt1)
    (setq en (ssname ss c))
    (setq lay (cdr (assoc 8 (entget en))))
    (if (= lay (getvar "clayer"))
      (command "-layer" "off" lay "y" "")
      (progn
        (command "-layer" "off" lay "")
      )
    )
    (setq c (+ 1 c))
  )
  (princ)
)

;只开实体所在图层
(defun c:ktc1 ()
  (setq ss (ssget))
  (setq cnt (sslength ss))
  (setq cnt1 (- 1 cnt))
  (command "-layer" "OFF" "*" "y" "")
  (setq c 0)
  (while (<= c cnt1)
    (setq en (ssname ss c))
    (setq lay (cdr (assoc 8 (entget en))))
    (command "-layer" "on" lay "")
    (command "-layer" "s" lay "")
    (setq c (+ 1 c))
  )
  (princ)
)


取自明经,借花献佛



发表于 2013-7-21 20:22:36 | 显示全部楼层
再献花一次

;;; 解锁层
(defun c:Lay_ul (/ ssa index n entity)
  (setvar "cmdecho" 0)
  (setq ssa (ssget))
  (setq n (sslength ssa))
  (setq index (- n 1))
  (repeat n
    (setq entity (ssname ssa index))
    (command "-layer" "u" (cdr (assoc 8 (entget entity))) "")
    (setq index (1- index))
  )
  (princ)
)
;;; 锁定层
(defun c:Lay_ll (/ ssa index n entity)
  (setvar "cmdecho" 0)
  (princ "\n请注意:被选中的对象所在层将被锁定")
  (setq ssa (ssget))
  (setq n (sslength ssa))
  (setq index (- n 1))
  (repeat n
    (setq entity (ssname ssa index))
    (command "-layer" "lo" (cdr (assoc 8 (entget entity))) "")
    (setq index (1- index))
  )
  (princ)
)
;;; 解冻层
(defun c:Lay_tl (/ ss)
  (setvar "cmdecho" 0)
  (command "-layer" "t" "*" "")
  (princ)
)
;;; 锁住其他层
(defun c:Lay_lo (/ ssa index n entity chklay)
  (prompt "锁定其他层")
  (setvar "cmdecho" 0)
  (command "-layer" "lo" "*" "")
  (setq ssa (ssget))
  (setq n (sslength ssa))
  (setq index (- n 1))
  (repeat n
    (setq entity (ssname ssa index))
    (command "-layer" "u" (cdr (assoc 8 (entget entity))) "")
    (command "-layer" "u" (strcat (cdr (assoc 8 (entget entity))) "*") "")
    (setq index (1- index))
  )
  (princ)
)
;;; 解锁所有层
(defun c:Lay_ua (/ ss)
  (setvar "cmdecho" 0)
  (command "-layer" "u" "*" "")
  (princ)
)
;;; 打开指定层
(defun c:Lay_olcc (/ cname)
  (setvar "cmdecho" 0)
  (command "-layer" "off" "*" "y" "")
  (setq cname (getstring "\n输入想打开的层: "))
  (command "-layer" "on" (strcat "*" cname "*") "")
  (princ)
)
;;; 打开所有层
(defun c:Lay_ol (/ ss)
  (setvar "cmdecho" 0)
  (command "-layer" "on" "*" "")
  (princ)
)
;;; 设当前层为embed
(defun c:Lay_ef (/)
  (setvar "cmdecho" 0)
  (setq chklay (tblsearch "layer" "EMBED"))
  (if (= chklay nil)
    (progn
      (command "-LAYER" "N" "EMBED" "C" "151" "EMBED" "")
      (command "-LAYER" "s" "EMBED" "")
    )
    (command "-LAYER" "s" "EMBED" "")
  )
  (princ)
)
发表于 2021-2-14 16:04:16 | 显示全部楼层
谢谢各位的分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 06:09 , Processed in 0.178221 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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