接昨天的教程。今天来谈谈一些高级的话题,这些主要涉及到AutoLISP或Visual LISP的编程问题了。即如何解决向AutoCAD添加支持路径,添加菜单了。我只能说我提供一种解决方法,一种解决思路。其实这个与我做的这个安装程序制作向导本身的关系不是很大了。使用LISP方式解决的好处是:您可以最大限度地控制你的程序,按照你本人的意愿运行。
这里以我写的一个稍复杂一点的工具箱(QTools for AutoCAD)作为例子,在这个例子中,我需要添加AutoCAD支持路径,需要在启动时添加工具箱用的菜单条。
准备好文件夹,如图所示:
在这个文件夹中,可以看到有三个菜单文件,对应不同的AutoCAD版本。另有一个需要AutoCAD启动时加载的LISP程序:LoadQTools.lsp
好了,先常规设置,基本的设置我就不详述了,可以参见[教程(一)]。我们这里设置AppID为QTools for AutoCAD。如图:
指定程序文件夹与启动时要加载的文件
我们主要的工作都是在LoadQTools.lsp这个LISP程序中完成的。当然,你也可以选择ARX,VBA。它们都有能力完成这个LISP程序完成的工作。具体如何着手写你完全可以发挥你的创造性。我这里提供一个LISP的解决方案。就LISP这种方式来说,也有很多不同的解决方案,这里的思路仅供参考。
我们来分析一下LoadQTools.lsp的代码。
首先,在这个程序判断是不是AutoCAD 2000以上的版本,如果是R14,拒绝加载,退出。
- ;;; 判断是否加载本文件
- (if (car (atoms-family 1 '("vl-load-com")))
- (vl-load-com)
- ;;else
- (progn
- (Alert
- "这个程序集是为AutoCAD 2000以及更高的版本设计的,许多程序有可能在没有Visual Lisp for R14支持的AutoCAD R14上不能正确地运行。"
- )
- (exit) ; 版本不符,退出加载。
- )
- )
第二步,定义一些设置菜单与支持路径要用的基本函数:好了,下面可以开始设计初始化工具箱的主程序了:- ;;; 初始化主函数
- ;;; ---------------------------------------------------
- (defun Init_QTools ()
- ;; 添加支持路径
- (QF_AddSupportPath (GetQToolsPath) nil)
- (QF_AddSupportPath (strcat (GetQToolsPath) "\\LISP") nil)
- (QF_AddSupportPath (strcat (GetQToolsPath) "\\LIB") nil)
- (QF_AddSupportPath (strcat (GetQToolsPath) "\\BIN") nil) ;; 如果菜单组还没有被加载,则加载之
- (if (not (menugroup "QTools"))
- (Load_QToolsMenu)
- ) ;; 安排菜单条的位置
- (QTools_PlaceMenu) (princ)
- )
- ;;; 以上函数部分定义完毕
主程序定义完毕,可以逐条执行了:- ;;; -----------------------------------------------------
- ;;; 主程序:
- ;;; -----------------------------------------------------
- (princ "\n加载QTools工具集……")(setq qtools_cmdecho_save (getvar "cmdecho"))
- (setvar "cmdecho" 0)(Init_QTools)
- (setvar "cmdecho" qtools_cmdecho_save)
- (setq qtools_cmdecho_save nil)(princ "\nQTools工具集加载完毕。版本 2005.4")
- (princ);; autoload
- (autoload "CWCT" '("CHANGE-THICKNESS" "CHANGE-WIDTH"))
- ;; ……下略
上面的代码最后,开始定义按需加载的LISP程序了。关于Autoload函数我就不多解释了,可以参考AutoCAD的相关文档。Autoload这部分也可以定义在相应菜单文件的MNL文件中。这个MNL文件会在菜单加载时自动加载。在AutoCAD2006中,菜单文件的格式发生了一点变化,它仍然支持MNU, MNS, MNC文件,但它的文档中称这几个格式在未来的AutoCAD版本中不再支持。新的菜单格式为CUI文件。上述代码中使用的仍然是MNU文件,在AutoCAD 2006中是可以运行的,但在将来的AutoCAD版本中,需要作一些改变。至此,这个加载过程完毕。通过安装制作向导的包装,完全可以生成一个看上去比较专业的安装程序了。(全文完)相关链接:
● AutoLISP程序的安装制教程(一)
● AutoCAD二次开发程序的安装制作向导
● Inno Setup
● 7-zip
|