明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3538|回复: 9

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

[复制链接]
发表于 2008-6-1 13:18:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-6-1 17:57:12 编辑

下面是一个自定义的Aunger.PGP文件加载程序,但是存在一个问题:
发现当第一次打开AutoCAD文件时,会自动加载Aunger.PGP中自定义的命令,但是当多文档之间切换时,则丢失了,只能手动运行一次ayCMD命令,很麻烦的,请高手赐教!谢谢


(defun C:ayCMD(/ PGPFile fp i xString aList shortCMD GlobalCMD)
(vl-load-com)
(setq PGPFile "Ayunger.pgp");F:\\Ayungerstudio\\VLisp\\Ayunger.pgp
(if (setq PGPFile (findfile PGPFile))
(progn;then
(setq fp (open PGPFile "r"))
(setq i 1)
(while (setq xString (read-line fp))
(if (= (type xString) 'SYM) (setq xString (vl-symbol-name xString)));转换数据文件中无引号的字符串.
(while (vl-string-search " " xstring);去掉所有的空格.
(setq xString(vl-string-subst "" " " xstring));空格.
(setq xString(vl-string-subst "" " " xstring));tab符.
);end_while
(if (and (/= (substr xString 1 1) ";") (vl-string-search "," xstring) (vl-string-search "*" xstring))
(progn
(setq aList (read (strcat "(" (vl-string-subst " . C:" ",*" xString) ")")))
(setq shortCMD (vl-string-trim " " (vl-symbol-name (car aList))))
(setq GlobalCMD (cdr aList))
;(vlax-remove-cmd shortCMD);删除已定义的命令.
(vlax-add-cmd shortCMD GlobalCMD)
);end_progn
);end_if
(setq i (+ i 1))
);end_while read-line
(close fp)
);end_progn then
(princ "\nAY工具简化命令定义文件 Ayunger.pgp 没找到或不存在!")
);end_if
(princ)
);end_defun

;;Ayunger.PGP
;;
;; AY工具命令简化设置文件
;;
;; Copyright Ayunger Studio 2001-2008
;; E-mail: AyungerStudio@163.com
;;
;; 格式: <简化命令>, *<完全命令>
;;
ARW, *ayArw
TL, *ayRailway
SPX, *aySpx
ZPX, *ayZpx
PDX, *ayPdx
PDXC, *ayPdxC
CX, *ayPerCurve
QX, *ayTanCurve
LL, *ayLL 

【按照本人的理解,应该是有关文档之间切换时调用的“反应器”函数,但是关于这方面的资料太少了!请帮助】

 楼主| 发表于 2008-6-3 13:00:00 | 显示全部楼层

非常感谢论坛的同胞们,这个问题终于解决了!

该问题的解决源于论坛下“求一段小lsp让我设置好捕捉后,永不关掉! ”的启发!

(defun ayLoadShortCMD_Reactor();建立AutoCAD文档级反应器
 (vl-load-com)
 (if (not *AY_LOADSHORTCMDREACTOR*)
   (setq *AY_LOADSHORTCMDREACTOR* (vlr-docmanager-reactor nil
                    '((:vlr-documentBecameCurrent . ayShortCMDCallBack))))
 );end_if
 (defun ayShortCMDCallBack (aReactor bList);;;定义反应器的回调函数.
  (C:ayCMD);调用AY工具快捷命令自动加载函数.
 );end_defun
);end_defun
(or *AY_LOADSHORTCMDREACTOR* (ayLoadShortCMD_Reactor));自动加载反应器.

回复 支持 0 反对 1

使用道具 举报

发表于 2008-6-2 23:22:00 | 显示全部楼层
可以通过在ayunger.MNL中加入(alert "\nayunger.MNL文件加载测试!")测试
回复 支持 0 反对 1

使用道具 举报

发表于 2008-6-1 18:02:00 | 显示全部楼层
不对,与本文件无关
发表于 2008-6-1 18:05:00 | 显示全部楼层
教你一招吧,在你压缩包文件夹里面建立一个文件,文件名为 Aunger.mnl ,然后把这个语句 (C:ayCMD) 加入里面,就可以了。
 楼主| 发表于 2008-6-2 18:06:00 | 显示全部楼层

首先谢谢楼上的兄弟,但是分析如下:

1、中ayunger.MNL中定义的函数(C:ayCMD)只在打开或新建文档时加载一次,

而我所需要的是在活动文档之间切换时,自动运行该函数。

2、可以通过在ayunger.MNL中加入一句如(Princ "\nayunger.MNL文件加载测试!"),测试就可知晓。

3、问题按照本人的理解应该是:文档之间切换的反应器函数,但是没有相关的资料。

发表于 2008-6-2 23:13:00 | 显示全部楼层
本帖最后由 作者 于 2008-6-2 23:13:56 编辑

在ayunger.MNL中加入一句如(alert "\nayunger.MNL文件加载测试!") 测试

 楼主| 发表于 2008-6-2 23:56:00 | 显示全部楼层
本帖最后由 作者 于 2008-6-2 23:57:33 编辑

是的,就是只运行一次,而对于已经打开的多文档(如:1.dwg、2.dwg、3.dwg)之间切换时不会发生;

而我需要的就是在多文档之间切换时(如当前文件为1.dwg,需要切换到3.dwg时)均能够运行一次,

以便加载我所需要的诸如快捷命令等,因为一旦切换原来由C:ayCMD调用的快捷命令会失效!

发表于 2008-11-17 22:13:00 | 显示全部楼层

加載後,切換文檔時會有下面錯誤

錯誤: 發生異常狀況: 0xC0000005 (無法存取)
; 警告: unwind 略過 異常狀況
; 錯誤: 發生異常狀況: 0xC0000005 (無法存取)

該怎樣解決??

发表于 2008-11-17 22:32:00 | 显示全部楼层

隻要把(vlax-add-cmd shortCMD GlobalCMD)這句刪掉,就不會出錯,可刪掉了這個程序就沒有用了,

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-21 15:41 , Processed in 0.291029 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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