找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2358|回复: 8

[求助] [求助]:(ssget "x" filter_list) 函数怎么用?

[复制链接]
发表于 2007-5-20 17:29:48 | 显示全部楼层 |阅读模式

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

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

×
(ssget "x" filter_list)  这个函数怎么用呢,有没有实例?
我知道是条件选择集.但不知道怎么用.
就是"filter_list"不知道怎么设?
我要实现的功能是自动选择特定层里的所有图元.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-5-21 12:48:18 | 显示全部楼层
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豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-22 17:16:01 | 显示全部楼层
看帮助文件,讲的很清楚。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-23 12:35:23 | 显示全部楼层
例如,下列程序可以删除所选物体所在层的所有物体:
(defun c:dellayer1(/ ss sn en l s)
  (setq ss (entsel "\n点取层中某一物体:") sn (car ss))
  (if ss (progn
         (setq en (entget sn) L (cdr (assoc 8 en)))
         (setq S (ssget "X" (list (cons 8 L))))
         (command "ERASE" S "")           
         (princ (strcat "\n        (" l "层中实体已被删除)")))
         (princ "\n  (没有选中物体)")
  )
  (setq S nil)                              
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-24 12:46:44 | 显示全部楼层
最初由 gysjy 发布
[B]例如,下列程序可以删除所选物体所在层的所有物体:
(defun c:dellayer1(/ ss sn en l s)
  (setq ss (entsel "\n点取层中某一物体:") sn (car ss))
  (if ss (progn
         (setq en (entget sn) L (cdr (ass... [/B]



我试了下还是不行啊。我发现你的程序有点小错误改了下还是不行,你能再帮我看看吗?我运行了下面这段程序出面这样的错误:

点取层中某一物体:; 错误: 参数类型错误: lentityp (<图元名: 7eb05fb8> (452953.0
2.96863e+006 0.0))
命令:
命令: *取消*

我运行的程序:
(defun c:vv(/ ss sn en l s)
(setq ss (entsel "\n点取层中某一物体:") sn (car ss))
(if ss (progn
(setq en (entget ss) L (cdr (assoc 8 en)))
(setq S (ssget "X" (list (cons 8 L))))
(command "ERASE" S "")
(princ (strcat "\n (" l "层中实体已被删除)")))
(princ "\n (没有选中物体)")
)
(setq S nil)
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-24 13:28:00 | 显示全部楼层
(defun c:vv (/ ss sn en l s)
  (setq        ss (entsel "\n点取层中某一物体:")
        sn (car ss)
  )
  (if ss
    (progn
      (setq en (entget sn);这里将ss改成sn就可以了
            L  (cdr (assoc 8 en))
      )
      (setq S (ssget "X" (list (cons 8 L))))
      (command "ERASE" S "")
      (princ (strcat "\n (" l "层中实体已被删除)"))
    )
    (princ "\n (没有选中物体)")
  )
  (setq S nil)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-24 19:05:25 | 显示全部楼层
是的,(setq en (entget ss))错了,应为(setq en (entget sn))。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-25 12:50:35 | 显示全部楼层
谢谢。但不知道通过ssget() 和ssget("X")求得的选择集,再用ssname求选择集的图元名,结果会不会不同?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-25 13:00:15 | 显示全部楼层
最初由 animal212 发布
[B]谢谢。但不知道通过ssget() 和ssget("X")求得的选择集,再用ssname求选择集的图元名,结果会不会不同? [/B]

两者使用ssname求选择集的图元名的结果是相同的,区别是前者是屏幕选择,后者是整个图形数据库选择。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 20:21 , Processed in 0.389701 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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