CADkitt 发表于 2022-7-6 07:37:06

过度杀戮所有人,包括区块?

是否有可能对包括块内部在内的整个图纸进行过度修改?
过度杀戮现在也会杀死动态块,我想这将是一个问题。

mikitari 发表于 2022-7-6 07:51:12

尊敬的各位:,
我看卡德基特提了个好问题。我现在有这个问题,在cad崩溃后从bak恢复的图形,我注意到块内的所有线都是重复的。
有人解决了这个问题吗?也许有人可以尝试在所有块中使用OVERKILL编写lisp。如果它不可能处理参数块,那么让它们保持不变,以某种方式忽略它们,但剩下的简单块(包括嵌套)可能会被过度杀死。这将是清理文件的一个快速步骤。

Lee Mac 发表于 2022-7-6 07:57:35

下面是一个非常简单的程序,可以完全从图形中删除重复和零长度的线:
 
[颜色=绿色];;Line Kill-Lee Mac;;从图形中删除重复或零长度的线,并;;也来自块内和嵌套块。(defunc:linekill(/dup lck lst p1 p2 tol zln)(setqtol 1e-8;;公差zln 0 dup 0)(vlax forlay(vla get layers(LM:acdoc))(if(==lay()(progn(setqlck(conslay lck)(vla put locklay:vlax false))(vla get blocks(LM:acdoc))(if(=[:vlax false(vla get isxrefblk))(vlax forobj blk(cond(/=“AcDbLine”(vla get objectnameobj))(等于0.0(distance(setqp1(vlax getobj'startpoint))(setqp2(vlax getobj'endpoint)))tol)(setqzln(1+/color]zln)(vla deleteobj)(vl some(function(lambda(x)(和(equal(cadrx)p2 tol)))lst(setqdup(1+/dup))(vla deleteobj))((setqlst(cons(listp1 p2)lst)))(setqlstnil)(foreach层lck(vla put lock层:vlax true)(vla regen(LM acdoc color=BLUE]acallviews)(if(

MSasu 发表于 2022-7-6 08:05:58

在块编辑器中,是否尝试使用BEDIT命令访问块定义并调用next OVERKILL?似乎有效。当然,这对于有限数量的块是可行的。
 
此外,由于问题发生在崩溃之后,请尝试运行AUDIT命令,该命令可能会修复一些错误。

mikitari 发表于 2022-7-6 08:12:49

谢谢大家!反应很快
 
李,谢谢你的密码!我会试试并给你反馈。但是,在我这样做之前,请确认此例程如何处理动态块内的参数?它是否安全并保持动作?第二,虽然我可以从代码的前三行中读取它,但它会深入到嵌套块吗?好吧,我会在备用图纸上试驾。
 
MSasu,也谢谢你的关注。该图形是通过recover命令恢复的,并被多次清除和审核,遗憾的是,这些命令不处理重复的图形。我可以在单个块中手动执行过度杀戮,但正如您所说,在这里,我必须逐个处理多个块,并且它们是嵌套的。

Lee Mac 发表于 2022-7-6 08:19:16

 
据我所知,该程序在处理动态块时不应引起任何问题,但当然,所有代码始终按“原样”提供,应谨慎使用。我在上面发布的程序将从所有布局以及所有标准和动态块(不包括外部参照)中删除零长度和重复线,嵌套到任何深度。

mikitari 发表于 2022-7-6 08:22:50

嘿,最后一件事:
在此例程中,定义重复行的标准是什么?Overkill提供选择性标准,如:图层、颜色、线型、打印样式等。
例如:在一个图形中,我们有两条相似的重叠线,但在不同的图层上,用于以不同比例表示图形。希望这两个不会被认为是重复的?
Overkill也适用于多段线,这个例程是否也会清理这些多段线?
我已经在恢复文件的副本中试用了该例程,它可以删除大量的零长度和重复行!那太好了,但要明确的是,你能描述一下选择的标准吗?

Lee Mac 发表于 2022-7-6 08:34:28

 
程序将重复线定义为一条线,其起点和终点(按顺序)等于图形或块中另一条线的起点和终点,达到指定的公差,而与对象特性(如图层等)无关。
 
这个程序没有过度杀戮,也没有使用那个命令。

mikitari 发表于 2022-7-6 08:40:35

我已经检查了我为此绘制的示例图形中的linekill,其中包含三个不同层上相同的线重叠。它会删除所有重复项,无论是哪一层。因此,对于我们更复杂、多用途的绘图来说,这可能是一个问题。实际上,我只需要删除真正的重复,直线,多段线,圆弧等。当它删除所有类似的线,无论层,如何知道它最终将保留哪个层?
 
李,你想尝试改进这段代码以达到我描述的目标吗?或者已经有其他lisp可以在块和嵌套块内完成这项工作了吗?
 
附言:现在的linekill对我们学院的办公室很有用,他说这在他们的绘图标准方面做得很好-D所以这也是一个巨大的贡献!非常感谢。
页: [1]
查看完整版本: 过度杀戮所有人,包括区块?