明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 85|回复: 4

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

[复制链接]
发表于 前天 22:16 | 显示全部楼层 |阅读模式
10明经币
请问如何把这个改为中望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)
)


"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 前天 22:36 | 显示全部楼层
(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))
    )
  )
)
回复

使用道具 举报

 楼主| 发表于 昨天 08:39 | 显示全部楼层
试了一下,还是不行的
回复

使用道具 举报

发表于 昨天 10:47 | 显示全部楼层
换个函数,在自己电脑时没找到“AxDb16.dll”这个文件,注册不了。
看高飞鸟大神的贴子,有你需要的:
http://bbs.mjtd.com/thread-192194-1-1.html
回复

使用道具 举报

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

没找到,在中望官网查了COM是ZWCAD.Application.2024,就是输出时出错,Error: Automation 错误 - "GetInterfaceObject"
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-12 09:28 , Processed in 0.169588 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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