找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1150|回复: 13

[求助]:跪求成批改图层名称的工具,

[复制链接]
发表于 2006-8-24 10:43:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一百多个图层,我要每个前面加上一个前缀(专业名称),差点没疯掉.....前缀每个都是相同的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-24 16:27:13 | 显示全部楼层
不合用自己改改,爱心币是要留下滴:D
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-24 21:46:55 | 显示全部楼层
二楼能说说你的方法吗?我下载不了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-25 10:25:20 | 显示全部楼层
再试:P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-25 18:01:05 | 显示全部楼层
我没有那么多的爱心币,太可惜了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-25 19:31:44 | 显示全部楼层
感谢版主.以下是修改过的源码,未经严格测试,慎用:D;字符大小写敏感

  1. ;; rnl(rename layers).lsp
  2. ;; Copyright (C) 2006 LSoft
  3. ;; 声明: 1.未经严格测试, 作者不对此程序的功能/稳定性/安全性等做任何保证,
  4. ;;         亦不对由于使用此程序所造成的任何损失负责.
  5. ;;       2.作者否认有关于此程序的任何隐含的声明或保证.
  6. ;;       3.任何人可免费拷贝/使用/修改本程序而不须作者授权, 但须保留此声明.
  7. ;;       4.未经作者授权, 不得将此程序用于此声明中未明示的任何用途.

  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9. ;;      filename: rnl(rename layers).lsp
  10. ;;        author: psyche
  11. ;;            qq: 411453804
  12. ;;          date: 2006/08/24
  13. ;;      function:   modtblname: modify symbol table records' name
  14. ;;                  modlyrname: modify layers' name
  15. ;;                CheckKeyword: check string for key word
  16. ;;                ModifyString: modify string
  17. ;;         command:   RNL: rename layers
  18. ;;                    RNS: rename symbol table records such as block, layer, et. al
  19. ;;                RNLEX: rename layers EX
  20. ;;                RNSEX: rename symbol table records EX
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  22. ; 函数: 修改符号表记录名, 调用rename命令
  23. ;       symbol: 符号表类型
  24. ;                块(Block)
  25. ;                标注样式(Dimstyle)
  26. ;                图层(LAyer)
  27. ;                线型(LType)
  28. ;                文字样式(Style)
  29. ;                UCS(Ucs)
  30. ;                视图(VIew)
  31. ;                视口(VPort))
  32. (defun modtblname(symbol oldname newname)
  33.   (command "-rename" symbol oldname newname)
  34.   )
  35. ; 函数: 修改图层名
  36. (defun modlyrname(oldname newname)
  37.   (setq lyr (tblobjname "layer" oldname))
  38.   (setq data (entget lyr))
  39.   (setq data (subst (cons 2 newname) (assoc 2 data) data))
  40.   (entmod data)
  41.   )
  42. ; 函数: 检索关键字 [psyche 2006/08/27]
  43. (defun CheckKeyword(key string pos)
  44.   (setq keylen (strlen key))
  45.   (setq stringlen (strlen string))
  46.   (setq startpos 0)
  47.   (if (= pos "Tail") (setq startpos (- stringlen keylen)))
  48.   (setq index (vl-string-search key string startpos))
  49.   (cond
  50.     ( (and (= index 0) (= pos "Head")) 0 )
  51.     ( (and (= index (- stringlen keylen)) (= pos "Tail")) index)
  52.     ( (and index (= pos "Any")) index )
  53.     ( T nil )
  54.     )
  55.   )
  56. ; 函数: 修改字符串 [psyche 2006/08/27]
  57. (defun ModifyString(oldstr key pos modstr mode)
  58.   (setq index (CheckKeyword key oldstr pos))
  59.   (if index
  60.     (cond
  61.       ( (= mode  "PRefix") (strcat modstr oldstr) )
  62.       ( (= mode "POstfix") (strcat oldstr modstr) )
  63.       ( (= mode "Replace") (vl-string-subst modstr key oldstr index) )
  64.       ( T nil)
  65.       )
  66.     )
  67.   )
  68. ; 命令: 修改所有图层名
  69. (defun C:RNL()
  70.   (setq prefix  (getstring T "\n输入前缀: "))
  71.   (setq postfix (getstring T "\n输入后缀: "))
  72.   (if (and (null prefix) (null postfix))
  73.     (progn
  74.       (princ "*无任何可操作的修改*")
  75.       (exit)
  76.       )
  77.     )
  78.   
  79.   (setq lyr0 (tblnext "layer" T))
  80.   (while (setq lyr  (tblnext "layer"))
  81.     (setq oldname (cdr (assoc 2 lyr)))
  82.     (setq newname (strcat prefix oldname postfix))
  83.     (modlyrname oldname newname)
  84.     )
  85.   
  86.   (gc)
  87.   (princ)
  88.   )
  89. ; 命令: 修改所有指定类型的符号表记录名
  90. (defun C:RNS()
  91.   (initget "Block Dimstyle LAyer LType Style Ucs VIew VPort")
  92.   (setq symbol (getkword "\n输入要重命名的对象类型 [块(B)/标注样式(D)/图层(LA)/线型(LT)/文字样式(S)/UCS(U)/视图(VI)/视口

  93. (VP)]: "))
  94.   (if (null symbol)
  95.     (exit)
  96.     )

  97.   (setq prefix  (getstring T "\n输入前缀: "))
  98.   (setq postfix (getstring T "\n输入后缀: "))
  99.   (if (and (null prefix) (null postfix))
  100.     (progn
  101.       (princ "*无任何可操作的修改*")
  102.       (exit)
  103.       )
  104.     )

  105.   (setq oce (getvar "cmdecho"))
  106.   (setvar "cmdecho" 0)
  107.   (command "undo" "begin")

  108.   (setq tbl (tblnext symbol T))
  109.   ;(setq tbl (tblnext symbol))
  110.   (while tbl
  111.     (setq oldname (cdr (assoc 2 tbl)))
  112.     (setq newname (strcat prefix oldname postfix))
  113.     (vl-catch-all-apply 'modtblname (list symbol oldname newname))
  114.     (setq tbl (tblnext symbol))
  115.     )

  116.   (command "undo" "end")
  117.   (setvar "cmdecho" oce)

  118.   (gc)
  119.   (princ)
  120.   )
  121. ; 命令: RNL扩展 [psyche 2006/08/27]
  122. (defun C:RNLEX()
  123.   (initget 0)
  124.   (setq key (getstring T "\n输入要修改图层的名称关键字: "))
  125.   (initget "Head Tail Any")
  126.   (setq pos (getkword "\n关键字位置 [头(H)/尾(T)/任意(A)] <任意>: "))
  127.   (if (not pos) (setq pos "Any"))
  128.   (initget "PRefix POstfix Replace")
  129.   (setq mode (getkword "\n修改方式 [加前缀(PR)/加后缀(PO)/替换(R)] <加前缀>: "))
  130.   (if (not mode) (setq mode "PRefix"))
  131.   (setq strprompt
  132.          (cond
  133.            ( (= mode "PRefix")  "前缀字符串: " )
  134.            ( (= mode "POstfix") "后缀字符串: " )
  135.            ( (= mode "Replace") "替换字符串: " )
  136.            )
  137.         )
  138.   (setq modstr (getstring T strprompt))
  139.   (if (not modstr) (setq modstr ""))

  140.   (setq lyr0 (tblnext "layer" T))
  141.   (while (setq lyr (tblnext "layer"))
  142.     (setq oldname (cdr (assoc 2 lyr)))
  143.     (setq newname (ModifyString oldname key pos modstr mode))
  144.     (if newname (modlyrname oldname newname))
  145.     )

  146.   (gc)
  147.   (princ)
  148.   )
  149. ; 命令: RNS扩展 [psyche 2006/08/27]
  150. (defun C:RNSEX()
  151.   (initget "Block Dimstyle LAyer LType Style Ucs VIew VPort")
  152.   (setq symbol (getkword "\n输入要重命名的对象类型 [块(B)/标注样式(D)/图层(LA)/线型(LT)/文字样式(S)/UCS(U)/视图(VI)/视口

  153. (VP)]: "))
  154.   (if (null symbol)
  155.     (exit)
  156.     )

  157.   (initget 0)
  158.   (setq key (getstring T "\n输入要修改的名称关键字: "))
  159.   (initget "Head Tail Any")
  160.   (setq pos (getkword "\n关键字位置 [头(H)/尾(T)/任意(A)] <任意>: "))
  161.   (if (not pos) (setq pos "Any"))
  162.   (initget "PRefix POstfix Replace")
  163.   (setq mode (getkword "\n修改方式 [加前缀(PR)/加后缀(PO)/替换(R)] <加前缀>: "))
  164.   (if (not mode) (setq mode "PRefix"))
  165.   (setq strprompt
  166.          (cond
  167.            ( (= mode "PRefix")  "前缀字符串: " )
  168.            ( (= mode "POstfix") "后缀字符串: " )
  169.            ( (= mode "Replace") "替换字符串: " )
  170.            )
  171.         )
  172.   (setq modstr (getstring T strprompt))
  173.   (if (not modstr) (setq modstr ""))

  174.   (setq oce (getvar "cmdecho"))
  175.   (setvar "cmdecho" 0)
  176.   (command "undo" "begin")

  177.   (setq tbl (tblnext symbol T))
  178.   (while tbl
  179.     (setq oldname (cdr (assoc 2 tbl)))
  180.     (setq newname (ModifyString oldname key pos modstr mode))
  181.     (if newname (vl-catch-all-apply 'modtblname (list symbol oldname newname)))
  182.     (setq tbl (tblnext symbol))
  183.     )

  184.   (command "undo" "end")
  185.   (setvar "cmdecho" oce)

  186.   (gc)
  187.   (princ)
  188.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-26 11:13:04 | 显示全部楼层

成批更改图层名称

一、打开你要更改图层名称的文件
二、任选一个你要更改的图层名称用鼠标左键点一下(高亮显示)
三、再用鼠标左键点一下同一图层名称(进入重命名状态)
四、在合适的位置输入你要做的更改,并把它复制下来
五、重复上述二;三步,在合适的位置插入即可
说明:虽然不能一次改上百个,这样做却可以大大提高速度
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-27 00:04:03 | 显示全部楼层
下了,试了一下。
楼主提供的功能也太强大了,有点过头了,若只想针对部分图层改名怎么办?
比如:
A-1
A-2
A-3
A-4
……
B-1
B-2
B-3
B-4
……
改成:
所有A图层前边加X,B图层前边加Y,……,?
我想这种情况还是常用的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-27 14:22:27 | 显示全部楼层
fixed
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-8-1 05:11:17 | 显示全部楼层
我也经常遇到这类事情,特别是一些外资公司。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8752个

财富等级: 富甲天下

发表于 2008-8-2 11:24:39 | 显示全部楼层
好程序
功能真强大
很好的学习资料
感谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-8-3 22:18:52 | 显示全部楼层
非常感谢,值得学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-8-7 15:42:24 | 显示全部楼层
非常感谢,值得学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 54个

财富等级: 招财进宝

发表于 2008-8-10 20:44:23 | 显示全部楼层
我不会编程,是小白,我在想可不可以继续实现下面的功能……
1、批量给图层名称前加图层名第一个汉字的拼音首字母,并大写——效果就是——程序运行后,如果检测到图层名第一个字是中文,就自动在图层名前加图层名第一个汉字的拼音首字母,并大写;如果检测到图层名是英文,就跳过图层名前加字母,但是继续检测英文图层名,如果图层名首字母是小写,自动更改为大写字母……
2、可以按指定字符数量(数目)批量删除图层名中的前面或者后面的字符数目——效果就是——程序运行后可以按指定数目(比如三个字符)批量删除图名名的前三个字符或者后三个字符(不区分大小写,并且英文和汉字都独立的算一个完整的字符)……

PS:上午发了一个帖子,结果编辑错误,现在也看不到内容,也不能进行编辑,麻烦版主看到帮忙删掉吧……那个需要删掉的帖子链接如下:http://www.xdcad.net/forum/showthread.php?s=&threadid=653539
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-29 14:55 , Processed in 0.436596 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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