2.11.2 操作选择集

1.向选择集中加入图元

( ssadd name ss) 函数用于向选择集中加入图元,函数返回加入新图元后的选择集。如果不带任何变元参数时(ssadd)表示建立一个空的选择集,只带name参数时,表示建立只包含名为name图元的选择集。如果带2个参数,表明将name图元加入到指定的选择集中,若选择集中已有此图元,则忽略添加请求,并且不报告错误。

ssadd创建的选择集可以包含图纸空间的图元,也可包模型空间的图元,我们也可在应用程序中用dxf组码的67位码过滤,去掉不需要的图元,67组码值为1,指定图元处理图纸空间。

2.从选择集中删除图元

 (ssdel name ss)从选择集ss中删除名称为name的图元。

3.获取选择集中的图元数目

 (sslength ss)

4.访问选择集图元

 (ssname ss n),返回选择集中第n个图元名,序号为从0开始计数的整数。

(ssanme ss  0) 第一个图元;

(ssanme ss l-1) l为图元数目,返回最后一个图元名。

5.测试某个图元是否在选择集中

(ssmemb name ss),存在返回图元名,不存在返回nil。

6.删除选择集,释放内存。 (setq ss nil)

2.11.3 应用实例

  因为比较重要,现具体说2个实例。

例1:选择屏幕上要保留的图形,删除其它未被选中的图形。

(defun c:delnot( / ss1 ss2 ss3 n ent)

(setq ss1 (ssget) ss2 (ssget “x”) )

(if (not ss1)

(command “erase” ss2 “”)

(progn

(setq ss3 (ssadd) n 0 )

(repeat (sslength ss2 )

(setq ent (ssname ss2 n))

(if (not (ssmemb ent ss1))

(ssadd ent ss3)

)

(setq n (1+ n))

)

(command “erase” ss3 “” “redraw”)

)

)

)

例2:改变现行图形中所有文本尺寸大小。

(defun c:change( / a ts n index b1 b c d b2)

(setq a (ssget “x” ‘((0 . “text”))))

(setq ts (getdist “\n输入新的文本大小:”))

(setq n (sslength a))

(setq index 0)

(repeat n

(setq b1 (entget (ssname a index)))

(setq index (1+ index))

(setq c (assoc 40 b1))

(setq d (cons (car c) ts))

(setq b2 (subst d c b1))

(entmod b2)

)

(princ)

)