;; Two-Point Rotate (MicroStation style)
;; Uses first reference point as base point automatically

(defun C:RR ()
  (setq ss (ssget))
  (if ss
    (progn
      (setq pt1 (getpoint "\nFirst reference point: "))
      (if pt1
        (progn
          (setq pt2 (getpoint pt1 "\nSecond reference point: "))
          (if pt2
            (progn
              (setq pt3 (getpoint pt1 "\nNew direction point: "))
              (if pt3
                (progn
                  (setq refang (angle pt1 pt2))
                  (setq newang (angle pt1 pt3))
                  (setq rotang (- newang refang))
                  (command "_.ROTATE" ss "" pt1 (* rotang (/ 180.0 pi)))
                )
              )
            )
          )
        )
      )
    )
  )
  (princ)
)