这里不是3DRotate问题,是由71组码控制的,今天写了个程序,姑且算作“咸鱼翻身”。

- ;;;“咸鱼翻身”程序,用于将镜像或翻转的Text文本转正。
- ;;;支持 Autocad R14+。作者:LL_J。
- (defun c:mitxt(/ ss len i en ent p71 p72 p73 e0 ll hh ang p10 p11)
- (command "color" "")
- (setq ss(ssget '((0 . "TEXT") (-4 . "/=") (71 . 0))))
- (if ss
- (progn
- (setq len (sslength ss)
- i 0
- )
- (repeat len
- (setq en (ssname ss i)
- ent(entget en)
- p71(cdr (assoc 71 ent))
- ent(subst '(71 . 0) (assoc 71 ent) ent)
- e0 (subst '(51 . 0) (assoc 51 ent) ent)
- ll (abs (caadr (textbox e0)))
- hh (cdr (assoc 40 ent))
- ang(cdr (assoc 50 ent))
- p72(cdr (assoc 72 ent))
- p73(cdr (assoc 73 ent))
- )
- (cond
- ((= p71 2) ;镜像
- (cond
- ((and (= p72 0) (= p73 0))
- (setq p10 (polar (cdr (assoc 10 ent)) ang (- ll))
- ent (subst (cons 10 p10) (assoc 10 ent) ent)
- )
- )
- ((= p72 0)
- (setq p11 (polar (cdr (assoc 11 ent)) ang (- ll))
- ent (subst (cons 11 p11) (assoc 11 ent) ent)
- )
- )
- ((= p72 2)
- (setq p11 (polar (cdr (assoc 11 ent)) ang ll)
- ent (subst (cons 11 p11) (assoc 11 ent) ent)
- )
- )
- ((or (= p72 3) (= p72 5))
- (setq p10 (cdr (assoc 10 ent))
- p11 (cdr (assoc 11 ent))
- ent (subst (cons 10 p11) (assoc 10 ent) ent)
- ent (subst (cons 11 p10) (assoc 11 ent) ent)
- )
- )
- (t ent)
- )
- )
- ((= p71 4) ;翻转
- (cond
- ((and (= p73 0) (= p72 4)) ent)
- ((and (= p73 0) (= p72 0))
- (setq p10 (polar (cdr (assoc 10 ent)) (- ang (/ pi 2)) hh)
- ent (subst (cons 10 p10) (assoc 10 ent) ent)
- )
- )
- ((= p73 0)
- (setq p11 (polar (cdr (assoc 11 ent)) (- ang (/ pi 2)) hh)
- ent (subst (cons 11 p11) (assoc 11 ent) ent)
- )
- )
- ((= p73 3)
- (setq p11 (polar (cdr (assoc 11 ent)) (+ ang (/ pi 2)) hh)
- ent (subst (cons 11 p11) (assoc 11 ent) ent)
- )
- )
- ((= p73 1)
- (setq p11 (polar (cdr (assoc 11 ent)) (- ang (/ pi 2)) (/ (* hh 5) 3))
- ent (subst (cons 11 p11) (assoc 11 ent) ent)
- )
- )
- (t ent)
- )
- )
- (t ;镜像同时翻转
- (setq ent (subst '(71 . 0) (assoc 71 ent) ent)
- ent (subst (cons 50 (+ ang pi)) (assoc 50 ent) ent)
- )
- )
- )
- (entmod ent)
- (setq i (1+ i))
- )
- )
- (princ "\n没有需要镜像的文本。")
- )
- (princ)
- )
- (princ "\nText文本转正程序。")
- (princ "\n命令:mitxt")
|