ayunger 发表于 2008-6-1 13:18:00

[求助]高手赐教: 如何在AutoCAD多文档切换之间自动加载自定义的PGP

本帖最后由 作者 于 2008-6-1 17:57:12 编辑 <br /><br /> <p>下面是一个自定义的Aunger.PGP文件加载程序,但是存在一个问题:<br/>发现当第一次打开autocad文件时,会自动加载Aunger.PGP中自定义的命令,但是当多文档之间切换时,则丢失了,只能手动运行一次ayCMD命令,很麻烦的,请高手赐教!谢谢</p><p><br/>(defun C:ayCMD(/ PGPFile fp i xString aList shortCMD GlobalCMD)<br/>(vl-load-com)<br/>(setq PGPFile "Ayunger.pgp");F:\\Ayungerstudio\\VLisp\\Ayunger.pgp<br/>(if (setq PGPFile (findfile PGPFile))<br/>(progn;then<br/>(setq fp (open PGPFile "r"))<br/>(setq i 1)<br/>(while (setq xString (read-line fp))<br/>(if (= (type xString) 'SYM) (setq xString (vl-symbol-name xString)));转换数据文件中无引号的字符串.<br/>(while (vl-string-search " " xstring);去掉所有的空格.<br/>(setq xString(vl-string-subst "" " " xstring));空格.<br/>(setq xString(vl-string-subst "" " " xstring));tab符.<br/>);end_while<br/>(if (and (/= (substr xString 1 1) ";") (vl-string-search "," xstring) (vl-string-search "*" xstring))<br/>(progn<br/>(setq aList (read (strcat "(" (vl-string-subst " . C:" ",*" xString) ")")))<br/>(setq shortCMD (vl-string-trim " " (vl-symbol-name (car aList))))<br/>(setq GlobalCMD (cdr aList))<br/>;(vlax-remove-cmd shortCMD);删除已定义的命令.<br/>(vlax-add-cmd shortCMD GlobalCMD)<br/>);end_progn<br/>);end_if<br/>(setq i (+ i 1))<br/>);end_while read-line<br/>(close fp)<br/>);end_progn then<br/>(princ "\nAY工具简化命令定义文件 Ayunger.pgp 没找到或不存在!")<br/>);end_if<br/>(princ)<br/>);end_defun</p><p>;;Ayunger.PGP<br/>;;<br/>;; AY工具命令简化设置文件<br/>;;<br/>;; Copyright Ayunger Studio 2001-2008<br/>;; E-mail: <a href="mailto:AyungerStudio@163.com">AyungerStudio@163.com</a><br/>;;<br/>;; 格式: &lt;简化命令&gt;, *&lt;完全命令&gt;<br/>;;<br/>ARW, *ayArw <br/>TL, *ayRailway <br/>SPX, *aySpx <br/>ZPX, *ayZpx <br/>PDX, *ayPdx <br/>PDXC, *ayPdxC <br/>CX, *ayPerCurve <br/>QX, *ayTanCurve <br/>LL, *ayLL&nbsp; <br/></p><p>【按照本人的理解,应该是有关文档之间切换时调用的“反应器”函数,但是关于这方面的资料太少了!请帮助】</p>

ayunger 发表于 2008-6-3 13:00:00

<p>非常感谢论坛的同胞们,这个问题终于解决了!</p><p>该问题的解决源于论坛下“求一段小lsp让我设置好捕捉后,永不关掉! ”的启发!</p><p>(defun ayLoadShortCMD_Reactor();建立AutoCAD文档级反应器<br/>&nbsp;(vl-load-com)<br/>&nbsp;(if (not *AY_LOADSHORTCMDREACTOR*)<br/>&nbsp;&nbsp; (setq *AY_LOADSHORTCMDREACTOR* (vlr-docmanager-reactor nil<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '((:vlr-documentBecameCurrent . ayShortCMDCallBack))))<br/>&nbsp;);end_if<br/>&nbsp;(defun ayShortCMDCallBack (aReactor bList);;;定义反应器的回调函数.<br/>&nbsp; (C:ayCMD);调用AY工具快捷命令自动加载函数.<br/>&nbsp;);end_defun<br/>);end_defun<br/>(or *AY_LOADSHORTCMDREACTOR* (ayLoadShortCMD_Reactor));自动加载反应器.<br/></p>

asen 发表于 2008-6-2 23:22:00

可以通过在ayunger.MNL中加入<font color="#d52b2b">(<font color="#ff0000">alert</font> "\nayunger.MNL文件加载测试!")</font>测试

asen 发表于 2008-6-1 18:02:00

不对,与本文件无关

asen 发表于 2008-6-1 18:05:00

教你一招吧,在你压缩包文件夹里面建立一个文件,文件名为 <font color="#ff0000">Aunger.mnl</font> ,然后把这个语句 <font color="#ff0000">(C:ayCMD)</font> 加入里面,就可以了。

ayunger 发表于 2008-6-2 18:06:00

<p>首先谢谢楼上的兄弟,但是分析如下:</p><p>1、中ayunger.MNL中定义的函数(C:ayCMD)只在打开或新建文档时加载一次,</p><p>而我所需要的是在活动文档之间切换时,自动运行该函数。</p><p>2、可以通过在ayunger.MNL中加入一句如(Princ "\nayunger.MNL文件加载测试!"),测试就可知晓。</p><p>3、问题按照本人的理解应该是:文档之间切换的反应器函数,但是没有相关的资料。</p>

asen 发表于 2008-6-2 23:13:00

本帖最后由 作者 于 2008-6-2 23:13:56 编辑 <br /><br /> <p>在ayunger.MNL中加入一句如(<font color="#ff0000">alert</font> "\nayunger.MNL文件加载测试!") 测试</p>

ayunger 发表于 2008-6-2 23:56:00

本帖最后由 作者 于 2008-6-2 23:57:33 编辑 <br /><br /> <p>是的,就是只运行一次,而对于已经打开的多文档(如:1.dwg、2.dwg、3.dwg)之间切换时不会发生;</p><p>而我需要的就是在多文档之间切换时(如当前文件为1.dwg,需要切换到3.dwg时)均能够运行一次,</p><p>以便加载我所需要的诸如快捷命令等,因为一旦切换原来由C:ayCMD调用的快捷命令会失效!</p>

cjun2258 发表于 2008-11-17 22:13:00

<p>加載後,切換文檔時會有下面錯誤</p><p>錯誤: 發生異常狀況: 0xC0000005 (無法存取)<br/>; 警告: unwind 略過 異常狀況<br/>; 錯誤: 發生異常狀況: 0xC0000005 (無法存取)</p><p>該怎樣解決??</p>

cjun2258 发表于 2008-11-17 22:32:00

<p>隻要把(vlax-add-cmd shortCMD GlobalCMD)這句刪掉,就不會出錯,可刪掉了這個程序就沒有用了,</p>
页: [1]
查看完整版本: [求助]高手赐教: 如何在AutoCAD多文档切换之间自动加载自定义的PGP