明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1528|回复: 7

[提问] VLISP批量打开图纸操作遇到问题

[复制链接]
发表于 2015-3-18 17:12 | 显示全部楼层 |阅读模式
下面代码,运行到(setq doc (vla-open (vla-get-documents APP) DWGNAME2))报错;求大神指导


  1. (arxload "acetutil.arx" NIL) ;;需要相应版本的 ET(Express Tools)工具支持
  2. (vl-load-com)
  3. (defun c:GText (/ OLDECHO APP DWGNAME2 path num dwgname OLDLSP doc ent
  4. );;主程序定义
  5. (setq OLDECHO (getvar "cmdecho"));;保存系统变量值
  6. (setvar "cmdecho" 0)
  7. (setq path
  8. (strcat
  9. (vl-string-right-trim
  10. "\\"
  11. (strcase (acet-ui-pickdir
  12. "选择目录"
  13. (vl-string-right-trim "\\" (getvar "dwgprefix")) "批量修改")))"\\"))
  14. (setq OLDLSP (getvar "ACADLSPASDOC"));;保存系统变量值
  15. (setvar "acadlspasdoc" 0)
  16. (setq dwgname (vl-directory-files path "*.DWG"))
  17. (setq num 0)
  18. (if (/= dwgname NIL)
  19. (progn
  20. (setq APP (vlax-get-acad-object));获得 Acad 对象
  21. (repeat (length dwgname)
  22. (setq DWGNAME2 (strcase (strcat path (nth num dwgname))))
  23. (setq doc (vla-open (vla-get-documents APP) DWGNAME2));打开图形并获得其对象
  24.   
  25. ;;运行到上步程序报错
  26.   
  27. ;;以下用省略号代表具体处理程序,用户可在此处添加自己所需的处理的代码。
  28.   
  29. ;; ,start

  30. ;;;end
  31.   

  32. (vla-close doc :vlax-false);关闭图形(不检查是否保存)
  33. (setq num (1+ num))
  34. )
  35. (vlax-release-object doc)
  36. (vlax-release-object APP)
  37. )
  38. (prompt "\n 所选目录中未有任何图形!!")
  39. )
  40. (setvar "acadlspasdoc" OLDLSP);;恢复系统变量值
  41. (setvar "cmdecho" OLDECHO) ;;恢复系统变量值
  42. (princ)
  43. )
 楼主| 发表于 2015-3-18 18:09 | 显示全部楼层
顶一下!来大神啊
发表于 2015-3-18 18:54 | 显示全部楼层
yixinexin 发表于 2015-3-18 18:09
顶一下!来大神啊

用文档集合对象添加文档的方法。
 楼主| 发表于 2015-3-19 09:00 | 显示全部楼层
nzl1116 发表于 2015-3-18 18:54
用文档集合对象添加文档的方法。

初学,能具体点吗?或者给我一个类似的链接,我自学一下。谢谢啊
发表于 2015-3-19 09:15 | 显示全部楼层
测试支行到(setq doc (vla-open (vla-get-documents APP) DWGNAME2))没有出错,成功打开了文件
不排除因为形文件支持或者图形文件版本等原因引起打开文件出错的可能
发表于 2015-3-19 09:35 | 显示全部楼层
我的理解是这样的,lisp只能在当前文档中执行(这句话不知对否,我一直没法验证),当你打开一个文档后,刚打开的文档就成了当前文档,于是后面的程序就不再执行,要等待原来的文档被激活成当前文档后,才继续执行后面程序。
建议用VBA中的open方法实现文档的打开和关闭。
发表于 2015-3-19 18:24 | 显示全部楼层
yixinexin 发表于 2015-3-19 09:00
初学,能具体点吗?或者给我一个类似的链接,我自学一下。谢谢啊

是我理解错了,这可以用open方法,但是出错的地方不是(setq doc ...)
而是(vla-close ...)
原因是,当你调用open方法时,ACAD打开一个文档需要时间,当一个文档还没有完全打开时,变量doc还不是文档对象,而是nil;而程序运行的时间要比打开一个文档的时间要少的多,所以在调用open方法和close方法之间你还要加上空操作。
 楼主| 发表于 2015-3-21 11:52 | 显示全部楼层
nzl1116 发表于 2015-3-19 18:24
是我理解错了,这可以用open方法,但是出错的地方不是(setq doc ...)
而是(vla-close ...)
原因是,当你 ...

哦,我试下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 06:17 , Processed in 0.253548 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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