wgij007 发表于 2025-3-10 22:16:29

各位大佬能帮改下一个程序到中望CAD用吗

请问如何把这个改为中望2024使用,我把ObjectDBX.AxDbDocument.16改为中望“ZWCAD.Application.2024”的还是会出错,这段原在AutoCAD2006正常使用的。



;;(vl-load-com)
;函数:GetFolder
;功能:调用Windows通用目录选取对话框,返回选中路径
;参数: msg-对话框提示字符串
(defun GetFolder (msg / WinShell shFolder path catchit)
;;(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq
    shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1)
)
(setq
    catchit (vl-catch-all-apply
            '(lambda ()
               (setq shFolder (vlax-get-property shFolder 'self))
               (setq path (vlax-get-property shFolder 'path))
               )
            )
)
(if (vl-catch-all-error-p catchit)
    nil
    path
)
)

(defun REGISTEROBJECTDBX (/ DBXSERVER)      ;by Tony Tanzillo
(cond
    ((vl-registry-read
       "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument.16\\CLSID"
   )
    )
    ((not (setq DBXSERVER (findfile "AxDb16.dll")))
   (alert "错误: 未能找到AxDb.dll文件")
    )

    (t
   (startapp "regsvr32.exe" (strcat "/s "" DBXSERVER """))
   (or
       (vl-registry-read
         "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument.16\\CLSID"
       )
       (alert
         "错误:注册失败"
       )
   )
    )
)
)

(defun Main(DOC DwgName sset / App DOC DBXDOC NAME1)

(if (= "16" (substr (getvar "acadver") 1 2));CAD版本,祥见下
    (progn
      (if (not (REGISTEROBJECTDBX))
      (exit)
      )
      (setq
      DBXDOC (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.16")
      )
    )
    (setq
      DBXDOC (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.16")
    )
)
(setq NAME1 (strcat (getvar "dwgprefix") (getvar "dwgname")))
(if (= NAME1 DwgName)
    (Wl-DXFOut DOC DwgName sset nil)
    (Wl-DXFOut DBXDOC DwgName sset t)
)
(vlax-release-object DBXDOC)
)

(defun Wl-DXFOut(DOC filename sset flags / )
(if Flags
    (progn
      (vla-open DOC filename)
      (vlax-invoke-method DOC 'DXFOut (strcat (substr filename 1 (- (strlen filename) 4)) ".dxf"))
    )
    (vla-export DOC (substr filename 1 (- (strlen filename) 4)) "DXF" sset)
)

)

(defun c:dwdx( / Docs doc files file path i sset)
(setq Doc (vla-get-activedocument (vlax-get-acad-object)))
(setq path (GetFolder "选择文件夹"))
(if (not path)
    (exit)
)
(setq files (vl-directory-files path "*.dwg" 1))
(setq sset (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
(setq i 0)
(repeat (length files)
    (setq file (nth i files))
    (main Doc (strcat path "\\" file) sset)
    (setq i (1+ i))
)
(vlax-release-object sset)
(vlax-release-object doc)
(princ)
)


kozmosovia 发表于 2025-3-10 22:36:21

(Defun vldcl-GetDBXHost        (/ KEY VAL)
(setq        key "ObjectDBX.AxDbDocument"
        val (atoi (getvar "acadver"))
)
(vla-GetInterfaceObject
    (vlax-get-acad-object)
    (if        (< val 16)
      key
      (strcat key "." (itoa val))
    )
)
)

wgij007 发表于 2025-3-11 08:39:05

试了一下,还是不行的

stoyer 发表于 2025-3-11 10:47:40

换个函数,在自己电脑时没找到“AxDb16.dll”这个文件,注册不了。
看高飞鸟大神的贴子,有你需要的:
http://bbs.mjtd.com/thread-192194-1-1.html

wgij007 发表于 2025-3-11 18:04:08

stoyer 发表于 2025-3-11 10:47
换个函数,在自己电脑时没找到“AxDb16.dll”这个文件,注册不了。
看高飞鸟大神的贴子,有你需要的:
ht ...

没找到,在中望官网查了COM是ZWCAD.Application.2024,就是输出时出错,Error: Automation 错误 - "GetInterfaceObject"
页: [1]
查看完整版本: 各位大佬能帮改下一个程序到中望CAD用吗