找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 592|回复: 0

[每日一码] 使用DBX读外部图根据特点属性值更改DWG名字

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-11-16 14:05:04 | 显示全部楼层 |阅读模式

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

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

×
根据图中的属性块的属性内容,修改图的名字

自己修改下面的语句适合你的需要

    (setq BlkName "CIR-NOTE") ; update to your block name
    (setq TagName "NOTE") ; update to your attribute's tag value


  1. (defun c:BatchRename (/ *error* Directory-Dia BlkName TagName Dir dbxApp FileName RenameList )
  2.    
  3.     (vl-load-com)
  4.     (defun *error* (msg)
  5.         
  6.         (if dbxApp (vlax-release-object dbxApp))
  7.         (setq dbxApp nil)
  8.         (vl-bt)
  9.     )
  10.     ;---------------------------------------------------------
  11.     (defun Directory-Dia ( Message / sh folder folderobject result)
  12.     ;; By Tony Tanzillo
  13.     ;; Modified by Tim Willey
  14.     ;; 16 Will let you type in the path
  15.     ;; 64 Will let you create a new folder

  16.             (vl-load-com)
  17.             (setq sh
  18.                     (vla-getInterfaceObject
  19.                             (vlax-get-acad-object)
  20.                             "Shell.Application"
  21.                     )
  22.             )


  23.             (setq folder
  24.                     (vlax-invoke-method
  25.                             sh
  26.                             'BrowseForFolder
  27.                             (vla-get-HWND (vlax-get-Acad-Object))
  28.                             Message
  29.                             0 ; This is the bit number to change.
  30.                     )
  31.             )
  32.             (vlax-release-object sh)


  33.             (if folder
  34.                     (progn
  35.                             (setq folderobject
  36.                                     (vlax-get-property folder 'Self)
  37.                             )
  38.                             (setq result
  39.                                     (vlax-get-property FolderObject 'Path)
  40.                             )
  41.                             (vlax-release-object folder)
  42.                             (vlax-release-object FolderObject)
  43.                             (if (/= (substr result (strlen result)) "\\")
  44.                                     (setq result (strcat result "\\"))
  45.                                     result
  46.                             )
  47.                     )
  48.             )
  49.     )
  50.     ;--------------------------------------------------------------------------------------
  51.     (setq BlkName "CIR-NOTE") ; update to your block name
  52.     (setq TagName "NOTE") ; update to your attribute's tag value
  53.    
  54.     (if (setq Dir (Directory-Dia "Select directory to rename."))
  55.         (progn
  56.             (setq dbxApp
  57.                 (if (< (atoi (setq oVer (substr (getvar "acadver") 1 2))) 16)
  58.                     (vla-GetInterfaceObject (vlax-get-acad-object) "ObjectDBX.AxDbDocument")
  59.                     (vla-GetInterfaceObject (vlax-get-acad-object) (strcat "ObjectDBX.AxDbDocument." oVer))
  60.                 )
  61.             )
  62.             (foreach file (mapcar (function (lambda (x) (strcat Dir x))) (vl-directory-files Dir "*.dwg" 1))
  63.                 (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-Open (list dbxApp file)))
  64.                     (prompt (strcat "\n *Error opening file: " file))
  65.                     (vlax-for lo (vla-get-Layouts dbxApp)
  66.                         (vlax-for obj (vla-get-Block lo)
  67.                             (if
  68.                                 (and
  69.                                     (= (vla-get-ObjectName obj) "AcDbBlockReference")
  70.                                     (= (vla-get-Name obj) BlkName)
  71.                                 )
  72.                                 (foreach att (vlax-invoke obj 'GetAttributes)
  73.                                     (if (= (vla-get-TagString att) TagName)
  74.                                         (setq FileName (vla-get-TextString att))
  75.                                     )
  76.                                 )
  77.                             )
  78.                         )
  79.                     )
  80.                 )
  81.                 (setq RenameList (cons (cons file FileName) RenameList))
  82.                 (setq FileName nil)
  83.             )
  84.         )
  85.     )
  86.     (vlax-release-object dbxApp)
  87.     (setq dbxApp nil)
  88.     (foreach i RenameList
  89.         (if
  90.             (or
  91.                 (null (cdr i))
  92.                 (not (vl-file-rename (car i) (strcat Dir (cdr i) ".dwg")))
  93.             )
  94.             (prompt "\n *Was not able to rename: " (car i))
  95.         )
  96.     )
  97.     (princ)
  98. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 13:44 , Processed in 0.151391 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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