找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2459|回复: 18

[分享]:批量修改图签程序

[复制链接]
发表于 2006-4-9 20:45:15 | 显示全部楼层 |阅读模式

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

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

×
在这里感谢eachy编的批量修改图签程序
这个程序运行时图纸必段同时满足以下三个条件
1.图框为块
2.图框在TK开头的图层上,
3,图号为定义为属性
本程序可以将选中的文件(支恃多选)一次性改成输入的新值,对于程序才能识别的属性,用户可以自行增减,下载的附件中包含了三个样图.
本程序对图形空间和纸空间同样有效.
当输入为空时不做修改.

声明:运行本程序时请对原图做备份,以避免程序运行错误时将原图遭破坏的严重后查!!!

  1. (vl-load-com)
  2. ;; for Windows XP / winnt2k
  3. ;; (xdl-getfiles) 选取多个文件,返回目录文件列表
  4. ;;=============================================================
  5. ;;                    ***免 责 声 明***                       |
  6. ;;    本程序仅提供作为应用上的参考, 而未声明或隐含任何保证;  |
  7. ;;    对于任何特殊用途之适应性, 以及商业销售所隐含作出的保证, |
  8. ;;    在此一概予以否认。                                      |
  9. ;;=============================================================
  10. (defun xdl-getfiles (/ initdir maxfs flags diatl filter        wincomdlg filem        fstr->lst)
  11.     (defun fstr->lst (fm / n ff)
  12.         (setq ff nil)
  13.         (if (vl-string-position (ascii "\000") fm)
  14.             (progn
  15.                 (while (vl-string-position (ascii "\000") fm)
  16.                     (setq n (vl-string-position (ascii "\000") fm))
  17.                     (setq ff (append ff (list (substr fm 1 n))))
  18.                     (setq fm (substr fm (+ n 2) (- (strlen fm) n 1)))
  19.                 )
  20.                 (setq ff (append ff (list fm)))
  21.             )
  22.             (progn
  23.                 (setq ff (vl-filename-directory fm))
  24.                 (setq ff (list ff (vl-string-subst "" ff fm)))
  25.             )
  26.         )
  27.     )
  28.     (setq initdir (getvar "dwgprefix"))
  29.     (if
  30.         (/=
  31.             (vl-registry-read
  32.                 "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11CF-8ADB-00AA00C00905"
  33.             )
  34.             "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
  35.         )
  36.            (progn
  37.                (princ
  38.                    "\n第一次运行需要注册控件,程序自动注册,请重新启动系统"
  39.                )
  40.                (VL-REGISTRY-WRITE
  41.                    "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11CF-8ADB-00AA00C00905"
  42.                    ""
  43.                    "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
  44.                )
  45.                (startapp
  46.                    "Regsvr32"
  47.                    (strcat " /s " (getenv "Windir") "\\System32\\comdlg32.ocx")
  48.                )
  49.                (exit)
  50.            )
  51.            (progn
  52.                (setq wincomdlg (vlax-create-object "mscomdlg.commondialog"))
  53.                (vlax-put-property wincomdlg 'CancelError 0)
  54.                (vlax-put-property wincomdlg 'MAXFILESIZE 32767)
  55.                (vlax-put-property
  56.                    wincomdlg
  57.                    'FLAGS
  58.                    (+ 4 512 524288 1048576 1024)
  59.                )
  60.                (vlax-put-property
  61.                    wincomdlg
  62.                    'DIALOGTITLE
  63.                    "请选择要修改的DWG文件"
  64.                )
  65.                (vlax-put-property wincomdlg 'filter "*.dwg|*.dwg")
  66.                (vlax-put-property wincomdlg 'initdir initdir)
  67.                (vlax-invoke-method wincomdlg 'showopen)
  68.                (setq filem (vlax-get wincomdlg 'filename))
  69.                (vlax-release-object wincomdlg)
  70.                (if (/= filem "")
  71.                    (mapcar '(lambda (x) (vl-string-left-trim "\" x))
  72.                            (fstr->lst filem)
  73.                    )
  74.                )
  75.            )
  76.     )
  77. )
  78. (defun c:DwgATT        (/           fls             vers      date         dbx           dwgprefix cname1    cname2         pname           hname     olderr
  79.                  myerr           *acadapp* chgatt    _dwgatt_id           vers             attlst    notopen         chk_chg   Tname     getchanged
  80.                  chgattobj kw
  81.                 )
  82.     (defun myerr (msg)
  83.         (if (/= msg "CANCEL")
  84.             (princ msg)
  85.         )
  86.         (if dbx
  87.             (vlax-release-object dbx)
  88.         )
  89.         (setq *error* olderr)
  90.         (princ)
  91.     )
  92.     (defun chgattobj (object atl)
  93.         (if
  94.             (and
  95.                 (wcmatch (vlax-get-property object 'objectname)
  96.                          "*BlockRef*"
  97.                 )
  98.                 (wcmatch (vlax-get-property object 'name) "[tT][kK]*")
  99.                 (= (vlax-get-property object 'hasattributes)
  100.                    :vlax-true
  101.                 )
  102.             )
  103.                (progn
  104.                    (mapcar
  105.                        '(lambda        (att / tag)
  106.                             (if        (assoc (setq tag (vlax-get-property att 'tagstring))
  107.                                        atl
  108.                                 )
  109.                                 (progn
  110.                                     (vlax-put-property
  111.                                         att
  112.                                         'textstring
  113.                                         (cadr (assoc tag atl))
  114.                                     )
  115.                                     (setq chk_chg T)
  116.                                 )
  117.                             )
  118.                         )
  119.                        (vlax-invoke object "GetAttributes")
  120.                    )
  121.                )
  122.         )
  123.     )
  124.     (defun getchanged (/ attlst)
  125.         (mapcar
  126.             '(lambda (x y)
  127.                  (if (and (get_tile x) (/= (get_tile x) ""))
  128.                      (progn (set (read x) (get_tile x))
  129.                             (setq attlst (cons (list y (eval (read x))) attlst))
  130.                      )
  131.                  )
  132.              )
  133.             '("date" "vers" "cname1" "cname2" "Pname" "Hname" "Tname")
  134.             '("日期" "版次" "建设单位1"        "建设单位2" "工程名称" "合同号"        "图别")
  135.         )
  136.         attlst
  137.     )
  138.     (initget "Y N")
  139.     (setq kw
  140.              (getkword
  141.                  "\n 正在运行批量修改图签的程序,请将原图做好备份! 是否继续[Y/N]<N>: "
  142.              )
  143.     )


  144.     (if        (= kw "Y")
  145.         (progn


  146.             (setq *acadapp* (vlax-get-acad-object))
  147.             (setq dbx (vlax-invoke-method
  148.                           *acadapp*
  149.                           'GetInterfaceObject
  150.                           (strcat "ObjectDBX.AxDbDocument."
  151.                                   (substr (getvar "acadver") 1 2)
  152.                           )
  153.                       )
  154.             )
  155.             (setq olderr  *error*
  156.                   *error* myerr
  157.             )
  158.             (if        (and dbx
  159.                      (setq fls (xdl-getfiles))
  160.                 )
  161.                 (progn
  162.                     (if        (not _dwgatt_id)
  163.                         (setq _dwgatt_id (load_dialog "dwgatt.dcl"))
  164.                     )
  165.                     (if        (not (new_dialog "dwgatt" _dwgatt_id))
  166.                         (exit)
  167.                     )
  168.                     (action_tile
  169.                         "accept"
  170.                         "(setq attlst (getchanged))(done_dialog 0)"
  171.                     )
  172.                     (start_dialog)
  173.                     (unload_dialog _dwgatt_id)
  174.                     (if        attlst
  175.                         (progn

  176.                             (setq dwgprefix (strcat (car fls) "\")
  177.                                   fls            (mapcar '(lambda (x)
  178.                                                          (strcat dwgprefix x)
  179.                                                      )
  180.                                                     (cdr fls)
  181.                                             )
  182.                             )
  183.                             (textscr)
  184.                             (mapcar
  185.                                 '(lambda (x / obj)
  186.                                      (if (not dbx)
  187.                                          (setq
  188.                                              dbx (vlax-invoke-method
  189.                                                      *acadapp*
  190.                                                      'GetInterfaceObject
  191.                                                      (strcat "ObjectDBX.AxDbDocument."
  192.                                                              (substr (getvar "acadver") 1 2)
  193.                                                      )
  194.                                                  )
  195.                                          )
  196.                                      )
  197.                                      (vl-catch-all-apply
  198.                                          'vlax-invoke-method
  199.                                          (list dbx 'open x :vlax-false)
  200.                                      )
  201.                                      (if (/= (vlax-get-property dbx 'name) "")
  202.                                          (progn
  203.                                              (setq chk_chg nil)
  204.                                              (vlax-for obj
  205.                                                            (vlax-get-property dbx 'modelspace)
  206.                                                  (chgattobj obj attlst)
  207.                                              )
  208.                                              (vlax-for obj
  209.                                                            (vlax-get-property dbx 'paperspace)
  210.                                                  (chgattobj obj attlst)
  211.                                              )

  212.                                              (if chk_chg
  213.                                                  (progn
  214.                                                      (vlax-invoke-method dbx 'saveas x)
  215.                                                      (princ (strcat "\n" x " Changed Ok!"))
  216.                                                  )
  217.                                                  (progn
  218.                                                      (setq notopen (cons x notopen))
  219.                                                  )
  220.                                              )
  221.                                              (vlax-release-object dbx)
  222.                                              (setq dbx nil)
  223.                                          )
  224.                                          (progn
  225.                                              (setq notopen (cons x notopen))
  226.                                              (vlax-release-object dbx)
  227.                                              (setq dbx nil)
  228.                                          )
  229.                                      )
  230.                                  )
  231.                               ;(cdr fls)
  232.                                 fls
  233.                             )
  234.                             (if        dbx
  235.                                 (vlax-release-object dbx)
  236.                             )
  237.                             (if        notopen
  238.                                 (progn
  239.                                     (princ
  240.                                         "\n======================================================================"
  241.                                     )
  242.                                     (princ
  243.                                         "\n以下为未修改文件,可能文件已打开或者为高版本图形或者未找到修改之属性!"
  244.                                     )
  245.                                     (princ
  246.                                         "\n======================================================================"
  247.                                     )
  248.                                     (mapcar
  249.                                         '(lambda (x)
  250.                                              (princ (strcat "\n" x " Not Changed!"))
  251.                                          )
  252.                                         notopen
  253.                                     )
  254.                                 )
  255.                             )
  256.                         )
  257.                         (princ "\n没有输入或用户取消!")
  258.                     )
  259.                 )
  260.                 (princ "\n没有选择文件或不能批量修改!")
  261.             )
  262.         )
  263.     )
  264.     (setq *error* olderr)
  265.     (princ)
  266. )








对话框


  1. dwgatt : dialog {
  2. label = "图签属性修改  作者: eachy[晓东空间]";
  3. : column {
  4. fixed_width = true;
  5.   : boxed_column {
  6.     label = "图纸属性";
  7.     : row {
  8.       : edit_box {
  9.         label = "日 期";
  10.         key = "date";
  11.         }
  12.       : edit_box {
  13.         label = "版 次";
  14.         key = "vers";
  15.         }
  16.       }
  17.     : row {
  18.       : edit_box {
  19.         label = "合同号";
  20.         key = "Hname";
  21.         }
  22.       : edit_box {
  23.         label = "图 别";
  24.         key = "Tname";
  25.         }
  26.       }
  27.     }
  28.   : boxed_column {
  29.     label = "项目信息";
  30.     width = 50;
  31.     : edit_box {
  32.       label = "工程名称  ";
  33.       key = "Pname";
  34.       width = 30;
  35.       }
  36.     : edit_box {
  37.       label = "建设单位1";
  38.       key = "cname1";
  39.       width = 30;
  40.       }
  41.     : edit_box {
  42.       label = "建设单位2";
  43.       key = "cname2";
  44.       width = 30;
  45.       }
  46.     }
  47.   }
  48. ok_cancel;
  49. }}



声明:运行本程序时请对原图做备份,以避免程序运行错误时将原图遭破坏的严重后查!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2006-4-9 22:48:35 | 显示全部楼层
图形选择界面
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2006-4-15 00:18:33 | 显示全部楼层
本程序已在2006年4月15日做了更新,并做了严格的测试,请重新下载,以前版本有可能不稳定选成文件损坏.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-4-15 18:56:48 | 显示全部楼层
最初由 lemonx 发布
[B]复杂了
图签应该用参照,一改皆改 [/B]

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

使用道具 举报

发表于 2006-4-19 23:02:05 | 显示全部楼层
很好的程序,下不了楼主快点检查,能否发到bamboo79@tom.com给我
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 39个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

已领礼包: 35个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 104个

财富等级: 日进斗金

发表于 2017-6-2 15:17:58 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 07:46 , Processed in 0.254515 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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