lamensterms 发表于 2022-7-5 20:11:15

ENTSEL循环选择

大家好,
 
我甚至不确定我是否以正确的方式来做这件事,但让我试着解释一下我试图实现什么,以及我试图实现它的方法。
 
我有一个ProSteel命令(PS\u CREATE\u SPEZPART),我想逐个将选择集的每个元素传递给。据我所知,这个ProSteel命令将接受ENTSEL形式的选择,但不是单个项目选择集。
 
所以我想创建一个选择集,并使用REPEAT&SSNAME函数循环遍历它。
 
(defun c:tmi ()
(prompt "\nSelect item:")
(setq ss (ssget))
(setq num (sslength ss))
(setq con 0)
(repeat num
(setq ent3A (ssname ss con))
(command "PS_CREATE_SPEZPART" ent3A nil)
(setq con (1+ con))
)
)
 
... 这不起作用。
 
我想我正在挣扎的是。。。SSNAME返回实体的名称,而不是选择该实体。这是正确的还是我遗漏了什么?
 
所以我的问题是,有没有可能像ENTSEL一样将每个元素传递给这个ProSteel命令?
 
非常感谢您的帮助。

Lee Mac 发表于 2022-7-5 20:20:14

由于entsel返回两个项目(选定实体和光标选取框的中心)的列表,请尝试以下操作:
(defun c:tmi ( / num sel )
   (prompt "\nSelect item: ")
   (if (setq sel (ssget))
       (repeat (setq num (sslength sel))
         (command "_.PS_CREATE_SPEZPART"
               (list (ssname sel (setq num (1- num))) '(0 0 0))
         )
       )
   )
   (princ)
)
 
根据命令的操作方式,随实体提供的点可能需要位于对象上或附近。

BIGAL 发表于 2022-7-5 20:32:28

检查你的车(entsel)

BIGAL 发表于 2022-7-5 20:37:29

我喂狗的时候李偷偷溜了进来

lamensterms 发表于 2022-7-5 20:48:03

嗨,李和比格尔,
 
非常感谢你的帮助。你又一次做到了。
 
李-你的例行工作很好,我已经测试了一些类型和组合的元素,它已经成功了每一次。不过,为了让我继续深造,你能解释一下“1-num”背后的逻辑/哲学吗。我知道它被用来处理选择集(SSNAME的索引)。我只是无法理解“1-”。。。它是否与“num-1”相同(但语法正确)?
 
哈哈,李肯定很快,谢谢你的建议。

Commandobill 发表于 2022-7-5 20:48:50

实际上不是李,他建立了一个Lisp程序的程序来回答问题。

Lee Mac 发表于 2022-7-5 21:00:48

 
很高兴听到!谢谢你,lamensterms
 
 
确实如此-
 
1和1+函数只是方便快捷的函数,只需将给定数值增加或减少一:
(1+ x) is the same as (+ x 1)
因此,我的代码在选择集上迭代,从第(sslength-1)位的实体开始,并将索引减少到零(因为选择集索引是基于零的)。有关此主题的更多信息,请参阅我的有关感兴趣的选择集处理的教程。
 
 
:lol:我能说什么呢,LISP最初是为了开发A.I。

lamensterms 发表于 2022-7-5 21:10:10

太棒了,谢谢你花时间解释,李。

Lee Mac 发表于 2022-7-5 21:18:04

 
不客气,拉门斯特姆
如果您还有其他问题,请随时提问。
 
页: [1]
查看完整版本: ENTSEL循环选择