Lt Dan's l 发表于 2022-7-6 10:43:10

带条件的选择

我想按惯例
ssget 34doors并执行此命令
ssget 36doors和该命令。
很多时候只有34或36个。很少在一张图中同时出现这两种情况,但不想在这个例程中计算出来。
 
我只是不知道该怎么设置。。。
 

(setq ss (ssget "_x" '((2 . "*door"))))
(cond ((= "34door" ss)
         (command ...
      )
      ((= "36door" ss)
         (command ...
      )
)

alanjt 发表于 2022-7-6 10:50:10

逐步遍历选择集索引并计算名称。

Tharwat 发表于 2022-7-6 10:56:16

为什么要选择。。。。。。调用命令?
这些门的名字是方块吗?
 
提供更多行动细节,以便清楚地了解情况
由成员提供。
 
塔瓦特

Lt Dan's l 发表于 2022-7-6 11:03:26

 
我在收到你回复的同时查到了这个
http://www.afralisp.net/autolisp/tutorials/selection-sets.php
 
非常感谢。

Tharwat 发表于 2022-7-6 11:08:34

给你一个开始,
(setq ss (ssget "_x" '((2 . "*door"))))
(if ss
(progn
   (setq i   0
         total 0
         n   (sslength ss)
   )
   (while (< i n)
   (setq e (entget (ssname ss i)))
   (setq str (cdr (assoc 0 e)))
   (setq i (1+ i))
))
(cond ((= "34door" str)(command .....))
   ((= "36door" str)(command .............))))
 
将它们添加到代码中,但不确定实体的类型。
 
塔瓦特

alanjt 发表于 2022-7-6 11:11:45

举手之劳如果你需要更多帮助,喊一声。 
要知道,如果您使用的是命令,它将只对当前布局中的对象有效,即使ssget“_X”将选择整个图形中的所有内容。小心,做一点额外的过滤*提示DXF 410*。

Lt Dan's l 发表于 2022-7-6 11:21:17

 
我已经打破了我的规则,到处蹦蹦跳跳。我现在正在回到正轨。我在看entmake/mod,我想知道如何修改现有的文本。我试图在afralisp上修改一个例程。net“chlayer”,但我没有成功。
 

(setq old (ssget "_x" '((1 . "blah*"))))
(setq new "hi")

 
这个程序对我非常有用,因为我做了很多客户修改
 
 
____
 
我去查一下,谢谢

alanjt 发表于 2022-7-6 11:24:38

您可以在ssget中将1添加到dxf过滤器中,但是,由于它区分大小写,您可以轻松跳过这些内容。您最好只选择文本,然后逐步完成。
 
例如(将文本替换为“PIZZA”替换为“BURGERS”)
 
(defun c:Test (/ ss)
(if (setq ss (ssget "_:L" '((0 . "TEXT"))))
   ((lambda (i / e s l)
      (while (setq e (ssname ss (setq i (1+ i))))
      (if (wcmatch (strcase (cdr (setq s (assoc 1 (setq l (entget e)))))) "PIZZA")
          (entmod (subst (cons 1 "BURGERS") s l))
      )
      )
    )
   -1
   )
)
(pricn)
)

Lt Dan's l 发表于 2022-7-6 11:28:04

 
谢谢我有很多要学的!

alanjt 发表于 2022-7-6 11:37:14

如果您使用注释性文本“date=”,您可能希望避免输入文本;这将导致巨大的文本对象。最好用entget提取字符串(用vla get textstring提取符号的bug),用vla put textstring放置字符串。
页: [1] 2
查看完整版本: 带条件的选择