llsheng_73 发表于 2015-1-30 11:33 
一是选出来进一步用线的中点进行排除,二是还按原来的办法,不断变小第二层循环所涉及的表
的确 计算量小了很多 - (defun getlinemidptlst (enlst / ent)
- (mapcar '(lambda (en)
- (setq
- ent (entget en)
- )
- (mapcar
- '(lambda (x y)
- (* 0.5
- (+ x y)
- )
- )
- (cdr
- (assoc 10 ent)
- )
- (cdr
- (assoc 11 ent)
- )
- )
- )
- enlst
- )
- );中点表
- (defun ss->lst (ss / i enlst)
- (setq i 0)
- (repeat (sslength ss)
- (setq enlst (cons (ssname ss i) enlst))
- (setq i (1+ i))
- )
- enlst
- );选择集到表
- (defun cc ()
- (setq txtenlst (ss->lst (ssget '((0 . "TEXT")))))
- (setq textptlst (mapcar '(lambda (en) (cdr (assoc 10 (entget en))))
- txtenlst
- )
- )
- (setq windowlst (mapcar '(lambda (pt)
- (list (polar pt (* 2 pi) 300)
- (polar pt (* 0.5 pi) 300)
- )
- )
- textptlst
- )
- )
- (repeat (length txtenlst)
- (if (setq
- ss (ssget "_C" (car (car windowlst)) (cadr (car windowlst)))
- )
- (progn
- (setq midptlst (getlinemidptlst (ss->lst ss)));选择到的直线取中点表
- (foreach midpt midptlst
- (if midpt
- (if (< 300. (distance midpt (car textptlst)));直线中点与文字插入点的距离
- (vla-put-color (vlax-ename->vla-object (car txtenlst)) 1)
- )
- )
- )
- )
- )
- (setq textptlst (cdr textptlst))
- (setq txtenlst (cdr txtenlst))
- (setq windowlst (cdr windowlst))
- )
- )
|