;;; ATT-ROT.LSP - a program to rotate all ;;; attributes in a drawing to a zero angle. ;;; Program by Tony Hotchkiss. ;************************************************************** (defun err (s) (if (= s "Function cancelled") (princ "\nATT-ROT - cancelled: ") (progn (princ "\nATT-ROT - Error: ") (princ s) (terpri)) ); if (resetting) (princ "SYSTEM VARIABLES have been reset\n") (princ) ); err (defun setv (systvar newval) (setq x (read (strcat systvar "1"))) (set x (getvar systvar)) (if (/= newval nil) (setvar systvar newval)) ); setv (defun setting () (setq oerr *error*) (setq *error* err) (setv "CMDECHO" 0) (setv "BLIPMODE" 0) ); end of setting (defun rsetv (systvar) (setq x (read (strcat systvar "1"))) (setvar systvar (eval x)) ); restv (defun resetting () (rsetv "CMDECHO") (rsetv "BLIPMODE") (setq *error* oerr) ); end of resetting (defun dxf (code ename) (cdr (assoc code (entget ename))) ); dxf (defun att-rot () (setq filtlst (list '(0 . "INSERT") (cons 66 1)) ss (ssget "X" filtlst) ss1 (ssadd) sslist nil i (- 1) ) ; setq (if ss (progn (repeat (sslength ss) (setq ss1 (ssadd)) (setq ename (ssname ss (setq i (1+ i)))) (while (/= (dxf 0 ename) "SEQEND") (setq etype (dxf 0 ename)) (if (= etype "ATTRIB") (do-rotate ename) ) ; if (setq ename (entnext ename)) ) ; while ) ; repeat ) ; progn (progn (print "\nNo attributes found in the drawing") (exit) ) ; progn ) ; if ) ; att-rot (defun do-rotate (en) (setq val-11 (dxf 11 en)) (switch en 0 72) (switch en 0 73) (if (and (> (dxf 50 en) (* pi 0.5)) (< (dxf 50 en) (* pi 1.5)) ) ;_ and (switch en val-11 10) ) ; if (switch en 0.0 50) ) ; do-rotate (defun switch (en val code) (setq elist (entget en) newitem (cons code val) olditem (assoc code elist) newlist (subst newitem olditem elist) ); setq (entmod newlist) (entupd en) ); switch (defun c:ar () (setting) (att-rot) (resetting) (princ) ) c:ar (prompt "\nATT-ROT - Enter AR to start.") (princ)