本帖最后由 作者 于 2007-5-19 16:40:25 编辑
(defun c:tt (/ ang col d d0 d01 d10 d11 d40 d62 d8 di e0 e1 en i ii j e ni lst mind mp n os p1 p2 s0 s1 si ss x1 xyz y1 z1 zb zl ) (setq os (getvar "osmode")) (setvar "osmode" 0) (setq ss (ssget '((0 . "TEXT")))) (while (> (sslength ss) 0) (setq en (entget (ssname ss 0))) (setq d8 (cdr (assoc 8 en)) d10 (cdr (assoc 10 en)) d11 (cdr (assoc 11 en)) d40 (cdr (assoc 40 en)) d62 (cdr (assoc 62 en)) di (* 7 d40) ang (cdr (assoc 50 en)) col (cdr (assoc 62 (tblsearch "layer" d8))) ) (setq p1 (polar d10 (+ ang (/ pi 2)) di) p2 (polar d11 (- ang (/ pi 2)) di) p3 (polar d10 (- ang (/ pi 2)) di) p4 (polar d11 (+ ang (/ pi 2)) di) pt (list p1 p3 p2 p4) ) (if d62 (setq s1 (ssget "cp" pt (list '(0 . "TEXT") (cons 62 d62)))) (setq s1 (ssget "cp" pt (list '(0 . "TEXT")))) ) (if (< (sslength (setq s (xdrx_PickSet_Intersect ss s1))) 5)(setq s1 s1)(setq s1 s)) (setq lst '()) (while (/= (length lst) 5) (setq i 0) (setq s0 (ssname s1 i) d0 (cdr (assoc 11 (entget s0))) lst (list (list d0 s0)) ) (setq j 1) (repeat (- (sslength s1) 1) (setq si (ssname s1 j) e1 (entget si) d01 (cdr (assoc 11 e1)) ) (if (or (equal (* 1.5 d40) (rem (distance d0 d01) (* 1.5 d40)) 0.01) (equal 0.0 (rem (distance d0 d01) (* 1.5 d40)) 0.01) ) (setq lst (append lst (list (list d01 si)) ) ) ) (setq j (1+ j)) ) (setq i (1+ i)) ) (if (= 5 (length lst)) (progn (setq x1 0 y1 0 z1 0 ii 0 ) (repeat 5 (setq zb (car (nth ii lst)) x1 (+ x1 (car zb)) y1 (+ y1 (cadr zb)) z1 (+ z1 (caddr zb)) ) (setq ii (+ 1 ii)) ) (setq xyz (list (/ x1 5) (/ y1 5) (/ z1 5)) j 1 ) (setq mind (distance (car (nth 0 lst)) xyz)) (foreach n lst (setq ss (ssdel (cadr n) ss)) (setq d (distance (car n) xyz)) (if (< d mind) (setq mind d mp (car n) ) ) ) (setq zl (cadr (assoc mp lst))) (command "change" zl "" "p" "c" 240 "") ) ) ) (setvar "osmode" os) ) |