《CAD二次开发技术课件(一、二).ppt》由会员分享,可在线阅读,更多相关《CAD二次开发技术课件(一、二).ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河南工业大学机电工程学院CAD二次开发技术授课:韩莉莉本课程要学习的内容第第1 1章章 AutoCAD AutoCAD及其二次开发工具简介及其二次开发工具简介第第2 2章章 AutoLISPAutoLISP基本函数和绘图功能基本函数和绘图功能第第3 3章章 AutoLISP分支函数与循环结构第第4 4章章 AutoLISP输入输出函数和图形数据库 第第5 5章章 AutoLISP对话框设计技术1.1 AutoCAD1.1 AutoCAD简介简介1.2 AutoCAD1.2 AutoCAD二次开发二次开发1.3 AutoCAD1.3 AutoCAD二次开发工具简介二次开发工具简介1.4 Auto
2、LISP1.4 AutoLISP语言概述语言概述第1章 AutoCAD及其 二次开发工具简介 1.11.1 AutoCAD简介l l AutoCADAutoCAD是是美美国国AutodeskAutodesk公公司司开开发发的的通通用用CADCAD软软件件,19821982年年首首次次推推出出了了AutoCAD AutoCAD R1.0R1.0版版本本,经经过过不不断断的的版版本更新,现最新的是本更新,现最新的是AutoCAD2011AutoCAD2011AutoCAD2011AutoCAD2011版本版本。l l AutoCADAutoCAD是是目目前前微微机机上上应应用用最最为为广广泛泛的的
3、通通用用交交互互式式计计算算机机辅辅助助绘绘图图与与设设计计软软件件包包。AutoCADAutoCAD的的强强大大生生命命力力在在于它的通用性、多种工业标准和开放的体系结构。于它的通用性、多种工业标准和开放的体系结构。l l 用用AutoCADAutoCAD绘绘图图速速度度更更快快、精精度度更更高高、而而且且便便于于个个性性,它它已已经经在在航航空空航航天天、造造船船、建建筑筑、机机械械、电电子子、化化工工、美美工工、轻轻纺纺等等很很多多领领域域得得到到了了广广泛泛应应用用,并并取取得得了了丰丰硕的成果和巨大的经济效益。硕的成果和巨大的经济效益。l AutoCAD软件具有如下特点:(1)具有完
4、善的图形绘制功能。(2)有强大的图形编辑功能。(3)可以采用多种方式进行二次开发或用户定制。(4)可以进行多种图形格式的转换,具有较强的数据 交换能力。(5)支持多种硬件设备。(6)支持多种操作平台。(7)具有通用性、易用性,适用于各类用户。1.11.1 AutoCAD简介l 为了适用于各种产品的设计需求,多数CAD软件的功能都具有很高的通用性。但由于针对性不强,用户需求与CAD系统规模之间的矛盾日益增加,存在设计效率不高的问题。l 在CAD软件平台上,结合具体的应用需求,总结行业的设计知识和经验,开发面向行业和设计流程的CAD系统,这就是所谓CAD二次开发。l AutoCAD的开放体系结构。
5、允许用户采用高级编程语言对其进行扩充和修改。Autodesk公司自AutoCAD v2.18版至AutoCAD 2000的短短十几年间,就相继推出了三代二次开发工具。1.21.2 AutoCAD二次开发l AutoLISP AutoLISP是1986年随AutoCADv2.18提供的二次开发工具。它是嵌入AutoCAD内部的一种人工智能语言。使用AutoLISP可调用几乎所有的AutoCAD命令。AutoLISP语言最典型的应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL文件,创建自己的对话框。AutoLISP适合
6、于有能力的终端用户完成一些自己的开发任务。1.31.3 AutoCAD二次开发工具简介l Visual LISP(VLISP)VLISP是AutoLISP的换代产品。与AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP语言。VLISP对语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。作为开发工具,VLISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以提高二次开发的效率。1.31.3 AutoCAD二次开发工具简介l VBA VBA是2000版本后具备的功能。它通过AutoCAD Acti
7、veX Automation接口对AutoCAD进行编程控制,是一个引入了对象的设计环境,为用户提供类似Visual Basic语言所拥有的功能,可以执行并存取 AutoCAD环境的所有资源,适合编写中型的数据库类的CAD软件。1.31.3 AutoCAD二次开发工具简介 ActiveX ActiveX AutomationAutomation是是微微软软公公司司推推出出 的的 一一 个个 技技 术术 标标 准准,其其 作作 用用 是是 在在WindowsWindows系系统统的的统统一一管管理理下下协协调调不不同同的的应应用用程程序序,允允许许应应用用程程序序之之间间相相互互控控制制、相互调
8、用。相互调用。AutoCAD AutoCAD ActiveXActiveX技技术术提提供供了了一一种种机机制制,可可使使编编程程者者通通过过编编程程手手段段从从AutoCADAutoCAD的的内内部部或或外外部部来来操操纵纵AutoCADAutoCAD。ActiveXActiveX是是由由一一系系列列的的对对象象组组成成,每每一一个个对对象象代代表表了了AutoCADAutoCAD中中一一个个明明确确的的功功能能,如如绘绘制制图图形形对对象象、定定义义块块和和属属性性等等等等。ActiveXActiveX所所具具备备的的绝绝大大多多数数AutoCADAutoCAD功功能能,均均以以方方法法和和
9、属属性性的的方方式式被被封封装装在在ActiveXActiveX对对象象中中,只只要要使使用用某某种种方方式式,使使ActiveXActiveX对对象象得得以以“暴暴露露”,那那么么就就可可以以使使用用各各种种面面向向对对象象编编程程的的语语言言对对其其中中的的方方法法、属属性性进进行行引引用用,从从而而达达到到对对AutoCADAutoCAD实现编程的目的。实现编程的目的。l ARX ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C+为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。ObjectA
10、RX应用程序是一个DLL(动态链接库),共享AutoCAD的地址空间,对AutoCAD进行直接函数调用。所以,使用ARX编程的函数的执行速度得以大大提高。ARX 类库采用了标准的C+类库的封装形式,这也大大提高了程序员编程的可靠度和效率。由于是在Windows及VC+编程环境里运行,所以,对开发者的编程能力要求较高。1.31.3 AutoCAD二次开发工具简介l l LISPLISP(List List Processing Processing Language)Language)是是一一种种计计算算机机的的表表处处理理语语言言,是是在在人人工工智智能能学学科科领领域域广广泛泛应应用用的的一
11、一种种程程序设计语言。序设计语言。l l AutoLISPAutoLISP语语言言是是嵌嵌套套于于AutoCADAutoCAD内内部部,将将LISP LISP 语语言言与与AutoCADAutoCAD有有机机结结合合的的产产物物。使使用用AutoLISPAutoLISP可可直直接接调调用用几几乎乎所所有有的的AutoCADAutoCAD命命令令。AutoLISPAutoLISP语语言言既既具具备备一一般般高高级级语语言言的的基基本本功功能能,又又具具有有一一般般高高级级语语言言所所没没有有的的强强大大的的图图形形处处理理功功能能。是是当当今今世世界界上上CADCAD软软件件中中被被广广泛泛应应
12、用用的的语语言之一。言之一。l l AutoLISPAutoLISPAutoLISPAutoLISP程程序序设设计计较较简简单单易易懂懂,易易于于掌掌握握。适适合合于于有能力的终端用户完成一些自己的开发任务。有能力的终端用户完成一些自己的开发任务。l l Visual Visual LISPLISP是是AutoLISPAutoLISP的的换换代代产产品品。与与AutoLISPAutoLISP完完全全兼兼容容,并并提提供供它它所所有有的的功功能能,是是新新一一代代的的AutoCAD AutoCAD LISPLISP语语 言言。VLISPVLISP对对 语语 言言 进进 行行 了了 扩扩 展展,可
13、可 以以 通通 过过Microsoft ActiveX AutomationMicrosoft ActiveX Automation接口与对象交互。接口与对象交互。1.41.4 AutoLISP语言概述一、AutoLISP的数据类型l l整数:整数:(-2147483648-2147483648到到21474836482147483648)l l实数:实数:(-1.797693-1.797693 1010308308到到1.7976931.797693 1010308308 )l l符号:符号:包括除包括除“(”(”、“)”)”、“.”.”、“”“”、“;”;”以外的任何打印字符。长度没有限制
14、,大小写以外的任何打印字符。长度没有限制,大小写等价。等价。l l字符串:字符串:包含在一对双引号内的一组字符包含在一对双引号内的一组字符 包括任何可以打印的字符。区别大小写。最大包括任何可以打印的字符。区别大小写。最大长度为长度为100100个字符,个字符,100100以后的字符无效。没有任何以后的字符无效。没有任何字符的字符串为空串:字符的字符串为空串:”1.41.4 AutoLISP语言概述 常常常常用用用用术术术术语语语语“符符符符号号号号”来来来来指指指指储储储储存存存存静静静静态态态态数数数数据据据据的的的的一一一一个个个个符符符符号号号号名名名名,如如如如内内内内建建建建式式式式
15、函数和自定义函数。函数和自定义函数。函数和自定义函数。函数和自定义函数。常常常常用用用用术术术术语语语语“变变变变量量量量”来来来来指指指指存存存存储储储储程程程程序序序序数数数数据据据据的的的的符符符符号号号号名名名名(只只只只有有有有当当当当前前前前类类类类型型型型没没没没有有有有固固固固定定定定类类类类型型型型,字字字字母母母母开开开开头头头头,不不不不用用用用内内内内部部部部函函函函数数数数名名名名和和和和保保保保留留留留字字字字符符符符,如如如如:、.、;、(、)、pipipipi、pausepausepausepause、T T T T、nilnilnilnil等等)。等等)。等等
16、)。等等)。AutoLISP AutoLISP AutoLISP AutoLISP的变量不需要事先定义。的变量不需要事先定义。的变量不需要事先定义。的变量不需要事先定义。每每每每一一一一个个个个变变变变量量量量都都都都要要要要消消消消耗耗耗耗少少少少量量量量内内内内存存存存,故故故故当当当当变变变变量量量量值值值值不不不不再再再再有有有有用用用用时时时时重重重重复复复复使使使使用变量名或将变量设置成用变量名或将变量设置成用变量名或将变量设置成用变量名或将变量设置成nilnilnilnil是良好的程序设计习惯。是良好的程序设计习惯。是良好的程序设计习惯。是良好的程序设计习惯。其值保持不变的变量称
17、为常量,如:其值保持不变的变量称为常量,如:其值保持不变的变量称为常量,如:其值保持不变的变量称为常量,如:PiPiPiPi 整整整整数数数数、实实实实数数数数、符符符符号号号号、字字字字符符符符串串串串在在在在AutoLISPAutoLISPAutoLISPAutoLISP语语语语言言言言中中中中称称称称为为为为原子。原子包括:数字原子、符号原子和串原子。原子。原子包括:数字原子、符号原子和串原子。原子。原子包括:数字原子、符号原子和串原子。原子。原子包括:数字原子、符号原子和串原子。l l表表:放放在在一一对对相相匹匹配配的的左左右右括括号号内内的的一一个个或或多多个个元元素素的的集集合合
18、。元元素素间间用用空空格格分分开开。有有标标准准表表和和引引用用表表两种类型。两种类型。一、AutoLISP的数据类型1.41.4 AutoLISP语言概述 表表表表有标准表和引用表两种类型;有标准表和引用表两种类型;有标准表和引用表两种类型;有标准表和引用表两种类型;AutoLISPAutoLISPAutoLISPAutoLISP程序就是用标准表来表示的;程序就是用标准表来表示的;程序就是用标准表来表示的;程序就是用标准表来表示的;引用引用引用引用表用作数据处理,相当于其它高级语言的数组,表用作数据处理,相当于其它高级语言的数组,表用作数据处理,相当于其它高级语言的数组,表用作数据处理,相当
19、于其它高级语言的数组,提供了提供了提供了提供了保存各种数据的有效方法。保存各种数据的有效方法。保存各种数据的有效方法。保存各种数据的有效方法。引用表中的每一个元素可以是数字、符号、字符串,也可以引用表中的每一个元素可以是数字、符号、字符串,也可以引用表中的每一个元素可以是数字、符号、字符串,也可以引用表中的每一个元素可以是数字、符号、字符串,也可以是表。表可以嵌套。是表。表可以嵌套。是表。表可以嵌套。是表。表可以嵌套。如:如:如:如:(23 1.5 A dfg”23 1.5 A dfg”23 1.5 A dfg”23 1.5 A dfg”程序程序程序程序”(20.0 30.0 0.020.0
20、30.0 0.020.0 30.0 0.020.0 30.0 0.0)仅有两个元素,并用仅有两个元素,并用仅有两个元素,并用仅有两个元素,并用“.”“.”“.”“.”分开分开分开分开表称为点对。点对常用于构表称为点对。点对常用于构表称为点对。点对常用于构表称为点对。点对常用于构造连接表。造连接表。造连接表。造连接表。原原原原子子子子和和和和表表表表是是是是AutoLISPAutoLISPAutoLISPAutoLISP最最最最基基基基本本本本的的的的数数数数据据据据,总总总总称称称称为为为为符号符号符号符号表达式表达式表达式表达式(S-S-S-S-表达式)。表达式)。表达式)。表达式)。表表表
21、表有标准表和引用表两种类型;有标准表和引用表两种类型;有标准表和引用表两种类型;有标准表和引用表两种类型;AutoLISPAutoLISPAutoLISPAutoLISP程序就是用标准表来表示的;程序就是用标准表来表示的;程序就是用标准表来表示的;程序就是用标准表来表示的;引用引用引用引用表用作数据处理,相当于其它高级语言的数组,表用作数据处理,相当于其它高级语言的数组,表用作数据处理,相当于其它高级语言的数组,表用作数据处理,相当于其它高级语言的数组,提供了提供了提供了提供了保存各种数据的有效方法。保存各种数据的有效方法。保存各种数据的有效方法。保存各种数据的有效方法。引用表中的每一个元素可
22、以是数字、符号、字符串,也可以引用表中的每一个元素可以是数字、符号、字符串,也可以引用表中的每一个元素可以是数字、符号、字符串,也可以引用表中的每一个元素可以是数字、符号、字符串,也可以是表。表可以嵌套。是表。表可以嵌套。是表。表可以嵌套。是表。表可以嵌套。如:如:如:如:(23 1.5 A dfg”23 1.5 A dfg”23 1.5 A dfg”23 1.5 A dfg”程序程序程序程序”(20.0 30.0 0.020.0 30.0 0.020.0 30.0 0.020.0 30.0 0.0)仅有两个元素,并用仅有两个元素,并用仅有两个元素,并用仅有两个元素,并用“.”“.”“.”“.
23、”分开分开分开分开表称为点对。点对常用于构表称为点对。点对常用于构表称为点对。点对常用于构表称为点对。点对常用于构造连接表。造连接表。造连接表。造连接表。l l文件描述符文件描述符:打打开开文文件件时时的的返返回回值值,相相当当于于其其它它语语言言的的文文件件号号,用于数据的存取。用于数据的存取。l l选择集:选择集:选择集是一个或多个对象的集合。选择集是一个或多个对象的集合。l l实体名(图元名):实体名(图元名):是是AutoCADAutoCAD系系统统在在绘绘图图过过程程中中赋赋予予所所绘绘对对象象的的一一个个数数字字标标号号。确确切切地地说说,它它是是指指向向一一个个AutoCADAu
24、toCAD系系统统内内部部数数据据文文件件的的指指针针。利利用用图图元元名名,AutoLISPAutoLISP可可以以查查找找到到图图形形对对象象的的数数据据库库记记录录,并并对对其其进进行行各各种种方方式式的的处理。处理。一、AutoLISP的数据类型1.41.4 AutoLISP语言概述l l AutoLISPAutoLISP语语言言中中的的一一切切设设计计成成份份都都是是以以函函数数的的形形式式给给出出的的。它它没没有有语语句句的的概概念念或或其其它它语语法法结结构构,执执行行程程序序就就是是执执行函数,再调用函数。行函数,再调用函数。l l 学习掌握学习掌握AutoLISPAutoLI
25、SP语言,语言,核心就是要掌握它的函数核心就是要掌握它的函数;l l 学习学习AutoLISPAutoLISP函数要掌握的基本内容:函数要掌握的基本内容:(1 1)调用格式:即函数名、函数要求的参数个数和类型。)调用格式:即函数名、函数要求的参数个数和类型。(2 2)功能:即该函数的作用,它对其参数如何进行处理。)功能:即该函数的作用,它对其参数如何进行处理。(3 3)求值情况:即哪些参数被求值,哪些不被求值。)求值情况:即哪些参数被求值,哪些不被求值。(4 4)求值结果的返回值类型)求值结果的返回值类型二、AutoLISP的函数1.41.4 AutoLISP语言概述 这这这这一一一一点点点点
26、很很很很重重重重要要要要,因因因因为为为为大大大大多多多多数数数数函函函函数数数数的的的的返返返返回回回回值值值值都都都都要要要要被被被被其其其其它它它它函函函函数数数数接接接接受受受受,而而而而每每每每个个个个函函函函数数数数所所所所需需需需要要要要参参参参数数数数都都都都有有有有特特特特定定定定的的的的类类类类型型型型。因因因因此此此此只只只只有有有有搞搞搞搞清清清清被被被被调调调调用用用用函函函函数的返回值的类型,才不会因用错函数的参数而导致错误数的返回值的类型,才不会因用错函数的参数而导致错误数的返回值的类型,才不会因用错函数的参数而导致错误数的返回值的类型,才不会因用错函数的参数而导
27、致错误。AutoLISP AutoLISP程序是由一系列按顺序排列的标准表组成。程序是由一系列按顺序排列的标准表组成。每个标准表的第一个元素均为系统或用户定义的每个标准表的第一个元素均为系统或用户定义的函数函数函数函数,其,其后的各元素为该后的各元素为该函数的参数函数的参数函数的参数函数的参数。如:。如:(setq x 25.0)(setq y 25.0)(+(*x y)x)AutoLISP AutoLISP AutoLISP AutoLISP的程序的书写格式:的程序的书写格式:的程序的书写格式:的程序的书写格式:所有括号必须左右匹配;所有括号必须左右匹配;阅读阅读AutoLISPAutoLI
28、SP程序时,按从左到右的规则进行;程序时,按从左到右的规则进行;函数必须放在表中的第一个元素位置;函数必须放在表中的第一个元素位置;一个表可以占多行,一行也可以写多个表;一个表可以占多行,一行也可以写多个表;AutoLISP AutoLISP用用“;”“;”作注释;作注释;AutoLISP AutoLISP是以扩展名为是以扩展名为“.lsp”“.lsp”的的ASCIIASCII码文本文件码文本文件的形式存储。的形式存储。三、AutoLISP的程序 (setq x 25.0)(setq x 25.0)(setq y 25.0)(+x y)1.41.4 AutoLISP语言概述l l 程序编辑:程
29、序编辑:AutoLISPAutoLISP程程序序是是纯纯文文本本文文件件,可可以以用用任任意意一一种种ASCIIASCII码码文文本本编编辑辑器器(如如记记事事本本)来来进进行行编编辑辑。编编辑辑后后以扩展名为以扩展名为“.lsplsp”进行保存。进行保存。使使用用Visual Visual LISPLISP编编程程环环境境:打打开开AutoCAD2000AutoCAD2000及及以以上上版版本本,点点击击“工工具具”菜菜单单下下AutoLISPAutoLISP(S S)菜菜单单项项中中的的Visual Visual LISPLISP编编辑辑器器(V V),进进入入Visual Visual
30、LISPLISP编编程程环环境境l l 程序运行:程序运行:程序运行:程序运行:将编辑好的程序,加载后,在将编辑好的程序,加载后,在AutoCADAutoCAD的命令行的命令行CommandCommand下输入函数名即可运行。下输入函数名即可运行。四、编辑和运行AutoLISPAutoLISP的程序的程序1.41.4 AutoLISP语言概述2.1 AutoLISP AutoLISP的基本函数的基本函数2.2 AutoLISP AutoLISP绘图功能绘图功能第2章 AutoLISPAutoLISP基本函数基本函数 和绘图功能和绘图功能2.12.1 AutoLISP基本函数一、数值函数(1 1
31、)数值运算函数)数值运算函数l l加:(加:(+)2 )l l减:(减:()2 )l l乘:(乘:(*)2 )l l除:(除:(/)2 )注意防止除数为零,如注意防止除数为零,如:(/25(/4 9)(/25(/4 9)l l求最大数:(求最大数:(max max )2 )l l求最小数:(求最小数:(min min )2 )l l求平方根:(求平方根:(sqrtsqrt )l l求幂次方:(求幂次方:(exptexpt )l l求绝对值:(求绝对值:(abs abs )2.12.1 AutoLISP基本函数一、数值函数(2 2)三角函数)三角函数l l正弦函数:(正弦函数:(sin sin
32、)用弧度表示用弧度表示l l余弦函数:(余弦函数:(coscos )用弧度表示用弧度表示l l反正切函数:(反正切函数:(atanatan )2)若若没没有有提提供供 2,atanatan返返回回 1 的的反反正正切切值值(单单位位为为弧弧度度)返返回回角角度度范范围围为为-到到;若若提提供供了了 2,则则返返回回/1/2的的反反正正切切值值(单单位位为为弧弧度度);若若 2为为0 0,则返回值的符号同则返回值的符号同;1;其值为其值为1.5707961.570796(9090)。)。2.12.1 AutoLISP基本函数一、数值函数(3 3)数的类型转换函数)数的类型转换函数l l取整函数:
33、(取整函数:(fix fix )截去截去 的小数部分,将的小数部分,将 转换为整型数。转换为整型数。l l实型化函数:(实型化函数:(float float )将将 转换为实型数。转换为实型数。2.12.1 AutoLISP基本函数二、符号与函数处理函数(1 1)赋值函数:)赋值函数:(setq setq )2 )l lsetqsetq函数返回值是最后一个表达式的函数返回值是最后一个表达式的赋赋值结果。值结果。l lAutoLISPAutoLISP程序中作为参数的任何符号都必须先赋值。程序中作为参数的任何符号都必须先赋值。l lsetqsetq函数的求值结果很重要,常作为其它函数的参数。函数的
34、求值结果很重要,常作为其它函数的参数。l l不使用系统内部函数作为变量不使用系统内部函数作为变量l l查看变量的值,在查看变量的值,在AutoCADAutoCAD的的CommandCommand下可在下可在变量变量前加前加”!”!”;在控制台下直接输入变量,回车。在控制台下直接输入变量,回车。(2 2)禁止求值函数:)禁止求值函数:(quote quote )1)也可简写成:也可简写成:()1)禁止对表达式求值,返回禁止对表达式求值,返回表达式本身。表达式本身。2.12.1 AutoLISP基本函数二、符号与函数处理函数(3 3)定义用户函数的函数:)定义用户函数的函数:(defun defu
35、n 1 2 n )l l函数名函数名 就是用户所定义的函数名,它必须是符号原子。就是用户所定义的函数名,它必须是符号原子。l l形参表形参表 每个参数都是符号原子。由用每个参数都是符号原子。由用“/”/”隔开的形参和局隔开的形参和局部变量组成。它可以是空表、只有形参、只有局部变量或形参和部变量组成。它可以是空表、只有形参、只有局部变量或形参和局部变量都有。局部变量都有。l l表达式表达式 可以是一个或多个,在函数调用时对它们进行求值。可以是一个或多个,在函数调用时对它们进行求值。l l 利用利用defundefun可以为可以为AutoCADAutoCAD增加命令增加命令(defundefun
36、C:XXX().)C:XXX().)2.12.1 AutoLISP基本函数二、符号与函数处理函数(3 3)定义用户函数的函数:)定义用户函数的函数:l ldefundefun函数的调用是对已定义的函数的调用,其调用格式为:函数的调用是对已定义的函数的调用,其调用格式为:(函数名(函数名 实参表)实参表)实参表中实参的个数与位置,要与函数定义的形参表实参表中实参的个数与位置,要与函数定义的形参表实参表中实参的个数与位置,要与函数定义的形参表实参表中实参的个数与位置,要与函数定义的形参表 中形实参的个数与位置逐一对应。中形实参的个数与位置逐一对应。中形实参的个数与位置逐一对应。中形实参的个数与位置
37、逐一对应。l lDefunDefun函数的返回值是所定义函数的函数名。函数的返回值是所定义函数的函数名。l l执行完执行完defundefun定义的函数,局部变量将被释放掉。定义的函数,局部变量将被释放掉。全局变量可由任何函数访问和修改,或在任一表达式中全局变量可由任何函数访问和修改,或在任一表达式中全局变量可由任何函数访问和修改,或在任一表达式中全局变量可由任何函数访问和修改,或在任一表达式中使用。局部变量仅在定义它的函数求值期间(函数调用期使用。局部变量仅在定义它的函数求值期间(函数调用期使用。局部变量仅在定义它的函数求值期间(函数调用期使用。局部变量仅在定义它的函数求值期间(函数调用期间
38、)有意义。间)有意义。间)有意义。间)有意义。2.12.1 AutoLISP基本函数三、表处理函数(1 1)提取表中数据的函数:)提取表中数据的函数:l l(car(car)提取表中第一个元素。提取表中第一个元素。l l(cdrcdr )提取表中除第一个元素以外的所有元素组成表:提取表中除第一个元素以外的所有元素组成表:l l(nth (nth )提取表中第提取表中第n n个元素,个元素,n=0,1,2,n=0,1,2,l l(last (last )提取表中顶层的最后一个元素。提取表中顶层的最后一个元素。AutoLISPAutoLISP接受接受carcar和和cdrcdr的任意组合,的任意组
39、合,如:如:(cadar(cadar )等效于等效于(car(cdr(car(car(cdr(car )。2.12.1 AutoLISP基本函数三、表处理函数(2 2)构造和修改表的函数:)构造和修改表的函数:l l(list (list )构造表:将任意数目的表达式的求值结果串在一起,并返回构造表:将任意数目的表达式的求值结果串在一起,并返回它们组成的表。它们组成的表。l l(append(append.).)构造表:将所有构造表:将所有 中的元素串联在一起,构成一个新表。中的元素串联在一起,构成一个新表。l l(cons(cons )构造表:将新的第一个元素加入表,返回加入元素构造表:将新
40、的第一个元素加入表,返回加入元素后的表;若表为原子,则构造一个点对表。后的表;若表为原子,则构造一个点对表。l l(reverse(reverse)构造表:将构造表:将 中的顶层元素倒排,构成一个新表。中的顶层元素倒排,构成一个新表。2.12.1 AutoLISP基本函数三、表处理函数(3 3)提取并修改表中数据的函数:)提取并修改表中数据的函数:l l(assoc(assoc )连连连连接接接接表表表表又又称称表表。它它是是以以点点点点对对对对或或子子子子表表表表为为元元素素组组成成的的表表。每个点对和子表的每个点对和子表的第一个元素第一个元素第一个元素第一个元素称为称为关键字关键字关键字关
41、键字。函函数数assocassoc搜搜索索连连接接表表,以以找找到到此此表表中中的的关关键键字字,并并提提取取包含关键字的子表,并返回该子表;若未找到关键字,则返回包含关键字的子表,并返回该子表;若未找到关键字,则返回nilnil。l l(substsubst )函函数数substsubst 从从表表搜搜索索旧旧项项,将将表表中中的的每每一一个个旧旧项项用新项替换,并返回替换后的表;用新项替换,并返回替换后的表;若未在表中找到旧项,则返回没有更改的表若未在表中找到旧项,则返回没有更改的表2.12.1 AutoLISP基本函数三、表处理函数(4 4)表循环处理函数:)表循环处理函数:l l(fo
42、reachforeachforeachforeach )该该函函数数循循环环地地将将表表中中每每一一个个顶顶层层元元素素赋赋给给符符号号原原子子再再对对循循环环体体中中的的每每一一个个表表达达式式求求值值,并并返返回回最最后后一一次次循循环环时时循循环环体中最后一个表达式的求值结果。体中最后一个表达式的求值结果。l l(mapcarmapcar )n )该该函函数数依依次次循循环环地地把把表表1 1、表表2 2 表表n n 的的元元素素赋赋给给函函数数名名所所指指函函数数的的相相应应参参数数,并并调调用用此此函函数数 进进行行求求值值,把把每每次次循循环环的的求求值值结结果果按按求求值值顺顺序
43、序构构成成一一个个表表,作作为为mapcarmapcar函函数数的返回值。的返回值。2.12.1 AutoLISP基本函数四、字符串处理函数(1 1)数串互换函数数串互换函数:l l(itoaitoa )该函数将整数转换成整数字符串,返回字符串该函数将整数转换成整数字符串,返回字符串。l l(atoiatoi )该函数将数字字符串转换成该函数将数字字符串转换成整数整数,返回整数,返回整数。l l(atofatof )该函数将数字字符串转换成该函数将数字字符串转换成实型数实型数,返回实型数,返回实型数。2.12.1 AutoLISP基本函数四、字符串处理函数(1 1)数串互换函数数串互换函数:l
44、 l(rtosrtos )该函数该函数根据该函数该函数根据 和和 ,将将 转换成相应的转换成相应的字符串,其中字符串,其中 和和 都为整数都为整数。的值的意义的值的意义:1 1 科学计数格式科学计数格式 2 2 十进制十进制格式格式 3 3 工程计数格式工程计数格式 4 4 建筑计数格式建筑计数格式 5 5 任选的分数单位任选的分数单位 :保留小数点后几位保留小数点后几位2.12.1 AutoLISP基本函数四、字符串处理函数(2 2)字符串处理函数:)字符串处理函数:l l(strcatstrcat 2)该函数将该函数将 按顺序头尾相连组成按顺序头尾相连组成一个新的字符串,并返回这个新字符串
45、一个新的字符串,并返回这个新字符串。l l(substrsubstr )该该函函数数从从 中中截截取取一一个个子子字字符符串串并并返返回回,其其中中 和和 变量都必须是正整数变量都必须是正整数 。l l(strlenstrlen )该函数求该函数求 中字符的个数(含空格)并返回中字符的个数(含空格)并返回。2.22.2 AutoLISP的绘图功能一、GET类输入函数 GET GET类(屏幕)输入函数的通用格式:类(屏幕)输入函数的通用格式:(getXXX getXXX )XXX:int real string point dist angle XXX:int real string point
46、 dist anglel l(getintgetint )从提示行输入一整型数;从提示行输入一整型数;l l(getrealgetreal )从提示行输入一实型数;从提示行输入一实型数;l l(getstringgetstring )从提示行输入一字符串;从提示行输入一字符串;l l(getpointgetpoint )从提示行输入一个点或在屏幕上用鼠从提示行输入一个点或在屏幕上用鼠 标输一个点标输一个点l l(getdistgetdist )从提示行输入一个实型或整型值(距从提示行输入一个实型或整型值(距 离值)或从离值)或从 屏幕上输入两点而决定距离。屏幕上输入两点而决定距离。l l(ge
47、tanglegetangle )从提示行输入一个角度值或基于从屏幕从提示行输入一个角度值或基于从屏幕 上选取的点决定角度值。上选取的点决定角度值。2.22.2 AutoLISP的绘图功能二、Command函数(1)Command函数的格式 (Command .)l 参数格式取决于所执行的AutoCAD命令及其所需要的数据类型。即command函数中所调用的参数类型、个数、与顺序均要和AutoCAD命令严格对应。l AutoCAD的命令、子命令和选择项要用不含空格的字符串表示,大小写均可。l 数字常量(整数或实型数)可写成数本身也可写成字符串形式l 点常量有两种表示方法,一是用表的形式,如(10
48、.0 25.0);二是用字符串中的数据表示如:”10.0,25.0”。l command函数调用参数中的空串(“”),等效于在键盘上按一次空格键。l command函数调用的参数,如数字、点也可为表达式,但表达式求值结果的数据类型要和AutoCAD命令的要求一致。l command函数可以不带任何参数,相当于在键盘上按一次Ctrl+C。AutoLISPAutoLISP具具有有强强大大的的绘绘图图编编辑辑功功能能,主主要要是是由由于于它它提提供供了了一一个个系系统统内内部部函函数数CommandCommand函函数数,利利用用CommandCommand函函数数可可以以非非常常方方便便地地调调用
49、用几几乎乎全全部部AutoCADAutoCAD命命令令,以以完完成成各种工程图形的绘制功能。各种工程图形的绘制功能。2.22.2 AutoLISP的绘图功能二、Command函数(2)Command函数的功能l Command函数的功能是在AutoLISP编程中直接调用AutoCAD命令以编制绘图程序,其求值结果总是返回nil。l 用一个Command函数可以执行一条或多条AutoCAD命令。l 一条AutoCAD 命令可由多个command函数完成。l command的参数不能用get类函数。在一条AutoCAD 命令由多个command函数完成情况下,可在多个command函数调用中插入g
50、et类函数。(3)应用Command函数的注意事项 l Command函数调用中的参数类型、个数、顺序要和AutoCAD命令严格对应。为防止出错,可先在AutoCAD的命令行输入要执行的命令,确定其输入命令、子命令及数据都准确无误后,再编入程序的Command函数中。l Command函数调用中的命令、子命令及选项中不能含有空格。2.22.2 AutoLISP的绘图功能三、图形处理函数l(polar )用于求相对于点一定角度,一定距离的另外一点。方向角从轴正方向逆时针方向计算,单位为弧度。点可以是二维点或三维点,但polar总是返回二维点。l(distance )返回两点间的3D距离。l(an