明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2051|回复: 7

[基础] [求助]继续回到论坛请教快捷命令PGP文件

[复制链接]
发表于 2010-10-7 17:59:00 | 显示全部楼层 |阅读模式

一个安装程序已经到了尾声,转眼就可以打包供同行用了,可是现在遇到了一个关于快捷命令的问题

可能你们会说,直接在CAD路径下将ACAD.PGP文件改一下,然后在安装时覆盖就行了,可是这样有会很多不可预料的情况。首先不懂人家CAD装在哪,其次,最好不要随便更改别人的文件。

本人自己定义了一个跟菜单文件相同的PGP文件,名TEST.PGP(菜单文件和DLL等都是TEST文件名),原以为程序一加载菜单,PGP就会生效,可是试了很多次还是不行,我曾经装过易桥软件,发现他的PGP文件名跟菜单文件都一样,就是不懂怎么用LISP语言来实现请各位高手不吝赐教,谢谢~

发表于 2010-10-7 18:58:00 | 显示全部楼层

楼上确定自定义菜单的同名pgp文件

可以象ACAD.pgp那样有效吗

发表于 2010-10-7 19:19:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2010-10-7 20:37:00 | 显示全部楼层
liminnet发表于2010-10-7 19:19:00小问题,三年就解决

宝马,你解决了,也帮我解决一下呀
发表于 2010-10-7 22:18:00 | 显示全部楼层
宝马的东西,lz需要无视!
以下代码未测试,摘自网上
  1. ;;;********************************
  2. ;;; No.3 AY工具快捷命令初始化 函数
  3. ;;;********************************
  4. (defun C:ayCMD(/ PGPFile fp i xString aList shortCMD GlobalCMD)
  5. (vl-load-com)
  6. (setq PGPFile "Ayunger.pgp");F:\\Ayungerstudio\\VLisp\\Ayunger.pgp
  7. (if (setq PGPFile (findfile PGPFile))
  8.    (progn;then
  9.     (setq fp (open PGPFile "r"))
  10.     (setq i 1)
  11.     (while (setq xString (read-line fp))
  12.      (if (= (type xString) 'SYM) (setq xString (vl-symbol-name xString)));转换数据文件中无引号的字符串.
  13.      (while (vl-string-search " " xstring);去掉所有的空格.
  14.       (setq xString(vl-string-subst "" " " xstring));空格.
  15.       (setq xString(vl-string-subst "" " " xstring));tab符.
  16.      );end_while
  17.      (if (and (/= (substr xString 1 1) ";") (vl-string-search "," xstring) (vl-string-search "*" xstring))
  18.       (progn
  19.        (setq aList (read (strcat "(" (vl-string-subst " . C:" ",*" xString) ")")))
  20.        (setq shortCMD (vl-string-trim " " (vl-symbol-name (car aList))))
  21.        (setq GlobalCMD (cdr aList))
  22.        ;(vlax-remove-cmd shortCMD);删除已定义的命令.
  23.        (vlax-add-cmd shortCMD GlobalCMD)
  24.       );end_progn
  25.      );end_if
  26.      (setq i (+ i 1))
  27.     );end_while read-line
  28.     (close fp)
  29.    );end_progn then
  30.    (princ "\nAY工具简化命令定义文件 Ayunger.pgp 没找到或不存在!")
  31. );end_if
  32. (princ)
  33. );end_defun
  34. ;;;┏━━━━━━━━━━━━━━━━━━┓
  35. ;;;┃ AY工具快捷命令自动加载(反应器调用) ┃
  36. ;;;┗━━━━━━━━━━━━━━━━━━┛
  37. (C:ayCMD);调用AY工具快捷命令自动加载函数.
  38. (defun ayLoadSCMDReactor();建立AutoCAD文档级反应器.
  39. (vl-load-com)
  40. (if (not #AY_LOADSCMDREACTOR)
  41.     (setq #AY_LOADSCMDREACTOR (vlr-docmanager-reactor nil '((:vlr-documentBecameCurrent . AI:aySCMDCallBack))))
  42. );end_if
  43. (defun AI:aySCMDCallBack (aReactor bList) (C:ayCMD));;;定义反应器的回调函数.
  44. );end_defun
  45. (or #AY_LOADSCMDREACTOR (ayLoadSCMDReactor));自动加载反应器.
  46. (princ "\nAutoCAD AYunger Tools Copyright (C)2001-2008 AYunger Studio")
  47. (prin1)
 楼主| 发表于 2010-10-8 10:38:00 | 显示全部楼层
finale发表于2010-10-7 22:18:00宝马的东西,lz需要无视! 以下代码未测试,摘自网上 以下内容为程序代码:
  • ;;;********************************
  • ;;; No.3 AY工具快捷命令初始化 函数
  • ;;;********************************
  • (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
  • ;;;┏━━━━━━━━━━━━━━━━━━┓
  • ;;;┃ AY工具快捷命令自动加载(反应器调用) ┃
  • ;;;┗━━━━━━━━━━━━━━━━━━┛
  • (C:ayCMD);调用AY工具快捷命令自动加载函数.
  • (defun ayLoadSCMDReactor();建立AutoCAD文档级反应器.
  • (vl-load-com)
  • (if (not #AY_LOADSCMDREACTOR)
  •     (setq #AY_LOADSCMDREACTOR (vlr-docmanager-reactor nil '((:vlr-documentBecameCurrent . AI:aySCMDCallBack))))
  • );end_if
  • (defun AI:aySCMDCallBack (aReactor bList) (C:ayCMD));;;定义反应器的回调函数.
  • );end_defun
  • (or #AY_LOADSCMDREACTOR (ayLoadSCMDReactor));自动加载反应器.
  • (princ "\nAutoCAD AYunger Tools Copyright (C)2001-2008 AYunger Studio")
  • (prin1)
  • Finale,你是好人,谢谢分享。

    发表于 2010-10-8 11:21:00 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
     楼主| 发表于 2010-10-8 15:18:00 | 显示全部楼层
    本帖最后由 作者 于 2010-10-8 17:32:45 编辑

    经调试,发现这个程序还有一个没有考虑到的地方

       (while (vl-string-search " " xstring);去掉所有的空格.

  •       (setq xString(vl-string-subst "" " " xstring));空格.
  •       (setq xString(vl-string-subst "" " " xstring));tab符.
  •      );end_while
  •  

    以 上那段虽然可以去掉空格和TAB,但是,如果PGP文件里首先没有空格,而只有TAB,那就不运行了,所以应该分两个WHILE来写更严谨。

    用(VLAX-ADD-CMD "TEST" 'FUNC)可以定义快捷命令,但能定义CAD重量级命令吗?比如想把COPY简化成Y,应该怎么用(VLAX-ADD-CMD)来完成?

     

    返回列表 发新帖
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2024-10-2 12:20 , Processed in 0.165253 second(s), 26 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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