Trmsa 发表于 2022-7-5 15:53:44

从e中删除删除的对象

我有选择集,其中的一些对象被删除。如何从ss中删除它们?
我试着自己做,但我的代码不起作用。
我的代码:
 
(setq n 0)
(setq ssx ss)
(setq x (sslength ssx))
(repeat x
   (if (entget(ssname ssx n))
                        (princ n)
                        (progn
                        (setq en (ssname ssx n))
                        (ssdel en ss)
                        )
)
(setq n (1+ n)))

Tharwat 发表于 2022-7-5 16:00:08

这样地:

(repeat (setq i (sslength ssx))
(or (entget (setq ent (ssname ssx (setq i (1- i)))))
   (ssdel ent ssx)
   )
)

Roy_043 发表于 2022-7-5 16:01:08

@塔尔瓦特:
使用vlax-erased-p检查实体是否被擦除速度更快。该函数还接受ENAME。
 
顺便说一句:
将包含已擦除实体的选择集传递给命令不会导致任何问题(至少在BricsCAD中是这样)。

ronjonp 发表于 2022-7-5 16:04:18

速度不够快,无法在IMO中引入vlax函数。
约5000个selset已全部擦除
在拥有约22000件物品的selset上更快地进入长椅:

Trmsa 发表于 2022-7-5 16:08:37

 
效果很好!谢谢

Tharwat 发表于 2022-7-5 16:11:10

我认为DXF比将对象转换为vla对象更快,尽管vlax-erased-p函数在我这方面比零抛出以下错误,这似乎很奇怪。
 
 
不客气。

Roy_043 发表于 2022-7-5 16:14:29

@罗恩琼普:
您测试了一个独特的案例。请使用已删除10%实体的选择集重试。您会发现,为未擦除的实体构建实体列表相对较慢。
 
@塔尔瓦特:
如前所述:vlax-erased-p也接受ENAME。因此无需转换为vla对象。

Tharwat 发表于 2022-7-5 16:17:30

 
谢谢Roy,老实说,我不知道vlax-erased-p函数可以与实体名一起使用,所以我刚刚试用过,它也可以使用。

Grrr 发表于 2022-7-5 16:20:00

如果在遍历SS时删除一个实体,这不会弄乱它内部的ename索引吗?

Tharwat 发表于 2022-7-5 16:24:56

 
也就是说,如果您在选择一个选择集之后立即迭代一个选择集,但如果用户有两个或多个选择集,则可能是其中一个SS中涉及的删除,迫使用户从特定SS中扣除已擦除的对象。只是一个猜测。
页: [1] 2
查看完整版本: 从e中删除删除的对象