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)
)