 - (defun modifyangle (ang isratate / ENT INDEX LPT MPT NMPT OBJ SLTSET UPT)
- ;调用需提供两个参数
- ;ang为角度,以度为单位;
- ;isratate为修改模式,T为旋转ang度,nil为将角度设置为ang
- ;加载vlisp函数
- (vl-load-com)
- (if
- ;选择操作对象
- (setq sltset (ssget '((0 . "TEXT"))))
- (progn
- ;将角度转化成弧度
- (setq ang (* ang (/ pi 180))
- ;定义索引号
- index 0
- )
- ;遍历选集
- (repeat (sslength sltset)
- ;图元名
- (setq ent (ssname sltset index)
- ;转化成VLA对象
- obj (vlax-ename->vla-object ent)
- )
- ;文字对象外框
- (vla-getboundingbox obj 'lpt 'upt)
- ;转化为坐标
- (setq lpt (vlax-safearray->list lpt)
- upt (vlax-safearray->list upt)
- ;取中点
- mpt (mapcar '(lambda(x1 x2) (/ (+ x1 x2) 2)) lpt upt)
- )
- ;判断是旋转还是设置角度
- (if isratate
- ;旋转
- (vla-rotate obj (vlax-3d-point mpt) ang)
- ;设置角度
- (progn
- ;修改角度
- (vla-put-rotation obj ang)
- ;新文字外框
- (vla-getboundingbox obj 'lpt 'upt)
- ;转化为坐标
- (setq lpt (vlax-safearray->list lpt)
- upt (vlax-safearray->list upt)
- ;新中点
- nmpt (mapcar '(lambda(x1 x2) (/ (+ x1 x2) 2)) lpt upt)
- )
- ;文字归位
- (vla-move obj (vlax-3d-point nmpt) (vlax-3d-point mpt))
- )
- )
- ;next one
- (setq index (1+ index))
- )
- )
- )
- ;静默退出
- (princ)
- )
- ;函数引用
- ;旋转30度
- (defun c:test1 ()
- (modifyangle 30 T)
- )
- ;旋转-30度
- (defun c:test2 ()
- (modifyangle -30 T)
- )
- ;将角度设为30度
- (defun c:test3 ()
- (modifyangle 30 nil)
- )
- ;将角度设为-30度
- (defun c:test4 ()
- (modifyangle -30 nil)
- )
|