一、 Visual LISP概述
Visual LISP简称VLISP,是为加速AutoLISP程序开发而设计的软件工具,它提供了一个完整的集成开发环境,包括编译器、调试器和其他工具,它可以显著地提高自定义AutoCAD的效率。
VLISP提供的主要工具有:文本编辑器、格式编排器、语法检查器、源代码调试器、检验和监视工具、文件编译器、工程管理系统、上下文相关帮助与自动匹配功能和智能化控制台等。
二、 启动和退出Visual LISP集成开发环境
1. 启动步骤:(菜单方式)
(1) 启动AutoCAD
(2) 工具——AutoLisp——Visual LISP编辑器
若使用键盘命令,则:
命令:vlisp或vlide
2.退出:
文件——退出
三、 Visual LISP 集成开发环境介绍
包含以下几个部分:
1. 菜单栏
2. 工具栏:标准、调试、工具、搜索、视图 (共5个)
3. 控制台窗口
可输入AutoLisp命令,代替菜单和工具栏命令
4. 状态栏——屏幕底部
显示Visual LISP的状态信息
5. 跟踪窗口
启动时包含:关于Visual LISP当前版本的信息、启动Visual LISP遇到错误时的一些信息。
6. 文本编辑器
打开或新建一个Visual LISP源程序,就可以看到文本编辑器的全貌。
7. 其他Visual LISP窗口(必要时才打开)
(一)Visual LISP菜单介绍
¨菜单的内容:随着激活窗口的不同菜单内容将会不同。
1. 文件:打开、新建、保存
2. 编辑:复制、粘贴、括号匹配
3. 搜索:查找、替换文本、设置书签
4. 视图:查找、替换变量及符号值等
5. 工程:应用程序的工程功能——管理项目、编译程序等
6. 调试:提供程序调试功能——设置和删除断点、单步执行、检查变量状态、检查表达式结果等
7. 工具:设置Visual LISP选项文本格式、环境选项变量,如窗口和工具栏的位置
8. 窗口:提供窗口管理功能
9. 帮助:提供帮助功能,包括显示在线帮助
(二)工具栏介绍
工具栏——包括一系列功能的Vlisp命令组
1. 标准:新建、打开、保存、打印输出、剪切、复制、粘贴、取消、恢复、完成词语功能
2. 工具:加载整个活动窗口代码、加载指定部分代码、语法检查(全部、指定部分)、对窗口代码格式化(整个活动窗口、指定代码)、设置注释代码、取消整块注释块、在线帮助
3. 搜索:查找、替换、查找并替换、设置或取消书签、下一个书签、上一个书签
4. 视图:切换到AutoCAD窗口、选择窗口、Visual LISP控制台、打开检验窗口、堆栈跟踪、符号服务、自动匹配、显示监视窗口
5. 调试:下一层嵌套表达式、下一个表达式、跳出表达式、继续执行、退出、重置、设置或取消断点切换、添加监视、显示上一个断点
(三)控制台操作
1. 控制台的功能
这里是用命令操作的地方(Visual LISP命令、AutoLISP命令),并能看到结果,类似于AutoCAD的命令行窗口
如:(setq a “hello,The world!”)
查看a的值时
在控制台窗口用:a¿(¿表示回车)
AutoCAD命令:!a¿
2. Visual LISP控制台窗口中的独特特性
¨可以在新的一行上输入上一行没有完成的AutoLISP表达式
¨可在¿前输入多个表达式,并在Visual LISP给控制台返回一个值之前将为每一个表达式求值
¨光标在任意位置均可用¿移至提示符所在行上,如果选中的有文本,则同时移至提示符所在行(此功能可以复制)
¨使用Tab键可获得以前输入的文本,每按一次即可将上一次的文本显示,循环执行。Shift+Tab与Tab类似,只是方向相反
¨使用Tab键可以实现关联查找,如输入“(+Tab”会在以前输入的文本中查找以“(+”开头的文本
¨Esc键清除提示符下的所有字符,shift+Esc则离开当前行上的文本,并在新的提示符下准备接受用户的输入
3. 系统控制台的快捷菜单——单击右键
*小技巧:可在控制台窗口与AutoCAD命令行窗口之间复制和粘贴文本。
(四)文本编辑器概述
主要功能:
1. 彩色代码显示
2. 文本格式化
3. 括号匹配
4. 执行AutoLISP表达式(不离开文本编辑器)
5. 在多文件间进行查找
6. 语法检查
(五)加载和运行AutoLISP程序
1. 在AutoCAD窗口操作(略)
2. 在VLISP环境下操作
可加载完整的和部分的AutoLISP程序文件
¨加载完整的AutoLISP程序:文件——打开文件——选择文件内容——工具——加载选定代码
¨加载部分的AutoLISP程序:选择部分文件内容——工具——加载选定代码
四、 文本编辑器主要功能及其实现
1. 文件/编辑/保存操作
有关操作与Windows环境下的应用软件(如Word等)类似,这里从略。
2. 代码分色器
和在控制台窗口中相同,一旦在文本编辑器中输入文本后,Visual LISP会判断所输入的文本是否是一个AutoLISP内部函数、数字、字符串或者其它的已知元素,并用每一种元素自己的颜色显示这些文本。
默认的AutoLISP语言代码配色方案
AutoLISP元素 | 颜色 |
内部函数和被保护的符号 | 蓝色 |
字符串 | 粉色 |
整数 | 绿色 |
实数 | 浅蓝色 |
注释 | 粉色,背景为灰色 |
括号 | 红色 |
其他(如用户变量名等) | 黑色 |
¨Visual LISP可以按照一些语言的种类确定代码颜色,方法是:
工具——窗口属性——按语法着色
¨用户可以自定义颜色配置,方法是:
工具——窗口属性——配置当前窗口——打开“窗口属性”对话框进行配置
3. 文本格式化
(1)设置AutoLISP代码格式的对话框
工具——环境选项——Visual LISP格式选项
(2)AutoLISP代码格式的总体式样
有普通、宽行、窄行和分栏四种式样。
4. 语法检查
(1) 括号匹配
向前匹配——将插入点(光标位置)移到和开括号相匹配的闭括号之后
向后匹配——将插入点(光标位置)移到和闭括号相匹配的开括号之后
向前选择——插入点的移动和“向前匹配”相同,同时选中文本
向后选择——插入点的移动和“向后匹配”相同,同时选中文本
(2) 检查语法错误
¨应用彩色代码功能检查语法错误
¨用语法检查功能检查语法错误
主要检查的语法错误为:
·圆括号不匹配
·函数的参数数目不正确
·函数的参数类型不正确
·某些特殊函数的语法不正确
方法:工具——“检测编辑器中的文字”
如果检测到错误,就会在“编译输出”窗口看到错误信息。
五、 调试程序
VLISP提供的调试程序工具有:
¨监视窗口:在程序执行过程中查看变量的值
¨检验窗口:在“检验”对话框中显示指定对象的详细信息
¨“符号服务”对话框:符号可以使变量或函数名。通过符号服务对话框可以查看变量的当前值、函数的定义和设置变量及函数的一些特性
¨断点循环模式:在程序内部设置断点,中断程序的执行,并允许用户在中断时查看和修改对象值
下面再看几个用AutoLISP语言编程画图的例子:
1. 绘制太极图案
程序源代码:
(defun yinyang(/ origin radius i-radius half-r origin-x origin-y os) ;
(setq os (getvar "OSMODE")) ;
(setvar "OSMODE" 0) ;
(setq origin (getpoint "\n图案的中心:"))
(setq radius (getdist "\n图案的半径:" origin))
(setq i-radius (getdist "\n内部圆的半径:" origin))
(if (> i-radius radius) (setq i-radius (/ radius 4)))
;
(setq half-r (/ radius 2))
(setq origin-x (car origin))
(setq origin-y (cadr origin))
(command "CIRCLE" origin radius)
(command "ARC"
"C"
(list origin-x (+ origin-y half-r))
(list origin-x (+ origin-y radius))
origin
)
(command "ARC"
"C"
(list origin-x (- origin-y half-r))
(list origin-x (- origin-y radius))
origin
)
(command "CIRCLE"
(list origin-x (+ origin-y half-r))
i-radius
)
(command "CIRCLE"
(list origin-x (- origin-y half-r))
i-radius
)
(setvar "OSMODE" os)
(princ) ;
)
2. 绘制正弦函数曲线:Y=ASin(X)
;给定坐标原点、周期数和振幅,绘制正弦曲线,自变量以“弧度”为单位
(defun c:drawsin () ;
(initget 1) ;见辅导材料P47
(setq lp (getpoint "\n 坐标原点:") ;
lpx (car lp)
lpy (cadr lp)
)
(initget 7) ;
(setq n (getint "\n 周期数:")) ;
(setq a (getint "\n 振幅:"))
(setq x 0
step 0.02
)
(command "pline") ;
(while (<= x (* 2 n pi)) ;
(command (list (+ lpx x) ;
(+ lpy (* a (sin x)))
)
)
(setq x (+ x step))
)
(command "") ;结束正弦曲线绘制
(command "line" lp (list (+ lpx (* 2 n pi)) lpy) "")
;画水平轴
(command "line"
(list lpx (+ lpy (* 2 a)))
(list lpx (- lpy (* 2 a)))
""
) ;画垂直轴
(command "zoom" "e" "") ;图形极大化
(command) ;中断执行任何命令
)
3.绘制极坐标方程R=1+2cos2a在区间[0,2p]的图像
;绘制极坐标方程曲线
(defun c:draw (/ cp)
(setq cp (getpoint "\n基点:"))
(command "ucs" "w" "ucs" "o" cp "pline")
(drawl 0) ;函数调用
(command "zoom" "e") ;图形极大化
)
(defun drawl (x / r)
(if (>= x (* 2 pi)) ;
(command "3,0" "" "ucs" "w")
(progn (setq r (+ 1 (* 2 (cos (* 2 x))))) ;
(command (list (* r (cos x)) (* r (sin x))))
(drawl (+ x 0.05)) ;函数的递归调用
)
)
)
暂无评论内容