- UID
- 60059
- 积分
- 72
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-6-20
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
其实具体这个程序写了很久了,关闭/打开图层的其他程序则还有更久远的例子。
因为要给同事介绍这个程序,所以
让我们来回顾这段历程——
一开始你只是想:能不能选一个实体就关闭那个实体所在的那个图层?
当然能,于是就实现了。
现在流行的关闭图层的LISP都是这个思路。
关闭是关闭了,可你要再恢复那个图层。。。那个什么图层呢?你只是点了一下,甚至都不知道那个图层是什么名字!
是的,除了关闭,还能不能恢复所关闭的那个图层?
当然能,于是又实现了。
你的图形不可避免地越来越复杂了——你点这个点那个,点来点去点烦了,于是你想:
能不能一次性选好几个要关闭的东西呢?
当然能,你能想到就能实现,于是真的实现了。
现在你可以一次关闭很多图层,并且在需要的时候一次性恢复他们。总之,你的注意力越来越集中在图形上,而不是那些让你头晕的图层名称。
然而。。。管理图层总是有很多然而——
然而你关闭A、B层之后,又关闭了C层,现在就只能恢复C层了。
于是你想:能不能把C层添加到原来关闭的A、B层里面去,然后一起恢复?
当然能,于是你得到了现在这个程序:
SF.LSP
适用于R12以上版本。
第一次使用时,直接选取要关闭图层所在的实体
已经有关闭图层时,会出现两个选项:
R恢复:恢复以前关闭的图层
A添加:关闭更多图层,并添加到以前的设置中,将来可以一起恢复。
[php]
;;; v1.0 1998-06-10 origenal version
;;; off/freeze layers by selecting objects; and restore them at one time
;;; v2.0 2000-07-04 no freeze anymore, new ADD option to add selection set
;;; rename to SF
;;;
(defun c:sf (/ ss amt lay_list idx lay_name key lay_all str)
(prompt "\nWritten by Little Fish, 6-10-1998. Ver 2.0")
(setq olderr *error*)
(defun *error* (s)
(setvar "cmdecho" 0)
(command "undo" "end")
(setvar "cmdecho" 1)
(setq *error* olderr olderr nil)
(princ)
)
(setvar "cmdecho" 0)
(if (= (substr (getvar "acadver") 1 2) "12")
(command "undo" "group")
(command "undo" "begin")
)
(setvar "cmdecho" 1)
(if snf_lay
(progn
(princ (strcat "\nLayer(s) stored: " snf_lay ".\nRestore/Add/<Select object(s)>: "))
(initget "Restore Add")
(setq key (getkword))
(cond
( (= key "Restore")
(setq key "on")
)
( (= key "Add")
(setq key "off" snf_add t)
)
( t
(setq key "off")
)
)
)
(setq key "off")
)
(if (= key "off")
(setq ss (ssget)
lay_list (list)
idx 0
)
)
(setq amt (if ss (sslength ss) 0))
(repeat amt
(setq lay_name (cdr (assoc 8 (entget (ssname ss idx)))))
(if (member lay_name lay_list)
nil
(if (= lay_name (getvar "clayer"))
nil
(setq lay_list (append lay_list (list lay_name)))
)
)
(setq idx (1+ idx))
)
(if lay_list
(setq lay_all (substr (apply 'strcat (mapcar '(lambda (str) (strcat "," str)) lay_list)) 2))
(if (= key "on") (setq lay_all snf_lay))
)
(if lay_all
(progn
(if snf_add (setq lay_all (strcat snf_lay "," lay_all)))
(setvar "cmdecho" 0)
(command "layer" key lay_all "")
(setq snf_lay (if (= key "off") lay_all nil))
(setq snf_add nil)
)
)
(setvar "cmdecho" 0)
(command "undo" "end")
(setvar "cmdecho" 1)
(setq *error* olderr)
(princ)
)
(princ "loaded. Start as C:SF. ")
(princ)
[/php]
然而。。。还有然而?
当然还有,因为这的确是一个“永远的话题” :) |
|