相交路口lisp程序_lisp函数详解

AuotLisp及vLisp函数全集

212.  ssget

一. 功能

提示用户选择对象(图元),并返回一个选择集。

二. 格式

(ssget[mode] [pt1 [pt2]]

[pt_list] [filter_list])

三. 说明

(一).函数调用中各变元的说明

mode变元是指定对象(图元)选择方法的一个字符串。有效的选择方法是:'W'、 'WP'、 'C'、 'CP'、

'L'、 'P'、 'I'以及'F',它们分别对应于Window、WPolygon、Crossing、CPolygon、Last、Previous、Implied、Fence选择方法。其它的可选的mode值是'X',它用于选择整个数据库。pt1和pt2指定与选择有关的点。调用ssget时提供了一个点而不提供mode变元,等价于拾取单个点来做对象选择。ssget函数忽略ObjectSnap(对象捕捉)的现行设置方式,除非您在调用本函数时专门指定了它。filter_list变元是指定对象特征的一个关联表。与filter_list匹配的那些对象被加入到选择集中。如果调用ssget函数时,省略所有变元,则ssget函数给出'Selectobject'提示,允许用户交互地构造选择集。

选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集由某一种操作所使用时,在现行空间中无效的那些对象会被过滤掉。由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)(ssgetfilter_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_listfilter_list)

生成一个选择集,该选择集中的所有对象既必须处于由点表pt_list定义的多边形内,也必须满足过滤器表filter_list中的条件。

只有当一带变元调用ssget函数时,被选取的对象才会高亮显示。选择集会消耗AutoCAD临时文件存储区,AutoLISP不允许同时打开的选择集多于128个。如果选择集的数目达到了这个极限,AutoCAD会拒绝

再生成选择集,再调用更多次ssget函数也只能是返回nil。为了关闭不再需要的选择集。可以将它设置为nil。

对于任何以Last响应'Selectobject:'提示有效的地方,都可以向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函数调用就会失败。

用在选择集过滤器表中的分组运算符

_____________________________________________________

起始运算符  包含的内容

结束运算符

_____________________________________________________

'

一个或多个操作数   'ADN>'

_____________________________________________________

'

一个或多个操作数   'OR>'

_____________________________________________________

'

两个操作数        'XOR>'

_____________________________________________________

'

一个操作数        'NOT>'

_____________________________________________________

由分组运算符所使用的一个操作数是一个或多个图元域。一个关系运算符后跟一个或多个图元域,或一个由这些运算符所生成的嵌套的表达式。下面是一个在过滤器表中使用了分组运算符的实例:

(setq'X' '((-4. '

(-4.

'

(0.'CIRCLE')

(40.

1.0)

(-4.'AND>')

(-4.'

(0.'LINE')

(8.'ABC')

(-4.

'AND>')

(-4.

'OR>')

)

)

这就选择了所有关径为1.0的圆,外加在图层'ABC'上的所有直线。

由于分组运算符对小写是不敏感的,所以您可以使用与大写等价的小写形式,即:''、 ''、 ''、

'',......。

四. 实例

下面的程序实例用于改变现行图形中所有文本的尽无动于寸。

(defunC:chtext2 (atsnin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值