明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2965|回复: 2

[求助]一个VLISP 打印范例,调试时出现错误?

[复制链接]
发表于 2009-10-7 14:38:00 | 显示全部楼层 |阅读模式
以下是范例代码,调试时出现    " 错误: Automation 错误。未提供说明。"
求版主或高手解释一下,谢谢!
  1. (defun C:TEST()
  2. ;;; 这个范例在模型空间建立一个Circle对象,接着
  3. ;;; 允许用户选择图形要打印的布局,然后使用批处理
  4. ;;; 作业将选择的布局传送到当前的打印设备,现时
  5. ;;; 允许用户在某个间隔内取消批处理打印
  6. (VL-LOAD-COM)
  7. (setq AcadObject(vlax-get-acad-object)
  8. AcadDocument(vla-get-ActiveDocument AcadObject)
  9. mSpace(vla-get-ModelSpace AcadDocument)
  10. )
  11. ;;; 定义Circle 对象
  12. (setq center(vlax-make-safearray vlax-vbDouble'(0 . 2)))
  13. (vlax-safearray-fill center'(0 0 0))
  14. (setq radius 50)
  15. ;;; 在模型空间中建立 Circle 对象
  16. (setq CircleObj(vla-AddCircle mSpace center radius))
  17. (vla-ZoomExtents AcadObject)
  18. ;;; 提示用户输入要打印布局
  19. (setq layoutSel(vla-get-Layouts AcadDocument))
  20. (setq util(vla-get-Utility AcadDocument))
  21. (setq ArraySize 0)
  22. (VLAX-FOR layout layoutSel
  23. (princ "你要打印的配置是:")
  24. (princ (vla-get-name layout))(princ " \n")
  25. (vla-InitializeUserInput util 128 "Yes No")
  26. (setq ck(vla-GetKeyword util "(Yes/No):"))
  27. (if (= ck "Yes")
  28. (progn
  29. (setq ArraySize(+ ArraySize 1))
  30. (setq AddedLayouts(vlax-make-safearray vlax-vbString (CONS 1  ArraySize)))
  31. (vlax-safearray-put-element AddedLayouts ArraySize (vla-get-name layout))
  32. )
  33. )
  34. )
  35. ;;; 如果用户未选择任何要打印的配置则结束
  36. (if (= ArraySize 0)
  37. (VL-EXIT-WITH-VALUE 0)
  38. )
  39. ;;; 将含有布局名称的阵列传送到
  40. ;;; 和SetLayoutsToPlot相容的变体
  41. (setq LayoutLists AddedLayouts)
  42. ;;; 从图形取得打印对象
  43. (setq plot(vla-get-plot AcadDocument))
  44. ;;; 设定打印选项
  45. (vla-put-QuietErrorMode plot :vlax-false)  ; 有错误时要发生通知
  46. ; *注意:通常在批处理作业时,您
  47. ; 不需要错误通知,因为
  48. ; 这样会中断批处理
  49. (vla-put-NumberOfCopies plot 5)  ; 只要一份
  50. ;;; 开始选取配置的批处理打印
  51. (vla-StartBatchMode plot ArraySize)  ; 这个批处理中的项目数
  52. (setq BatchCount 1)
  53. (WHILE (<= BatchCount ArraySize)
  54. ;;; 每次调用 PlotToDevice时都必须调用
  55. (vla-SetLayoutsToPlot plot LayoutLists)
  56. ;;; 打印到默认设备
  57. (vla-PlotToDevice plot)
  58. ;;; 显示批处理打印的结果,这个属性实际上应该已经
  59. ;;; 显示到 VBA 格式以及从VBA格式来设定,不过在这个范例中
  60. ;;; 将使用信息框
  61. (if (/= (vla-get-BatchPlotProgress plot) :vlax-true)
  62. (progn
  63. (princ "你要取消批次打印?")
  64. (vla-InitializeUserInput util 128 "Yes No")
  65. (setq ck(vla-GetKeyword util "(Yes/No):"))
  66. (if (= ck "Yes")
  67. (vla-put-BatchPlotProgress plot :vlax-false)
  68. (princ "批次打印已经停止!\n")
  69. )
  70. )
  71. )
  72. (setq BatchCount(+ BatchCount 1))
  73. )
  74. (princ "选取的配置打印完成!")
  75. (princ)
  76. )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-10-12 23:44:00 | 显示全部楼层

我和你遇到了同样的问题。我用的是vla-PlotToFile,我后来查到问题是因为一次打印中只能打印一个plot,不能重复打印plot。也就是说第一份图纸在打印的时候,如果同时把打印第二份图纸的信息传给打印机,由于第一份plot和第二份plot相同,所以它会自动取消,报出这个错误。你可以尝试自动执行,你会发现,当第一份打印完后第二份才可以打印。具体,你可以查看函数库中vla-PlotToFile的用例。

但是我还不知道怎么解决这个问题。只是知道错误的原因。

发表于 2009-10-14 08:08:00 | 显示全部楼层
  1. ;;未詳細測試
  2. (defun C:TEST (/    ACADDOCUMENT     ACADOBJECT
  3.         ARRAYSIZE   CK        LAYOUTLISTS LAYOUTSEL
  4.         LST    MSPACE      PLOT    UTIL
  5.        )
  6.   (vl-load-com)
  7.   (setq ACADOBJECT   (vlax-get-acad-object)
  8. ACADDOCUMENT (vla-get-activedocument ACADOBJECT)
  9. MSPACE      (vla-get-modelspace ACADDOCUMENT)
  10.   )
  11. ;;; 提示用戶輸入要打印佈局
  12.   (setq LAYOUTSEL (vla-get-layouts ACADDOCUMENT))
  13.   (setq UTIL (vla-get-utility ACADDOCUMENT))
  14.   (setq ARRAYSIZE 0)
  15.   (vlax-for LAYOUT LAYOUTSEL
  16.     (princ "你要打印的配置是:")
  17.     (princ (vla-get-name LAYOUT))
  18.     (princ " \n")
  19.     (vla-initializeuserinput UTIL 128 "Yes No")
  20.     (setq CK (vla-getkeyword UTIL "(Yes/No):"))
  21.     (if (= CK "Yes")
  22. (setq LST (cons (vla-get-name LAYOUT) LST))
  23.     )
  24.   )
  25.   (if (= LST NIL)
  26.     (vl-exit-with-value 0)
  27.     (progn
  28.       (setq LAYOUTLISTS
  29.       (vlax-make-safearray
  30.         vlax-vbstring
  31.         (cons 1 (length LST))
  32.       )
  33.       )
  34.       (vlax-safearray-fill
  35. LAYOUTLISTS
  36. LST
  37.       )
  38.     )
  39.   )
  40.   (setvar "BACKGROUNDPLOT" 0)
  41. ;;; 從圖形取得打印對像
  42.   (setq PLOT (vla-get-plot ACADDOCUMENT))
  43. ;;; 設定打印選項
  44.   (vla-put-quieterrormode PLOT :vlax-false) ; 有錯誤時要發生通知
  45.      ; *注意:通常在批處理作業時,您
  46.      ; 不需要錯誤通知,因為
  47.      ; 這樣會中斷批處理
  48.   (vla-put-numberofcopies PLOT 1) ; 只要一份
  49.   (vla-setlayoutstoplot PLOT LAYOUTLISTS)
  50. ;;; 打印到默認設備
  51.   (vla-plottodevice PLOT "DWG TO PDF.PC3")
  52.   ;;(vla-plottodevice PLOT "TIFF 版本 6 (未壓縮).pc3")
  53.   (princ "選取的配置打印完成!")
  54.   (princ)
  55. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 17:28 , Processed in 0.176217 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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