试试这个-从cadcorner
- ;;; File Name: Layerfix.LSP
- ;;; Description: Changes the block definitions to BYLAYER . Will skip all
- ;;; XREF & XREF dependent blocks.
- ;;;
- ;;; Global Variables: None
- ;;;
- ;;; Local Variables: Self-explanatory
- ;;;
- ;;; Program Arguments: None
- ;;; Subroutines/Functions Defined or Called: None
- ;;;
- ;;;***************************************************************************
- (defun LAYERFIX (/ BLKDATA NEWCOLOR NEWCOLOR NEWLAYER LAYER XREFFLAG XDEPFLAG BLKENTNAME
- COUNT ENTDATA ENTNAME ENTTYPE OLDCOLOR OLDLAYER SSCOUNT SS)
-
- (command ".undo" "group")
- (setq BLKDATA (tblnext "BLOCK" t))
- (setq NEWCOLOR (cons 62 256)) ;this will set 62 (color) to bylayer
- ; (setq NEWLAYER (cons 8 "0")) ;this will set 8 (layer) to 0
- ; While there is an entry in the block table to process, continue
- (while BLKDATA
- (prompt "\nRedefining colors for block: ")
- (princ (cdr (assoc 2 BLKDATA)))
- ; Check to see if block is an XREF or is XREF dependent
- (setq XREFFLAG (assoc 1 BLKDATA))
- (setq XDEPFLAG (cdr (assoc 70 BLKDATA)))
- ; If block is not XREF or XREF dependent, i.e., regular block, then proceed.
- (if (and (not XREFFLAG) (/= (logand XDEPFLAG 32) 32))
- (progn
- (setq BLKENTNAME (cdr (assoc -2 BLKDATA)))
- (setq COUNT 1)
- (terpri)
- ; As long as we haven't reached the end of the block's defintion, get the data
- ; for each entity and change its color assignment to BYLAYER.
- (while BLKENTNAME
- (princ COUNT)
- (princ "\r")
- (setq ENTDATA (entget BLKENTNAME)); get entities data
- (setq OLDCOLOR (assoc 62 ENTDATA)) ;get entities old color value
- (if OLDCOLOR ; if value exist (null = bylayer)
- (entmod (subst newcolor oldcolor ENTDATA)) ; substitute old color to byblock
- (entmod (cons newcolor ENTDATA)) ; modify ent data w/ byblock values
- )
- (setq BLKENTNAME (entnext BLKENTNAME)) ;if attributes exist, then edit next one
- (setq COUNT (+ COUNT 1));
- ) ;end while for attribute trap
- ) ;progn
- (progn
- (princ " XREF...skipping!")
- ) ;progn
- );end if not an Xref
- (setq BLKDATA (tblnext "BLOCK")) ;next block please
- ) ;end while loop of blk data available to edit
- (command ".undo" "end")
- (command ".regen")
- (PROMPT "\nDone... ")
- (princ)
- )
- (LAYERFIX)
适用于除依赖外部参照的块外的所有块。 |