broncos15 发表于 2022-7-5 17:43:35

清除LISP例程

所以我有一个我写的LISP例程,它将清除图形中的所有样式,然后清除我能够清除的所有其他样式,然后将wblock出图形并保存在现有图形上。我想添加的最后一步是去掉wblock之后仍然保留的层,但这些层上没有任何对象。我现在知道,如果我使用laymrg命令,我可以通过将所有未使用的层与层0合并来轻松完成这一点。我的问题是,我想不出最有效的方法来确定一个层是否为“空”。我将只使用ssget并遍历图形中的每个层,如果选择集为null,则使用层0来laymrg。但这看起来效率很低,所以我想知道是否有人对如何做到这一点有任何其他建议。

David Bethel 发表于 2022-7-5 17:57:37

某些层可能很难清除
 
[列表]
[*]仅在视口(扩展数据)VPLAYER设置中引用的空层
[*]使用Sequend实体创建的空
[*]参考块中的空层
[/列表]
 
多年来,欧文一直保持着稳健的写作习惯:
 
https://www.manusoft.com/software/superpurge.html
 
这可能有用。
 
-大卫

rkmcswain 发表于 2022-7-5 18:00:30

虽然《大卫》提出了一些好的观点,但我认为《broncos15》并不关心这些场景。LayMrg会很好地处理这些案件。
 
那么回到[找出一个层是否“空”的最有效方法]。。。。。。其中“空”表示没有正常的几何形状。
 
尽管这是为了。NET代码、文章和评论可能会给你一些想法:
http://through-the-interface.typepad.com/through_the_interface/2008/05/finding-all-the.html

BIGAL 发表于 2022-7-5 18:12:31

Civ3D样式存在问题,即使未使用,也会链接到图层。你在吹扫之前做吹扫吗?
 
2019年更好的选择?将定义一个要使用的层,但在实际用于CIV3D之前不存在。

broncos15 发表于 2022-7-5 18:19:18

rkmcswain,谢谢你的文章,这非常有帮助!我将看看如何将这些概念应用于LISP。比加尔,是的,我在吹扫之前做吹扫。如何定义要在模板文件中使用但在实际使用之前不存在的图层?我正在运行2015,在这个版本中可能吗?这似乎是一个更好的实践,适用于模板文件,它肯定会有助于消除这样一个“深度”清除的需要。

broncos15 发表于 2022-7-5 18:23:59

我意识到我需要考虑的另一件事是图层是在外部参照中还是在图形中。这比我最初想象的要复杂一点,哈哈。

marko_ribar 发表于 2022-7-5 18:34:19

外部参照图层不应该影响DWG中的正常图层。。。就在最近,我编写了lisp来检查DWG中的嵌套层。。。您可以将例程更改为遍历所有(ai_表“LAYER”4)层列表,如果修改后的例程作为子函数返回nil,您可以将该层设置为LAYMRG,层为0。。。Lisp可在此处找到:
http://www.cadtutor.net/forum/showthread.php?96685-嵌套层位于其中块和p=#6
 
[编辑:(ai_table“LAYER”4)应提供不包括外部参照层的正确层列表…请查看此处以了解更多信息:
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/ai-table-parameters/m-p/1547150/highlight/true#M203243 ]
 
HTH,M.R。

broncos15 发表于 2022-7-5 18:40:09

谢谢Marko,这是一个很好的起点!此外,感谢链接,这对于了解ai_表的参数都有什么作用非常有用。

BIGAL 发表于 2022-7-5 18:47:43

Broncos15我们绕过了一个proprietry包中的层exist,但它使用了自定义,所以当你绘制一个对象时,它进入了一个为该类型对象设置的文本文件中定义的层。绘制时添加了层。
页: [1]
查看完整版本: 清除LISP例程