明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1790|回复: 8

[已解答] 批量修改图层名称遇到的问题

[复制链接]
发表于 2016-3-1 18:34:30 | 显示全部楼层 |阅读模式
(defun c:GTC ()
(command "rename" "layer" "梁虚线" "BEAM")
(command "rename" "layer" "梁" "BEAM_CON")
(command "rename" "layer" "砼墙" "WALL")
(command "rename" "layer" "柱" "COLU")
(command "rename" "layer" "洞口边线" "HOLE")
(command "rename" "layer" "悬挑板" "LINE")


各位大侠,上面的批量修改图层名称运行,如果找不到某一个图层(如图中无“柱”图层),则后面的(如“洞口边线”“悬挑板”)就不执行了。如何解决啊?
发表于 2016-3-2 12:17:18 | 显示全部楼层
没有图纸可以测试,简单写了一个

  1. (Defun _RenameBlockLayer (ValueList / BN DONE NEW OLD)
  2.   (vlax-for blk        (vla-get-Blocks
  3.                   (vla-get-ActiveDocument (vlax-get-acad-object))
  4.                 )
  5.     (setq bn (vla-get-Effectivename blk))
  6.     (if        (null (member bn done))
  7.       (progn
  8.         (setq done (cons bn done))
  9.         (vlax-for obj blk
  10.           (setq old (vla-get-layer obj))
  11.           (if (setq new (cdr (assoc old ValueList)))
  12.             (vla-put-layer obj new)
  13.           )
  14.         )
  15.       )
  16.     )
  17.   )
  18. )
  19. (Defun _SuperLayerRename (data / BBB NEW OLD SS)
  20.   (foreach abc data
  21.     (setq old (car abc)
  22.           new (cadr abc)
  23.     )
  24.     (cond ((and        (tblsearch "Layer" old)
  25.                 (null (tblsearch "Layer" new))
  26.            )
  27.            (command "_.Rename" "Layer" old new)
  28.           )
  29.           ((and        (tblsearch "Layer" old)
  30.                 (tblsearch "Layer" new)
  31.            )
  32.            (setq bbb (cons (cons old new) bbb))
  33.            (if (setq ss (ssget "_x" (list (cons 8 old))))
  34.              (command "_.change" ss "" "_p" "la" new "")
  35.            )
  36.           )
  37.     )
  38.   )
  39.   (if bbb
  40.     (progn
  41.       (_RenameBlockLayer bbb)
  42.       (command "_.Purge" "Layer" "*" "n")
  43.     )
  44.   )
  45. )

  46. 用法:
  47.   (_SuperLayerRename
  48.     '(("梁虚线" "BEAM")
  49.       ("梁" "BEAM_CON")
  50.       ("砼墙" "WALL")
  51.       ("柱" "COLU")
  52.       ("洞口边线" "HOLE")
  53.       ("悬挑板" "LINE")
  54.      )
  55.   )
回复 支持 2 反对 0

使用道具 举报

发表于 2016-3-1 19:25:16 | 显示全部楼层
加个判断(if (tblsearch "layer" "XXX")(command "rename" "layer" "XXX" "YYY"))
 楼主| 发表于 2016-3-2 08:59:06 | 显示全部楼层
本帖最后由 鼠标牌水泥 于 2016-3-2 09:17 编辑
kozmosovia 发表于 2016-3-1 19:25
加个判断(if (tblsearch "layer" "XXX")(command "rename" "layer" "XXX" "YYY"))

如果原图中已经有YYY图层,则提示“图层YYY已存在,无效”,怎么解决啊?
发表于 2016-3-2 09:45:17 | 显示全部楼层

  1. (if (and (tblsearch "layer" "XXX")
  2. (null (tblsearch "layer" "YYY"))
  3. (command "rename" "layer" "XXX" "YYY")
  4. )
 楼主| 发表于 2016-3-2 10:38:31 | 显示全部楼层
kozmosovia 发表于 2016-3-2 09:45

还是不行哦,我的意思是:1.原图如果已经有"YYY"图层,我现在拷贝一个新图进去后,把新图XXX改为YYY图层;2.如果原图没有“YYY”图层,则把新图XXX改为YYY图层,同时满足上面1和2.
发表于 2016-3-2 11:10:36 | 显示全部楼层
你这个要完全实现,必须遍历所有图块定义,块内实体使用了需要修改的图层时,修改实体图层定义。
图形比较大时,这种遍历需要的时间会很长。
 楼主| 发表于 2016-3-2 11:53:33 | 显示全部楼层
kozmosovia 发表于 2016-3-2 11:10
你这个要完全实现,必须遍历所有图块定义,块内实体使用了需要修改的图层时,修改实体图层定义。
图形比较 ...

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 13:38 , Processed in 0.180918 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表