SSGET 函数的使用
SSGET 函数的使用一. 功能 提示用户选择对象(图元),并返回一个选择集。 二. 格式 (ssget ] ) (SSGET [选取模式] [选取点] [选取点] [点串行] [过滤条件] )三. 说明 (一).函数调用中各变元的说明 mode变元是指定对象(图元)选择方法的一个字符串。有效的选择方法是:"W"、 "WP"、 "C"、 "CP"、 "L"、 "P"、 "I"以及"F",它们分别对应于Window、WPolygon、Crossing、CPolygon、Last、Previous、Implied、Fence选择方法。其它的可选的mode值是"X",它用于选择整个数据库。pt1和pt2指定与选择有关的点。调用ssget时提供了一个点而不提供mode变元,等价于拾取单个点来做对象选择。ssget函数忽略Object Snap(对象捕捉)的现行设置方式,除非您在调用本函数时专门指定了它。filter_list变元是指定对象特征的一个关联表。与filter_list匹配的那些对象被加入到选择集中。如果调用ssget函数时,省略所有变元,则ssget函数给出"Select object"提示,允许用户交互地构造选择集。 选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集由某一种操作所使用时,在现行空间中无效的那些对象会被过滤掉。由ssget函数返回的选择集中仅包含主图元(不包含属性和多义线的顶点图元)。 下面给出一些使用实例。 (1)(ssget) 让用户用普通的对象选择方法选择对象,构成选择集。 (2)(ssget "P") 生成一个选择集,该选择集由最近所选择的那些对象所组成。 (3)(ssget "L") 生成一个选择集,该选择集由最后被增加到图形数据库中的那个可见对象组成。 (4)(ssget "I") 生成一个选择集,该选择集由PICKFIRST生效时所选择的那些对象组成。 (5)(ssget '(2,2)) 生成一个选择集,该选择由通过点(2,2)的那些对象组成。 (6)(ssget "w" (0 0) '(5 5)) 生成一个选择集,该选择集包含了由(0,0)到(5,5)定义的窗口中的所有对象。 (7)(ssget "c" '(0 0)'(1 1) 生成一个选择集,该选择集中既包含了由(0,0)到(1,1)定义的窗口中的所有对象,也包含了与这个窗口相交的那些对象。 (8)(ssget "X") 生成一个选择集,该选择集中包含了现行图形数据库中的所有对象。 (9)(ssget "X" filter_list) 扫描图形数据库,将与过滤表filter_list匹配的那些对象组成一个选择集并返回。 (10)(ssget filter_list) 让用户用一般的对象选择方式选择对象,将用户所选择的所用对象与过滤器表filter_list进行比较,只有与过滤器表相匹配的那些对象才放入到选择集中,最后返回所生成的这个选择集。 (11)(ssget "P" filter_list) 生成一个选择集,入选该选择集的条件是,它既是最近所选择的那些对象,且又满足过滤器的要求。 (12)(ssget "WP" pt_list) 生成一个选择集,该选择集中既包含了由点表pt_list定义的多边形中的所有对象。 (13)(ssget "cp" pt_list) 生成一个选择集,该选择集中既包含了由点表pt_list定义的多边形中的所有对象,也包含了与该多边形相交的那些对象。 (14)(ssget "F" pt_list) 生成一个选择集,该选择集中包含了与点表pt_list定义的多边形篱笆相交的全部对象。 (15)(ssget "wp" pt_list filter_list) 生成一个选择集,该选择集中的所有对象既必须处于由点表pt_list定义的多边形内,也必须满足过滤器表filter_list中的条件。 只有当一带变元调用ssget函数时,被选取的对象才会高亮显示。选择集会消耗AutoCAD临时文件存储区,AutoLISP不允许同时打开的选择集多于128个。如果选择集的数目达到了这个极限,AutoCAD会拒绝 再生成选择集,再调用更多次ssget函数也只能是返回nil。为了关闭不再需要的选择集。可以将它设置为nil。 对于任何以Last响应"Select object:"提示有效的地方,都可以向AutoCAD传递一个选择集变量。它将选择所传递的选择集中的所有对象。 (二).关于选择集中过滤器的进一步讨论 选择集过滤器表可以由任何方式所使用。您可以获得一个包含在给定图层上(或一个给定颜色、给定类型的全部对象的选择集。 下面的实例中,返回一个选择集,该选择集中仅包含在PICKFIRST方式有效时所选择的那些对象中,颜色为兰色的直线段。 (ssget "I" '((0. "LINE")(62.5))) 使用过滤器表,您也能选择属于一个特定申请的包含在扩展数据中的全部对象。要达到这一目的,需要按如下方式 -3组码: (ssget "P" '((0."CIRCLE")(-3 ("APPNAME")))) 上述代码选择了申请"APPNAME"中所包含的扩展数据 (1)过滤器表中的关系测试 除非特别指定,否则对过滤器表filter_list中的每一项都隐含了一个“相等”测试。对于数值组(整数、实数、点以及矢量), 通过包含了一个专用的-4组来指定一个关系运算符,您可以指定其它的关系。一个-4组的值是一个字符串,它用于指出要作用于过滤器表中随后的测试运算符。 (ssget "X" '(((0."CIRCLE")(-4.">=")(40.2.0)))) 上述表达式,将选择半径大于或等于2.0的所有圆来构成一个选择集。 下表中列出了过滤器表中所有可以使用的运算符。 选择集过滤器表中所用的关系运算符 "*" 任何情况(总是为真) "=" 等于 "!=" 不等于 "/=" 不等于 "<>" 不等于 "<" 小于 "<=" 小于或等于 ">" 大于 ">=" 大于或等于 "&" 按位于与(AND)(仅适用于组值为整型的组) "&=" 按位屏蔽相等(仅适用于组值为整型数的组)关系运算符的使用取决于用户要测试的组的类型:
. 除去按位运算符("&"和"&=")之外,所有关系运算符对组为整型数和实型数的组都是有效的。
. 按位运算符"&"和"&=",仅应用于组值为整型数的组才是有效的。如果((inter-group & filter)/=0)那么,按位"与"("&")才是真,也就是说,在屏蔽中的任何一引起位设置为1,在整型组值中那些对应位也为1时,按位"与"("&")的结果才为真。如果((integer-group & filter)=filter),按位屏蔽相等"&=",才是真,也就是说,在屏蔽中的所有位设置为1,在integer-group中也设置为1,按位屏蔽相等"&="才是真(在integer-group中的其它位可能也是置为1,但不对它作检测)。
. 对于表示点坐标的组,X,Y和Z测试可以组合成单个字符串,同时每个个运算符用逗号作分隔 (例如:">,>,*")。如果一个运算符在字符串中被省略(例如:"=,<>"省略了Z测试),则假定它是"*"运算符。
. 方向矢量(210组)仅能用"*"、"="和"! ="运算符进行比较("! ="表示不等)。
. 组值为字符串的不能使用关系运算符进行测试,而要使用通配符进行比较。
(2)过滤器测试的逻辑分组
刚刚讨论过的关系运算符是二进制运算符。通过知生成使用分组运算符嵌套布尔表达式,您也可以对组进行测试。下表中列出了分组运算符。分组运算符同-4组指定,就象关系运算符那样。分组运算符是成对出现的,在过滤器表中它们必须匹配正确,否则,ssget函数调用就会失败。
用在选择集过滤器表中的分组运算符
起始运算符包含的内容 结束运算符
"<AND" 一个或多个操作数 "ADN>"
"<OR" 一个或多个操作数 "OR>"
"<XOR" 两个操作数 "XOR>"
"<NOT" 一个操作数 "NOT>"
由分组运算符所使用的一个操作数是一个或多个图元域。一个关系运算符后跟一个或多个图元域,或一个由这些运算符所生成的嵌套的表达式。下面是一个在过滤器表中使用了分组运算符的实例:
(setq "X" '((-4. "<OR.")
(-4. "<AND")
(0."CIRCLE")
(40. 1.0)
(-4."AND>")
(-4."<AND")
(0."LINE")
(8."ABC")
(-4. "AND>")
(-4. "OR>")
)
)
这就选择了所有关径为1.0的圆,外加在图层"ABC"上的所有直线。
由于分组运算符对小写是不敏感的,所以您可以使用与大写等价的小写形式,即:"<and"、 "and>"、 "<or"、 "or>"、 "<xor"、 "xor>"、 "<not"以及"not>",......。
四. 实例
下面的程序实例用于改变现行图形中所有文本的尽无动于寸。
(defun C:chtext2 (a ts n in
不设定选取模式及过滤条件,以一般方式选取对象,并将选集储存在变量中
(SETQ GOP (SSGET))
不设定选取模式,但只将选取的文字对象加入选集,并将选集储存在变量中
(SETQ GOP (SSGET '((0 . "TEXT"))))
从上个选集中,选取所有圆对象形成新选集,并将选集储存在变量中
(SETQ GOP (SSGET "P" '((0. "CIRCLE"))))
用窗选模式,选取在指定范围内且图层为"DIM2"的所有对象
(SETQ GOP (SSGET "W" '(0 0) '(1000 1000) '((8 . "DIM2"))))
选取图面内所有在图层"0"的线对象
(SETQ GOP (SSGET "X" '((-4 . "<AND") (0 . "LINE") (8 . "0") (-4 . "AND>"))))
选取图面内所有半径大于0.75的圆对象
(SETQ GOP (SSGET "X" '((0 . "CIRCLE") (-4 . ">") (40 . 0.75))))
选取图面内所有包含有 S 字母的文字对象
(SETQ GOP (SSGET "X" '((0 . "TEXT") (1 . "*S*"))))
以多边形框选模式,并提供点串行参数作为框选时的各选取点;但不提供过滤条件
(SETQ GOP (SSGET "CP" '((0 0) (0 6) (6 6) (6 0))))
页:
[1]