第14章 AutoLISP语言初步_第1页
第14章 AutoLISP语言初步_第2页
第14章 AutoLISP语言初步_第3页
第14章 AutoLISP语言初步_第4页
第14章 AutoLISP语言初步_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章AutoLISP语言初步AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是ListProcessor的缩写),并且已经成为人工智能(AI)的首选程序语言。现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包。14.1

VisualLISP编辑器调用:执行“工具/AutoLISP/VisualLISP编辑器”,弹出VisualLISP编辑器对话框文本编辑窗口、跟踪窗口、VisualLISP控制台(在窗口中直接输入某个AutoLISP变量名,再按回车键,可查看该变量的值。)调试:工具/检查编辑器中的文字工具/加载编辑器中的文字14.2加载和运行AutoLISP程序执行“工具/AutoLISP/加载”,或在命令行键入Appload(AP),弹出[加载/卸载应用程序]对话框;或在命令行键入(Load”文件名”),即利用AutoLISP函数加载程序。14.3.1数学运算功能函数

1.(十数值数值…)返回:累计实数或整数数值2.(一数值数值…)返回:差值3.(*数值数值…)返回:所有数值乘积4.(/数值数值…)返回:第一个数值除以第二个以后数值的商5.(1+数值)返回:数值+16.(1-数值)返回:数值-17.(abs数值)返回:数值的绝对值8.(atan数值)返回:反正切值9.(cos角度)返回:角度的余弦值,角度值为弧度14.3AutoLISP函数

10.

(exp数值)返回:数值的指数11.

(log数值)返回:数值的自然对数值12.

(max数值数值…)返回:数值中的最大值13.

(min数值数值…)返回:数值中的最小值14.pi常数∏,其值约为3.141592615.

(sin角度)返回:角度的正弦值,角度值为弧度16.

(sqrt数值)返回:数值的平方根14.3.2函数处理、定义功能函数

1.(eval表达式)返回:表达式的执行结果2.(exit)强制退出目前的应用程序3.(quit)强制退出目前的应用程序4.(defun

名称自变量列表表达式.)自定函数或子程序例:(defun

ADNUM(/ab)定义了一个含有两个局部变量a和b的函数ADNUM。局部变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。

(defun

C:ADNUM()在函数名前加上C:后,此函数就可以通过在AutoCAD的Command:提示符后输入其函数名直接执行。如果没有使用C:,函数名则必须置于圆括号中。14.3.3检验与逻辑运算功能函数1.(=表达式1表达式2)比较表达式1是否等于式2,适用数值及字符串2.(/=表达式1表达式2)比较表达式1是否不等于表达式23.(<表达式1表达式2)比较表达式1是否小于表达式24.(<=表达式1表达式2)比较表达式1是否小于等于表达式25.(>表达式1表达式2)比较表达式1是否大于表达式26.(>=表达式1表达式2)比较表达式1是否大于等于表达式214.3.4判断式、循环相关功能函数

1.(If

<比较式><表达式1><表达式2>)检算比较式结果,如果为真,执行<表达式1>,否则执行<表达式2>2.(Repeat

次数[<表达式><表达式>…])根据函数中指定的次数n反复求解表达式,变量n必须为整数。3.(While

<比较式><表达式>…)求解一个测试条件,若该条件为真(表达式不返回nil),while语句后边的操作将反复执行,直到该测试条件返回nil。4.(Cond<比较式1><表达式1><比较式2><表达式2><比较式3><表达式3>)多条件式的if整合功能5.(Progn<表达式1><表达式2>…)连接其中的表达式为一组,常用于配合if、cond等函数示例1:(repeatn(Command"circle"cr)(setqr(+rd)))示例2:(if(>yl0.0);绘制封头与槽本体间的预留值

(progn(command"line"p1py1"")(command"line"p2py2"")(command"line"p3py3"")(command"line"p4py4"")))示例3:(setqinc(/(*2pi)n));根据法兰孔数计算各法兰孔间角度(setqang0);设定角度变量初始值为0(setqr(/dh2));计算法兰孔内径;建立循环绘制各法兰孔(While(<ang(*2pi))(setqp(Polarcarz));确定法兰孔圆心位置

(command"circle"pr);绘制法兰孔

(setqa(+ainc));下一法兰孔起始角

(setqang(+anginc));角度增量)14.3.5列表处理功能函数1.(car

列表)返回列表中的第一个元素格式为:(carList)通常用来求X坐标!2.(cdr列表)返回除去第一个元素后的列表其格式为:(cdrList)

3.(cadr

列表)执行两个操作,cdr和car,返回列表中的第二个元素。通常用来求y坐标!(cdr函数移去了第一个元素。car函数返回新表中的第一个元素。)4.(caddr列表)返回列表中的第三个元素通常用来求Z坐标5.(list

元素元素…)返回:将所有元素合并为一列表可用于定义一个二维或三维点。示例(setqx(List2.5

3.56))(setqx’(2.5

3.56));两条语句作用相同14.3.6字符串、字符、文件处理函数

1.(strcase字符串[字样])返回:转换字符串大小写2.(substr字符串起始位置截取长度)返回:按指定长度取出字符串

14.3.7符号、元素、表达式处理功能函数1.(minusp元素)返回:T或nil元素是否为负值2.(not元素)返回:T或nil判定元素是否为ni13.(null

元素)返回:T或nil判定元素是否被赋予nil值4.(setq

符号1表达式1[符号2表达式2]…)用于给变量赋值,可设定表达式结果给各符号5.(zerop元素)返回:T或nil,元素是否为0值示例:(setqx6.5)(setqx8.5y12)(setqyl(getdist"\n请输入封头和贮槽本体间的预留值<0.0>:"))(if(nullyl)(setqyl0.0))

14.3.8等待输入功能函数

1.(getangle[基点][提示])暂停程序的运行,请求输入十进制角度数值,响应一个弧度值,提示及参考点可有可无。2.(getcorner

基点[提示])暂停程序的运行,等候用户输入一个点的坐标,该函数需要一个基点,在屏幕上移动屏幕光标时将根据该基点显示矩形。例:(setqpt2(getcornerpt1“EntersecondPoint”))3.(getdist

[基点][提示])暂停程序的运行,等候用户输入距离,随后以实数形式返回该距离。例:(setqdist(getdist

pt1“EntersecondPointfordistance”))4.(getint

[提示])暂停程序的运行,等候用户输入一个整数,即使输入的不是一个整数,该函数仍返回一个整数。例:(setqnumX(getint"Enternumberofrows:"))5.(getkword[提示])请求输入“关键词”6.(getorient

[基点][提示])暂停程序的运行,等候用户输入一个角度,随后将该角度值以弧度的形式返回。不受angbase、angdir影响,其以正右方为0弧度,总是以正X轴及逆时针方向测量角度。例:(setqang(getorient“Entertaperangle“))7.(getpoint

[基点][提示])暂停程序的运行,请求输入一个点的X、Y坐标或X、Y、Z坐标。该点的坐标可以由键盘或使用屏幕光标输入。例:(setqpt1((getPoint“EnterstartPoint”))8.(getreal[提示])暂停程序的运行,等候用户输入一个实数。即使输入一个整数,该函数仍返回一个实数。9.(getstring[提示])暂停程序的运行,等候用户输入一个字符串值。即使只输入数字,该函数仍返回一个字符串。例:(setqanswer(getstring“\nEnterYforyes,Nforno:”))14.3.9AutoCAD相关查询、控制功能函数

1.(Command”AutoCAD命令”…)超重量级函数,调用执行AutoCAD命令。附:Command函数不能使用AutoCAD的DTEXT或TEXT命令输入数据。不能通过Command函数使用AutoLISP的输入函数。例:(Command“line”P1P2P3“c”)

输入AutoCAD的line命令,然后从P1到P2、P2到P3各画一条直线,“C”(表示“close”选项)把最后一点P3与第一点P1连接起来。所有的AutoCAD命令及选项在AutoLISP程序中使用时都必须置于双引号内,变量P1、P2、P3之间用空格分隔。2.(getenv”环境变量”)取得该环境变量的设定值,以字符串表示3.(getvar”系统变量”)取得该系统变量的设定值,以字符串表示示例:(getvar“ltscale”)(getvar“limmax”)(getvar“limmin”)

一条getvar语句只能检索一个变量的值。

4.(setvar”系统变量”值)用于给AutoCAD系统变量赋值。系统变量名必须置于双引号中。

示例:(setvar“cmdecho"0)

(setvar“Ltscale”0.5);设置线型比例(setvar“orthomode"1);开正交模式14.3.10显示、打印控制功能函数

1.(graphscr)作图环境切换到图形画面若系统只有一个屏幕,graphscr函数将文本窗口转换为图形窗口,若系统有两个屏幕,该函数将被忽略。2.(textscr)作图环境切换到文字画面若系统只有一个屏幕,textscr函数将图形窗口转换为文本窗口,若系统有两个屏幕,该函数将被忽略。3.(Prinl[表达式[文件代码]])将表达式打印于命令区或已打开的文件,句柄字符则以“\”为前缀展开4.(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl5.(Princ[表达式[文件代码]])将表达式打印于命令区或已打开的文件,句柄字符不以”\”为前缀展开。若变量位于双引号中,该函数打印(或显示)双引号内的表达式。示例:(princ)在屏幕上打印一个空行

(princa)在屏幕上打印出变量a的值

(princ“Welcome”)在屏幕上打印Welcome6.(redraw[对象名称[模式]])重绘整张图或根据对象名称重绘该图形7.(terpri)用于在屏幕上打印一个新行,与\n作用相同。该函数用于打印紧跟着terpri函数的一行。8.(prompt信息)将信息显示于屏幕的命令区,并随后响应一个nil信息。示例:

(prompt"\nflp命令绘制一个带孔的法兰盘")14.3.11几何运算功能函数

1.(angle点1点2)取得两点的角度弧度值。2.(distance

点1点2)取得两点的距离示例:(setqczc(distancep2p3))3.(inters点1点2点3点4[模式])取得两条线的交点4.(polar

基点弧度距离)利用相对于给定点的角度及距离,按照极坐标法取得另一坐标点。该角度以弧度表示,逆时针方向为正。例:(setqpt2(polar‘(2.0

3.25)angdis))(setqp(Polarcarz));确定法兰孔圆心位置

(command"circle"pr);绘制法兰孔14.3.12对象处理功能函数

1.(entdel对象名称)删除或取消删除对象2.(entget对象名称[应用程序列表])取出对象名称的信息列表3.(entlast

)取出图形信息中的最后一个对象示例:

(command"ellipse"py1py2dbzc)(setqel(entlast))(command"break"elpy2py1)14.3.13转换运算功能函数

1.(angtof字符串[模式])返回:角度值的字符串转成实数2.(angtos角度[模式[精度]])返回:角度转成的字符串值3.(atof字符串)返回:字符串转成实数值4.(atoi字符串)返回:字符串转成整数值5.(itoa整数)返回:整数转成字符串6.(rtos数值模式[精度])返回:实数转成字符串14.4程序设计基础例1编写一段程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出三角形。

多数程序都包含三个基本组成部分,即输入、输出及处理过程。其中处理过程的功能为根据给定的输入来产生预期的输出。编写程序前,必须确认这三部分。

本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以生成该三角形的处理过程为:由P1到P2、由P2到P3、到P3到P1各画一条直线。弄清这三部分就会使编程过程更清晰。处理过程对于程序的成功起着很重要的作用。有时它很简单,有时却包含复杂的计算。如果程序包含大量运算,就应该把它分成若干个程序(甚至是子程序),并按逻辑的顺序和系统的顺序安排好它们。同时请记住,程序需要随时修改,也很有可能被其他程序员修改。因此,应尽可能使程序清晰、明了,以便其他程序员了解程序在其执行过程中的不同阶段在做些什么。如果可能,请给出草图,并且说明要点。输入输出:P1点的位置P2点的位置三角形P1,P2,P3P3点的位置处理过程:从P1到P2画线从P2到P3画线从P3到P1画线下面的文件是例1的AuotLISP程序清单。右边的行号只为方便引用,并不是程序的一部分。

;本程序通过提示用户输入三角形的三个顶点以创建三角形

1(defunc:SJX(/p1p2p3)

;2(graphscr)

;3(setvar“cmdecho”0)

;4(setqp1(getPoint“\n请输入三角形的第一点:”));5(setqp2(getPointp1“\n请输入三角形的第二点:”))

;6(Command“line”p1p2“”)

;7(setqp3(getPointp2“\n请输入三角形的第三点:”))

;8(Command“line”p2p3p1“”)

;9(setvar“cmdecho”1)

;10(princ)

;11)

;12

说明第1行;本程序通过提示用户输入三角形的三个顶点以创建三角形

本行为注释行,用于描述程序中的函数。这一行很重要,因为有了它,编辑程序才会更明了,可以在任何必要的时候使用注释。所有的注释行都必须以分号(;)开头,当程序装入时这些行会被忽略。

第2行(defunc:sjx(/p1p2p3)

本行中,defun为一个AutoLISP函数,它定义了函数sjx。sjx为该函数的函数名。由于此函数名前带有C:,因此该函数可以像AutoCAD命令一样被执行。若没有C:,sjx命令只能置于圆括号中执行(sjx)。此函数带有三个全局变量(P1,P2,P3)。第一次编写AutoLISP程序时,保持变量为全局变量是个好习惯。这是因为装入并运行程序后,可以通过在AutoCAD命令提示行中输人感叹号(!)并在其后输入变量名来检查变量的值(Command:!P1)。一旦程序通过测试并运行正常,就应该使它们成为局部变量(defunc:sjx(/P1P2P3)

第3行(graphscr)

若系统只有一个屏幕,graphscr函数将文本窗口转换为图形窗口,若系统有两个屏幕,该函数将被忽略。

第4行(setvar“cmdecho”0)格式:(setvar”系统变量”值)cmdecho系统变量:控制AutoLISP的command函数运行时AutoCAD是否回显提示和输入。

设定“cmdecho”系统变量的值为0,即在command函数运行时不回显提示和输入。第5行

(setqp1(getPoint“\n请输入三角形的第一点:”))

本行中,getPoint函数暂停程序的运行,允许用户输入三角形的第一个点。提示信息“请输入三角形的第一点:”显示在屏幕的提示区内。可以通过键盘输入该点的坐标,也可以用屏幕光标选择该点。随后setq函数将这些坐标赋予变量P1。

\n的作用是回车,其后的表达式将被打印在下一行上(“n”代表“newline”)

第6行

(setqp2(getPoint

p1“\n请输入三角形的第二点:”))

本行提示用户以p1为基点,指定三角形的第二个顶点,随后把这些坐标赋予变量P2。第7行:(Command“line”p1p2“”)

本行中,Command函数用来输入AutoCAD的line命令,然后根据用户指定的坐标,从P1到P2画一条直线,结尾的一对双引号(“”)表示返回,用于终止画线命令。所有的AutoCAD命令及选项在AutoLISP程序中使用时都必须置于双引号内。变量P1、P2之间用空格分隔。第8行

(setqp3(getPoint

p2“\n请输入三角形的第三点:”))

本行提示用户以P2为基点,指定三角形的第三个顶点,随后把这些坐标赋予P3。

第9行:(Command“line”p2p3p1“”)

本行中,调用AutoCAD的line命令,从P2到P3,再从P3到P1画两条直线,完成三角形绘制,结尾的一对双引号(“”)表示返回,用于终止画线命令。

第10行(setvar“cmdecho”1)

设定“cmdecho”系统变量的值为1,即在command函数运行时回显提示和输入。第11行(princ)

在屏幕上打印一个空行,以不显示与绘图无关的系统变量返回信息。第12行:

)

本行仅包含一个用于表明函数SJX定义完成的右括号。该括号也可以写在上一行中。把它单独放在一行是一个好习惯,因为这样做任何程序员都可以很容易的确认定义已结束。然而某些程序中,同一程序内的多个定义及模块需要明确区分开。括号及空行有助于明确定义或程序段的起始和结束。例2编写一段程序,生成一个带孔的法兰盘,程序应提示用户输入该法兰盘的圆心、内径、外径、圆孔中心距、孔径、孔数及起始角

。(defunc:flp()(graphscr)(setvar"cmdecho"0)(prompt"\nflp命令绘制一个带孔的法兰盘")(setqc(getpoint"\n请指出法兰盘的圆心:"))(setqrn(getdistc"\n请输入法兰盘的内径:"))(setqrw(getdistc"\n请输入法兰盘的外径:"))(setqrz(getdistc"\n请输入法兰盘圆孔中心距:"))

(setqdh(getdistc"\n请输入法兰盘的孔径:"))(setqn(getint"\n请输入法兰盘的孔数:"))(setqa(getorientc"\n请输入法兰孔起始角:"))

(setqinc(/(*2pi)n));根据法兰孔数计算各法兰孔间角度

(setqang0);设定角度变量初始值为0(setqr(/dh2));计算法兰孔内径;建立循环绘制各法兰孔

(While(<ang(*2pi))(setqp(Polarcarz));确定法兰孔圆心位置

(command"circle"pr);绘制法兰孔

(setqa(+ainc));下一法兰孔起始角

(setqang(+anginc));角度增量

)说明:(polar

基点弧度距离)

利用相对于给定点的角度及距离,按照极坐标法取得另一坐标点。(该角度以弧度表示,逆时针方向为正。)

(command"circle"crn);绘制法兰盘内径(command"circle"crw);绘制法兰盘外径(command"circle"crz);绘制法兰孔中心圆(setvar"cmdecho"1)(princ))例3编写一段程序,生成一个贮槽,提示用户指定该贮槽本体的上下两个角点,以及封头和贮槽间预留值。绘制贮槽本体,并根据长短轴比(5:3)自动绘出左右封头。(defunc:zc()(graphscr)(setvar"cmdecho"0);设置新栅格单位及对应捕捉单位

(setqjd(list5.05.0))(setvar"GRIDUNIT"jd)(setvar"SNAPUNIT"jd)(setvar"GRIDMODE"1);开栅格模式

(setvar"SNAPMODE"1);开捕捉模式

(setvar"ORTHOMODE"1);开正交模式

(prompt"\nzc命令绘制一个贮槽")(setqp1(getpoint"\n请指定贮槽本体第一角点:"))(setqp3(getcornerp1"\n请指定贮槽本体另一个角点:"))(setqyl(getdistp3"\n请输入封头和贮槽本体间的预留值<0.0>:"))(if(nullyl)(setqyl0.0))

(command“rectang”p1p3);绘制槽本体(if(<(carp1)(carp3));x1<x3(progn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论