sailorcwx 发表于 2008-7-16 02:07:00


(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)
)

liminnet 发表于 2008-7-16 12:43:00

页: 1 [2]
查看完整版本: ZZXXQQ大哥,你帮我写的程序怎么有时可以,有时又不行呀?