hei 发表于 2022-7-5 18:34:32

ssget筛选器问题

问候语。
 
我对整个autolisp世界(或编程)都是新手
 
无论如何,我想做的是:
 
一种根据一组过滤器来突发块的命令。
 
这是我的密码:
 
(defun c:ppx ( / p )
(setq p (ssget '((0 . "INSERT") (-4 . "<OR") (2 . "S??A") (2 . "S??B") (-4 . "OR>"))))
(if (/= p nil)
(progn
(sssetfirst nil p)
(c:burst)
)
(progn
(princ "\n¡No más elementos!")(princ)
)
)
(princ "\nFinalizado.")(princ)
)
 
附加文件包含我打算使用此命令的几个块。
 
如果对其进行测试,您将看到命名为S12A和S12B的块被正确选择,但附件中包含的所有其他块都没有被正确选择。
 
所以我想知道是否有人可以帮我看看我是否遗漏了其他块上的任何内容,或者解释为什么过滤器没有考虑其他块,或者我是否做错了什么。
 
提前谢谢
测验图纸

Lee Mac 发表于 2022-7-5 18:38:46

图形中的块是动态的,因此,将自动创建新的匿名块定义,并使用一组不同的动态块参数值为每个块参照参照参照。
 
有多种方法可以在选择中包括适当的匿名块引用,您采用的方法可能取决于程序是完全自动的还是提示用户选择要处理的块引用。我在“获取匿名引用”函数的描述中描述了各种方法并提供了示例。
 
对于您的任务,我还建议使用LM:Burst函数(可能直接随选择集提供),因为该函数的执行速度远高于标准的Burst命令,并且还将排除不可见的属性。

Lee Mac 发表于 2022-7-5 18:43:01

对于您的特定任务,我调整了LM:getanonymousreferences函数以允许通配符参数,这意味着代码可以是:
我将很快更新我网站上的功能。

hei 发表于 2022-7-5 18:47:39

哇!谢谢!工作完美!
 
只是一个附带的问题:这些额外的块是否命名为像*U之类的东西?

Lee Mac 发表于 2022-7-5 18:51:22

 
太好了-不客气!
 
 
确实如此-您可以使用AutoCAD LIST命令查看块名。

DuanJinHui 发表于 2022-7-5 18:53:48

嗨,李

Command: (setq obj (vlax-ename->vla-object (car (entsel "\nSelect Block: "))))
Select Block: #<VLA-OBJECT IAcadBlockReference 0b68d8d4>

 
我用你的Dy块函数。
(LM:getvisibilityparametername obj)
我得到:开关符号
 
 
开关符号具有更高的可见性状态{开关类型1、开关类型2、开关类型3、开关类型4)
 
(setq blkvb (LM:getvisibilitystate obj))
 
我得到:“swith type2”
 
我想要得到VS“swith type2”中的所有实体,而不是Dy块中的所有实体。

Lee Mac 发表于 2022-7-5 18:57:29

 
为了确认,您希望仅获取块定义中的实体,这些实体在设置可见性状态“switch type2”时显示?

DuanJinHui 发表于 2022-7-5 19:02:11

 
是的,李。就是这样。

Lee Mac 发表于 2022-7-5 19:04:44

 
[列表]
[*]插入动态块的临时参考。
[*]将可见性状态参数设置为“switch type2”。
[*]检索临时引用的匿名块名。
[*]迭代匿名块的定义。
[/列表]

DuanJinHui 发表于 2022-7-5 19:09:44

 
谢谢李,你的意思是:每个实体都是匿名区块?
页: [1] 2
查看完整版本: ssget筛选器问题