CAD二次开发教程(AUTOLISP).ppt
《CAD二次开发教程(AUTOLISP).ppt》由会员分享,可在线阅读,更多相关《CAD二次开发教程(AUTOLISP).ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Cad二次开发-AUTOLISP 入门 一、一、LISP编程语言概述编程语言概述n nAutoLISPAutoLISP是由是由AutodeskAutodesk公司开发的一种公司开发的一种LISPLISP程序语言(程序语言(LISPLISP是是List List n n Processor Processor的缩写)。第一篇关于的缩写)。第一篇关于LISPLISP的参考文献是由的参考文献是由John McCarthy John McCarthy 在在19601960年年4 4月的月的ACMACM通讯通讯中发表的。中发表的。n n 除了除了FORTRANFORTRAN和和COBOLCOBOL,大多
2、数在六十年代早期开发出来的语大多数在六十年代早期开发出来的语言都过时了,可是言都过时了,可是 LISPLISP却生下来,并且已经成为人工智能(却生下来,并且已经成为人工智能(AIAI)的首)的首选选 程序序言。程序序言。AutoLISPAutoLISP解释程序位于解释程序位于AutoCADAutoCAD软件包中,软件包中,然而然而AutoCAD R2.17AutoCAD R2.17及更低版本中并不包含及更低版本中并不包含 AutoLISPAutoLISP解释程序,这样,解释程序,这样,只有通过只有通过AutoCAD AutoCAD 2.182.18及更高版本才可以使用及更高版本才可以使用Aut
3、oLISPAutoLISP语言。语言。n n AutoCADAutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,命令末被提供。例如,AutoCADAutoCAD中没有在图形文本对象内绘制矩形及中没有在图形文本对象内绘制矩形及作全局改变的命令。通过作全局改变的命令。通过AutoLISPAutoLISP,你可以使用,你可以使用AutoLISPAutoLISP程序语言编程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用上,可以用Aut
4、oLISPAutoLISP编制任编制任何何程序,或把它嵌入到菜单中,这样定制程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。你的系统会取得更高的效率。二、基本语法二、基本语法n n1 1、一个表达式必须使用配对的括号。、一个表达式必须使用配对的括号。n n2 2、数学运算、数学运算n n1.1.加法加法n n 格式格式(+num1 num2 num3.)(+num1 num2 num3.)n n 此函数()计算加号()右边所有数字的和此函数()计算加号()右边所有数字的和(+num1 num2 (+num1 num2 num3.)num3.)n n 2.2.减法减法n n 格式格式
5、(-num1 num2 num3.(-num1 num2 num3.)n n 此函数()从第一个数中减去第二个数(此函数()从第一个数中减去第二个数(num1-num2num1-num2)n n4.4.除法除法n n 格式(格式(/num1 num2 num3/num1 num2 num3)n n 此函数()用第一个数除以第二个数。如果多于两个数,就用此函数()用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所有数的乘积第一个数除以其后所有数的乘积num1/num1/(num2 num3 num2 num3 n n .)n n3 3、关系表达式、关系表达式、关系表达式、关系表达式n
6、 n1.1.等于等于n n 格式(格式(=atom1 atom2=atom1 atom2)n n 该函数(该函数(=)检查两个元素是否相等。若相等,条件为真,函数返)检查两个元素是否相等。若相等,条件为真,函数返回。同样,若指定的元素不相等,条件为假,函数返回回。同样,若指定的元素不相等,条件为假,函数返回nilniln n2.2.不等于不等于n n 格式(格式(=atom1 atom2=atom1 atom2)n n 该函数(该函数(=)检查两个元素是否不相等。若不相等,条件为真,)检查两个元素是否不相等。若不相等,条件为真,函数返回。同样,若指定的元素相等,条件为假,函数返回函数返回。同样
7、,若指定的元素相等,条件为假,函数返回nilnil。n n 3.3.小于小于n n 格式(格式(atom1 atom2atom1 atom2)n n 该函数()检查第一个元素(该函数()检查第一个元素(atomatom)是否小于第个元素)是否小于第个元素(atomatom)。若为真,函数返回,否则返回)。若为真,函数返回,否则返回nilnil。n n 4.4.小于等于小于等于n n 格式格式(=atom1 atom2.=atom1 atom2.)n n 该函数该函数(=)(=)(=)检查第一个元素(检查第一个元素(atom1atom1)的值是)的值是否大于等于第二个元素(否大于等于第二个元素(
8、atom2atom2)。若是,函数返)。若是,函数返回,否则返回回,否则返回nilnil。三、基本函数三、基本函数n n 1.defun 1.defun函数函数n n defundefun函数用于在函数用于在AutoLISPAutoLISP程序中定义函数,其格式为:程序中定义函数,其格式为:n n (defun name(defun nameargumentargument)n n 其中其中namename函数名函数名n n argumentargument参数列表参数列表n n 示例:示例:n n (defun ADNUM(defun ADNUM(),定义了一个函数(),定义了一个函数ADN
9、UMADNUM,此函数无参数,此函数无参数,也无局部变量(也无局部变量(Local Local n n symbols symbols)。这就意味着程序中用到所有变量均为全局变量。全局)。这就意味着程序中用到所有变量均为全局变量。全局变量的值在程序结束时不会丢失。变量的值在程序结束时不会丢失。n n(defun ADNUM(defun ADNUM(b c)b c),定义了一个含有三个参数、,定义了一个含有三个参数、和和c c的函数的函数ADNUMADNUM。变量、。变量、从程序外部获取它们的值。从程序外部获取它们的值。n n (defun ADNUM(defun ADNUM(/n n ),定义
10、了一个含有两个局部变量和的函数),定义了一个含有两个局部变量和的函数ADNUMADNUM。局部。局部变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。n n n(defun :ADNUM(),在函数名前加上:后,此函数就可以通n过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有使用:,函数名则必须置于圆括号中。n注意 AutoLISP包含一些内置函数,不要使用其中的任一名称作为函数名或变量名,以下是一些AutoLISP内置函数的保留名称列表。n2.setq函数n setq函数用于给变量赋值,其格式如下:
11、n (setq name valueName value)n 其中Name变量名n value赋予变量的值n 赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。若该值为字符串,其长度不可超过100个字符。n Command:(setq 12)n Command:(setq 8.5 12)n n3 3、CommandCommand函数函数n n CommandCommand函数用于在函数用于在AutoLISPAutoLISP程序内部执行标准的程序内部执行标准的AutoCADAutoCAD命令。命令。AutoCADAutoCAD命令名及命令选项必须置于双引命令
12、名及命令选项必须置于双引号内。号内。CommandCommand函数的格式为:函数的格式为:n n (Command Command“CommandnameCommandname”)n n 其中其中CommandCommandAutoLISPAutoLISP函数函数n n CommandnameCommandnameAutoCADAutoCAD命令命令n n 示例:示例:n n n n(CommandCommand“lineline”Pt1 Pt2 Pt1 Pt2“”“”)n n “lineline”AutoCAD AutoCAD 命令命令n n Pt1Pt1第一点第一点n n Pt2Pt2第
13、二点第二点n n “”“”用于返回,相当于用于返回,相当于“回车回车”键键n n4.getpoint4.getpoint函数函数n n getpointgetpoint函数暂停程序的运行,允许用户输入一个点的、坐标函数暂停程序的运行,允许用户输入一个点的、坐标或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。getpointgetpoint函数的格式为:函数的格式为:n n (getPointgetPointPointPointPromptPrompt)n n 其中其中pointpoint输入一个点,或选择一个点输入一个点,或选择一个点n n
14、promptprompt将显示在屏幕上的提示将显示在屏幕上的提示n n 示例:示例:n n (setq Pt1setq Pt1(getpointgetpoint)n n (setq Pt1setq Pt1(getPointgetPoint“选择第一点选择第一点”)n n有上面几个函数就可以开始编程了:有上面几个函数就可以开始编程了:例例1 1 编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出如三角形。它们绘出如三角形。本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以本例中,程序的输入为三个点的坐标,期望的
15、输出为一个三角形。用以生成该三角形的处理过程为:由生成该三角形的处理过程为:由P1P1到到P2P2、由、由P2P2到到P3P3、到、到P3P3到到P1P1各画一各画一条直线。弄清这三部分就会使编程过程更清晰。条直线。弄清这三部分就会使编程过程更清晰。n n;该程序提示输入三点,该程序提示输入三点,1 1n n;提示选取点进可以是在屏幕上点取,也可以是输入坐标提示选取点进可以是在屏幕上点取,也可以是输入坐标 2 2n n;程序将依此三点画出一个三角形程序将依此三点画出一个三角形 3 3n n 4 4n n(defun(defun:triang1()triang1()5 5 n n (setq P
16、1setq P1(getPointgetPoint“选择第一点:选择第一点:”)6 6n n (setq setq 2 2(getPointgetPoint“选择第二点:选择第二点:”7 7n n (setq setq 3 3(getPointgetPoint“选择第三点:选择第三点:”)8 8n n (CommandCommand“lineline”P1 P2 P3 P1 P2 P3“”)9 9n n )1010n n说明说明n n 第第1 13 3行行n n 前三行为注释行,用于描述程序中的函数。这几行很重要因为有它们,编前三行为注释行,用于描述程序中的函数。这几行很重要因为有它们,编辑程
17、序会变得简单一些。可以在任何必要的时候使用注释。所有的注释行都辑程序会变得简单一些。可以在任何必要的时候使用注释。所有的注释行都必须以分号(;)开头,当程序装入时这些行会被忽略。必须以分号(;)开头,当程序装入时这些行会被忽略。n n 第第4 4行:行为空行,用于分隔程序与注释部分。空行还可以用来分隔程序行:行为空行,用于分隔程序与注释部分。空行还可以用来分隔程序的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。n n n n第第5 5行:(行:(defun C:triang1()defun C:triang1()n n 本
18、行中,本行中,defundefun为一个为一个AutoLISPAutoLISP函数,它定义了函数函数,它定义了函数TRIANG1TRIANG1。TRIANG1TRIANG1为该函数的函数名。由于此函数名前带有:,因此该函数可以像为该函数的函数名。由于此函数名前带有:,因此该函数可以像AutoCADAutoCAD命令一样被执行。若没有:命令一样被执行。若没有:,n n TRIANG1 TRIANG1命令只能置于圆括号中执行(命令只能置于圆括号中执行(TRIANG1TRIANG1)。此函数带有三个全)。此函数带有三个全局变量(局变量(n n P1,P2P1,P2,P3P3)。第一次编写)。第一次编
19、写AutoLISPAutoLISP程序时,保持变量为全局变量是个好程序时,保持变量为全局变量是个好习惯。这是因为装入并运行程序后,可以通过在习惯。这是因为装入并运行程序后,可以通过在AutoCADAutoCAD命令提示行中输人命令提示行中输人感叹号(!)并在其后输入变量名来检查变量的值(感叹号(!)并在其后输入变量名来检查变量的值(CommandCommand:!:!P1P1)。一)。一旦程序通过测试并运行正常,就应该使它们成为局部变量旦程序通过测试并运行正常,就应该使它们成为局部变量(defun(defun n n :TRIANG1TRIANG1(P1 P2 P3P1 P2 P3)n n第第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAD 二次开发 教程 AUTOLISP
限制150内