 - (defun C:tt (/ x y laa lin lab pt1 pt2 v1 slin ang tex name index nang oang b)
- (setvar "cmdecho" 0)
- (while (= y nil)
- (progn
- (setq laa (nentsel "\n选择直线或多义线. [直接回车点取两点]:";;--修改成中文,按指点改成nentsel
- ))
- (if laa ;;--不必要
- (progn
- (setq lin (entget (car laa)))
- (setq x (cdr (assoc 0 lin)))
- (setq y (or (= x "LWPOLYLINE")
- (= x "LINE")
- (= x "TEXT")
- (= x "MTEXT")
- ))) ;progn
- (progn
- (setq y t);;--直接t
- (setq pt1 (getpoint ":\n第一点:"));;--修改成中文
- (setq pt2 (getpoint pt1 ":\n第二点:"));;--修改成中文
- (coang)
- ) ;progn
- ) ;if
- ) ;progn
- ) ;while
- (cond ((= x "LWPOLYLINE");;--cond用法修正,(cdr (assoc 0 lin))直接可以用x代替以避免重复计算,下同
- (progn
- (setq pt1 (cdr (assoc 10 lin)))
- (setq v1 (cons 10 pt1))
- (setq slin (cdr (member v1 lin)))
- (setq pt2 (cdr (assoc 10 slin)))
- (coang)
- ))
- ((= x "LINE")
- (progn
- (setq pt1 (cdr (assoc 10 lin)))
- (setq pt2 (cdr (assoc 11 lin)))
- (coang)
- ))
- ((= x "TEXT")
- (progn
- (setq ang (cdr (assoc 50 lin)))
- ))
- ((= x "MTEXT")
- (progn
- (setq ang (cdr (assoc 50 lin)))
- )))
- (prompt "\n选择文字:");;--修改成中文
- (while (= lab nil)
- (setq lab (ssget
- '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))
- ))) ;while
- (setq index 0)
- (setq n (sslength lab))
- (repeat n
- (setq name (ssname lab index))
- (setq tex (entget name))
- (setq index (+ index 1))
- (setq nang (cons 50 ang))
- (setq oang (assoc 50 tex))
- (setq b (subst nang oang tex))
- (entmod b)
- )
- (setvar "cmdecho" 1)
- (princ)
- );;
- (defun coang ()
- (setq ang (angle pt1 pt2))
- (if (and (> ang (/ pi 2)) (<= ang (* pi 1.5)))
- (progn
- (setq ang (+ ang pi))
- )))
- ;文字与直线对齐
在楼主的基础上简单做了修改,没有进行较大改动。 |