MSasu 发表于 2022-7-6 07:27:27

我想这就是你想要实现的(对不起,我没有标记更改):
(defun c:test ( / ext sel sss )
   (while (null ext)
       (setvar 'errno 0)
       (if sss (initget "Undo"))
       (setq sel (entsel (strcat "\nPick Object to Erase" (if sss " : " ": "))))
       (cond
         (   (= 7 (getvar 'errno))
               (princ "\nMissed, try again.")
         )
         (   (= "Undo" sel)
               (if (> (sslength sss) 0)
                (repeat (sslength sss)
               (entdel (ssname sss 0))
               (ssdel (ssname sss 0) sss)
                )
               )
         )
         (   (= 'ename (type (car sel)))
      (setq sss (ssget "x" (list (cons 8 (cdr (assoc 8 (entget (car sel))))))))
      (command "erase" sss "")
         )
         (   (setq ext t)   )
       )
   )
   (princ)
)

gS7 发表于 2022-7-6 07:30:12

是的,你说的没错,Mircea代码现在正在工作,但我还有一个问题,那就是它只会用一个选择集撤消,
如果我选择了多个不工作的。。

MSasu 发表于 2022-7-6 07:33:10

这是因为sss变量在每次选择操作时被重置-尝试将以前的内容存储到列表中,并将其解析为撤消。

gS7 发表于 2022-7-6 07:35:32

 
请再次帮助我更新您的代码

MSasu 发表于 2022-7-6 07:42:10

这是我的建议:
(defun c:test ( / ext sel sss listOfSelSets )
(while (null ext)
(setvar 'errno 0)
(if sss (initget "Undo"))
(setq sel (entsel (strcat "\nPick Object to Erase" (if sss " : " ": "))))
(cond
((= 7 (getvar 'errno))
   (princ "\nMissed, try again.")
)
((= "Undo" sel)
   (if listOfSelSets
    (progn
   (setq sss         (car listOfSelSets)
         listOfSelSets (cdr listOfSelSets))
   (repeat (sslength sss)
      (entdel (ssname sss 0))
      (ssdel (ssname sss 0) sss)
   )
    )
    (prompt "\nNothing to undo...")
   )
)
((= 'ename (type (car sel)))
   (setq sss (ssget "x" (list (cons 8 (cdr (assoc 8 (entget (car sel))))))))
   (command "erase" sss "")
   (setq listOfSelSets (cons sss
                           listOfSelSets))
)
((setq ext t))
)
)
(princ)
)

gS7 发表于 2022-7-6 07:44:14

哇!非常感谢米尔恰,现在我明白了
 
再次感谢你的帮助
 
当做
甘尼什·谢蒂

MSasu 发表于 2022-7-6 07:49:16

完全欢迎你,甘尼什!
页: 1 [2]
查看完整版本: 撤消命令问题