明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3842|回复: 13

[函数] 图层控制程序 源码 网上已经很多了 这个自己弄的

    [复制链接]
发表于 2013-4-7 09:57 | 显示全部楼层 |阅读模式

  1. ;;; 解锁层
  2. (defun c:Lay_ul (/ ssa index n entity)
  3.   (setvar "cmdecho" 0)
  4.   (setq ssa (ssget))
  5.   (setq n (sslength ssa))
  6.   (setq index (- n 1))
  7.   (repeat n
  8.     (setq entity (ssname ssa index))
  9.     (command "-layer" "u" (cdr (assoc 8 (entget entity))) "")
  10.     (setq index (1- index))
  11.   )
  12.   (princ)
  13. )
  14. ;;; 锁定层
  15. (defun c:Lay_ll (/ ssa index n entity)
  16.   (setvar "cmdecho" 0)
  17.   (princ "\n请注意:被选中的对象所在层将被锁定")
  18.   (setq ssa (ssget))
  19.   (setq n (sslength ssa))
  20.   (setq index (- n 1))
  21.   (repeat n
  22.     (setq entity (ssname ssa index))
  23.     (command "-layer" "lo" (cdr (assoc 8 (entget entity))) "")
  24.     (setq index (1- index))
  25.   )
  26.   (princ)
  27. )
  28. ;;; 解冻层
  29. (defun c:Lay_tl (/ ss)
  30.   (setvar "cmdecho" 0)
  31.   (command "-layer" "t" "*" "")
  32.   (princ)
  33. )
  34. ;;; 锁住其他层
  35. (defun c:Lay_lo (/ ssa index n entity chklay)
  36.   (prompt "锁定其他层")
  37.   (setvar "cmdecho" 0)
  38.   (command "-layer" "lo" "*" "")
  39.   (setq ssa (ssget))
  40.   (setq n (sslength ssa))
  41.   (setq index (- n 1))
  42.   (repeat n
  43.     (setq entity (ssname ssa index))
  44.     (command "-layer" "u" (cdr (assoc 8 (entget entity))) "")
  45.     (command "-layer" "u" (strcat (cdr (assoc 8 (entget entity))) "*") "")
  46.     (setq index (1- index))
  47.   )
  48.   (princ)
  49. )
  50. ;;; 解锁所有层
  51. (defun c:Lay_ua (/ ss)
  52.   (setvar "cmdecho" 0)
  53.   (command "-layer" "u" "*" "")
  54.   (princ)
  55. )
  56. ;;; 打开指定层
  57. (defun c:Lay_olcc (/ cname)
  58.   (setvar "cmdecho" 0)
  59.   (command "-layer" "off" "*" "y" "")
  60.   (setq cname (getstring "\n输入想打开的层: "))
  61.   (command "-layer" "on" (strcat "*" cname "*") "")
  62.   (princ)
  63. )
  64. ;;; 打开所有层
  65. (defun c:Lay_ol (/ ss)
  66.   (setvar "cmdecho" 0)
  67.   (command "-layer" "on" "*" "")
  68.   (princ)
  69. )
  70. ;;; 设当前层为embed
  71. (defun c:Lay_ef (/)
  72.   (setvar "cmdecho" 0)
  73.   (setq chklay (tblsearch "layer" "EMBED"))
  74.   (if (= chklay nil)
  75.     (progn
  76.       (command "-LAYER" "N" "EMBED" "C" "151" "EMBED" "")
  77.       (command "-LAYER" "s" "EMBED" "")
  78.     )
  79.     (command "-LAYER" "s" "EMBED" "")
  80.   )
  81.   (princ)
  82. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-4-29 12:31 来自手机 | 显示全部楼层
感谢楼主分享源码
发表于 2024-3-29 09:19 | 显示全部楼层
感谢楼主无私分享
发表于 2013-4-7 10:37 | 显示全部楼层
支持。
发表于 2013-4-7 10:37 | 显示全部楼层
好像都没有删除指定图层
发表于 2013-4-7 10:39 | 显示全部楼层
支持下源码,
 楼主| 发表于 2013-4-7 12:28 | 显示全部楼层
本帖最后由 zhuquanmao 于 2013-4-7 12:32 编辑
spp_wall 发表于 2013-4-7 10:37
好像都没有删除指定图层


网上网友作品
  1. (defun c:Lay_scc (/ et ln lay_name ss li)
  2.   (princ "\n清除指定图层内的实体")
  3.   (setq li (entsel "\n请选择指定图层内的任何一个实体<回车直接输入层名>:"))
  4.   (if li
  5.     (progn                               ; 选择一个实体
  6.       (setq et (entget (nth 0 li)))
  7.       (setq lay_name (cdr (assoc 8 et)))
  8.     )
  9.     (progn                               ; 直接输入层名,理想的办法是采用列表

  10.       (princ "输入层名:")
  11.       (while (= ln nil)
  12.         (setq lay_name (getstring))
  13.         (setq ln (cdr (assoc 2 (tblnext "layer" t))))
  14.         (while (and
  15.                  ln
  16.                  (/= ln "%")
  17.                )
  18.           (if (/= ln lay_name)
  19.             (setq ln (cdr (assoc 2 (tblnext "layer"))))
  20.             (setq ln "%")               ; 如指定的图层名已存在,则设“%”标?
  21.                                        ; ?
  22.           )
  23.         )
  24.         (if (/= ln "%")                       ; 错误处理
  25.           (princ "指定的图层不存在,请重新输入:")
  26.         )
  27.       )

  28.     )
  29.   )
  30.   (setq ss (ssget "X" (list (cons 8 lay_name)))) ; 构造选择集
  31.   (command "-layer" "u" lay_name "")   ; 图层解锁
  32.   (command "ERASE" ss "")               ; 清除所有实体
  33.   (princ "\n清除完毕!")
  34.   (princ)
  35. )
发表于 2013-4-7 13:48 | 显示全部楼层
支持,用VLA来实现,代码很简洁
http://bbs.mjtd.com/thread-99208-1-1.html
 楼主| 发表于 2013-4-7 13:50 | 显示全部楼层
【KAIXIN】 发表于 2013-4-7 13:48
支持,用VLA来实现,代码很简洁
http://bbs.mjtd.com/thread-99208-1-1.html

偶不会vla 只会简单的lisp啊
发表于 2013-7-13 16:49 | 显示全部楼层
CAD2006好像都用不了啊~奇怪中~~
发表于 2013-7-13 17:19 | 显示全部楼层
看一下,有欠缺,如选中图中图元,再选要将此图元进入后选的图元的图层中,
发表于 2013-8-5 16:20 | 显示全部楼层
对照一下,看跟我的有没有什么不同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 04:41 , Processed in 0.319470 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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