找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1705|回复: 4

[求助] [求助]:选择集的过滤怎么写

[复制链接]

已领礼包: 111个

财富等级: 日进斗金

发表于 2008-11-27 20:06:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
各位高手,在Lisp中选择x=593.001所有直线的过滤序列怎么写出,是
(ssget "x" '((0 . "LINE") (-4 . "=,<>,<>")(10 593.001 194.41 0.0)))吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-11-28 22:47:05 | 显示全部楼层
(ssget "x" '((0 . "LINE")  (10 593.001 194.41 0.0)))即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

 楼主| 发表于 2008-11-29 08:16:19 | 显示全部楼层
(ssget "x" '((0 . "LINE") (10 593.001 194.41 0.0)))只能选择到起点为(593.001 194.41 )的所有直线。问题已解决, (ssget "x" '((0 . "LINE") (-4 . "=")(10 . (593.001 194.41 0.0))))选择到直线不仅包含了所有起点为(593.001 194.41 )的直线,而且也包含了所有x=593.001的直线。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-11 02:09:57 | 显示全部楼层
用(-4 . "=")的这种方法求选择集,以前没见过
能说说是什么道理吗 -4代表什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-11 15:53:15 | 显示全部楼层
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
一个或一个以上的运算域
AND>

<OR
一个或一个以上的运算域
OR>

<XOR
两个运算域
XOR>

<NOT
一个运算域
NOT>


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

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

    (ssget “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”,“<or”,“xor>”等。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 12:14 , Processed in 0.422349 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表