本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, Visual LISP!”。
36.2.1 Visual LISP与AutoCAD的通信
用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。
注意 在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。
此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。
36.2.2 实例1 最简单的LISP程序——“Hello.lsp”
Step 1 创建新文件
(1) 运行AutoCAD 2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入Visual LISP环境。
(2) 单击“Standard(标准)”工具栏中的 按钮,新建一个LISP文件。
Step 2 输入代码并保存文件
(1) 在编辑窗口中输入源文件“Hello.lsp”的代码,如图36-3所示。程序清单如下:
;;;* Hello.lsp – Visual LISP文件实例
(prompt "Pick point:") ;指定运行时的提示信息
(setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt”
(setq hgt 15) ;给变量“hgt”赋值
(Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!")
;调用“Commnad”函数与AutoCAD进行通信
(2) 单击“Standard(标准)”工具栏中的 按钮,以“Hello.lsp”为名保存该文件。
Step 3 运行LISP程序
(1) 确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【Load Text in Editor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。
(2) 如果用户退出Visual LISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【Load Appcation…(加载应用程序)】,弹出“Load/Unload Applications(加载/卸载应用程序)”对话框,如图36-5所示。查找并选择上一步中所创建的“Hello.lsp”文件,并单击Load按钮进行加载。加载后的文件名称将显示在“Loaded Applications(已加载的应用程序)”列表中,并在对话框的左下部显示加载信息。
(3) 完成加载后,单击Load按钮关闭对话框,系统将运行“Hello.lsp”程序。
实例说明
1. LISP源文件为ACSII格式,并忽略空格键、Tab键和回车键产生的空白。文件中的注释部分可放在文件中任何一处,但必须以分号“;”开始。
2. 在编辑窗口中对文件进行编辑时,如果对文件进行了修改或添加了文本,则编辑窗口标题栏上的控制图标将变为 ,同时Visual LISP在状态栏上的文件名后面显示星号“*”。用户保存该文件后,控制图标变为 ,同时状态栏上的星号消失。
3. Visual LISP中为程序编写提供了专门的文本编辑器。该编辑器不仅仅是一个书写工具,不但具有常规的编辑功能,同时还具有许多专为支持AutoLISP编程而设计的功能,主要包括:
(1) 文件语法着色:用于识别AutoLISP程序的不同部分并给它们指定各自的颜色。这使得用户可以更容易地找到程序的各个组成部分和拼写错误。
(2) 设置文本格式:可以设置AutoLISP代码的格式,使代码更易于阅读。用户可以从许多种不同的格式样式中挑选自己喜欢的格式。
(3) 括号匹配:可以通过查找与任意开括号匹配的闭括号来帮助用户检测括号匹配错误。
(4) 执行AutoLISP表达式:不必离开文本编辑器就可以测试表达式和代码行。
(5) 多文件查找:文本编辑器用单个命令就可以在多个文件中查找某个词或表达式。
(6) AutoLISP代码的语法检查:文本编辑器可以对AutoLISP代码进行求值并亮显语法错误。
4. 在AutoCAD中还可以自动加载LISP程序。每次启动AutoCAD时,AutoCAD都从库路径中搜索acad.lsp文件。如果找到该文件,则将它加载到内存中。如果用户在每次运行AutoCAD时都需要加载某个AutoLISP程序,则可将该程序复制到acad.lsp文件中即可实现自动加载。用户还可指定在每次创建新文件时加载acad.lsp文件,请参见第29章。
另一种由AutoCAD自动加载的AutoLISP程序文件用于定义当前菜单的支持函数,其文件扩展名为.mnl。当AutoCAD加载菜单文件时,它用匹配的文件名来搜索.mnl文件。如果AutoCAD找到了该文件,则将它加载到内存中。此功能确保AutoCAD加载适当的菜单操作所需的AutoLISP函数。因此,也可以把LISP程序复制在当前菜单相应的.mnl文件中以实现自动加载。.mnl文件在acad.lsp之后加载。
小 结
本章简要介绍了Visual LISP的基本概念和作用,并通过一个简单的实例讲述了在AutoCAD中开发Visual LISP程序的过程。