找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1412|回复: 5

[教学]:一个用 ObjectDBX 批量修改图形特定内容的程序

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-4-9 15:42:37 | 显示全部楼层 |阅读模式

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

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

×

  1. (vl-load-com)
  2. ;; for Windows XP / winnt2k
  3. ;; (xdl-getfiles) 选取多个文件,返回目录文件列表
  4. (defun xdl-getfiles (/ initdir maxfs flags diatl filter        wincomdlg filem
  5.                      fstr->lst)
  6.   (defun fstr->lst (fm / n ff)
  7.     (setq ff nil)
  8.     (if        (vl-string-position (ascii "\000") fm)
  9.       (progn
  10.         (while (vl-string-position (ascii "\000") fm)
  11.           (setq n (vl-string-position (ascii "\000") fm))
  12.           (setq ff (append ff (list (substr fm 1 n))))
  13.           (setq fm (substr fm (+ n 2) (- (strlen fm) n 1)))
  14.         )
  15.         (setq ff (append ff (list fm)))
  16.       )
  17.       (progn
  18.         (setq ff (vl-filename-directory fm))
  19.         (setq ff (list ff (vl-string-subst "" ff fm)))
  20.       )
  21.     )
  22.   )
  23.   (setq initdir (getvar "dwgprefix"))
  24.   (if
  25.     (not
  26.       (vl-registry-read
  27.         "HKEY_CLASSES_ROOT\\CLSID\\{7629CFA2-3FE5-101B-A3C9-08002B2F49FB}\\InprocServer32"
  28.       )
  29.     )
  30.      (progn
  31.        (princ
  32.          "\n第一次运行需要注册控件,程序自动注册,请重新启动系统"
  33.        )
  34.        (VL-REGISTRY-WRITE
  35.          "HKEY_CLASSES_ROOT\\Licenses\\{4D553650-6ABE-11CF-8ADB-00AA00C00905}\"
  36.          ""
  37.          "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
  38.        )

  39.        (startapp "RegSvr32" "C:\\WINDOWS\\system32\\comdlg32.ocx")
  40.      )
  41.      (progn
  42.        (setq wincomdlg (vlax-create-object "mscomdlg.commondialog"))
  43.        (vlax-put-property wincomdlg 'CancelError :VLAX-TRUE)
  44.        (vlax-put-property wincomdlg 'MAXFILESIZE 32767)
  45.        (vlax-put-property
  46.          wincomdlg
  47.          'FLAGS
  48.          (+ 4 512 524288 1048576 1024)
  49.        )
  50.        (vlax-put-property
  51.          wincomdlg
  52.          'DIALOGTITLE
  53.          "请选择要修改的DWG文件"
  54.        )
  55.        (vlax-put-property wincomdlg 'filter "*.dwg|*.dwg")
  56.        (vlax-put-property wincomdlg 'initdir initdir)
  57.        (vlax-invoke-method wincomdlg 'showopen)
  58.        (setq filem (vlax-get wincomdlg 'filename))
  59.        (vlax-release-object wincomdlg)
  60.        (mapcar '(lambda (x) (vl-string-left-trim "\" x))
  61.                (fstr->lst filem)
  62.        )
  63.      )
  64.   )
  65. )
  66. (defun c:DwgDate (/            fls              vers        date          dbx
  67.                   dwgprefix cname1    cname2        pname          hname
  68.                   olderr    myerr     *acadapp*        chgatt          _dwgdate_id
  69.                   vers            attlst notopen
  70.                  )
  71.   (defun myerr (msg)
  72.     (if        (/= msg "CANCEL")
  73.       (princ msg)
  74.     )
  75.     (vlax-release-object dbx)
  76.     (setq *error* olderr)
  77.     (princ)
  78.   )
  79.   (defun chgatt        (tf name val)
  80.     (vlax-for obj (if tf
  81.                     (vlax-get-property dbx 'modelspace)
  82.                     (vlax-get-property dbx 'paperspace)
  83.                   )
  84.       (if
  85.         (and
  86.           (wcmatch (vlax-get-property obj 'objectname)
  87.                    "*BlockRef*"
  88.           )
  89.           (wcmatch (vlax-get-property obj 'name) "[tT][kK]*")
  90.           (= (vlax-get-property obj 'hasattributes)
  91.              :vlax-true
  92.           )
  93.         )
  94.          (progn
  95.            (mapcar
  96.              '(lambda (att)
  97.                 (if (= (vlax-get-property att 'tagstring)
  98.                        name
  99.                     )
  100.                   (vlax-put-property
  101.                     att
  102.                     'textstring
  103.                     val
  104.                   )
  105.                 )
  106.               )
  107.              (vlax-invoke obj 'getattributes)
  108.            )
  109.          )
  110.       )
  111.     )
  112.   )
  113.   (setq *acadapp* (vlax-get-acad-object))
  114.   (setq        dbx (vlax-invoke-method
  115.               *acadapp*
  116.               'GetInterfaceObject
  117.               (strcat "ObjectDBX.AxDbDocument."
  118.                       (substr (getvar "acadver") 1 2)
  119.               )
  120.             )
  121.   )
  122.   (setq        olderr        *error*
  123.         *error*        myerr
  124.   )
  125.   (if (and dbx
  126.            (setq fls (xdl-getfiles))
  127.       )
  128.     (progn
  129.       (if (not _dwgdate_id)
  130.         (setq _dwgdate_id (load_dialog "dwgdate.dcl"))
  131.       )
  132.       (if (not (new_dialog "dwgdate" _dwgdate_id))
  133.         (exit)
  134.       )
  135.       (action_tile "accept" "(done_dialog 0)")
  136.       (action_tile "date" "(setq date $value)")
  137.       (action_tile "vers" "(setq vers $value)") ;_可以增加属性
  138.       (start_dialog)
  139.       (unload_dialog _dwgdate_id)
  140.       (setq attlst (list (list "日期" date) (list "版次" vers))) ;_标签名和修改值
  141.       (setq dwgprefix (strcat (car fls) "\")
  142.             fls              (mapcar '(lambda (x)
  143.                                  (strcat dwgprefix x)
  144.                                )
  145.                               (cdr fls)
  146.                       )
  147.       )
  148.       (mapcar
  149.         '(lambda (x / obj)
  150.            (vl-catch-all-apply 'vlax-invoke-method (list dbx 'open x :vlax-false))
  151.            (if (/= (vlax-get-property dbx 'name) "")
  152.              (progn
  153.                (mapcar '(lambda        (x)
  154.                           (if (and (/= (cadr x) nil)
  155.                                    (/= (cadr x) "")
  156.                               )
  157.                             (progn
  158.                               (chgatt nil (car x) (cadr x))
  159.                               (chgatt t (car x) (cadr x))
  160.                             )
  161.                           )
  162.                         )
  163.                        attlst
  164.                )
  165.                (vlax-invoke-method dbx 'saveas x)
  166.                (princ (strcat "\n" x " Changed Ok!"))
  167.              )
  168.              (setq notopen (cons x notopen))
  169.            )
  170.          )
  171.         fls
  172.       )
  173.       (vlax-release-object dbx)
  174.       (princ "\nChanged Ok!")
  175.     )
  176.   )
  177.   (if notopen
  178.     (progn
  179.       (textscr)
  180.       (princ "\n==================================================")
  181.       (princ "\n以下为未修改文件,可能文件已打开或者为高版本图形!")
  182.       (princ "\n==================================================")
  183.       (mapcar '(lambda (x) (princ (strcat "\n" x " Not Changed!")))
  184.               notopen
  185.       )      
  186.     )
  187.   )
  188.   (princ)
  189. )

Dcl

  1. dwgdate : dialog {
  2. label = "属性修改";
  3. : row {
  4.   : column {
  5.     : edit_box {
  6.       label = "日期";
  7.       key = "date";
  8.       width = 10;
  9.       }
  10.     : edit_box {
  11.       label = "版次";
  12.       key = "vers";
  13.       width = 10;
  14.       }
  15.     }
  16.   : column {
  17.     : edit_box {
  18.       label = "设计";
  19.       key = "dn";
  20.       width = 10;
  21.       }
  22.     }
  23.    }
  24. ok_cancel;
  25. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-9 17:40:59 | 显示全部楼层
谢谢,有空好好学习一下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-11 16:37:37 | 显示全部楼层
使用Objectdbx保留預覽圖的arx

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

使用道具 举报

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

使用道具 举报

发表于 2006-6-7 10:51:35 | 显示全部楼层
下面代码中:
(vlax-invoke-method
              *acadapp*
              'GetInterfaceObject
              (strcat "ObjectDBX.AxDbDocument."
                      (substr (getvar "acadver") 1 2)
              )
            )
ObjectDBX.AxDbDocument 是哪里来的?能指点一下相关的学习资料吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2007-1-10 22:48:32 | 显示全部楼层
http://discussion.autodesk.com/thread.jspa?threadID=480271

r15  的cad安装版本的axdb15.dll是不可以独立的
可以在3dmax里面找到这个文件,copy过来,
保证有这个文件,再regsvr32.exe它
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 20:48 , Processed in 0.185899 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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