RO45

ROTATE ON 45 DGR LOOP

COPY THE CODE TO A NOTE PAD AND NAME IS R045.LSP. DRAG AND DROP TO YOUR CAD SELECT ANY BLOCK WHICH HAS AXIAL BASE POINT THEN LET THE BLOCK DANCE FOR YOU LOL

;; RO45 AutoLISP Routine
(defun c:RO45 (/ ent ename data base current_ang key ss)
  (setq ent (entsel "\nSelect block to rotate: "))
  
  (if (and ent (= "INSERT" (cdr (assoc 0 (setq data (entget (setq ename (car ent))))))))
    (progn
      (setq base (cdr (assoc 10 data)))
      (setq current_ang (cdr (assoc 50 data)))
      
      ;; Create a selection set and "Grip-Highlight" it
      (setq ss (ssadd ename))
      (sssetfirst nil ss)
      
      (princ "\n[TAB] Rotate 45° | [ENTER/SPACE] Accept | [ESC] Cancel")
      
      (while (setq key (grread nil 12 1))
        (cond
          ;; TAB Key (ASCII 9)
          ((equal key '(2 9)) 
            (setq current_ang (+ current_ang (/ pi 4)))
            (setq data (subst (cons 50 current_ang) (assoc 50 data) data))
            (entmod data)
            ;; Re-highlight after modification
            (sssetfirst nil ss) 
          )
          
          ;; Exit on Enter (13) or Space (32)
          ((or (equal key '(2 13)) (equal key '(2 32)))
            (setq key nil)
          )
          
          ;; Right Click or Escape
          ((member (car key) '(11 25))
            (setq key nil)
          )
        )
      )
      (princ "\nRotation set.")
    )
    (princ "\nEntity is not a block.")
  )
  (princ)
)