What I would do first is make the lisp so that it is a command by adding a c: after the defun.
(defun c: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
; (setq NEWLW (cons 370 256)) ;this will set 370 (lineweight) to bylayer
; 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 OLDLW (assoc 370 ENTDATA)) ;get entities old lweight value
(if OLDLW ; if value exist (null = bylayer)
(entmod (subst newlw oldlw ENTDATA)) ; substitute old lweight to bylayer
(entmod (cons newlw ENTDATA)) ; modify ent data w/ bylayer 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)
;;here I would add
(command "qsave")
(command "quit")
);;defun
My script would look like this:
(load "c:\\datafiles\\avlt-cad\\setup.lsp")
layerfix
"only 1 enter"
The Bat file looks fine.
Edited by: sdanis on Aug 31, 2009 5:08 PM
Edited by: sdanis on Aug 31, 2009 5:12 PM