美文网首页狮猿社AutoCAD
CAD 重复加载Acad.lsp

CAD 重复加载Acad.lsp

作者: 锦囊喵 | 来源:发表于2020-02-24 17:42 被阅读0次

原文链接

当在Acad.lsp 中使用S :: STARTUP和-VBARUN命令来加载,可能导致重复载入Acad.lsp。即使ACADLSPASDOC变量为0,也可能发生这种情况。此时存在的情况是,批量操作会被“宏名称”输入框所中断。

其原因是AutoCAD尚未在S :: STARTUP函数完成初始化,此时命令-VBARUN被调用。

解决方法是,VBASTMT命令允许您从命令行或LISP表达式使用带参数的VBA函数进行调用。在这种情况下,我们可以使用(S :: STARTUP)函数中的(vla-sendcommand)来调用VBA的“ RunMacro”方法。这种方法不会导致Acad.lsp的重新加载

(defun-q mystartup ( )
   (vl-load-com) ;load ActiveX objects
   ;;replace this line: (command ".-vbarun" "MyModule.MySub") 
   ;;with the following:  
   (arxload "acadvba.arx") ;ensure Acad.dvb is loaded
   (vla-sendcommand 
      (vla-get-activedocument (vlax-get-acad-object))
      "vbastmt\n\ThisDrawing.Application.RunMacro \"MyModule.MySub\"\n"
   )
)
(setq s::startup (append s::startup mystartup))
(defun-q mystartup ( )
   (vl-load-com) ;load ActiveX objects
   ; (arxload "acadvba.arx") ;
   (vl-vbaload "C:\\Program Files (x86)\\AutoCAD 2008\\Support\\Pneumatic\\AirBlockExport.dvb") ;ensure Acad.dvb is loaded
   (vla-sendcommand 
      (vla-get-activedocument (vlax-get-acad-object))
      "vbastmt\n\ThisDrawing.Application.RunMacro \"ThisDrawing.CreateVBAToolBar\"\n"
      ; "vbastmt\n\ThisDrawing.Application.RunMacro \"MyModule.MySub\"\n"
   )
)
(setq s::startup (append s::startup mystartup))

以下代码可供参考

(vl-load-com)
(IF (NOT STARTUP-HAS-RUN)
...put your code that would be in acad.lsp here....
...then set the flag to prevcent it running again, and propogate to new drawings...
(setq STARTUP-HAS-RUN 1)
(vl-propagate 'STARTUP-HAS-RUN)
)

相关文章

网友评论

    本文标题:CAD 重复加载Acad.lsp

    本文链接:https://www.haomeiwen.com/subject/qfavqhtx.html