aws 发表于 2022-12-19 22:18:31

处理后的选择集如何再次利用?


[*](defun c:FF()
[*](setq ss (ssget))
[*](command "overkill" ss "" "")
[*](command "pedit" "m" ss "" "j" 0.1 "")
[*](princ)
[*])
[*]这个代码是有问题的,向各位老师请教一下,这个选择集被处理过了,然后我还想继续利用,该如何操作?
[*]难道是先从ss里面挨个找出每一个单一对象,然后ss被处理后,再经过对比,检查出剩下的是哪一些,再形成一个选择集吗

自贡黄明儒 发表于 2022-12-20 07:17:35

overkill会合并删除一些对象,是否有新对象产生,我没有试过,你可以测试一下。
如果没有新对象产生,后面一句(command "pedit" "m"。。。应该没有问题,pedit与"PEDITACCEPT"有关,倒是要关注的问题。

aws 发表于 2022-12-20 08:40:33

自贡黄明儒 发表于 2022-12-20 07:17
overkill会合并删除一些对象,是否有新对象产生,我没有试过,你可以测试一下。
如果没有新对象产生,后面 ...

这个不是重点呀,重点是这个选择集的问题,我也可以先炸开,再删除重复项,再合并多段线,三波操作。
就是说,我对同一个选择集要进行多次的操作,但是每次操作都会对选择集产生影响,要么减少一些对象,要么增加对象,导致处理后的选择集与刚开始定义的选择集,是不一样的。可能也就第一波操作是正常的,第二次或者后面都会不正常

kucha007 发表于 2022-12-20 09:56:58

指定两个点,用框选的形式创建选择集。每次处理后再用这两个点框选获取新的选择集?

飞雪神光 发表于 2022-12-20 10:48:45

命令开始entlast标记图元pedit后 entnext收集图元建选择集

aws 发表于 2022-12-20 11:08:16

kucha007 发表于 2022-12-20 09:56
指定两个点,用框选的形式创建选择集。每次处理后再用这两个点框选获取新的选择集?

感谢回复,这个算一种方法,一种思路,额外加上一些过滤条件,也能准确的选取到自己想要的对象

kucha007 发表于 2022-12-20 11:35:19

未完全测试所有意外情况:(defun c:TT (/ p1 p2 ss)
(if
    (and
      (setq p1 (getpoint "\n→指定第一个角点: "))
      (progn
      (initget 32) ;使用虚线框
      (setq p2 (getcorner p1 "\n→指定第二角点: "))
      )
    )
    (progn
      (command "._rectang" p1 p2)
      (entdel (entlast)) ;删除矩形
      (setq ss (ssget "_C" P1 P2)) ;创建选择集
      (command "overkill" ss "" "")
      (setq ss1 (ssget "_C" P1 P2)) ;创建选择集
      (command "pedit" "m" ss1 "" "j" 0.1 "")
    )
)
)

guosheyang 发表于 2022-12-20 15:40:39

选择集在变的时候一般转成图元名列表来处理不会出问题

llsheng_73 发表于 2022-12-21 23:02:18

或者通过ssnamex找出原来的选择集是怎么得到的,然后按搞选择集的时候的坐标范围重新搞选择集,不过这个选择集的坐标范围需要认真研究ssnamex的返回值才能搞定

ziyouwzb 发表于 2023-7-18 08:41:05

可以参照下面代码
(setq ss (ssget))
(setq ss1 (ssget "p" '((0 . "CIRCLE"))))
(command "select" ss "")
(setq ss2 (ssget "p" '((0 . "ARC"))))
(command "select" ss "")
(setq ss3 (ssget "p" '((0 . "INSERT"))))
页: [1]
查看完整版本: 处理后的选择集如何再次利用?