dan113 发表于 2022-7-5 15:54:23

编辑的块标志

我有一个在块中绘制一些基本几何图形的例程,有时需要“手动”进行一些基本编辑。是否有方法检查/标记块是否已编辑?
 
我真的在努力避免使用反应堆。
 
我只需要一个可能的变化指标,作为检查提示。
 
我能想到的唯一方法是对照应该是什么来检查块内的几何体,但这在一个可能有数百个块的图形上需要一段时间。
 
如果这是唯一的方法,那么就这样吧,但我对想法持开放态度。。。。。。
 
使用Tapatalk从my Pixel XL发送

rlx 发表于 2022-7-5 16:04:05

也许数一数区块内的ENT数?

dan113 发表于 2022-7-5 16:08:31

ENT的数量很少只会改变线条的长度。这些块通常包含一个有时需要拉伸的“L形截面”轮廓,另一些则包含一个三角形。 
使用Tapatalk从my Pixel XL发送

rlx 发表于 2022-7-5 16:12:48

如果只有区块内的实体本身发生变化,这确实将是一个挑战:-(
 
 
在这种情况下,你必须将它与其他东西进行比较,对于许多盖帽来说,我想挑战只会更大。。。如果外界要改变,你可以简单地检查一下天平之类的东西。但话说回来,论坛上有很多聪明人(我希望如此)。
 
 
gr.Rlx
 
p、 那么我们在这里讨论的是动态块?否则,将更新特定名称的所有块?

dan113 发表于 2022-7-5 16:24:21

这些不是动态块,它们是非常基本的,通常大约10个元素。我认为测试区块内的总线路长度可能是一种选择。 
使用Tapatalk从my Pixel XL发送

Roy_043 发表于 2022-7-5 16:27:13

您可以将实体列表与equal函数进行比较。如果您过滤掉了ename,您应该能够将给定块定义中的所有实体与标准块定义(可能包含在ODBX数据库中)进行比较。

Grrr 发表于 2022-7-5 16:31:09

好主意,罗伊!
 
用代码示例对此进行详细说明:
 
(defun foo ( BlockName / e Lst )
(if (setq e (tblobjname "BLOCK" BlockName))
   (while (and (setq e (entnext e)) (/= "ENDBLK" (cdr (assoc 0 (entget e)))))
   (setq Lst (cons (vl-remove-if '(lambda (x) (eq 'ENAME (type (cdr x)))) (entget e)) Lst))
   )
)
Lst
); defun foo
 
然后,存储原始块中的全局变量,以便稍后进行比较(或只是将该列表复制/批处理到代码中):
(setq *OriginalBlockData* (foo "MyBlock"))
 
然后检查是否已修改:
(equal *OriginalBlockData* (foo "MyBlock") 1e-6)
 
 
注意:Altho(cdr(entget e))将删除潜在的-1组代码,elist中也可能有所有者的名称。

dan113 发表于 2022-7-5 16:42:24

这对我来说是一个新概念,我会试试看,谢谢你们的帮助
 
使用Tapatalk从my Pixel XL发送

Roy_043 发表于 2022-7-5 16:48:26

... 您还必须过滤掉句柄。

Grrr 发表于 2022-7-5 16:53:01

 
哦,对了!
页: [1] 2
查看完整版本: 编辑的块标志