Catches locked layers:
;; CAB 11.12.09
;; Simulate the rotate command
;; ss may be a selection set or list of enames or vla objects
(defun Rotate (ss BasePoint / ip ObjList i ename ip grr rot layrs obj doc
LastRot ObjAng)
(defun GroupRotate (objects bpt ang)
(setq bpt (vlax-3D-point bpt))
(mapcar (function (lambda (x) (vla-rotate x bpt ang))) Objects)
)
(defun LayUnLocked (Obj layrs)
(= :vlax-false (vla-get-Lock (vla-Item layrs (vla-get-Layer Obj))))
)
(setq ObjAng 0.0
rot 0.0
doc (vla-get-ActiveDocument (vlax-get-acad-object))
Layrs (vla-get-Layers doc)
)
(vla-endundomark doc)
(vla-startundomark doc)
(cond
((= (type ss) 'PICKSET)
(setq i -1)
(while (setq ename (ssname ss (setq i (1+ i))))
(if (LayUnLocked (setq obj (vlax-ename->vla-object ename)) Layrs)
(setq ObjList (cons obj ObjList))
)
))
((= (type (car ss)) 'ENAME)
(mapcar (function (lambda(x)
(if (LayUnLocked (setq obj (vlax-ename->vla-object x)) Layrs)
(setq ObjList (cons obj ObjList))
)))
ss)
)
(t
(mapcar (function (lambda(x)
(if (LayUnLocked x Layrs)
(setq ObjList (cons x ObjList))
)))
ss)
)
)
(while (progn
(cond
((eq 3 (car (setq grr (grread T 15 0))))
(setq ip (cadr grr))
nil
)
((and (eq 2 (car grr)) (eq 13 (cadr grr)))
(GroupRotate ObjList BasePoint (- LastRot))
(setq ip nil)
)
((eq 5 (car grr)) ; point from mouse, update star
(redraw)
(setq rot (angle BasePoint (trans (setq ip (cadr grr)) 1 0)))
(grdraw BasePoint ip 7); pointer angle
(GroupRotate ObjList BasePoint (- rot ObjAng))
(setq ObjAng rot) ; update object current angle
(and (>= ObjAng (* 2 pi)) (setq ObjAng (- ObjAng (* 2 pi)))) ; correct if >= 2pi
(setq LastRot ObjAng)
t
)
)
)
)
(redraw)
(vla-endundomark doc)
ip
)