如何新建pgp文件,定义简化命令
<p> </p><p> </p><p> 如何新建pgp文件,定义简化命令,像附件里的那个外挂一样</p> ;把别人的帖子内容改了一下,直接可以把自己定义的快捷键加到acad.pgp后了。;XXX.PGP是自定义的快捷键文件,放在支持搜索路径中,执行repgp即可。
(defun c:repgp (/ f_txt n cctd)
(princ "\n 此命令加载自定义快捷键.")
(setq f_txt (open (findfile "XXX.pgp") "r"))
(setq cctd '()); 存放读取pgp文件的文本行
(while (setq txt_row (read-line f_txt))
(setq cctd (cons txt_row cctd))
)
(close f_txt)
(setq cctd (reverse cctd)
n 0
)
(setq f_txt (open (findfile "acad.pgp") "A"))
(repeat (length cctd)
(write-line (nth n cctd) f_txt)
(setq n (+ 1 n))
)
(close f_txt)
(setvar "RE-INIT" 16)
(princ)
) 本帖最后由 作者 于 2008-5-7 9:18:13 编辑 <br /><br /> <p>这样做好像没有太大必要,如果一定要这样方法无非方法两种:</p><p>1.直接通过LISP变成读取 ayunger.pgp 文件,然后定义成</p><p>(defun c:XX () (vla-sendcommand .....))</p><p>的格式,最后 eval</p><p>2.备份 acad.pgp(如acad,pgp_bak) , 用 vl-file-copy 的方法将 ayunger.pgp 复制到 acad.pgp结尾</p><p>然后(setvar "re-init" 16)重新初始化pgp,最后恢复从备份的 acad.pgp_bak 恢复acad.pgp</p><p></p> 直接到论坛下查找,我前几天发过一个本人ayunger.fas中调用PGP的完整函数! <p>这是本人《一个非常好用的AutoCAD工具集》中关于自动加载Ayunger.PGP文件的函数,先与大家分享!</p><p>有问题,直接: E-mail:AyungerStudio@163.com或QQ:420304230</p><p>;;********************************<br/>;;; No.3 AY工具快捷命令初始化 函数 <br/>;;;********************************<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><br/>;;;┏━━━━━━━━━━━━━━━━━━┓<br/>;;;┃ AY工具快捷命令自动加载(反应器调用) ┃<br/>;;;┗━━━━━━━━━━━━━━━━━━┛<br/>(C:ayCMD);调用AY工具快捷命令自动加载函数. <br/>(defun ayLoadSCMDReactor();建立AutoCAD文档级反应器.<br/> (vl-load-com)<br/> (if (not #AY_LOADSCMDREACTOR)<br/> (setq #AY_LOADSCMDREACTOR (vlr-docmanager-reactor nil '((:vlr-documentBecameCurrent . AI:aySCMDCallBack))))<br/> );end_if<br/> (defun AI:aySCMDCallBack (aReactor bList) (C:ayCMD));;;定义反应器的回调函数.<br/>);end_defun<br/>(or #AY_LOADSCMDREACTOR (ayLoadSCMDReactor));自动加载反应器.<br/>(princ "\nAutoCAD AYunger Tools Copyright (C)2001-2008 AYunger Studio")<br/>(prin1)<br/></p> <p>盼高手来解决</p><p></p> 直接用WINDOWS的记事本写就行。也可直接改ACAD.PGP,改后另存。 <p>高手去哪了</p> <p>可不可以改成别的名称,比如:123.pgp</p><p>可后续怎么调用此pgp文件呢</p> <p>盼高手解答。</p><p>这个问题也困惑我好久了!~</p> 3楼不是说了? <p>说白了就是用lisp调用ayunger.pgp(而不是acad.pgp)里的简化命令</p><p>如何加载? 如何调的问题?</p> <p>在此谢谢各位热心人,(defun c:XX () (vla-sendcommand .....))我不知如何操作</p><p>或许看来是我没说清楚</p><p>比如说我做了个小程序,vlx格式的</p><p>用这个程序的是别人</p><p>为了能让别人能按他的喜好去修改命令(或者我的程序跟其它程序的命令有冲突时)</p><p>我必须建一个pgp文件,就像一楼ayunger.pgp,他想咋改就咋改</p><p>当然我不可能将命令复制到acad.lsp后面,因为将来程序升级时,会不好控制</p>