您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > 清华大学CAD二次开发教案
第1章AutoLISP和VisualLISP1.1关于LISPLISP是人工智能领域中广泛采用的一种程序设计语言。主要用于人工智能、机器人、专家系统、博奕、定理证明等领域。LISP也被称为符号式语言,因为它处理的对象是符号表达式。LISP语言的程序和数据都是以符号表达式的形式来表示,因此,一个LISP程序可以把另一个LISP程序作为它的数据来处理。LISP语言语法简单,编写程序便捷、灵活,数据类型丰富。利用LISP语言可以很容易地定义或调用新的函数。这就是Autodesk公司早在1985年的2.1版本就引用了LISP语言的宏操作,在1986年的2.5版本就推出了比较完整的AutoLISP语言的原因。LISP在它几十年的发展过程中产生了多种版本,如MacLISP、InterLISP、ZetaLISP、和CommonLISP等。其中CommonLISP是近几年美国的几所大学(如麻省理工、斯坦福等)和工业界(如Bell实验室、DEC公司、HP公司等)的人工智能研究人员协同推出的,它概括了MacLISP、InterLISP、ZetaLISP等版本的特点,因而功能较强且拥有其它版本的一些优点,是目前LISP语言较完整的版本。1.2关于AutoLISPAutoLISP是为二次开发AutoCAD而专门设计的编程语言,它起源于LISP语言,嵌入在AutoCAD的内部,是LISP语言和AutoCAD有机结合的产物。AutoLISP采用了和CommonLISP最相近的语法和习惯约定,具有CommonLISP的特性,但又针对AutoCAD增加了许多功能。它既有LISP语言人工智能的特性,又具有AutoCAD强大的图形编辑功能的特点。它可以把AutoLISP程序和AutoCAD的绘图命令透明地结合起来,使设计和绘图完全融为一体,还可以实现对AutoCAD图形数据库的直接访问和修改。利用AutoLISP语言可以进行各种工程分析计算、自动绘制复杂的图形,还可以定义新的AutoCAD命令、驱动对话框、控制菜单。为AutoCAD扩充具有一定智能化、参数化的功能,可以使设计人员的主要精力用于产品的构思和创新设计上,实现真正意义上的计算机辅助设计。1.3关于VisualLISPVisualLISP是Autodesk公司在1997年14版本推出的。它是为加速AutoLISP程序开发而设计的软件开发工具,是一个完整的集成开发环境。VisualLISP包括文本编辑器、格式编排器、语法检查器、源代码调试器、检验和监视工具、文件编译器、工程管理系统、上下文相关帮助与自动匹配功能和智能化控制台等。VisualLISP用户界面良好,用过Microsoft软件的用户只需很短的时间即可掌握它。VisualLISP兼容以前的AutoLISP程序。在VisualLISP集成环境下开发AutoLISP程序,就不再象以前那样编辑程序时,用其它系统的文本编辑程序编写程序代码;调试程序时,需要用户自己决定在程序的什么位置插入打印语句,以便查看变量的内容;在程序运行正常后,再将插入的调试代码删除或注释掉。在VLISP集成环境下可以便捷、高效地开发AutoLISP程序,可以经过编译得到运行效率更高、代码更加紧凑、源代码受到保护的应用程序。VisualLISP是新一代AutoLISP语言,它对AutoLISP语言进行了扩展,可以通过MicrosoftActiveXAutomation接口与AutoCAD对象交互,可以通过反应器函数扩展AutoLISP响应事件的能力。如果使用VisualLISP对AutoLISP扩展功能的部份,必须调用vl-load-com函数,或者将调用该函数的表达式写在acad2006doc.lsp文件内。第2章数据类型、表达式和函数AutoLISP的数据类型丰富,除了一般程序设计语言具有的整型、实型、字符串等类型之外,还有表、函数、文件描述符、AutoCAD选择集、AutoCAD图元名、VLA对象、函数分页表和外部函数等数据类型。2.1数据类型1.整型(INT)整型即整数,整数由数字和正负号组成,正号可省略。整数为32位带符号的数字,其范围从-2147483648到+2147483647。2.实型(REAL)实型数是带小数点的数。在-1和1之间的实数必须以0开头,例如:.5是错误的,应该写成0.5。实数用双精度的浮点数表示,并且至少有14位有效位数的精度。注意,VisualLISP不显示所有的有效位。3.字符串(STR)字符串又被称为字符常数,它是由双引号括起来的字符序列。字符串中字母的大、小写和空格符都是有意义的。字符串中字符的个数(不包括双引号)称为字符串的长度。字符串的最大长度为100,如果超过100,第100个字符后面的字符将是无效的。字符串可以是空的,即,称为空串,其长度为0。任何字符都可以用\nnn的格式表示,其中反斜杠“\”是ASCII码的前导标识字符,nnn是该字符八进制的ASCII码。例如,字符串ABCD也可表示为\101\102\123\104。一些常用的控制字符,象反斜杠、双引号,除了可以用\nnn的格式表示之外,还可以用“\”转义字符的格式表示为“\\”、“\”等特殊字符,见下表。表2-1常用控制字符的表示方法控制字符用“\”为前导字符用“\”为前导的ASCII码表示反斜杠“\”\\\134双引号“”\\042Esc键\e\033换行\n\012回车键\r\015Tab键\t\011注意,其中的字符e,n,r,t必须小写。4.表表以左圆括号开始,以配对的右圆括号结束,表可以是空的,可以有若干个元素;元素可以是简单的,也可以是复杂的,还可以是其它的表。例如:(+123)、(sin(*0.5pi))、(AB)、((AB)C(CD))、(0LINE)、(101.52.60.0)、()都是合法的表。表中元素的个数称为表的长度。例如,表(+123)的长度为4、表(sin(*0.5pi))的长度为2、表((AB)C(CD))的长度为3、表()的长度为0。用表可以方便地构造出复杂的数据结构,例如,(1.53.6)可以表示为一个X等于1.5、Y等于3.6的二维点,(2.52.01.0)可以表示为一个X等于2.5、Y等于2.0、Z等于1.0的三维点。5.函数(SUBS)函数相当于子程序或过程。函数分为内部函数和外部函数。AutoLISP提供的或用AutoLISP定义的函数为内部函数。用ADS、ADSRX或ARX定义的函数为外部函数。例如sin、cos、sqrt为内部函数。运算符在AutoLISP里属于函数,例如“+”、“-”、“*”、“/”分别称之为加、减、乘、除函数,“”、“=”、“”分别称之为小于、小于等于和大于函数。其它计算机语言里的子程序、过程、程序流程控制的关字,在AutoLISP里也属于函数,例如“if”、“while”分别称之为条件和条件循环函数。6.文件描述符(FILE)文件描述符是AutoLISP赋于被打开文件的标识号,它类似于文件指针。下面的例子是以“读”的方式打开文件myfile.dat,并将该文件的描述符赋予符号f1。(setqf1(openmyfile.datr))返回File:#346147.图元名(ENAME)图元名是AutoCAD为图形对象指定的16进制的数字标识。AutoLISP通过该标识,找到该图形对象在图形数据库中的位置,以便对其进行访问或编辑。8.选择集(PICKSET)选择集是一个或多个图形对象命名的集合。可以通过AutoLISP程序建立选择集、向指定的选择集添加或移去图形对象,通过选择集可以对其内指定的成员进行访问或编辑。9.VLA对象VLA对象是ActiveX应用程序的主要组成部分。不仅直线、圆弧、多义线和圆等都被称为VLA对象,图层、组、块、视图、视口、图形的模型空间、图纸空间、线型和尺寸标注样式等也被称为VLA对象,甚至连AutoCAD本身也被认为是VLA对象。2.2变量2.2.1符号符号(SYMBOL)可以理解为标识,用来作为变量、函数的名字。它的命名规则是不能只含数字,可以由下列字符以外的任何可打印的字符所组成:“(”、“)”、“·”、“'”、“”、“;”例如,a1、b2、c_3是合法的符号,(a、)b、.c、’4、5是非法的符号。注意:[1]、{2}、~3、!4、/5、1a、3c、-d、+e、b-2、c*3也是合法的符号,这是与多数计算机语言的不同之处。在AutoLISP中,符号的大小写等价,符号的长度没有限制,且所有的字符都是有意义的。如果一个符号的长度不超过6,就用节点本身来存储;如果符号的长度超过6,这样的符号就不能用节点来存储,而是在节点中存放一个指向实际存储符号名的指针。这将会多占用存储空间,且减慢了执行速度。因此,符号的长度最好不要超过6。2.2.2变量的数据类型AutoLISP变量属于符号,是指存储静态数据的符号。数据类型是变量的重要的特征,因为它关系到存放变量值的存储空间的大小。多数的计算机语言都在为变量赋值前对变量做显式或隐式的说明。AutoLISP无须对变量做事先的类型说明,变量被赋予值的类型即为变量的类型。用setq函数对变量赋值,例如,(setqa5),赋值后的结果是:变量a是整型的,因为5是整型的;同样的原因,(setqb2.5)之后,b是实型的,(setqcABC)之后,c就是字符串类型的。在程序运行过程中,同一变量在不同的时刻可以被赋予不同类型的值,因此在程序运行过程中,变量的数据类型是可以被改变的。例如,在一个程序里有以下两行:(setqa5)当前的变量a是整型的。(setqaABC)当前的变量a是字符串类型的。用type函数了解变量的类型,例如,(typea)返回INT,显示变量a是整型的;(typeb)返回REAL,显示变量b是实型的,(typec)返回STR,显示变量c是字符串类型的。2.2.3为变量赋值用setq函数为变量赋值,其格式如下:(setq变量1值1[变量2值2...])例如:Command:(setqx1.5y20pCenter)返回“Center”除了为变量x、y、p赋值外,还返回最后一个表达式的结果“Center”。如果上述表达式还有外层表达式,那么,将把该表达式的返回值“Center”赋给外层表达式的变量。例如,Command:(setqv(setqx1.5y20pCenter))返回“Center”该表达式同样为变量x、y、p赋值,并将内层表达式返回的结果“Center”赋给变量v,最后返回外层表达式的结果“Center”。没有被赋值的变量属于无定义的变量。2.2.4预定义的符号AutoLISP对变量nil、T、Pause和Pi进行了预定义,用户可以在编写AutoLISP程序时直接使用。(1)nil如果变量没有被赋值,它的值为nil。nil与空和0不同的是,它既不是空串,也不是0值,它表示尚无定义。引用未被赋值的变量是错误的。例如,变量x尚未被赋值,(+1x)就会出现error:badargumenttype(坏的参数类型错)。将nil赋给某一有定义的变量,其结果是:取消该变量的定义,并释放其所占存储空间。nil作为逻辑变量的值,表示不成立,相当于其他程序设计语言的false。(2)TT为常量,它作为逻辑变量的值,表示成立,相当于其他程序设计语言的true。(3)PAUSEPAUSE与command函数配合使用,用于暂停,等候用户输入。(4)PIPI被定义为常量π。每个变量都占用一些内存空间。为了节省存储空间,可重复使用变量名,或者将不再使用的变量设为nil,以便释放该变量所占的内存空间。必须注意,一般的编程语言不允许将内部函数名或流程控制的关键字作为变量名,而AutoLISP没有这样的限制。因此,程序中定义的符号名称不要与系统定义的函数名和预定义的变量名相同,否则,后面的定义将取代已有的定义,从而引起混乱。例如,sin是正弦函数,可是在执行表达式(setqsin1)之后,sin不再是正弦函数,而是一个值为1的整型变量。2.2.
本文标题:清华大学CAD二次开发教案
链接地址:https://www.777doc.com/doc-6493662 .html