AutoLisp程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调试LISP程序
1.启动Visual LISP 2.设置其格式并输入程序代码 3.保存程序 4.加载、运行程序 5.设置断点 6.单步执行程序 (下一嵌套表达式) 7.跟踪变量,通过监视窗口添加跟踪变量,观 察变量的值 9.跟踪表达式的运行结果:监视最新结果。
利用控制台窗口执行LISP程序
在控制台窗口中可以直接运行已加载的LISP 程序中的函数,方法如下:
自定义函数(2)
3.定义AutoCAD命令 用defun C:函数可以定义AutoCAD命令,格 式如下:
(defun C:AutoCAD命令名(/局部变量表)表达式…… 如定义通过矩形的对角点画矩形的命令,源代码如 下: ( defun C:rect(/p1 p2 p3 p4) (setq p1(getpoint “\n 输入矩形的一个角点”)) (setq p3 (getcorner p1 “\n 输入矩形的另一个角点”)) (setq p2(list (car p3) (cadr p1)) (setq p4 (list (car p1) (cadr p3))) (command “pline” p1 p2 p3 p4 “c”) )
常用内部函数(2)
4. 赋值函数 ( setq <符号1><表达式1>……) 5.引用函数 (quote<表达式>)或简写成(„<表达式>) 6.转换函数 (itoa <整数>):整数转换为字符串 (atoi <字符串>):字符串转换为整数 (atof<字符串>):字符串转换为浮点数
常用内部函数(3)
Lisp环境下加载、执行AutoLisp程序
1.加载AutoLisp程序 (1)启动Visual Lisp集成开发环境 工具/AutoLisp/Visual Lisp编辑器 (2)编辑新程序或打开已有的AutoLisp程序 新建文件 (3)编写Lisp程序 (4)工具菜单/检查编辑器中的文字 检查文字是否有语法错误 (5)工具栏/加载活动编辑窗口或工具菜单/编辑 器中的文字。
应用实例2:画旋转矩形
(defun c:rect2( ) (setq p1 (getpoint "\n 请输入矩形的一个角点:")) (setq w (getdist p1 "\n 请输入矩形的长:")) (setq h (getdist p1 "\n 请输入矩形的宽:")) (setq alf (getangle p1 "\n 请输入矩形的旋转角:")) ;交互方式输入各个参数 (setq p2 (polar p1 alf w)) (setq p3 (polar p2 (+ alf (* 0.5 pi)) h)) (setq p4 (polar p1 (+ alf (* 0.5 pi)) h)) (command "pline" p1 p2 p3 p4 "c") )
3.表达式的求值过程 在Lisp语言中,函数之间不存在优先关系, 运算的先后顺序只能通过表的层次来实现, 最里层的表最先被求值,再传给外层的表, 直到求值完毕。
表达式(3)
4.表达式的求值规则 (1)整型数、实型数、字符串,以它们本身的 值作为求值结果 (2)符号以它们当前的约束值作为求值结果 (3)表是根据其第一个元素来进行计算的。 其中quote函数表示直接引用,可用 单号来 表示。如(setq p1 (quote (25 10))) 可写成: (setq p1‟ (25 10))
$ (函数名 参数1 参数2 ……)
应用实例1:画矩形
(defun c:rect1(/ p1 p2 p3 p4) (setq p1 (getpoint "\n 请输入矩形的一个角点: ")) (setq p3 (getcorner p1 "\n 请输入矩形的另一 个角点:")) (setq p2 (list (car p3) (cadr p1))) (setq p4 (list (car p1) (cadr p3))) (command "pline" p1 p2 p3 p4 "c") )
(2) (while 测试式 表达式……) 若测试结果不为nil,则执行各表达式,直到 测试结果为nil。 如 (setq i 1 a 10) (while (<= i 10) (setq a (+ a 10)) 其他表达式 …… (setq i (1+ i) )
LISP程序文件
1.扩展名: .lsp,以 ASCII码文本格式保存。 在命令行提示下,可以直接输入表达式定义 或调用LISP函数,但不便于保留或调试程序。 因此通常以文件形式实现函数的定义和调用。 在一个LISP文件中,可以定义多个函数或命 令。
CAD/CAE/CAM系统的编程基础 与二次开发技术
商业化的CAD/CAE/CAM系统在某些方面难以满足工 程需要,为提高和扩展系统的功能,需要对 CAD/CAE/CAM系统进行开发。 开发的方式主要有三种: (1)在通用CAD/CAE/CAM软件基础进行二次开发, 如SolidEdge, SolidWorks,AutoCAD等CAD系统的二次 开发。 (2)基于CAD/CAE/CAM软件平台的开发。如当前 流行的图形核心技术开发平台有ACIS、Parasolid、 CAS.CADE和Granite等,稳定性好,但成本高。 (3)完全自主版权的开发,如C++等结合OpenGL进 行开发。
程序中的注释
1.整行或后半行注释 分号“; ”开头,到行尾 为注释部分。 2. 整段或行间注释以“;|”开头,以“|;”结 尾。 如
(setq tmode ;| 此处添加注释|; (getvar “tile mode”))
Visual LISP的基本操作
1.进入VLISP 工具菜单\AutoLISP\Visual lISP 编辑器或是 在命令行的提示下输入命令:vlide. 2.切换到AutoCAD窗口 窗口\激活AutoCAD
(car <点或表>):返回第一个元素 (cdr <点或表>):返回除第一个元素外内容的表
常用内部函数(5)
9.主要的交互输入函数 (1)(getangle [pt] [msg]):等待用户输入角度 (2) (getcorner [pt] [msg]):等待用户输入一个角点 (3) (getdist [pt] [msg]):等待用户输入一个距离 (4) (getpoint [pt] [msg]):等待用户输入一个点
表达式(1)
表达式相当于程序的语句,主要是由原子或 表构成的。 1.以表的形式存在的表达式 格式: (函数名 [变元]……) 2.前缀表示法:将函数名放在所有的操作数之 前:如x=(a+b)*c 用Lisp表示为:(setq x (* (+ a b) c)),相当于说 运算符也属于函数。
表达Байду номын сангаас(2)
流程控制(循环结构)
(1)(repeat 整数n 表达式……) 重复执行n次对所有表达式的求值,并返回最 后一次最后一个表达式的计算结果。 (setq a 1 b 100) (repeat 10 (setq a (+ 1 a)) 其他表达式…… (setq b (+ 10 b )) )
流程控制(循环结构)
常用内部函数(5)
9.command函数:执行AutoCAD标准命令 利用command函数AutoLISP几乎可以调用CAD 里的全部命令。 格式:
(command “AutoCAD 命令” 据”……) “命令所需的数
如画圆:(command “circle” “2,4” 5) 如直线: (command “line” “100,120” ”23,116”””):调用line、 pline、 layer时以“”结尾,等效于按一次空格 键。
Lisp语言是人工智能领域中广泛采用的一种 程序设计语言。 AutoLisp 程序和autoCAD的绘图命令可以 透明的结合起来,使设计和绘图完全融为一 体。还可以实现对AutoCAD图形数据 直接访 问、修改,为实现对图形的实时修改、交互 设计、参数化设计以及在绘图领域中应用人 工智能提供了必要的条件。是一种人工智能 绘图语言。
Visual Lisp简介(2)
AutoLISP程序由注释和表达式组成。与其他 的高级语言不同的是,它的注释用;来表示。 而表达式用的是前缀表示法,即把运算符放在 表的第一个元素位置,后面才是其他参数。表 达式一般是通过调用函数来执行。
变量(1)
1.符号:用来作为变量、函数的名字。符号可 包含数据和字符((、)、. 、‘、 “、;除外)。 符号的长度最好不要超过6个字符。 2.变量的数据类型:不需对变量事先进行类型 说明,变量被赋值时,值的类型就是变量的类 型。在程序运行过程中,同一变量在不同的时 刻可以赋予不同类型的值。 3.赋值: (setq 变量1 值1 [变量2 值2 ……])
自定义函数(3)
4.递归调用函数:可以在一个函数的内部定义 另一个函数,也可以递归地定义和调用函数 如求阶乘 (defun factorial (x) (if (=x 0) 1 (* x (factorial(- x 1))) ) )
流程控制(分支结构)
1.分支结构 (1)cond(测试表达式1 结果表达式1)[(测试表 达式2 结果表达式2)]……) 该函数从第一个表起进行测试,若测试表达 式成立,则返回结果表达式的值,否则计算下 一个表。如 (setq n (cond ((<=i 1) 1) ((<=i 2) 4) ((<=i 3) 10) (t 100) ) )
流程控制(分支结构)
3. (progn 表达式 ……)
将n个表达式组合成一个表达式,按顺序计算这n个 表达式,并返回最后一个表达式的计算结果。该函数 主要用于if函数,利用progn同时执行n个表达式。 (if (> a 1) (progn (setq b 2) (print (list b c)) ) (progn (setq b 4) (print (list b 4)) (setq e b ) ) )
自定义函数(1)
1.定义函数
格式:(defun 函数名(变量表/局部变量表)表达式……)
如定义一个加10的函数 (defun add10(x) (setq x(+ 10 x)) 2.调用函数 格式: (函数名 [变元]……) 如 (sqrt 4) (add10 3) (setq y(add10 (+2 3))
常用内部函数(1)
1.计算函数 (+ n m)、 (- n m)、 (* n m)、 (/ n m) (1+ m)、 (1- m)、(sqrt m) 2.关系运算函数 (= n m) (/= n m) (< n m) (>= n m) 3.逻辑运算函数 (and 表达式1 表达式2 ……) (or 表达式1 表达式2…… ) (not (项))
Visual Lisp集成开发环境
1.菜单栏: (1)文件 菜单 (2)编辑菜单 (3)搜索菜单 (4)视图菜单 (5)工程菜单 (6)调试菜单:设置断点或查看变量的状态等 (7)工具菜单:设置文本代码的格式、窗口属 性、设计开发环境等 (8)窗口菜单:控制窗口的显示模式 (9)帮助菜单:在线帮助
AutoCAD的二次开发(Visual Lisp程序设计)
AutoCAD的显著特点之一是它不仅具有强大的 图形绘制与编辑功能,而且体系结构开放,允许用 户对其进行定制与开发。可针对工程领域的特殊应 用问题,开发一个既有计算分析功能和专用的工程 图形数据库,又有强大图形处理功能的CAD应用系 统。
Visual Lisp简介(1)
流程控制(分支结构)
(2) (if 测试条件表达式 表达式1 [表达式2]) 如果测试表达式结果为真,则执行表达式1, 否则执行表达式2。 如 (if (>a 1) (setq b 2) ;如果a>1,则b=2 (if (>a 1) (setq b 2) (setq b 3);如果a>1,则b=2, 否则 b=3
7.字符串处理函数 (strcat <字符串1> <字符串2>):将字符串按顺 序连结成一个新字符串 (substr <字符串><开始><长度>):从开始处截 取某长度的字符串。 (strlen <字符串>):求字符串的长度。
常用内部函数(4)
8.求值函数 (distance <点1> <点2>):两点之间的距离 (polar <点> <角度> <距离>):以相对极坐标方式 返回另一个点 ( angle <点1> <点2>):返回两点连线与X轴正向 夹角 (osnap <点> 字符串):返回以点来指定对象的捕 捉点