AutoLisp从入门到放弃(十四)
AutoLisp选择集操作
本章主要讲解Autolisp中的选择集相关操作。
一、ssget
1、函数说明
函数 | 函数说明 |
---|---|
(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list]) | 根据选定对象创建选择集。 |
选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集用于某操作时,那些在当前无效的空间中的对象会被 ssget 过滤掉。由 ssget
函数返回的选择集中仅包含主图元(不包含属性和多段线顶点)。
2、参数说明
ssget最多可以输入5个参数,按照顺序依次为对象的选择方式、两个选择相关的点、一个选择相关的点表、一个实体属性的过滤表。
首先,我们来看第一个参数:实体选择方式。
实体选择方式通过不同的字符串来指定。
序号 | 参数字符串 | 说明 |
---|---|---|
1 | C | 窗交。 |
2 | CP | 圈交(指定多段线内和与该多段线相交的所有对象)。 |
3 | F | 栏选。 |
4 | I | 隐含窗口选择(在执行 PICKFIRST 期间选择的对象)。 |
5 | L | 添加到数据库的最后一个可见对象。 |
6 | P | 最后一个创建的选择集。 |
7 | W | 窗口选择。 |
8 | WP | 圈围(指定多边形内的所有对象)。 |
9 | X | 整个数据库。如果指定了 X 选择方法,而又没有提供 filter-list 参数,则 ssget 选择数据库中的所有图元,包括关闭、冻结图层中的图元和可见屏幕外的图元。 |
10 | :E | 光标的对象选择拾取框中的所有对象。 |
11 | :N | 在执行 ssget 操作的过程中,为选定图元调用ssnamex 获得容器块和转换矩阵的附加信息。只有通过窗口、窗交点拾取等图形选择方法选定的图元,这一附加信息才可以使用。 |
12 | :S | 仅允许单一选择集。 |
第二三四个参数的作用均是用来确定选择集范围的。如果只是指定第二三个参数中的点坐标,则表示选择根据这两个点所确定的矩形范围内的实体。
如果指定了pt-list参数,则表示选择集范围为pt-list点列中的所有点围成的闭合区域。
最后一个参数则是确定要拾取的所有实体类型,指定该参数之后,在选择实体的时候只会选中该参数中指定的类型的实体。
3、代码示例
(ssget) ;; 没有指定任何参数,直接执行选择实体的操作,拾取范围等参数由用户指定。
(ssget (list 0 0 0 )) ;; 只指定了一个点坐标,表示选中通过该点的所有实体。
(ssget "C" (list 0 0 0) (list 1 1 0)) ;; 指定了两个点坐标,表明根据指定的选择方式选择两点围成的矩形内的所有实体。
(ssget "C" (list 0 0 0) (list 1 1 0) (list (cons 0 "LINE"))) ;; 指定了选择集过滤方式,只选择符合过滤条件中的属性的对象。
二、ssadd、ssdel
1、函数说明
函数 | 函数说明 |
---|---|
(ssadd [ename [ss]]) | 将对象(图元)加入到选择集中,或创建新的选择集。 |
(ssdel ename ss) | 从选择集中撤消对象(图元)。 |
如果不带参数调用 ssadd 函数,它将创建不含任何成员的选择集(空选择集)。
2、代码示例
(setq #ss (ssadd)) ;; 创建一个空选择集
(ssadd (car(entsel)) #ss) ;; 选择一个实体存放入上一步创建的选择集
(setq #ss1 (ssget "X")) ;; 选择当前图纸空间中的所有实体
(ssdel (car(entsel)) #ss1) ;; 选择一个实体在当前选择集中删除
三、sslength
1、函数说明
函数 | 函数说明 |
---|---|
(sslength ss) | 求出一个选择集中的对象(图元)数目,并将其作为一个整数返回。 |
2、代码示例
(setq #ss (ssget "X"))
(sslength #ss) ;; 返回当前选择集中的实体数量。
四、ssmemb
1、函数说明
函数 | 函数说明 |
---|---|
(ssmemb ename ss) | 测试某对象(图元)是否是选择集的成员。 |
如果 ename 是 ss 的成员,ssmemb 返回图元名称。如果 ename 不是成员,ssmemb 返回 nil。
2、代码示例
(setq #ss (ssget "X"))
(ssmemb (car(entsel)) #ss)
五、ssname
1、函数说明
函数 | 函数说明 |
---|---|
(ssname ss index) | 返回选择集中由序号指定的那个对象(图元)的图元名。 |
2、代码示例
(setq #ss (ssget "X"))
(ssname #ss 0) ;; 返回选择集中第一个实体的实体名。
六、ssnamex
1、函数说明
函数 | 函数说明 |
---|---|
(ssnamex ss [index]) | 本函数只能查找当前图形模型空间和图纸空间中的图元,而不能查找非图形对象和其他块定义中的图元。 |
如果成功,ssnamex 返回 index 指定的图元名,以及如何选中该图元的说明数据。如果没有提供 index 参数,本函数将返回一个表,表中包括该选择集中的每个元素的图元名和如何选中该图元的说明数据。如果 index 为负数或超出了选择集中的最高图元序号,ssnamex 返回 nil。
ssnamex 函数返回的数据是一个表的列表,表中的每个子表要么包含描述图元和其选择方式的信息,要么包含描述用来选择一个或多个图元的多边形的信息。每一个描述选择集中某个图元的子表都包括三个部分:选择方式的 ID 号(大于或等于 0 的整数),被选图元的图元名,和与图元选择方式有关的特定数据(它用于描述图元是如何被选中的)。
((sel_id1 ename1 (data))(sel_id2ename2 (data)) ... )
下表列出了选择方式的 ID:
选择方式 ID | |
---|---|
ID | 说明 |
0 | 没有特殊信息(如 Last All) |
1 | 拾取 |
2 | 窗口或圈围 |
3 | 窗交或圈交 |
4 | 栏选 |
用来描述选择图元所用多边形的子表格式如下:先是一个多边形 ID 号(小于 0 的整数),接着是点的描述符。
(polygon_idpoint_description_1point_description_n... )
多边形 ID 号从 -1 开始并以 -1 递减。由于和显示位置有关,点用以下几种方式描述:无限长直线、射线或线段。每个点的描述符包括三个部分:点描述符 ID 号(要描述的项的类型)、该项的起点和一个可选的单位向量,该单位向量或者用来描述无限长线的方向,或者用来描述线段另外一端的偏移量。
(point_descriptor_idbase_point[unit_or_offset_vector])
下表列出了有效的点描述符的 ID 号:
点描述符 ID | |
---|---|
ID | 说明 |
0 | 无限长线 |
1 | 射线 |
2 | 直线线段 |
如果视点不是 0,0,1,将返回 unit_or_offset_vector。
2、代码示例
(ssnamex (ssget "X") 0)