mccad 发表于 2002-3-30 15:05:00

LISP也可以利用ObjectDBX对未打开的图形进行操作

(vl-load-com)

(setq *objectdbx* "ObjectDBX.AxDbDocument")

(defun RegServer (server)
   (startapp
      "regsvr32.exe"
      (strcat "/s \"" server "\"")
   )
)

;; Get CLSID from ProgID

(defun GetClassID (ProgID)
   (vl-registry-read
      (strcat "HKEY_CLASSES_ROOT\\" progid "\\CLSID")
   )
)

;; Register ObjectDBX ActiveX services,
;; if not already registered.

(defun RegisterObjectDBX ( / server)
   (cond
      ((GetClassID *ObjectDBX*))
      ((not (setq server (findfile "AxDb15.dll")))
         (alert "Error: Can't locate ObjectDBX Library (AxDb15.dll)"))
      (t (regserver server)
         (or
            (GetClassID *ObjectDBX*)
            (alert "Error: Failed to register ObjectDBX ActiveX services.")
         )
      )
   )
)

highflybird 发表于 2011-3-31 11:37:39

本帖最后由 highflybird 于 2011-3-31 11:39 编辑

例如下面的例子,是对没打开的图形进行文字式样替换,在某些情况下很有用。

(defun c:ttt(/ cadVer name dbx styles)
(setq CadVer (substr (getvar "acadver") 1 2))
(setq name (strcat "ObjectDBX.AxDbDocument." CadVer))
(setq dbx (vlax-create-object name))                                 ;;创建dbx对象
(vla-open dbx "D:/work/test.dwg")                                    
(setq styles (vla-get-TextStyles dbx))
(vlax-for n styles
    (if (/= (vla-get-bigfontfile n) "")
      (vla-put-bigfontfile n "hztxt.shx")                                        ;;替换成hztxt.
    )
    (vla-put-fontfile n "c:/windows/fonts/SimFang.TTF")               ;;替换成仿宋体
)
(vla-saveas dbx "D:/work/test.dwg")
(princ)
)


ahwx0814 发表于 2011-3-30 16:55:19

老大,举个例子吧,看不懂怎么用,怎么才能得到其他cad文件的指针呢?

Gu_xl 发表于 2011-3-30 19:24:42

回复 ahwx0814 的帖子

去我的博客看看吧,里面有个"利用ObjectDBX技术不打开CAD文件替换文字"例子!

xuexicad1960 发表于 2011-4-3 16:31:16

回复 Gu_xl 的帖子

对不打开cad图形文件,替换其中的文字的问题,我已找了几天了,今天看到Gu_xl 的博客里有“利用ObjectDBX技术不打开CAD文件替换文字",试了试出现下面的情况
命令: gxl-RePlaceText1
程序编制byGu_xl,2010年7月
输入源文字:西安80坐标系
输入要替换的文字:北京1954
继续输入替换文字<Yes>:n
替换方式[仅替换文本<0>/仅替换块中文本<1>/全部替换<2>]仅替换文本<0>0
;错误: no function definition: GXL-FILE-GETFOLDER
不知道是为什么 ,还请Gu_xl 帮助看看,谢谢!

Gu_xl 发表于 2011-4-3 19:57:39

回复 xuexicad1960 的帖子

去这下载通用函数:
http://u.sohu.com/download/10/13009522634827141620161

xuexicad1960 发表于 2011-4-3 22:57:37

回复 Gu_xl 的帖子


通用函数已下载,程序也正常运行了,无论我用哪个替换方式0、1、2最后都显示共完成0处文本替换!莫非程序对文本样式还有要求吗?
为了说明问题,附文字样图一份。
由于沟通出现问题,图廓外坐标系\ 高程系有时要进行变更,所以出现了替换文字的问题。由于刚学习autolisp,解决这样的问题还很困难,到这里来学习。

xuexicad1960 发表于 2011-4-6 22:22:08

"利用ObjectDBX技术不打开CAD文件替换文字",出现上面的情况是我输入源文字:西安80坐标系 这里出现失误,原图是   西安80坐标系。我理解错了少输入了个“。”   源文字要输入一整句,不可输入部分。谢谢Gu_xl 版主的程序,我收藏了。

millermin 发表于 2011-12-20 11:51:33

想参照你的程序,编个不开文件,关闭图层。技术上可行吗?谢谢。

flowerson 发表于 2020-3-2 18:43:14

Gu_xl 发表于 2011-3-30 19:24
回复 ahwx0814 的帖子

去我的博客看看吧,里面有个"利用ObjectDBX技术不打开CAD文件替换文字"例子!

版主,你的博客怎么是锁定状态的?
页: [1] 2
查看完整版本: LISP也可以利用ObjectDBX对未打开的图形进行操作