(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)
)
页:
1
[2]