我只想要改图块层的功能,不想改其颜色。 (defun C:ch (/ COL SS CNT IDX BLKNAME DONELIST) (defun GRP (GCC EL) (cdr (assoc GCC EL))) (defun UPDATE (BNAME COL / ENAME ELIST) (setq ENAME (tblobjname "BLOCK" BNAME)) (if (and ENAME (zerop (logand 52 (GRP 70 (entget ENAME '("*"))))) ) (progn (while ENAME (if (or (= "INSERT" (GRP 0 (entget ENAME))) (= "DIMENSION" (GRP 0 (entget ENAME))) ) (UPDATE (GRP 2 (entget ENAME)) COL) ) (setq ELIST (entget ENAME '("*")) ELIST (subst '(8 . "0") (assoc 8 ELIST) ELIST) ELIST (if (assoc 62 ELIST) (subst (cons 62 COL) (assoc 62 ELIST) ELIST) (append ELIST (list (cons 62 COL))) ) ) (entmod ELIST) (setq ENAME (entnext ENAME)) ) 't ) ) ) (if (> (logand (GRP 70 (tblsearch "layer" "0")) 1) 0) (princ "\nLayer 0 must be thawed before running FIXBLOCK!\n" ) (progn (if (progn (setq COL (acad_colordlg 7)) (princ "\nPress to fix all Blocks New Color\n") (setq CNT 0 SS (ssget '((0 . "INSERT,DIMENSION"))) ) ) (progn (setq IDX (sslength SS)) (while (>= (setq IDX (1- IDX)) 0) (if (not (member (setq BLKNAME (GRP 2 (entget (ssname SS IDX)))) DONELIST ) ) (progn (if (UPDATE BLKNAME COL) (setq CNT (1+ CNT)) ) (setq DONELIST (cons BLKNAME DONELIST)) ) ) ) ) (while (setq BLKNAME (GRP 2 (tblnext "BLOCK" (not BLKNAME)))) (if (UPDATE BLKNAME COL) (setq CNT (1+ CNT)) ) ) ) (princ (strcat "\n" (itoa CNT) " block" (if (= CNT 1) "" "s" ) " redefined New Color\n" ) ) ) ) (command "_.REGEN") (princ) ) |