第五章第二节AUTOLISP程序设计简介
- 格式:pdf
- 大小:312.93 KB
- 文档页数:26
AUTOLISP程序设计技巧AUTOLISP(即AutoCAD Lisp)是一种用于AutoCAD软件的编程语言。
它基于Lisp语言,可以用于创建自定义命令和功能,以自动执行一系列任务。
在编写AUTOLISP程序时,可以采用一些技巧来提高代码的可读性和性能。
下面将介绍一些常用的AUTOLISP程序设计技巧。
1.变量命名:为了增加代码的可读性,应该选择具有描述性的变量名。
避免使用单个字母或简写的名称,而应使用有意义的名称来描述变量的用途或含义。
2.注释:在代码中使用适当的注释是非常有帮助的,可以解释代码的目的、逻辑和特定部分的功能。
注释应该清晰明了,不冗余,并使用大写字母或其他方法来突出显示。
3.函数:使用函数来分割代码段,以便在需要时可以多次调用相同的代码块。
函数的使用可以提高代码的可读性,并使其更容易维护。
4.错误处理:在代码中加入适当的错误处理机制非常重要,可以避免程序崩溃或产生不期望的结果。
使用条件语句和错误处理函数来检测和处理可能发生的错误。
5.循环:使用循环语句来处理重复性任务,并减少代码的冗余。
根据任务的特点选择合适的循环类型(例如FOR循环、REPEAT循环等)。
6.嵌套:在必要时使用嵌套结构,将代码组织成逻辑结构清晰的块。
使用适当的缩进和代码布局来增加代码的可读性。
7.字符串处理:AUTOLISP中的字符串处理功能非常强大,可以使用字符串函数来处理、操作和格式化字符串。
了解并熟练使用字符串函数可以提高代码的灵活性和功能。
8.数组和列表:使用数组和列表可以存储和处理多个值。
熟练使用与数组和列表相关的函数(如CAR、CDR、CONS、LIST等)可以简化代码并提高性能。
9. 命令行交互:通过与用户进行命令行交互,可以提高程序的交互性。
使用getstring、princ等函数来获取用户输入,并使用条件语句来根据输入执行相应的操作。
10.优化:编写高效的代码可以提高程序的性能。
使用较少的迭代步骤、减少不必要的计算、选择合适的数据结构等都可以提高程序的效率。
AutoLISP程序语言设计AutoLISP程序语言设计目录⒈简介⑴ AutoLISP概述⑵ AutoLISP的应用领域⒉基本语法⑴变量定义与赋值⑵控制流语句⑶函数定义与调用⑷条件语句⒊常用函数⑴坐标点函数⑵图形绘制函数⑶数据处理函数⑷字符串处理函数⒋高级技巧⑴调试与错误处理⑵程序优化与性能提升⑶与外部程序交互⒌示例程序⑴绘制简单图形⑵自动化处理CAD图纸⑶数据导出与导入⒍附录⑴ AutoLISP开发工具推荐⑵ AutoCAD版本兼容性⑶ AutoLISP常用工具介绍⒈简介⑴ AutoLISP概述AutoLISP是一种方便的自动计算与绘图程序设计语言,它是用于AutoCAD中的一种宿主程序语言,可以用于控制CAD软件的各项功能,实现自动化操作。
⑵ AutoLISP的应用领域AutoLISP可用于各种CAD绘图软件的自动化操作,包括但不限于以下方面:●绘制复杂图形●数据处理与导出●组装CAD图纸●批量操作与修改⒉基本语法⑴变量定义与赋值AutoLISP可以使用变量来存储数据,并在程序中使用。
变量可以通过赋值来初始化或修改其值。
⑵控制流语句AutoLISP支持各种控制流语句,如条件语句、循环语句等,用于根据不同条件执行不同的代码块或重复执行特定的代码块。
⑶函数定义与调用AutoLISP允许用户自定义函数以实现特定的功能。
函数是一组逻辑相关的代码块,可以通过函数名来调用。
⑷条件语句条件语句用于根据不同的条件执行不同的代码块。
AutoLISP提供了if、cond等条件语句供用户使用。
⒊常用函数⑴坐标点函数AutoLISP提供了一系列用于处理坐标点的函数,如polar、polar-point、polar-angle等,用于计算、转换坐标点。
⑵图形绘制函数AutoLISP提供了丰富的图形绘制函数,如line、circle、text 等,用于绘制直线、圆形、文本等图形元素。
⑶数据处理函数AutoLISP提供了一些用于处理数据的函数,如list、append、assoc等,用于创建列表、连接列表、关联列表等操作。
第5章 AutoLISP基本函数函数是AutoLISP语言处理数据的基本工具,学习AutoLISP编程最主要的是要掌握AutoLISP语言系统内部函数和符号的基本用法。
如:函数的调用格式,即函数名、参数的个数及类型;函数的功能、求值情况及返回值类型等。
AutoLISP基本函数主要包括:数值函数、赋值与求值函数、表处理函数、字符串处理函数、逻辑运算函数和控制结构函数等。
5.1 数值函数数值函数用于处理整型数和实型数,数值函数包括:基本算术函数、三角函数、数据类型转换函数。
数值函数的返回值类型取决于参数表中参数的数据类型。
AutoLISP中数值计算要遵循整实原则,具体运算规则为:A.整整得整;B.实实得实;C.整实得实。
例:command: (/ 18 4 2) 返回: 2command: (* 4.5 2.0) 返回:9.0command: (+ 6 4.2) 返回:10.25.1.1 基本算数函数这类函数包括:+、-、*、/、1-、1+、abs、sqrt、min、max、expt、exp、log、gcd、rem 1) (+ 〈数〉〈数〉… )功能: 求表中所有整数或实数的和。
例如:Command:(+ 1.2 3.1 3.8)返回:8.12) (- 〈数〉〈数〉… )功能: 求表中第 1 个数减去后面所有数的差, 当表中只有一个数时, 返回这个数的相反数。
例如:Command:(- 8. 1 5)返回:3.1Command:(- 0.25)返回:-0.253) ( *〈数〉〈数〉… )功能: 求表中所有数的积, 例如:Command:( * 0.0174533 30)返回:0.5235994) (/ 〈数〉〈数〉… )功能: 求表中第1 个数除以后面所有数的商。
例如:cmnmand:(/ 10 5 2.0)返回:1.05) (1+ 〈数〉)功能: 求一个整数或实数加 1 的和。
例如:Command:(1+ 2.7)返回:3.76) (1- 〈数〉)功能: 求一个整数或实数减 1 的差。
§5.2 AutoLISP程序设计一、概述LISP语言(List Processing Language的缩写)是一种表处理语言。
因为LISP在描述表方面有独到之处,且本身灵活而精巧,自创立以来,在人工智能的程序设计中得到广泛应用。
在英、美等国应用尤为普遍。
AutoLISP是LISP语言的一个版本,其独特性在于专门为AutoCAD开发的。
所以AutoLISP仅能运行于AutoCAD软件包环境里。
同样,也正是在AutoCAD内置AutoLISP这样一种灵活、精巧的开发语言,使得AutoCAD得到进一步广泛使用。
1. AutoLISP特点:(1)AutoLISP语言是一种仅能以解释方式运行于AutoCAD内的程序设计语言。
即:脱离AutoCAD环境,它就不能运行。
(2)AutoLISP语言是函数型语言,其函数和数据形式是一致的,即(function argument)·function(函数名):内建函数或用户自定义函数名;·argument(参数):参数种类:①变量(Varibles)②常量(Constants)③其他函数(function)所以表达式可以嵌套.④标志数(flag)⑤可选性参数(optional parameters)因此,表达式的形式是:“先说做什麽,再说对谁做”。
(3)可以在AutoLISP程序中引用AutoCAD的几乎所有功能进行图形处理的自动化,尤其是较深层的应用——对象数据库的操作。
在Visual LISP的协助下,对于AutoCAD进行操作功能上的讨论,LISP仅比ARX少一个功能。
在AutoCAD R14已经不再使用ADS程序设计,取而代之的是ARX 程序设计模式。
ARX一般是在AutoCAD和开发商中使用。
使用Visual C++作为基本程序设计语言,其效率、数据处理和软硬件的控制能力都是相当好的。
但是,要想真正发挥这种开发模式的作用,对于程序设计者的要求也较高。
因此这种开发模式不适于在专业设计工程师中间普及。
(4)AutoLISP是典型的结构化程序设计语言,AutoLISP是解释运行的语言,原程序保密性差。
巨量数据的复杂运算效率较低,文件管理功能简单,但可以在绝大多数原程序内容不变的条件下,用Visual LISP将其编译成ARX程序。
这样处理之后的AutoLISP程序,将具有与ARX程序相同的高保密性能,将具有相当高的运行效率(是原来AutoLISP程序运行速度的5~10倍)。
而且AutoLISP程序设计的复杂程度和运行风险大大低于ARX。
2。
AutoLISP的基本语法规则(参考例程):例程:用户输入P1、P2、P3三点绘一个三角形程序。
程序名:TRIANG.lsp;This program will prompt you to enter three;points of a triangle from the keyboard; or;select three points by using the screen cursor.;p1、p2、p3 are triangles corners. (Defun c:TRIANG()(Setq p1 (Getpoint “\nEnter first point of triangles:”))(Setq p2 (Getpoint “\nEnter second point of triangles:”))(Setq p3 (Getpoint “\nEnter third point of triangles:”))(Command “LINE” P1 P2 P3 “C”))(1)AutoLISP的函数要放在括号()里面,且所有括号要左右匹配;(2)AutoLISP解释程序阅读函数时,按从左向右的规则进行;(3)括号内的第一个字符串为函数名(函数运算符),函数运算符与参数之间至少要有一个空格来分开;(4)两个函数之间的和函数内的多余空格和回车是不需要的,即在一个ASCII文件中,一个程序可以占许多行;(5)函数使用标准的ASCII字符,它们不分字符的大写和小写。
但如果在程序设计中遵循一定的规则,将会有助于程序的阅读和维护。
常用习惯:·同层次括号左对齐,低层次的程序行缩入一个词;·所有的标准函数和自定义函数都用大小写结合的方法写,如:(PrinC …)(SetQ …)等。
(6)AutoLISP源程序中注释的写法:·注释用分号(;)开始,作用至行尾;例:;This entire line is a Comment(Setq area (* PI r r )) ;Compute area ofcircle·行内注释:行中处于;│…│;之间的任何文本均被忽略。
例:(Setq tmode ;│some note here│;(Getvar“tilemode”))下面举几个简单的函数实例:例1(+ 84.037 2.56)函数的意义:进行加法运算,将2.56加到84.037;例2(- 84.037 2.56)函数的意义:进行减法运算,从84.037中减去2.56;例3(* 84.037 2.56)函数的意义:进行乘法运算,将84.037与2.56相乘。
二、程序的生成、调用与执行1. 生成:(1)程序文件的扩展名是:*.lsp(2)源程序可以用任何一种文本文件制作功能产生。
比如:EDLIN,QEDIT,NOTEPAD等。
推荐使用:记事本(NOTEPAD)开始 => 程序 => 附件 => 记事本(3)将源程序文件存入自己的工作目录,并设置支持文件的路径,方法如下:Tools=>Preferences=>Files=>Support File Search Path=>Add=>Browse=>c:\*** =>确定2.调用:(1)在Command:提示下调入。
格式:Command:(Load “程序名”)例:调用C:\DLM\TRIANG.lsp,如设置文件支持路径为C:\DLM ,则调用格式为:Command:(Load “triang”)后缀可省略;如果没有设置文件支持路径,则调用格式为:Command:(Load “c:/dlm/triang”)或 Command:(Load “c:\\dlm\\triang”)。
(2)通过菜单调入:格式:Tools => Load Application => File => 选择“. lsp” 文件 => 打开=> Load3.执行:(1)直接运行函数名:程序中函数名前有“C:” 例:Command:triang(2)将函数名放在括号中运行:程序中函数名前没有“C:”例:Command:(triang)三、在命令行使用AutoLISP表达式在命令行使用AutoLISP表达式是一种很有价值的应用技术,也是调试程序的一种方法。
可以在任何AutoCAD命令要数据的提示下,使用AutoLISP表达式。
在命令行使用AutoLISP表达式的方法有两种:1.用表达式响应有关的命令提示:例:在一条齿条的节线上分出精确绘图用的点。
间距=模数 ×π× 0.5 设:模数 = 3Command:measureSelect object to measure:(选择目标)<Segment length> / Block:(* 3 pi 0.5)2.引用已经赋过值的变量:格式:Command:!A例:Command:(Setq A 2)Command:!A2四、函数的返回值每个AutoLISP函数执行之后,都会有一个返回值送回给它的调用者,这种规则是AutoLISP语言的一大特点,使用者可以在程序中利用这个返回值。
对返回值的理解和使用,是AutoLISP程序设计的重要技术。
更好地理解和主动使用这个特性,会使程序更加简洁和巧妙。
返回值:函数最后一个表达式的值。
产生自定义函数返回值有两种可能:1.自然生成:后一个表达式的结果就是所要生成的返回值。
例:(Defun Exy(pt)(List (+ 5 (Car pt))(+ 10 (Cadr pt))))(Defun C:Exp-P()……(Setq p (Exy (Getpoint “\n指定一点:”))) ;将Exy函数返回值赋给P……)程序设计优化原则:“主动、合理地利用返回值,尽量少设置变量”2.人为生成:如果程序的自然表达式序列不能在最后生成返回值,就需要在程序的最后人为生成返回值。
例如:要返回的结果在变量RV中,可以在程序的最后写上:(Setq rv rv)五、AutoLISP的数据类型1.内部/外部函数(Subrs/External Subes)特殊的数据类型,代表函数的是函数的名称,只能在AutoLISP程序内部用相关的表达式引用,能被重新赋值和夹在表达式中充当一个操作数。
(1)内部函数:AutoLISP标准函数;用户自定义函数;被用户重新定义的AutoLISP标准函数。
(2)外部函数:用ARX模式生成的,可以在AutoLISP程序内部使用的函数。
这是另一种来源的AutoLISP函数。
(3)函数的返回值:在函数结束后返回给调用者。
2.整型数:(Integers)带正负号的整数,计算范围是:-2,147,483,647至+2,147,483,648。
但在AutoLISP和AutoCAD之间传递的整数只能是16位,计算范围是:+32767至-32768.3.实型数:带正负号的包含小数点的数。
也可以用科学计数法描述。
例:199.239, 0.87E5(0.87e5)在程序中,AutoCAD至少确保小数点后14位数字精确有效,但在AutoCAD命令行显示出的实型数仅有6位有效数字。
4.字符串(Strings)字符串是由双引号引起来的一组字符。
一个常量字串的长度最大为132个字符位。
一个没有内容的一对双引号是空字串(“”)。
例:“I am a teacher.”“\nEnter first point…”其中,在字串中可出现下列控制字:\\ (右斜杠字符\) \” (双引号字符 ”)\e (Escape字符) \n (换行)\r (回车符) \nnn (代表字符的8进制码nnn)5.表(LIST)这是AutoLISP中的最常用也是最有特色的数据类型。
表是一组由空格分隔的相关值,并用圆括号将该组值括起来。
表为存储相关的数字值提供了有效方法。
例:(1.0 1.0 1.0)(”this” “that” “the other”)(1 “one”)都是有效表。