本帖最后由 edata 于 2013-12-17 12:55 编辑
 - (defun c:tt(/ ss1 ss2 en1 ptx pt1 p11 e p10 ang ptup ptdn en2 e2 e11 e10 en3 e3 e310 e311 )
-
- (if (setq en1(entsel "\n选择直线:"))
- (progn
- (setq ptx(cadr en1))
- (setq pt1(osnap ptx "nea"))
- (setq e(entget (car en1)))
- (setq p10(cdr(assoc 10 e))
- p11(cdr(assoc 11 e))
- en1h(cdr(assoc 5 e))
- ang (angle p10 p11))
- (setq ptup(polar pt1 (+ ang (* pi 0.5)) 240)
- ptdn(polar pt1 (+ ang (* pi 1.5)) 240))
- (command "_.zoom" "non" ptup "non" ptdn)
- (setq ss1(ssget "c" pt1 ptup '((0 . "line"))))
- (setq ss2(ssget "c" pt1 ptdn '((0 . "line"))))
- (princ"aa")
- (princ (sslength ss1))
- (princ"cc")
- (princ (sslength ss2))
- (while (setq en2(ssname ss1 0))
- (setq e2(entget en2))
- (if (/= (cdr(assoc 5 e2)) en1h)
- (progn
-
- (setq e10 (cdr(assoc 10 e2))
- e11 (cdr(assoc 11 e2)))
- (and (= (inters p10 p11 e10 e11 nil) nil)(princ"up_par"))
- ))
- (setq ss1 (ssdel en2 ss1))
- )
- (while (setq en3(ssname ss2 0))
- (setq e3(entget en3))
- (if (/= (cdr(assoc 5 e3)) en1h)
- (progn
-
- (setq e310 (cdr(assoc 10 e3))
- e311 (cdr(assoc 11 e3)))
- (and (= (inters p10 p11 e310 e311 nil)nil)(princ"dn_par"))
- ))
- (setq ss2 (ssdel en3 ss2))
- )
-
- (command "_.zoom" "P")
- ))
- (princ)
- )
未整理,,思路是取得当前直线上的点的时候,计算该点固定距离上下点,通过zoom缩放,使之可见,然后用ssget的c参数活得该距离的图元,如果有且平行的直线,执行文字位置设置。 |