找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 510|回复: 1

[每日一码] 使用DBX批量修改外部DWG图形的打印样式表

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

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

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

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

×
  1. (defun c:changepc3 (/ _openfile _subfolders _getdirectory dir doc
  2.                     folders l logfile new odbx old save v
  3.                    )
  4.   (vl-load-com)
  5.   ;; Change this value - ie. { "*" or "\\\\servername\\oldsharedprintername" }
  6.   (setq old "*")
  7.   ;; Change this value - ie. { "MyplotStyle.ctb" or "\\\\servername\\newsharedprintername" }
  8.   (setq new "MyplotStyle.ctb")
  9.   (defun _openfile (file / sh)
  10.     (if (findfile file)
  11.       (progn (setq sh (vlax-get-or-create-object "Shell.Application"))
  12.              (vlax-invoke-method sh 'open (findfile file))
  13.              (vlax-release-object sh)
  14.              file
  15.       )
  16.     )
  17.   )
  18.   (defun _getdirectory (message / sh folder result)
  19.     (setq sh (vlax-get-or-create-object "Shell.Application"))
  20.     (setq folder (vlax-invoke-method sh 'browseforfolder 0 message 0))
  21.     (vlax-release-object sh)
  22.     (if folder
  23.       (progn (setq
  24.                result (vlax-get-property (vlax-get-property folder 'self)
  25.                                          'path
  26.                       )
  27.              )
  28.              (if (/= (substr result (strlen result)) "\\")
  29.                (setq result (strcat result "\\"))
  30.                result
  31.              )
  32.       )
  33.     )
  34.   )
  35.   (defun _subfolders (path / folder fs lst subs)
  36.     (setq fs (vlax-get-or-create-object "Scripting.FileSystemObject"))
  37.     (if (and (setq folder (vlax-invoke fs 'getfolder path))
  38.              (setq subs (vlax-get folder 'subfolders))
  39.         )
  40.       (mapcar (function
  41.                 (lambda (x) (cons x (apply 'append (_subfolders x))))
  42.               )
  43.               (vlax-for sub subs
  44.                 (setq lst (cons (strcat (vlax-get sub 'path) "\\") lst))
  45.               )
  46.       )
  47.     )
  48.   )
  49.   (setq doc (vlax-get-acad-object))
  50.   (cond
  51.     ((not
  52.        (setq
  53.          odbx (if (< (setq v (substr (getvar 'acadver) 1 2)) "16")
  54.                 (vla-getinterfaceobject doc "ObjectDBX.AxDbDocument")
  55.                 (vla-getinterfaceobject
  56.                   doc
  57.                   (strcat "ObjectDBX.AxDbDocument." v)
  58.                 )
  59.               )
  60.        )
  61.      )
  62.      (princ "\nObject DBX interface not created!")
  63.     )
  64.     ((if (and (setq dir
  65.                      (_getdirectory
  66.                        "Choose a folder to process (subfolders processed too)..."
  67.                      )
  68.               )
  69.               (and (setq folders (apply 'append (_subfolders dir)))
  70.                    (setq folders (append (list dir) folders))
  71.               )
  72.               (setq logfile (open (setq l (strcat dir "logfile.csv")) "w"))
  73.          )
  74.        (progn
  75.          (write-line "FILE,TABS UPDATED,SAVED" logfile)
  76.          (foreach folder folders
  77.            (foreach file (vl-directory-files folder "*.dwg" 0)
  78.              (if (vl-catch-all-error-p
  79.                    (vl-catch-all-apply 'vla-open
  80.                                        (list odbx (strcat folder file))
  81.                    )
  82.                  )
  83.                (write-line
  84.                  (strcase
  85.                    (strcat "!!Error opening: " (strcat folder file))
  86.                  )
  87.                  logfile
  88.                )
  89.                (progn
  90.                  (setq save 0)
  91.                  (vlax-for x (vla-get-layouts odbx)
  92.                    (if (wcmatch (strcase (vla-get-configname x))
  93.                                 (strcase old)
  94.                        )
  95.                      (progn
  96.                        (and
  97.                          (not (vl-catch-all-error-p
  98.                                 (vl-catch-all-apply 'vla-put-configname
  99.                                                     (list x new)
  100.                                 )
  101.                               )
  102.                          )
  103.                          (setq save (1+ save))
  104.                        )
  105.                      )
  106.                    )
  107.                  )
  108.                  (if (zerop save)
  109.                    (write-line
  110.                      (strcat (strcat folder file "," (itoa save) ",NO"))
  111.                      logfile
  112.                    )
  113.                    (progn (write-line
  114.                             (strcat
  115.                               (strcat folder file "," (itoa save) ",YES")
  116.                             )
  117.                             logfile
  118.                           )
  119.                           (vla-saveas odbx (vla-get-name odbx))
  120.                    )
  121.                  )
  122.                )
  123.              )
  124.            )
  125.          )
  126.          (close logfile)
  127.          (_openfile l)
  128.        )
  129.      )
  130.     )
  131.   )
  132.   (princ)
  133. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2019-6-27 19:15:19 | 显示全部楼层
研究了一下午才把这个代码看懂了个大概
有个小问题
后台打开的CAD没有关闭
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 02:54 , Processed in 0.389751 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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