woodman78 发表于 2022-7-6 14:00:24

重命名所有层

你好
 
我想使用rename命令为图形中的所有图层添加前缀。但是,如果我在命令行运行rename命令,它将不允许我输入*作为旧的层名称来选择所有层。它将与对话框一起显示。无论如何,由于这个原因,我想用rename命令创建一个lisp。
谢谢

Lee Mac 发表于 2022-7-6 14:15:50

你可以自己做
 

(defun c:test (/ wcm new pos)
(vl-load-com)
(setq wcm (getstring t "\nSpecify Old Name: "))
(setq new (getstring t "\nSpecify New Name: "))
(vlax-for lay (vla-get-layers
               (vla-get-ActiveDocument
                   (vlax-get-acad-object)))
   (setq Nme (vla-get-Name lay))
   (if (and (wcmatch Nme wcm) (/= "0" Nme))
   (if (setq pos (vl-string-position 42 new))
       (vla-put-Name lay
         (strcat
         (substr new 1 pos) Nme
             (substr new (+ 2 pos)))))))      
(princ))

woodman78 发表于 2022-7-6 14:23:30

我想让它更具体一些。我如何从用户和硬代码中获得控制,因为所有层都以“CCC\u OSMAP\u”作为前缀?

Lee Mac 发表于 2022-7-6 14:26:19

在这种情况下,用户对前缀没有选择权,这要短得多:
 
(定义c:测试(/pref)(vl负载com)(setq pref“CCC\U OSMAP”);;

Lee Mac 发表于 2022-7-6 14:39:21

我认为VL是继续这一步的方式。
 
AutoLISP替代方案有点不那么直观:
 
(定义c:测试(/pref tdef tObj)(setq pref“CCC\U OSMAP”);;

David Bethel 发表于 2022-7-6 14:47:28

需要注意的几件事:
[列表]
[*]外部参照图层
[*]层已具有前缀
[*]已存在且具有新名称的层
[*]李抓到的第0层
[*]层名称字符串长度(我想在某些地方仍然有限制)
无论如何我都能想到的-达武德

Lee Mac 发表于 2022-7-6 14:53:24

谢谢David,
 
我没有想到这一切!
 
我想是这样的:
 
(定义c:测试(/pref Nme)(vl load com)(setq pref“CCC\U OSMAP”);;

woodman78 发表于 2022-7-6 15:00:46

谢谢各位,
这应该不是太大的问题,因为我将在上面运行此操作的图形是限制在大约30个标准层的地图,但我认为它对于其他类型的图形可能很方便。
页: [1]
查看完整版本: 重命名所有层