VLISP批量打开图纸操作遇到问题
下面代码,运行到(setq doc (vla-open (vla-get-documents APP) DWGNAME2))报错;求大神指导(arxload "acetutil.arx" NIL) ;;需要相应版本的 ET(Express Tools)工具支持
(vl-load-com)
(defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent
);;主程序定义
(setq OLDECHO (getvar "cmdecho"));;保存系统变量值
(setvar "cmdecho" 0)
(setq path
(strcat
(vl-string-right-trim
"\\"
(strcase (acet-ui-pickdir
"选择目录"
(vl-string-right-trim "\\" (getvar "dwgprefix")) "批量修改")))"\\"))
(setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
(setvar "acadlspasdoc" 0)
(setq dwgname (vl-directory-files path "*.DWG"))
(setq num 0)
(if (/= dwgname NIL)
(progn
(setq APP (vlax-get-acad-object));获得 Acad 对象
(repeat (length dwgname)
(setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
(setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获得其对象
;;运行到上步程序报错
;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
;; ,start
;;;end
(vla-close doc :vlax-false);关闭图形(不检查是否保存)
(setq num (1+ num))
)
(vlax-release-object doc)
(vlax-release-object APP)
)
(prompt "\n 所选目录中未有任何图形!!")
)
(setvar "acadlspasdoc" OLDLSP);;恢复系统变量值
(setvar "cmdecho" OLDECHO) ;;恢复系统变量值
(princ)
)
顶一下!来大神啊 yixinexin 发表于 2015-3-18 18:09 static/image/common/back.gif
顶一下!来大神啊
用文档集合对象添加文档的方法。 nzl1116 发表于 2015-3-18 18:54 static/image/common/back.gif
用文档集合对象添加文档的方法。
初学,能具体点吗?或者给我一个类似的链接,我自学一下。谢谢啊 测试支行到(setq doc (vla-open (vla-get-documents APP) DWGNAME2))没有出错,成功打开了文件
不排除因为形文件支持或者图形文件版本等原因引起打开文件出错的可能 我的理解是这样的,lisp只能在当前文档中执行(这句话不知对否,我一直没法验证),当你打开一个文档后,刚打开的文档就成了当前文档,于是后面的程序就不再执行,要等待原来的文档被激活成当前文档后,才继续执行后面程序。
建议用VBA中的open方法实现文档的打开和关闭。 yixinexin 发表于 2015-3-19 09:00 static/image/common/back.gif
初学,能具体点吗?或者给我一个类似的链接,我自学一下。谢谢啊
是我理解错了,这可以用open方法,但是出错的地方不是(setq doc ...)
而是(vla-close ...)
原因是,当你调用open方法时,ACAD打开一个文档需要时间,当一个文档还没有完全打开时,变量doc还不是文档对象,而是nil;而程序运行的时间要比打开一个文档的时间要少的多,所以在调用open方法和close方法之间你还要加上空操作。 nzl1116 发表于 2015-3-19 18:24 static/image/common/back.gif
是我理解错了,这可以用open方法,但是出错的地方不是(setq doc ...)
而是(vla-close ...)
原因是,当你 ...
哦,我试下
页:
[1]