 - ;判断多边形内是否有文字:如果没有文字多边形则变绿色,如果文字没有多边形则变绿色。注意文字要全部落到多边形内部(文字压了多边形则认为多边形内没有文字)
- (defun c:ee3 ( / e elst ent i pts ss ss1 ss2 x)
- (setvar "CMDECHO" 0)
- (prompt "请选择需要比较的多边形和文字,找出无文字的多边形和无多边形的文字!")
- (setq ss (ssget '((0 . "*POLYLINE,*TEXT")))); 获得选择集
- (command "chprop" ss "" "p" "C" "3" "") ;选择集先变绿色。在这里怎样只改变选择集文字的颜色呢?
- (progn
- (setq i 0)
- (while (setq e (ssname ss i));遍历选择集得到LWPOLYLINE实体
- (setq ed (entget e))
- (if (and
- ;得到多边形的顶点表
- (setq pts1 (mapcar
- 'cdr
- (vl-remove-if-not '(lambda (x)
- (= (car x) 10)
- ) ed
- )
- )
- )
- (setq ss1 (ssget "wp" pts1 '((0 . "TEXT")))) ; 把顶点表送给SS
- )
- (progn
- (command "chprop" ss1 "" "p" "C" "1" "") ; 有多边形的文字变红色
- (command "chprop" e "" "p" "C" "1" "") ; 有文字的多边形变红色
- )
- )
- (setq i (1+ i))
- )
- )
- ;;;;;;;;;;;;;;;;;;;;;;;;判断没有文字的多边形和压线的多边形
- (prompt "请选择需要比较的多边形(绿色),找出压线的多边形和文字!")
- ;(if (setq ss (ssget '((0 . "*POLYLINE")))) ; 选择多边形
- (if (setq ss (ssget '((0 . "*POLYLINE")(62 . 3)))) ; 选择绿色实体
- (progn
- (setq i 0)
- (while (setq ent (ssname ss i))
- (setq elst (cons ent elst))
- (setq i (1+ i))
- )
- (mapcar
- '(lambda (e)
- (if
- (setq pts
- (mapcar 'cdr
- (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget e))
- )
- )
- (cond
- ((setq ss2(ssget "wp" pts '((0 . "TEXT"))));功能1、多边形内有文字且不压线,多边形和文字颜色变红色
- (command "change" e ss2 "" "p" "C" "1" "")
- )
- ((setq ss2 (ssget "f" pts '((0 . "TEXT"))));功能2、多边形有文字但是压线,多边形和文字颜色变为蓝色(未实现文字变蓝色)
- (command "change" e ss2 "" "p" "C" "5" "")
- )
- (t ;功能3、多边形内无文字,或者文字未被多边形包围,多边形和文字都变为绿色。(只实现了多边形变色)
- (command "change" e "" "p" "C" "3" "")
- )
- )
- )
- )
- elst
- )
- )
- )
- (princ)
- )
|