lisp怎么筛选圆环_晓东CAD家园-论坛-A/VLISP-[求助]:选择集的过滤怎么写-各位高手,在Lisp中选择x=593.001所有直线的过滤序列怎么写出,是(ssget "x" '((0 . ...

本文详细介绍了LISP中的ssget函数,用于获取选择集的不同模式,如Window、Crossing等,并讲解了如何通过filter-list参数进行图元过滤,包括基于图元类型、图层和颜色的选择。还探讨了选择集过滤器的使用,包括关系操作符、位运算以及逻辑群组过滤测试,提供了一系列示例来帮助理解。
摘要由CSDN通过智能技术生成

ssget 函数

语法

(ssget [mode] [pt1 [pt2]] [pt-list] [filter-list])

功能及参数

我们可使用 ssget 函数来获取一组选择集。mode 参数是一个字符串, 可指定图元选择形式以供操作。如, W、WP、C、CP、L、P、I 或 F 等, 这也就是 AutoCAD 中的 Window、WPolygon、Crossing、CPolygon、Last、Previou、Implied与 Fence 等图元选择模式。另一个可以用的 mode 参数就是“X”, 它的意思是要选择全部的数据库。pt1 和 pt2 参数是代表点的表, 是使用来设定选择图形时所要使用的点。如果没有设定 mode 参数, 而只设定了一点的参数, 那就表示要以单独一点的方法来选取图元。这个函数会忽略OSNAP命令的目前设定(表示没有图形捕捉), 除非您在函数中特别要求它。filter-list 参数将可以配合任何模式使用, 这将可以允许您在图元选择的过程中得到良好的控制。如果省略了所有的参数, ssget 将提示用户经过 AutoCAD的 Select object:结构, 以交互的方式来建立选择集。选择集可以包含图纸空间和模型空间中的图元, 但是当这个选择集被使用于一个操作中时, 这个空间中且前没有作用的图元将会被过滤。对于所有 AutoCAD 的命令都是如此。如果您发展了自己的 AutoLISP 和 ADS 应用程序, 我们建议您以相同的方式来过滤选择集。ssget 所得到的选择集仅包含主图元, 而不包括属性或多重折线的顶点。

范例

范    例

说    明

(ssget)

要求您使用一般的图形选取方法

(ssget "P")

选择您最近所选取的图形

(ssget "L")

选择您最后加入数据库内的图元

(ssget "I")

建立在 Implied 选择模式下所选取图元的选择集。(PICKFIRST 有效时)

(ssget '(2 2))

选择经过 2, 2 这点的图元(ssget “W"'(0 0) '(5 5))│选择在 0, 0 和 5, 5 这个窗口内的图元

(ssget "w"'(0 0)'(5 5))

选择在0,0和5,5这个视窗内的图素

(ssget "C"'(0 0) '(1 1))

选择凡是接触或在0, 0和1, 1这个窗口内的图元

(ssget "X")

建立在数据库中所有图元的选择集

(ssget "X"filter-list)

选择符合 filter-list 条件的图元

(ssget filter-list)

要求用户作一般的图元选择, 但只有符合 filterlist 条件的图元可加入选择组

(ssget "P"filter-list)

建立符合 filter-list 条件且最近被选取图元的选择组

下面的 ssget 范例将需要先给定点表:(setq pt_list '((1 1)(3 1)(5 2)(2 4)))

范    例

说    明

(ssget "WP"pt_list)

建立包含在经过 pt_list所定义的多边形中所有图元的选择集

(ssget "CP"pt_list)

建立包含与接触到经过pt_list 所定义的多边形中所有图元的选择集

(ssget “F"pt_list)

建立包含在经过 pt_list所定义的交叉框中所有图元的选择集。

(ssget “WP"pt_list filter-list)

建立包含在符合 filter- list 的 pt_list 所定义的多边形中所有图元的选择集

ssget 只有在没有参数的情况下使用时, 被选取到的图形才会以高亮度来显示。关键在这个图元是如何被选取到的, 选择组中并不保留这种数据 (但是 entsel 却会显示这种数据, 请见下面所述)。因选择集占用不少 AutoCAD 临时的文件空间, 因此 LISP 不会允许您一次开启 128 个以上的选择集。一旦超过限制数, AutoCAD 会拒绝再建立更多的选择集, 同时所有 ssget 调用均会返回 nil。您若想要将不需要的选择集变量关闭, 可以将它设定为 nil。当您在 AutoLISP 做完选择集的设定后, 您就可以使用Previous 来回应 AutoCAD 中任何的 Select objects:的提示。AutoCAD 将会选取在选择集变量中所有的图元。

● 选择集过滤器

选择集过滤器表可以配合任何的选择模式使用。filterlist 是一个联合表, 类似经过 entget 返回的表形式。filter-list 将指定要检查的适当图元以及什么值会符合。

使用这个结构, 您可以在指定形式、指定图层或指定颜色下得到一个包含所有图元的选择集。下述的范例将返回仅由蓝线所组成的选择集(使用 Implied 选取模式, 且 PICKFIRST有效时):

(ssget “I” '((0 . “LINE”) (62 . 5)))

先使用 ssget 过滤器, 您将可以为特殊应用程序选择包含扩展图元数据的所有图元。这可经过使-3 群组码来完成:

(ssget “P”'((0 . “CIRCLE”) (-3 (“APPNAME”))))

将为应用程序 “APPNAME” 选择所有包含 Xdata 的圆。

● 相关的测试

除非有特别的指定, 在 filter-list 中对每一个项目的“equal” 测试将是在后台进行的。对数字群组 (整型数, 实型数, 点以及向量) 而言, 您可以包含特殊的-4 群组码来指定其他相关的操作。-4 群组是一个包含在过滤表中下一组的测试操作字符串, 例如:

(ssget “X”'((0 . “CIRCLE”) (-4 .“>=”) (40 . 2.0)))

这将选择所有半径大于或等于 2.0 的圆。

下表将列出可能的操作:

操  作

意  义

*

通用字符(表示所有的意思)

=

等于

! =

/=

<>

不等于

<

小于

<=

小于等于

>

大于

>=

大于等于

&

Bitwise AND (仅用于整型数群组)

&=

Bitwise marked equals (仅用于整型数群组)

这些关系操作的使用将视您测试的群组种类而定:

对实型数与整型数值两群组而言, 除了bitwise操作(“&”和“&=”) 以外的所有关系操作都有效。

对整型数值群组而言, bitwise 操作(“&”和“&=”) 都是有效的。如果 ((integer_group & filter) /= 0), 则bitwise 操作“&”将为真, 意即如果有任何的位设定在记号内, 则也将设定在整型数群组中。如果((integer_group & filter) = filter), 则 bitwise 操作“&=”将为真, 意即如果有任何的位设定在记号内, 则也将设定在 integer_group 中。其他群组也许设定在 integer_group 中, 但并不检查。

对点群组而言, X, Y, Z的测试应该合并至一单一字符串(以每一操作间以逗号分开的方式。如, “>, >, *”)。如果一操作被从字符串中忽略 (如,“=, <>”, 少了 Z 测试), “*” 操作将被假设。

方位向量(群组形式210)将可以仅以“*”, “=” 与“! =”(或另两个不等于操作)来比较。

您不能使用配合字符串群组的关系操作。请以万用字符取代。

● 逻辑群组的过滤器测试

在上面所描述的关系操作属于二进制位。您也可以经过建立嵌套的布尔表达式(如下表的群组操作)来测试群组。群组操作将由-4 群组所指定, 就像关系运算符。它们是成对的, 过滤器表左右括号的平衡也一样, 否则 ssget 的调用将失效。这些可被包含在运算域中的运算符的数量将视下述表中的操作而定:

起始操作

中间运算域

结束操作

一个或一个以上的运算域

AND>

一个或一个以上的运算域

OR>

两个运算域

XOR>

一个运算域

NOT>

配合群组操作, 一运算域是一个图元项群组。在一个图元项群组之后的将是一个关系操作或是经过这些操作所建立的嵌套表达式。

在一个过滤器表中的一个群组操作范例将如下所示:

(ssget “X” '((-4 .“

(-4 . “

(0 . “CIRCLE”)

(40 . 1.0)

(-4 .“AND>”)

(-4 .“

(0 .“LINE”)

(8 .“ABC”)

(-4 .“AND>”)

(-4 .“OR>”))

)

如此将选择半径为 1.0 的圆, 与在“ABC”图层上的所有线。群组操作的大小写都是一样的, 所以您也可以使用小写字符, 如:“ and”,“”等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值