vladthedog 发表于 2022-7-6 14:58:53

反向选择

我正在使用lisp,我需要反转用户选择的内容。这意味着,如果文件有A-Z,并且用户选择了A和Z,代码将取消选择A和Z,并选择B-Y。谢谢。

Lee Mac 发表于 2022-7-6 15:10:02

我们在谈论选择集吗?

vladthedog 发表于 2022-7-6 15:15:37

你把我弄丢了。
 
让我解释一下我将使用它做什么:我的意思是,在模型空间中,在一个有很多东西的图形上工作,我希望能够选择一件我需要的东西,让它反转选择并删除所有我不需要的东西。我只是试着练习我的lisp创建过程,所以我问了一个最小帮助类型的问题。抱歉给你带来了困惑。

Lee Mac 发表于 2022-7-6 15:23:05

没问题,我想你可能在说一个选择集
 
谢谢你澄清
 

Lee Mac 发表于 2022-7-6 15:29:57

我有这个,但它似乎只适用于第一次使用。。。不知道为什么?
 

(defun c:test (/ ss i eLst invss)
(setq ss (ssget) i (sslength ss)
   eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
   invss (ssget "X" (list (cons 410 (getvar "CTAB")))))
(while (not (minusp (setq i (1- i))))
   (if (member (cdar (entget (ssname invss i))) eLst)
   (ssdel (ssname invss i) invss)))
(sssetfirst nil invss)
(princ))

David Bethel 发表于 2022-7-6 15:33:49

很危险,但给你!
 
(defun c:danger (/ ss)
(while (not ss)
      (princ "\nSelect Entities To Save..."))
      (setq ss (ssget))
(command "_.ERASE" "_All" "_Remove" ss "")
(prin1))
-大卫

CAB 发表于 2022-7-6 15:43:33

这是一个子例程。
;;CAB 03.05.09
;; Subtract ss2 from ss1 & return a selection set
;;ss1 & ss2 must be valid selection sets
(defun ssSubtract (ss1 ss2 / ss3 idx ent)
(setq ss3 ss1
       idx (sslength ss2)
)
(while (> (setq idx (1- idx)) -1)
   (setq ent (ssname ss2 idx))
   (if (ssmemb ent ss3) (ssdel ent ss3))
)
ss3
)

Lee Mac 发表于 2022-7-6 15:48:54

啊!ssmemb!完全忘记了那个函数!:哎呀:

vladthedog 发表于 2022-7-6 15:57:16

谢谢大家。我还没有机会测试你们提出的各种代码,但我应该可以去。大卫,我明白为什么你会说这很危险,但这是为了编程我们的数控系统。原始文件被锁定了,所以他们无论如何都无法保存,他们所做的就是删除不需要的东西,并将其放在表格图纸上。

ABuckingham 发表于 2022-7-6 16:00:19

任何时候你在没有验证的情况下批量删除对象都被认为是危险的。
页: [1]
查看完整版本: 反向选择