首先,以下代码归功于Mike。佩里@http://forums.augi.com/showthread.php?5547-将块图元颜色更改为bylayer&p=32836&viewfull=1#post32836和T.Willey@http://forums.augi.com/showthread.php?62996-更改外部参照层颜色&p=719686&viewfull=1#post719686
使用上述两个代码,我编写了以下lisp以满足我的需要=1。允许多个选定的外部参照受到影响2。冻结所有选定外部参照3中的图层集列表。将所有层颜色都设置为15,除了少数@颜色13和4。将选定外部参照中的所有图元更改为“颜色随层”,但特别是忽略了几个嵌套的外部参照(剖切、栅格)。
- (defun c:xr-elec (/ sset ctr xr2 xr3 xr4 xr5 xr6 tx1 xclr ocmd llist temp1 layfzn)
- ; Change all the layers of an xref to specified color.
- (vl-load-com)
- (setq ocmd (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (command "_.undo" "_end")
- (command "_.undo" "_group")
- (prompt "\nSelect xref(s) to convert to ELEC: ")
- (if (setq sset (ssget))
- (progn
- (setq ctr 0)
- (repeat (sslength sset)
- (setq xr1 (ssname sset ctr))
- (if xr1
- (progn
- (setq xr2 (entget xr1))
- (setq tx1 (cdr (assoc 0 xr2)))
- (if
- (and
- (= tx1 "INSERT")
- (setq xr3 (cdr (assoc 2 xr2)))
- (setq xr4 (tblsearch "block" xr3))
- (setq xr5 (cdr (assoc 1 xr4)))
- )
- (progn
- (setq xclr 15) ;;SET LAYER COLOR
- (if (assoc 62 xr2)
- (entmod (subst (cons 62 xclr) (assoc 62 xr2) xr2))
- (entmod (append xr2 (list (cons 62 xclr))))
- )
- (setq xr6 (strcat xr3 "|"))
- (setq llist (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
- (vlax-for item llist
- (if (vl-string-search xr6 (vlax-get item 'Name))
- (progn
- (setq temp1 (vlax-get item 'TrueColor))
- (vlax-put temp1 'ColorIndex (rtos xclr 2 0))
- (vlax-put item 'TrueColor temp1)
- )
- )
- )
- ;change all entities within xrefs to color bylayer, omitting <section,grid> nested xrefs
- (command "_.xref" "unload" "section*,grid")
- (blocksbylayer xr1)
- (command "_.xref" "reload" "section*,grid")
- )
- (prompt "\nNot an xref"))
- )
- )
- (setq ctr (1+ ctr)))
- ) (princ)
- )
- (command "_.undo" "_end")
- ;freeze list of layers
- (setq layfzn "0,*|AREA,*|DIM*,*|DOOR TAG*,*|KEY NOTES,*|LINE-CENTER,*|NO PLOT,
- *|POCHE-FLOOR*,*|SYMBOL-*,*|SYMBOL_*,*|SYMBOL *,*|TEXT*,*|WINDOW TAG*,*|SECTION CUTS-96,
- *|GRID-96")
- (command "_.layer" "freeze" layfzn "")
- ;change a few specific layer colors
- (command "_.layer" "color" 13 "*|wall_shade,*|poche-roof*" "")
- (setvar "cmdecho" ocmd)
- (princ)
- )
- (defun blocksbylayer (xr1 / ELST ENAM ESEL BNAM FLST)
- (setq ELST (entget xr1)
- BNAM (cdr (assoc 2 ELST))
- FLST nil
- )
- (fix1 BNAM)
- (vl-cmdf "regen")
- (princ)
- )
- (defun FIX1 (BNAM / BENAM)
- (if (not (member BNAM FLST))
- (progn
- (setq FLST (cons BNAM FLST)
- BENAM (tblobjname "block" BNAM))
- (while
- (setq BENAM (entnext BENAM))
- ;(print (entget BENAM))
- (if (= (cdr (assoc 0 (entget BENAM))) "INSERT")
- (fix1 (cdr (assoc 2 (entget BENAM))))
- (vla-put-color (vlax-ename->vla-object BENAM) 256)
- )
- )
- )
- )
- )
这是我的问题——将实体(块)更改为逐层颜色的代码,两者都是Mike发布的原始代码。Perry和我的lisp(defun blocksbylayer)中修改过的代码--做他们想要做的事--直到关闭并重新打开我正在处理的文件,此时所有更改为“颜色bylayer”的实体都返回到强制颜色。。。。我对原因感到困惑。
我显然不擅长编写代码,但我想学习,讨厌盲目寻求帮助——因此采用了黑客和合并的方法,但我在这个项目中已经达到了一个地步,我真的没有想法了,所以欢迎任何和所有的建议。谢谢 |