版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AutoCAD机械设计与范例应用第12章AutoLISPAutoLISP语言机械设计基础语言机械设计基础AutoCAD机械设计与范例应用AutoLISP语言基础AutoCAD机械设计与范例应用AutoCAD 2007的主要开发语言有AutoLISP、Visual LISP、VBA和ObjectARX四种,其中最常用的是AutoLISP开发语言,它是Aultodesk公司最早发布的用于AutoCAD二次开发的程序设计语言,是以起源于20世纪50年代后期的一种表处理语言LISP(List Processing Language)演化而来的。AutoLISP语言具有如下特点: 语法简单,可运行于Au
2、toCAD各个作业平台,功能函数强大且易于学习和使用。 AutoLISP语言中的一切成分均以函数形式出现,即执行AutoLISP程序就是不断地执行一些函数和调用函数。 AutoLISP语言把数据和程序统一表达为表结构,其简称为S表达式。在AutoLISP框架中,可以把程序当作数据来处理,也可以把数据当作程序来执行。 AutoLISP语言中的程序运行过程即对相关函数求值的过程,也就是在对函数求值过程中实现函数的功能。 AutoLISP语言的主要控制结构采用递归方式,从而使得相关程序的设计简单易懂。AutoLISP语言基础AutoLISP是基于LISP的语法并加入配合AutoCAD命令,而开发的一
3、种高级程序设计语言,可以用AutoLISP执行一些重复工作,创建新的AutoCAD命令。用户可以编写自己的AutoLISP程序,也可以使用第三方程序。AutoLISP应用程序或函数可以要求用户输入、直接执行AutoCAD命令、在图形数据库中修改或创建对象。有些标准的AutoCAD命令实际上就是AutoLISP应用程序。基本的AutoLISP语法可以在通常的LISP中看到相同,其意义也大同小异。AutoCAD有一个内部的LISP编译器,可以允许用户在命令行直接输入AutoLISP代码,或从外部文件中加载AutoLISP代码。AutoLISP语言作为一种嵌入在AutoCAD内部的LISP编程语言,
4、针对AutoCAD的特点增加了许多函数,成为AutoCAD最重要的基础开发工具,使AutoCAD具有了非常好的开放性。在AutoLISP语言中,最基本的数据类型是符号表达式(Symbolic-expression)。该语言的显著特点是程序和数据都是采用符号表达式的形式,即一个LISP程序可以把另一个LISP,程序作为它的数据进行处理,因此使用LISP语言编程十分灵活。AutoLISP语言的主要功能特色如下: AutoLISP语言扩充了许多适用于AutoCAD应用的特殊功能,是一种仅能以解释方式运行于AutoCAD内部的解释性程序设计语言。 AutoLISP语言中的一切成分均以函数形式给出,即执
5、行AutoLISP程序就是执行一些函数,再调用其他函数,没有语句概念和其他语法结构,其程序运行过程就是对函数求值的过程。 AutoLISP语言把数据和程序统一表达为了表结构,因此可以把程序当作数据来处理,也可把数据当作程序来执行。 AutoLISP语言的主要控制结构采用递归方式,使得程序设计简单易懂。 AutoLISP语言几乎可以直接调用全部的AutoCAD命令,并实现直接增加或修改AutoCAD命令,可以随意扩大图形编辑功能,建立图形库和数据库并对当前图形进行直接访问和修改,以及开发具有特殊功能的CAD软件包等,既具备一般高级语言的基本结构和功能,又具有一般高级语言所没有的强大的图形处理功能
6、。AutoLISP应用程序或例程可与AutoCAD以各种方式进行交互,这些例程能够提示用户输入、直接访问内置的AutoCAD命令,并修改或创建图形数据库中的对象。通过创建不同的AutoLISP例程,用户可以向AutoCAD中添加专用命令(某些标准的AutoCAD命令实际上也是AutoLISP应用程序)。因为AutoCAD能直接读取AutoLISP代码,所以无需编译。Visual LISP提供了一个集成开发环境,允许在命令提示下输入代码后立即看到结果。这使AutoLISP语言容易试验,而不管用户的编程经验如何。AutoCAD机械设计与范例应用AutoLISP语言基础5表和点对表和点对在AutoL
7、ISP中,表(List)是指一组在一对括号内由空格相隔的相关数值,即放在一对相匹配的左右圆括号中的,一个或多个元素的有序集合,它是保存多个相关数值的一种有效方法。表中的每一项称为表的元素,表中的元素可以是任何类型的表达式,包括整数、实数、字符串、符号等,也可以是表。表中的元素与元素之间要用空格隔开,而元素与括弧之间可不用空格,因为括弧本身就是有效的分隔号。表可以嵌套很多层,从外层向里依次称为0层(也称顶层)、1层、2层这里所指的表中元素是指表的顶层元素。表中的元素也是有顺序的,为了便于对表中的元素进行存取,每个元素均由系统自动赋予一个序号,从左向右算起,第一个元素的序号为0,第二个元素的序号为
8、1,第i个元素的序号为i-1。表的大小等于表的长度,也就是表中顶层元素的个数。没有任何元素的表称为空表-空表用()或nil表示。在AutoLISP中,nil是个特殊的符号原子,它既是原子又是一个表。6文件描述符文件描述符文件描述符(File Descriptors)是通过AutoLISP的opegi函数打开的一个指针,当AutoLISP打开一个文件时,系统将给文件赋予一个数字标号(由open函数返回一个包含文字数字的标签),以后要访问该文件时(读取或写入该文件),即可利用该文件描述符对指定的文件进行操作。7实体名实体名实体名(Entity Names,图元名称)是指AutoCAD系统在绘图过程
9、中赋予所绘制图元对象的一个数字标号,是一个指向AutoCAD系统数据文件的一个指针。利用该指针,AutoLISP可以查找到图元对象的数据库记录,并对图元对象进行各种方式的处理。8选择集选择集选择集(Selection seb)是一个或多个图元对象的集合。在AutoLISP程序中可以构造一个选择集,并赋予其一个符号供其他函数使用。也即用户可使用AutoLISP命令添加对象到选择集中,或从选择集中删除对象。9内部函数与外部函数内部函数与外部函数由AutoLISP提供的函数称为子程序(内部函数),外部子程序(外部函数)是由ADS或ARX应用程序定义的子程序。AutoCAD机械设计与范例应用AutoL
10、ISP语言中的函数AutoCAD机械设计与范例应用在熟悉了AutoCAD命令及AutoCAD的系统变量之后,下面再来简单讲述一下常用的AutoLISP函数极其在程序编制中的应用。AutoLISP程序可以使用任何文本编辑器进行编制,对硬件几乎没有特殊要求,如果系统能够运行AutoCAD,就同样可以运行AutoLISP。函数是计算机语言的重要组成部分,在AutoLISP程序语言中,任何赋值、计算、输入输出以及编写条件语句、循环语句和子程序等都是通过众多的函数来实现的,而所有函数又都是以表形式存在的,每一个函数在程序中表现为一条或多条语句,执行约定的功能,最后再返回某种类型的AutoLISP数据。函
11、数名称是表中的第一个元素,其后的元素则是函数必需的参数。AutoLISP语言中的函数AutoCAD机械设计与范例应用AutoLISP语言中的函数在程序中,通常都需要测试某些特定的条件。若条件为真则程序执行某些功能,若不为真则执行另外一些功能。例如,条件表达式(if( X 5)),若变量的值小于5,测试结果为真。编程过程中经常要用到这种类型的测试条件。下面讲述一下在AutoLISP编程中要用到的各种关系表达式。1等于等于格式(= atom1 atom2)该函数(=)检查两个元素是否相等。若相等,条件为真,函数返回。同样,若指定的元素不相等,条件为假,函数返回nil。2不等于不等于格式(= ato
12、m1 atom2)该函数(=)检查两个元素是否不相等。若不相等,条件为真则函数返回T。同样,若指定的元素相等则条件为假,函数返回nil。3小于小于格式(atom1 atom2)该函数()检查第一个元素(atom I)是否小于第个元素(atom Z)。若为真则函数返回T,否则返回nil。4小于等于小于等于格式(= atom1 atom2)该函数( 15 10) 返回T(10 9 9) 返回nil(“c”“”) 返回T6大于等于大于等于格式(= atom1 atom2)该函数(=)检查第一个元素(atom1)的值是否大于等于第二个元素(atom2)。若是则函数返回T,否则返回nil。在下面第一个例
13、子中,78大于但木等于50,因此,函数返回T。 示例:(= 78 50) 返回T(= “x”“y”) 返回nilAutoCAD机械设计与范例应用AutoLISP语言中的函数任何编程语言都提供数学函数,在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,用以对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。数值函数总是返回数的数据类型,返回值是整数还是实数取决于参数表中参数的数据类型,且在参数使用时应注意其取值范围。1加法加法格式(+ 参数1 参数2 参数3)此函数(+)计算加号(+)右边所有数字的和
14、(+ 参数1 参数2 参数3),这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但如果既有整数又有实数,则和为实数。2减法减法格式(- 参数1 参数2 参数3)此函数(-)从第一个数中减去第二个数(num1-num2)。如果多于两个数,就用第一个数字减去其后所有数字的和num1-(num2+num3)。3乘法乘法格式(* 参数1 参数2 参数3)此函数(*)计算乘号右边所有数字的乘积( num1num2num3),若均为整数,则其乘积亦为整数;若其中含有一个实数,乘积即为实数。4除法除法格式( /参数1 参数2 参数3)此函数()用第一个数除以第二个数。如果多于两
15、个数,就用第一个数除以其后所有数的乘积num1/(num2 num3 )。5增量数字增量数字格式(1+参数)此函数(1+)使数字与1(整数)相加,返回一个增加1的数。在下面的第二个例子中,1与-10.5相加返回-9.5。6减量数字减量数字格式(1-参数)此函数(1-)从数字中减去1(整数),并返回一个减去1的数。AutoCAD机械设计与范例应用AutoLISP语言中的函数7绝对数字绝对数字格式(abs 参数)abs函数返回一个数的绝对值。该数可以是整数或者实数。8正弦(正弦(sin)函数)函数格式( sin angle)正弦(sin)函数用于计算一个角(以弧度表示)的正弦值。余弦(余弦(cos
16、)函数)函数格式(cos angle)余弦(cos)函数用于计算一个角(以弧度表示)的余弦值。10反正切(反正切(atan)函数)函数格式( atan num1)反正切(atan)函数用于计算数的反正切值,返回角度以弧度表示。若仅有参数1,该函数返回其反正切值,单位为弧度。若有两个参数,则该函数返回参数l,参数2的反正切值。11具有两个参数的具有两个参数的atan函数函数格式( atan 参数1 参数2)还可以在atan函数中再指定一个数。若指定了第二个数,函数将以弧度形式返回(参数1/参数2)的反正切值。12angtos函数函数格式(angtos anglemadeprecision)ang
17、tos函数以字符串格式返回以弧度表示的角度值。字符串格式由made和 precision的设置决定。13指数函数(求指数函数(求e的任意次方函数)的任意次方函数)格式(exp幂)该函数返回e的幂次方,其结果为实数。示例:(exp 3) 返回20.085514对数函数对数函数格式(log参数)该函数返回参数的自然对数,其结果为实数。示例:(log 5) 返回l.60944AutoCAD机械设计与范例应用AutoLISP语言中的函数15求余数函数求余数函数格式(rem 参数l 参数2)该函数返回参数1除以参数2的余数。示例:(rem 8 3) 返回2(rem 3 5.0) 返回3 016求最大公约
18、数函数求最大公约数函数格式(gcd 参数l 参数2)该函数返回参数的最大公约数。示例:(gcd 24 12 6) 返回617补码函数补码函数格式( 整数)该函数返回该整数的补码,即按位“非”。示例:( 4) 返回-5( -6) 返回5在数学计算函数中,如果参数表中的所有参数都是整数,则对参数表中的参数作整数运算后将返回整数值。如果参数表中有一个实数,则对参数表中的参数进行浮点数学运算后将返回实数值。如果参数表中的参数多于2个,则每两个参数进行数值运算,再把运算结果与下一个参数进行运算,直到运算完毕。AutoCAD机械设计与范例应用AutoLISP语言中的函数赋值(setq)函数是AutoLIS
19、P中的基本赋值函数,用于将表达式的值赋给符号,并可同时将多个表达式的值分别赋给多个符号。赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。如果该值为字符串,则其长度不可超过100个字符。其格式如下:(set 符号表达式)(setq 符号l 表达式1)示例:(setq a 5.5) 返回5.5,并将符号afiq当前值设置为实数5.5。(setq AA 5.5 BB 6.0) 返回6.0,并将5.5赋予符号AA,将6.0赋于符号BB。(setq a (x y) 返回表(xy),并将符号a的当前值设置为(x y)。(setq 8.5 12) 返回6.0,8.5被
20、赋予变量,12被赋予变量。Setq函数可以建立或修改全局变量,也可以在defun函数中给内部变量赋值。全局变量可由任何函数访问和修改,或在任意表达式中使用。局部变量仅在定义其函数求值期内(即函数调用期间)有意义。当全局变量作为局部变量使用时,定义其函数可改变它们的值,但当该函数退出时,全局变量将恢复原值。setq函数不能使用系统内部函数作为函数变量。setq函数还可用于与其他表达式联合为变量赋值。AutoCAD机械设计与范例应用AutoLISP语言中的函数AutoLISP的逻辑运算分为数值逻辑运算和表达式逻辑运算两种,并用T表示逻辑真,用NIL表示逻辑假。在数值逻辑运算中,AutoLISP将数
21、值先转化成二进制数之后,再按位进行逻辑运算,并仍以数值作为结果(即返回值)。在表达式逻辑运算中,则是根据函数的要求对后面的表达式进行测试,若满足要求,则函数返回T(即逻辑真);若不满足要求则返回NIL(即逻辑假)。1按位逻辑与函数按位逻辑与函数格式(logand 整数l 整数2)该函数对后面的“整数”变量按位进行逻辑“与(AND)”运算,并将结果以十进制方式返回。2按位逻辑或函数按位逻辑或函数格式(logior 整数l 整数2)该函数对后面的“整数”变量按位进行逻辑“或(OR)”运算,并将结果以十进制方式返回。3按位逻辑非函数按位逻辑非函数格式(整数)该函数与补码函数一样,即返回“整数”变量的
22、按位“非”。4逻辑与函数逻辑与函数格式(and 表达式)该函数返回所列“表达式”变量的逻辑“与”(AND)。即当所有的“表达式”变量均为真时返回值也为真;反之则返回NIL(空)。5逻辑或函数逻辑或函数格式(or表达式)该函数返回所列“表达式”变量的逻辑“或(OR)”。即当所有的“表达式”变量均为真(T)时,返回值也为真(T),反之则返回NIL。6逻辑非函数(逻辑非函数(not表达式)表达式)若“表达式”变量的值为nil,该函数返回T;否则返回NIL。7位移函数位移函数格式(lsh数位数)该函数按“位数”变量的要求对“数”变量进行位移。若位数为正则向左移;若位数为负则向右移。8布尔运算函数布尔运
23、算函数格式(boole 方式整数1 整数2.)该函数是一个按位方式进行布尔运算的通用函数,它按“方式”变量的要求对后面的数进行相应运算。方式共有16种,如l为and,6为xor(异或),7为or,8为not等。AutoCAD机械设计与范例应用AutoLISP语言中的函数9等于函数等于函数格式(= 原子l 原子2)若所有“原子”(原子可以是数或字符串)变量在数值上相等,则返回T,否则返回NIL。10不等于函数不等于函数格式(/=原子1 原子2)若两个“原子”变量的数值不相等,则返回T;否则返回NIL。11小于函数小于函数格式(原子1原子2)若每个“原子”变量均小于其右面的“原子”变量,该函数返回
24、T;否则返回NIL。12小于等于函数小于等于函数格式(原子1原子2)若每个“原子”变量均大于其右面的“原子”变量,则该函数返回T;否则返回NIL。14大于等于函数大于等于函数格式(=原子l 原子2)若每个“原子”变量都不小于其右面的“原子”变量,该函数返回T;否则返回NIL。15表测试函数表测试函数格式(listp 参数)若“参数”变量为表,则函数返回T;否则返回NIL。16原子值测试函数原子值测试函数格式(boundp 原子)若“原子”变量有约束值,则该函数返回T;否则返回NIL。若原子被赋予的值为表,则函数认为该原子无值。因此(boundp a)返回值为NIL,因为符号a的当前值为表(c
25、d e)。17相同表达式测试函数相同表达式测试函数格式(eq 表达式l 表达式2)若“表达式1”变量与“表达式2”变量完全相同,即该函数检查两个表达式是否约束于同一对象(用setq函数),不仅要求表达式的数值相等,而且要占用同一内存单元,则该函数返回T,否则返回NIL。AutoCAD机械设计与范例应用AutoLISP语言中的函数18相等测试函数相等测试函数格式(equal 表达式l 表达式2)该函数测试两个“表达式”变量的值是否相等,相等则返回T,否则返回NIL。当要比较的两个表达式是实数或由实数组成的点表时,若采用不同的方法计算表达式,则可能会产生计算误差,此时要在两个表达式后面加上一个精度
26、值来指定两表达式之间的最大差值,在精度范围内,函数equal仍然认为两个表达式等值,返回T。示例:(setq x 2.556)(setq y 2.555)(equal x y) 返回NIL(equal x y 0.001) 返回T函数“=”“eq”和“equm”之间的关系为:所有同源值一定相等;当不同源时,INTREAL STR类型一定相等,ENAME类型,“=”不等,“eqequal”相等;当不同源时,LEST类型,“eq”不等,“equal”相等;PICKSET不存在不同源问题;对不常用类型SYM SUBR EXRXSUBR等未加分析,SYM属于不同源时相等的一类。19字符匹配测试函数字符
27、匹配测试函数格式(wcmatch 字符串 模式)该函数按通配符的匹配模式测试“字符串”变量与“模式”变量是否相同,若相同则该函数返回T;否则返回NIL。示例:(wcmatch Test T) 返回T(wcmatch Test *c*) 返回NILAutoCAD机械设计与范例应用AutoLISP语言的二次开发AutoCAD机械设计与范例应用用户在安装AutoCAD时如果选择了完全安装选项,则源代码文件位于如下文件夹中:TutorialVisualLISP建议用户最好不要修改AutoCAD附带的源代码样例文件。如果程序运行不正确,则可能需要将提供的源代码复制到自己的工作目录中。如果用户使用了不同的
28、工作目录,则应将其替换为实际使用的工作目录名。AutoLISP默认设定的工作目录为:TutorialVisualLISPMyPath。AutoLISP语言的二次开发VisualLISP编辑器在AutoCAD中增强并扩展了AutoLISP语言,使得用户可以轻松实现通过Microsoft AcfiveX Automation接口与对象交互,并扩展了AutoLISP响应事件的能力。作为开发工具,VisualLISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以提高自定义AutoCAD的效率。此外,Visual LISP作为一个完整的集成开发环境(IDE),具有自己的窗口和
29、菜单,但并不能独立于AutoCAD运行。当用户从Visual LISP IDE中运行AutoLISP程序时,经常需要与AutoCAD图形进行交互或在命令窗口中响应程序提示。如果VisualLISP把控制传给AutoCAD时AutoCAD已被最小化,用户必须手动恢复并激活AutoCAD才可继续,Visual LISP不会自动恢复AutoCAD窗口。相反,Visual LISP窗口中会出现并保持一个Visual LISP符号,直到激活AutoCAD并响应AutoCAD命令提示行提示。AutoLISP由表达式构成,表达式的最基本格式如下:(function arguments)每个表达式由左括号“(”开始,包括函数名及可选的变元之后,再以右括号“)”结束。例如,(strcasej T)就是一个基本的表达式。表达式中的每个变元也可以是另外一个表达式,这样可以构造成很复杂的表达式。每个表达式都返回一个值,返回值可以被使用该表达式的上一级表达式使用。例如,(eval(list(read apptype)就是由三个表达式构成的较复杂的表达式,而整个函数定义则是一个更大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融培训课件案例分享
- 校园食品安全培训通讯课件
- 暴雨安全提醒培训班课件
- 金星安全教育培训课件
- 校园课件安全与儿歌
- 校园秋季疾病预防知识
- 金属火灾消防安全培训课件
- 奥迪a6c5基础培训课件
- ct窗宽窗位在临床上的应用
- 吞咽困难患者的长期照护计划
- 2025党史军史知识试题及答案
- 医保DIP付费知识培训课件
- 私立医院的营销方案与管理
- 《人生三修》读书分享会
- 【语文】上海市杨浦区打虎山路第一小学小学二年级上册期末试卷(含答案)
- 集水井施工方案
- 大学美育课件 第十二章 生态美育
- 美国技术贸易壁垒对我国电子产品出口的影响研究-以F企业为例
- 2025至2030中国电站汽轮机行业项目调研及市场前景预测评估报告
- MK6油雾检测器(中文)1
- 靶向阿托品递送系统设计-洞察及研究
评论
0/150
提交评论