本帖最后由 happysheep 于 2014-3-1 10:33 编辑
简单的说,我的问题就是:包含外部引用的图形,把包括外部引用在内的所有层变成灰色,并记录原来的颜色,再读取记录全部变回来。
怎么做呢??
——————————————————————————————————
以下程序,功能是:
sl命令:选择一个对象,设为当前层,除本对象所在图层外,其他图层锁定并变为灰色,在词典中记录变色的图层原来的颜色……所有图层,包括外部引用的图层都会变色。
ull命令:所有图层解除锁定,并按照词典中的颜色把各层的颜色变回来……外部引用的图层变不回来,但是普通层能变回来。
我要怎么改,才能让ull命令全部解除锁定的时候,外部引用的图层颜色也能变回来呢?
求教~~ - ;;;生成图层列表
- (vl-load-com)
- (defun laytab ()
- (setq first T)
- (setq layertab '())
- (while (setq lay1 (tblnext "layer" first))
- (if (= first T)
- (setq first nil)
- )
- (if (/= lay1 nil)
- (progn (setq lay2 (cdr (assoc 2 lay1)))
- (setq layertab (cons lay2 layertab))
- )
- )
- )
- )
- (defun locks (e / laytab n m n lay_ent lay_c layname)
- (setq n (length layertab))
- (setq m 0)
- (setq h (cdr (assoc 8 (entget e))))
-
- (vla-put-ActiveLayer
- (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (vla-item (vla-get-layers doc) h)
- )
-
- (while (/= m n)
- (if (/= h (setq layname (nth m layertab)))
- (progn (setq lay_ent (entget (tblobjname "layer" layname)))
- (setq lay_c (cdr (assoc 62 lay_ent)))
- (VLAX-LDATA-PUT "date" layname lay_c)
- (setq lay_ent (subst '(62 . 252) (assoc 62 lay_ent) lay_ent)
- lay_ent (subst '(70 . 4) '(70 . 0) lay_ent)
- )
- (entmod lay_ent)
- );依次对各层锁定、改色
- )
- (setq m (1+ m))
- )
- )
- ;;;全部解锁
- (defun unall (/ laytab n m n lay_ent lay_c layname)
- (setq n (length layertab))
- (setq m 0)
- (while (/= m n)
- (setq layname (nth m layertab))
- (setq lay_ent (entget (tblobjname "layer" layname)))
- (if (= (cdr (assoc 62 lay_ent)) 252);如果该层颜色是252则改色
- (progn (if (setq lay_c (VLAX-LDATA-get "date" layname))
- (setq lay_ent (subst (cons 62 lay_c) (assoc 62 lay_ent) lay_ent))
- )
- (setq lay_ent (subst '(70 . 0) '(70 . 4) lay_ent));所有层都解锁
- (VLAX-LDATA-delete "date" layname)
- (entmod lay_ent)
- )
- )
- (setq m (1+ m))
- )
- )
- ;;;全部解锁
- (defun c:ull ()
- (laytab)
- (setvar "cmdecho" 0)
- (command "_.undo" "be")
- (unall)
- (command "_.undo" "e")
- (setvar "cmdecho" 1)
- )
- ;;;单选解锁反锁
- (defun c:sl ()
- (setvar "cmdecho" 0)
- (command "_.undo" "be")
- (if (setq e (car (entsel "\n选择需要编辑的图层上的物体:")))
- (progn
- (laytab) (unall) (locks e)
- )
- )
- (command "_.undo" "e")
- (setvar "cmdecho" 1)
- )
|