harilalmn 发表于 2022-7-6 10:32:15

清理垃圾箱中的$0$Layers

大家好,
我有这么多的图纸,其中外部参照是“绑定”而不是“插入”。
为了寻找解决方案,我从网上得到了一个Lisp例程(多亏了发布它的人。但我不记得他的名字或我从中得到它的wesite),如下所示。问题是$0$layers没有被重命名,因为我有另一个同名的层。认为
我有一个层,底层平面图$0$a-ANNO-DIMS,必须重命名为a-ANNO-DIMS
由于图形具有图层a-ANNO-DIMS,因此不允许lisp对其进行重命名。我现在有了逻辑,但在lisp中我是零。
 
在重命名之前,必须检查层是否存在。
如果存在,则应将$0$层合并到标准层。(lisp例程中缺少此部分)
 
有人可以更改代码吗?这将是一个很大的帮助。。。
这是代码;
 
 
 
(defun c:RBP(/ActDoc Name NewName)
; 删除绑定前缀
; 重命名图层、块、标注样式、文字样式、用户坐标系和视图
;通过去掉绑定作为绑定前缀
; 示例Drawing1$0$Layer1->Layer1
 
(vl load com)
(defun RemoveBindPrefix(String/Pos LastPos)
 
(if(setq Pos(vl字符串搜索“$”字符串))
(程序
(setq LastPos Pos)
(while(setq Pos(vl string search“$”string(1+Pos)))
(setq LastPos Pos)
)
(substr字符串(+2 LastPos))
)
一串
)
)
;---------------------------------------------------------
(setq ActDoc(vla get ActiveDocument(vlax get Acad Object)))
(用于Obj的vlax(vla get Layers ActDoc)
(setq名称(vla get Name Obj))
(if(/=(setq NewName(RemoveBindPrefix Name))名称)
(如果(vl-catch-all-error-p(vl-catch all apply’vla put Name(列出Obj新名称)))
(提示(strcat“\n层:“Name”未重命名。”)
)
)
)
(用于Obj的vlax(vla get Blocks ActDoc)
(setq名称(vla get Name Obj))
(if(/=(setq NewName(RemoveBindPrefix Name))名称)
(if(vl-catch-all-error-p(vl catch-all apply’vla put Name(list Obj NewName)))
(提示(strcat“\n Block:”Name“未重命名”)
)
)
)
(用于Obj的vlax(vla get TextStyles ActDoc)
(setq名称(vla get Name Obj))
(if(/=(setq NewName(RemoveBindPrefix Name))名称)
(if(vl-catch-all-error-p(vl catch-all apply’vla put Name(list Obj NewName)))
(提示(strcat“\n文本样式:“Name”未重命名。”)
)
)
)
(用于Obj的vlax(vla get Views ActDoc)
(setq名称(vla get Name Obj))
(if(/=(setq NewName(RemoveBindPrefix Name))名称)
(if(vl-catch-all-error-p(vl catch-all apply’vla put Name(list Obj NewName)))
(提示(strcat“\n视图:“Name”未重命名。”)
)
)
)
(对象的vlax(vla get UserCoordinateSystems ActDoc)
(setq名称(vla get Name Obj))
(if(/=(setq NewName(RemoveBindPrefix Name))名称)
(if(vl-catch-all-error-p(vl catch-all apply’vla put Name(list Obj NewName)))
(提示(strcat“\n UCS:”Name“未重命名”)
)
)
)
(用于Obj的vlax(vla get DimStyles ActDoc)
(setq名称(vla get Name Obj))
(if(/=(setq NewName(RemoveBindPrefix Name))名称)
(if(vl-catch-all-error-p(vl catch-all apply’vla put Name(list Obj NewName)))
(提示(strcat“\n维度样式:“Name”未重命名。”)
)
)
)
(普林斯)
)

ReMark 发表于 2022-7-6 10:55:48

也许你指的是CAB2k编写的lisp例程,它是AUGI网站上这篇文章#10的一部分。
 
http://forums.augi.com/showthread.php?t=31759

harilalmn 发表于 2022-7-6 11:14:29

是的,我已经经历过了。
但这并不是我真正想要的。。。。!!
该例程首先向所有外部参照层(如X1、X2、X3等)添加前缀。。。。
它不会向下合并层。
在我在这里发布的代码中,它做得很好,但我只是希望它能够合并层、文本样式、维度样式等。。。达到标准。
有人可以编辑代码来实现它吗?

alanjt 发表于 2022-7-6 11:44:21

这可能会提供一些见解。
http://www.cadtutor.net/forum/showthread.php?43156-层太多-需要合并它们&突出显示=laymrg
页: [1]
查看完整版本: 清理垃圾箱中的$0$Layers