AutoLISP绘图程序设计.ppt

上传人:小飞机 文档编号:5416202 上传时间:2023-07-05 格式:PPT 页数:85 大小:339.99KB
返回 下载 相关 举报
AutoLISP绘图程序设计.ppt_第1页
第1页 / 共85页
AutoLISP绘图程序设计.ppt_第2页
第2页 / 共85页
AutoLISP绘图程序设计.ppt_第3页
第3页 / 共85页
AutoLISP绘图程序设计.ppt_第4页
第4页 / 共85页
AutoLISP绘图程序设计.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《AutoLISP绘图程序设计.ppt》由会员分享,可在线阅读,更多相关《AutoLISP绘图程序设计.ppt(85页珍藏版)》请在三一办公上搜索。

1、2023/7/5,1,第三章 AutoLISP绘图程序设计,主要内容1.AutoLISP特点2.AutoLISP函数的用法3.AutoLISP程序结构4.AutoLISP程序执行方式,2023/7/5,2,3.1 AutoLISP概述,一、AutoLISP介绍 1.AutoLISP的作用(1)AutoLISP是一种表语言,是常用的AutoCAD二次开发手段。所谓二次开发:是指以AutoCAD软件为平台,加入自己所需要的功能。开发过程,就是编程的过程。二次开发所支持的语言有VB、C+,大型的二次开发,以C+为主,而小型二次开发,一般以AutoLISP为主。,2023/7/5,3,(2)必须在Au

2、toCAD环境下运行(内嵌);(3)AutoLISP可以编写程序,调用AutoCAD的许多 命令;举例:在水平方向画n个大小相等的圆。,;调用AutoCAD命令画圆(defun C:HY()(setq P0(getpoint 第一圆心坐标:)(setq R(getreal半径:)(setq L(getreal圆心间距离:)(setq a 1)(setq n(getintn圆的个数:)(while(=a n)(command circle P0 R)(setq P0(polar P0 0 L)(setq a(1+a),2023/7/5,4,(4)AutoLISP语言中使用大量的函数(有200多个

3、函数),进行各种运算;(5)AutoLISP编写的程序特点(学习中注意):以表形式描述数据处理过程,程序执行过程就是函数求值过程;每段程序都是一个函数;具有交互处理功能,边解释边执行;采用模块化设计方法。,2023/7/5,5,2.AutoLISP的数据类型,(1)整型数(INT):是由0、1、29、+、-组成的。(2)实型数(REAL):如0.4(0不能少)、-1.23、0.526E9(0.526109)。(3)符号(SYM):除(、)、*、”、;之外的字符序列,并且不能全部是数字。符号常用着变量,如:Command:(setq X 12);整型数 Command:(setq X 12.0)

4、;实型数 Command:(setq X“12”);字符串,2023/7/5,6,(4)字符串(STR):如:“ABC”、“abc”、“457”等。(5)表(LIST):带有一对括号、有若干元素组成。(元素1 元素2 元素n)如:(2 4 f)元素的个数叫表的长度。元素也可以是表,如(45(3 6)7),这叫嵌套。元素之间必须用“空格”隔开。表的定义方式:(LIST 5 6);(5 6);还可以用defun定义(后面讲)。,2023/7/5,7,例:(setq P(list 12.36-26.58)结果是:(12.36-26.58)例:(setq P(12.36-26.58)结果是:(12.3

5、6-26.58)提示:(1)表的嵌套时一定要注意括号“(”、“)”匹 配。(2)西文状态下输入!,2023/7/5,8,(6)文件描述符(7)AutoLISP内部函数(8)AutoCAD的选择集(9)AutoCAD的实体名 上述数据类型中,前四种称原子,原子包括数值原子(整型数、实型数),符号原子和字符串原子。AutoLISP基本数据类型是原子和表,重点介绍前五种数据类型。,2023/7/5,9,二、几个基本概念1.常数 PI数学中的(3.1415929)T逻辑真,即成立。NIL逻辑假,即不成立。还代表空,即无值。注意:(1)大小写等效;(2)它们不能作为变量。2.原子 是程序处理中最小的数据

6、单元。3.表达式 原子和表的统称。如:(setq P(12.36-26.58),2023/7/5,10,4.点 是表的一种形式,也叫点表。有三种获得点的方式:(1)用表示(120.35 253.24)(2)list函数定义点(setq X 12.36 Y-26.58)(setq M(list X Y)结果是:M=(12.36-26.58)(setq M(X Y)结果是:(X Y)(3)由getpoint函数得到点 其格式:(getpoint“n输入一点:”),2023/7/5,11,三、AutoLISP程序结构1.举例例(1);在屏幕上显示 ASCII码为(6590)的字符(defun C:z

7、m(/as);自定义命令(setq as 65 n 100)(while(=as 90)(command text(list n 100)15(chr as)(setq as(+as 1)n(+n 20),2023/7/5,12,例(2);绘制正多边形程序(defun c:dbx()(setq n(getintn输入多边形边数:)(setq L(getrealn输入多边形边长:)(setq P1(getpointn输入多边形第一个角点坐标:)(setq P2(polar P1 0 L)(command polygon n e p1 p2),2023/7/5,13,例(3)(defun yuan

8、();画圆函数(setq r(getrealn半径:)(setq p(getpointn圆心:)(command circle p r),2023/7/5,14,例(4)(defun ld()(setq p1(getpointn p1:)p2(getpointn p2:);输入两点(setq d(distance p1 p2);求距离(setq ang(angle p1 p2);求方位角(print d)(print ang)(command line p1 p2);画直线),2023/7/5,15,2.结构(1)注释行以;开始,可在程序头或句尾,增加程序可读性。也可以不要。(2)除字符串外,

9、字母大小写等效。(3)表与表之间可以有空格,也可没有,建议有,这样清楚。如:(distance(3 4)(56 32)或(distance(3 4)(56 32)(4)函数名后至少要有一个空格,函数名与表之间可有可无。,2023/7/5,16,3.特点(1)所谓语句都是以表形式出现。(2)一切成分都是以函数的形式给出。(3)程序执行过程就是求函数值的过程。四、AutoLISP程序执行方式有三种方式:行方式、源文件方式、编译文件方式。1.行方式 就是在AutoCAD的“command:”提示符下,输入表后回车。如:command:(+15 6.3)command:(setq a 10)(setq

10、 b(+a 5),2023/7/5,17,2.源文件方式 用写字板或记事本把AutoLISP程序保存起来(后缀为.LSP)。然后用“LOAD”命令装载并调用。例如:(1)把下列程序保存到“e:zm.lsp”,;在屏幕上显示 ASCII码为(6590)的字符(defun C:zm(/as);自定义命令(setq as 65 n 100)(while(=as 90)(command text(list n 100)15(chr as)(setq as(+as 1)n(+n 20),2023/7/5,18,(2)用“load”装载 即在命令行上输入(load“e:zm.lsp”)(3)在命令行上输入

11、zm 3.编译文件方式(重点掌握)(1)Visual LISP的启动、界面和退出(2)Visual LISP控制台(3)Visual LISP创建LISP程序(4)Visual LISP中运行LISP程序提示:建议在Visual LISP中创建和运行LISP程序举例:,2023/7/5,19,3.2 基本函数,一、算数运算函数 1.加运算 格式:(+num1 num2 num3.)Command:(+2 5)返回:7 Command:(+2.0 30.0 4.0 50.0)返回:86.0 Command:(+2 30 4 50.0)返回:86.0注意:“+”与“num1”及各数之间必须要有空格

12、,后面的函数格式都是如此。,2023/7/5,20,2.减运算 格式:(-num1 num2 num3.)“减”函数(-)从第一个数中减去后面所有数的和,即 num1-(num2+num3+.)。如:Command:(-28 14)返回:1 4 Command:(-25 7 11)返回:7 Command:(-50 20 10.0)返回:20.0 Command:(-20.0 30.0)返回:-10.0,2023/7/5,21,3.乘运算 格式:(*num1 num2 num3.)4.除运算 格式:(/num1 num2 num3.)“除”函数以第一个数除以其他所有运算数的积,即 num1/(

13、num2*num3*.)。例如:(*2 5 3 2.0)返回:60.0(*2 5 3)返回:30(/3 2)(Setq a(/3.0 2)返回:1.5,2023/7/5,22,5.增量 格式:(1+number)注意:1和“+”之间不能空格,+与n u m b e r之间必须要空格。6.减量 格式:(1-number)注意:1和“-”之间不能空格,-与number之间必须要空格。例如:(setq b(1+-12.5)(setq c(1-16.4),2023/7/5,23,举例:,1.求a,b,c三个数的平方和。2.根据前后视读数,求两点间高差。3.求闭合水准线路的高差闭合差。,2023/7/5

14、,24,参考答案1:(setq a(getreal输入第一个数a:)(setq b(getreal输入第二个数b:)(setq c(getreal输入第三个数c:)(setq s(+(*a a)(*b b)(*c c),参考答案2:(setq a(getreal输入后视读数a:)(setq b(getreal输入前视读数b:)(setq h(-a b),2023/7/5,25,参考答案3:(setq n(getint 输入高差个数:)(setq fh 0.0)(repeat n(setq h(getrealn依次输入高差:)(setq fh(+fh h),2023/7/5,26,二、标准函数,

15、1.绝对值(abs)、平方根(sqrt)、正弦(sin)、余弦(cos)、反正切(atan)以上函数格式:(函数名)2.幂函数(expt)、(exp)格式:(expt 底数 幂)格式:(exp 底数)注意:以上各函数返回的数值类型。3.举例,2023/7/5,27,举例:用AutoLISP表示下列公式:,(1)计算三角高程的表达式(2)计算坐标增量的表达式(3)将度化成弧度单位,2023/7/5,28,参考答案:(1)(setq HA(getreal 输入HA:)(setq L(getreal 输入L:)(setq AF(getreal 输入AF:)(setq i(getreal 输入i:)(

16、setq v(getreal 输入v:)(setq HB1(+HA(-i v)(setq HB2(*L(sin af)(setq HB(+HB1 HB2),2023/7/5,29,参考答案:(3)(setq af(getreal“输入af:”);af是整度数(setq af(/180(*pi af)如何将度分秒化成弧度?,2023/7/5,30,三、赋值函数,赋值函数有两个:setq和set1.setq 格式:(setq 变量1 表达式1 变量2 表达式2)赋给变量的值可以是任何表达式(数值、字符串、字母)。注意:不要用AutoLISP的函数名和常数当作变量。举例:(1)(setq a 32

17、b 33.26 c yes)(2)(setq a(sin(/pi 4)(3)(setq x 34.3 y 5.23 p(list x y)(4)(setq pt(getpointn输入一点:),2023/7/5,31,2.set与setq不同之处,是set为符号赋值,setq为变量赋值。如:(set a 9)结果a为9 此函数非常有用,和其它函数配合使用,可以得到一维数组。举例:(1)(set(read(getstringn输入点 名:)(getpointn输入点坐标:)(2)(set(read(getstringn输入变量 名:)(getrealn输入变量值:),2023/7/5,32,四、

18、字符串处理函数1.strcat格式:(strcat 串1 串2.)把“串1”、“串2”、等连成一个新的字符串。如:(strcat a bout)返回 about(strcat a b c)返回 abc(strcat a c)返回 ac“2.strlen格式:(strcat 字符串)此函数求“字符串”长度。如:(strlen one two three)返回11,2023/7/5,33,3.substr格式:(substr 字符串 起点 长度)此函数将返回“字符串”的子字符串。子串的起始位置是以“起点”确定,子串长度由“长度”指定。如果“长度”没有设定,则子串将从“起点”到最后。“起点”和“长度

19、”均须为正整型数。如:(substr abcde 2)返回 bcde(substr abcde 3 2)返回 cd,2023/7/5,34,五、类型转换函数1.fix格式:(fix number)此函数将number变为整型数。如果number是实型数,则舍去小数部分。如:(fix 3)返回 3(fix 3.7)返回 3,2023/7/5,35,2.float格式:(float number)此函数将number变为实型数。如:(float 3)返回 3.0(float 3.75)返回 3.753.atoi格式:(atoi 字符串)此函数可用来将字符串转换成整型数。如:(atoi 97)返回

20、97,2023/7/5,36,4.atof格式:(atof 字符串)此函数可用来将字符串转换成实型数。如:(atof 67.9)返回 67.9(atof“97”)返回 97.05.itoa格式:(itoa 整型数)此函数将整型数转换成字符串。如:(itoa 56)返回“56”,2023/7/5,37,6.rtos rtos函数将按给定的方式和精度把数转换为字符串。格式:(rtos 数 方式 精度)方式:有五种,其代码分别是1、2、3、4、5(只要掌握2)。精度:是制小数位数。例如:(setq A(rtos 5.78925 2 4)返回5.7893(setq A(rtos 45.23 2 1)返

21、回45.2,2023/7/5,38,7.(angtos 角度 模式 精度)把弧度转换为度(取整度)注意:(1)角度以弧度表示;(2)模式是04的整数;(0十进制;1度分秒;2梯度;3弧度;4测量单位)(3)精度是一整数,表示十进制数小数位;(4)角度为负时,angtos自动将其还原成02 之间的正值。例:(angtos 0.785398)(atof(angtos 0.528 0 2)与angtos互补的函数(angtof 32),2023/7/5,39,8.chr格式:(chr integer)此函数是将 integer中的ASCII码转换成单一的对应字符串。如:(chr 97)返回 a(ch

22、r 65)返回“A(chr 66)返回 B“9.ascii格式:(ascii 字符串)此函数是将字符串转换成ASCII。如:(ascii“A”)返回65,2023/7/5,40,10.read格式:(read 字符串)此函数将返回字符串的第一个表或原子。如:(read(12 45)(15.36 28.478)返回(12 45)(read 48.65 34.8)返回48.6511.Cvunit格式:(Cvunit 数值 旧单位 新单位)(cvunit 2.3 minute“second)返回138.0(cvunit 1 meter3”inch3)返回61023.7,2023/7/5,41,举例1

23、:;得到一组点,如:P1、P2、等等(defun c:pt()(setq n(getint“n输入n值:)(setq m 1)(repeat n(set(read(getstringn输入点名:)(getpointn输入点坐标:)(setq m(1+m),2023/7/5,42,举例2:将度分秒化为弧度;把度分秒化成弧度(defun hd()(setq a(getstring nA:);输入角度(按6.3628形式输入)(cond(=(strlen a)6);(strlen a)求a的长度(setq ad(substr a 1 1);以字符串形式保存角的度数(setq am(substr a

24、3 2);以字符串形式保存角的分数(setq as(substr a 5 2);以字符串形式保存角的秒数)(=(strlen a)7)(setq ad(substr a 1 2)(setq am(substr a 4 2)(setq as(substr a 6 2),2023/7/5,43,(=(strlen a)8)(setq ad(substr a 1 3)(setq am(substr a 5 2)(setq as(substr a 7 2)(setq a1(atof ad);把ad转换为实数(setq a2(atof am);把am转换为实数(setq a3(atof as);把as转

25、换为实数(setq ar(+a1(/a2 60)(/a3 3600)(setq ard(/(*ar pi)180)(princ ard)(princ),2023/7/5,44,六、求值函数1.距离(distance)格式:(distance 点1 点2)求出两点之间的距离,结果是实型数。如:(distance(1 2)(7 3)返回:6.082763(distance(1.0 2.5 3.0)(7.7 2.5 9.0)返回:8.99389(空间距离),2023/7/5,45,2.angle函数 是求点1到点2的方向与X轴正向的夹角(),如图,单位是弧度。格式:(angle 点1 点2)(ang

26、le(5 1)(2 1)返回:3.141593,2023/7/5,46,3.polar函数 polar函数以一个给定角度和一个与给定点的距离来定义一个新点,如下图所示。其中角用弧度表示,并以逆时针方向测量为正。polar函数的格式:(polar 点 角度 距离)(setq pt2(polar(2.0 3.0)pi 100)返回:(-98.0 3.0)(setq p2(polar(100 100)(/pi 2)50)返回:(100.0 150.0),2023/7/5,47,4.eval格式:(eval 表达式)此函数求出表达式结果。如:(setq a 56 b 45.3)(eval a)(eva

27、l b)提示:eval和strcat、read、setq等函数配合用,可以建立一个一维数组。例如:建立一维数组xi(i=1,2,n)。,2023/7/5,48,(setq n(getintn输入一个整数:)(setq i 0 s 0)(repeat n(setq i(1+i)(set(read(strcatx(itoa i)(getrealn输入一个实数:)(setq s(+s(eval(read(strcat x(itoa i)此程序运行结果可以得到:x1,x2,xn。S=x1+x2+xn。,2023/7/5,49,七、表处理函数,1.list函数2.car函数 格式:(car 表)返回一个

28、列表中的第一个元素的数值(X元素)。如果该列表中没有任何元素,则返回空值nil。3.cadr函数 返回一个列表的第二个元素(Y元素)。4.last函数 返回一个列表的最后一个元素。5.(nth 表)返回表中第n个元素(n从0算起)。,2023/7/5,50,1.(setq p(getpoint“n输入一点:”)(setq x(car p)y(cadr p),举例:,2.(setq p(GPS1 3456.786 23415.674 34.567)(setq dh(car p)x(cadr p)y(nth 2 p)z(last p),2023/7/5,51,八、Command函数,Command

29、函数是AutoLISP中唯一调用AutoCAD命令实现绘图的途径,非常重要。1.作用:使用Command函数(唯一)可调用AutoCAD命令。2.格式:(Command“AutoCAD命令及其选项”),如:(setq p1(100.453 100.567)p2(200.254 201.587)(command line p1 p2),2023/7/5,52,3.注意事项(1)Command函数不能调用AutoLISP的输入函数,如getpoint、getangle、getstring、getint等。(2)AutoCAD命令名称和选项必需放在双引号中,并要求双引号中不能有空格。(3)不带“Au

30、toCAD命令及其选项”,即(command),等效ESC键(中止)。(4)几个命令和数据可以写在一个command函数中,也可分开写在两个或两个以上的command函数中。如:(Command“line”p1 p2 p3 p4“”)和(Command“Pline”p1 p2)(Command p3 p4“”)等效。,2023/7/5,53,(5)文字注记时,字符串也要用“”括起来。如:(Command“Text”(100 100)5“”“AutoLISP”)(6)调用对话框命令时,不显示对话框,以提示方式执行。如:新建“控制点”图层,设置图层为红色。(command layer m 控制点

31、c 1),2023/7/5,54,举例:画一个边长为L,中心点坐标为P的正三角形,要求底边水平。,(setq L(getrealn输入边长:)(setq P(getpointn输入中心:)(setq r(*0.288675134 L);求内切圆半径12r*r=L*L(command polygon 3 P c R),2023/7/5,55,3.3 自定义命令和自定义函数,一、自定义函数(defun),用函数(defun)可以定义用户自己的函数,叫自定义函数。自定义函数象AutoLISP函数一样可以被调用,比如说,把常用的符号定义成自定义函数,实际用时,带入具体参数就可以得到图形,不别再绘制。,

32、2023/7/5,56,1.自定义函数格式(defun 函数名 变元表 表达式1表达式2),例:用自定义函数方式编写一个程序,绘制正三角形。(defun sjx()(setq L(getrealn输入边长:)(setq P(getpointn输入中心:)(setq r(*0.288675134 L);求内切圆半径12r*r=L*L(command polygon 3 P c R),2023/7/5,57,2.注意(1)函数名是用户自己设定的,不能与AutoLISP内部函数名、变量名相同;(2)变元表的形式有四种:(参数1 参数2),如上例。变元表为此形式 时,调用要带参数。(),无参形式。调用

33、时不带参数。(参数1 参数2/局部变量1 局部变量2)。变元表为此形式时,调用要带参数。(/局部变量1 局部变量2)。调用时不带参数。/与参数、局部变量之间必须有空格。,2023/7/5,58,(3)表达式是函数的定义体,完成计算和绘图。(4)自定义函数的作用:defun函数用于在AutoLISP程序中定义一个函数。它就象其它标准函数一样,可以为我所用。使用时,通过不同的参数,可以绘制不同的图形。,调用自定义函数举例:,;度化弧度自定义函数(defun hd(af)(setq hhd(/(*af pi)180),2023/7/5,59,(defun hsjx()(setq L(getreal

34、n输入边长:)(setq P(getpoint n输入中心:)(setq r(*0.288675134 L);求内切圆半径(setq p1(polar P(hd 210)(*2 r);调用自定义函数(setq p2(polar p1(hd 0)L);调用自定义函数(setq p3(polar p1(hd 60)L);调用自定义函数(command line p1 p2 p3 c),2023/7/5,60,二、自定义命令,自定义命令的作用是用defun函数为AutoCAD增加各种新命令。1.格式(defun C:()或(defun C:(/),2023/7/5,61,2.注意事项(1)自定义命令

35、格式中是命令名称;必须有C:(大小写等效);与C:之间不能有空格。(2)不能和内部或外部函数名相同;也不能和其它命令同名。(3)注意与自定函数的区别。3.自定义命令调用加载(load)程序后,在命令行上输入自定义命令名。,2023/7/5,62,例.编写计算三角高程的AutoLISP程序。程序清单如下:;计算三角高程(defun c:sjgc()(hd);调用自定义函数hd(setq L(getreal”n斜边边长:”)(setq i(getreal”n仪器高:”)(setq v(getreal”n觇标高:”)(setq h1(*L(sin ard)(setq h2(-i v)(setq h(

36、+h1 h2),2023/7/5,63,;把度分秒化成弧度(defun hd()(setq a(getstring nA:);输入角度(按6.3628形式输入)(cond(=(strlen a)6)(setq ad(substr a 1 1)(setq am(substr a 3 2)(setq as(substr a 5 2)(=(strlen a)7)(setq ad(substr a 1 2)(setq am(substr a 4 2)(setq as(substr a 6 2),(=(strlen a)8)(setq ad(substr a 1 3)(setq am(substr a

37、5 2)(setq as(substr a 7 2)(setq a1(atof ad)(setq a2(atof am)(setq a3(atof as)(setq ar(+a1(/a2 60)(/a3 3600)(setq ard(/(*ar pi)180)(princ ard)(princ),2023/7/5,64,3.4 程序结构函数,程序结构函数用于控制程序的进程,把它叫程序结构函数。包括:关系函数、逻辑函数、谓词函数、条件函数、循环函数。,一、关系函数 1.等于 格式:(=atom1 atom2.)等于函数(=)判断数是否相等。如果相等则条件为真,返回值为T(真值)。同样,如果不相等

38、,则条件为假,返回值为nil(假值)。,2023/7/5,65,2.不等于 格式:(/=atom1 atom2.)不等于函数(/=)判断数是否不相等。如果不相等,则条件为真,返回值为T。3.小于 格式:(atom1 atom2.)小于函数()判断前一个数(atom1)是否小于后面的作数(atom2),如果小于,则条件为真,返回值为T,否则返回nil。,2023/7/5,66,4.小于等于 格式:(atom1 atom2.)大于函数判断第一个数是否大于第二个数,如果大于,则条件为真,返回值为T,否则返回nil。6.大于等于 格式:(=atom1 atom2.),2023/7/5,67,二、逻辑函

39、数 1.逻辑“与”格式:(and 表达式1)这个函数求出表达式之间的“与”运算值,即当所有表达式值同时为T时,函数结果为T,如果其中任何一个表达式值为nil,函数结果为nil。例如:(setq a 10 b 20)(and(a 5)(b 5)(b 15)结果为nil,2023/7/5,68,2.逻辑“或”格式:(or 表达式1)这个函数求出表达式之间的“或”运算值,即当所有表达式值同时为nil时,函数结果为nil,如果其中任何一个表达式值为T,函数结果为T。例如:(setq a 10 b 20)(or(a 15)结果为nil(or(b 15)结果为T,2023/7/5,69,3.逻辑“非”格式

40、:(not 数或表达式)这个函数求出表达式之间的“非”运算值,即当“数或表达式”值为nil时,函数结果为T,否则函数结果为NIL。例如:(setq a 10 b 20 c nil)(not a)结果为nil(not c)结果为T(not(or(a 15)结果为T(not(or(b 15)结果为nil,2023/7/5,70,三、数据谓词函数和等值谓词函数(自学)四、条件函数和顺序处理函数 1.If函数 格式:(If),2023/7/5,71,举例:(1)(If(=1 3)“YES”“NO”)结果为“NO”(2)(setq a 15)(If(and(=a 10)(=a 18)(setq d 3)

41、(setq c 10)结果D为3。,2023/7/5,72,2.cond函数格式:(cond)是逻辑表达式,为一个或多个表达式。执行过程见图。,2023/7/5,73,举例:(setq d 0.3)(cond(and(=d 0.2)(=d 0.5)(=d 1.0)(setq c 9.0)(d 0.6)(setq c 9.0)运行结果为C=10。,2023/7/5,74,3.progn函数progn函数通常和If函数一道用,来控制计算顺序。格式:(prong 表达式1),举例:(setq a 15 b 15.0)(if(=a b)(princ“大家好!”)(setq a(+a 1)b(+b 1)

42、运行结果是:大家好!a=15,b=15.0,(setq a 15 b 15.0)(if(=a b)(progn(princ“大家好!”)(setq a(+a 1)b(+b 1)运行结果是:大家好!a=16,b=16.0,2023/7/5,75,五、循环函数,有两个循环函数:repeat、while。1.Repeat函数 格式:(Repeat 数 表达式1)数:必须是正整数。表达式:是循环体,循环次数由数来决定。最后返回表达式的值。,举例:(setq a 10 b 100)(repeat 4,(setq a(+a 10)(setq b(+b 100),2023/7/5,76,2.while函数

43、格式:(while 表达式1),执行过程:先计算,若为T,则计算后面若干个表达式(循环体);若为NIL,则退出循环体。举例:按要求画下列图形。,2023/7/5,77,(defun C:HY()(setq P0(getpoint 圆心1:)(setq R(getreal半径:)(setq L(getreal间距:)(setq a 1)(while(=a 4)(command circle P0 R)(setq P0(polar P0 0 L)(setq a(1+a),如果要绘制圆心的连线与x轴有一夹角a,则程序如何编?,2023/7/5,78,附加:设置长度和角度单位,如:长度单位设置十进制、

44、3位小数,角度单位设置十进制的度2位小数、X轴正方向为0度、逆时针方向为正。用command(command units 2 3 1 2 0 N)units:绘图单位命令;2:长度十进制单位;3:3位小数;1:角度十进制单位;0:X轴正方向为0度;N:逆时针方向为正。,2023/7/5,79,(defun C:HY()(setq P0(getpoint 圆心1:)(setq R(getreal半径:)(setq L(getreal间距:)(setq n(getint圆的数量:)(setq jd(getangle倾斜角度:)(command units 2 3 1 2 0 N)(setq a 1

45、)(while(=a n)(command circle P0 R)(setq P0(polar P0 jd L)(setq a(1+a),2023/7/5,80,3.5 交互输入函数,getpoint、getint、getreal、getstring、getangle、getdist(getangle“提示内容”)getangle函数等待用户输入角度。若用户输入一个数,则得到由该数代表的角度值转化为的弧度值。若输入一点,系统提示输入第二点,其结果得到由第一点到第二点构成的向量与X轴正向夹角,单位是弧度。,2023/7/5,81,3.6系统变量、文件操作和实体访问函数,一、系统变量函数 Aut

46、oLISP有两个系统变量函数,用于改变(setvar)或得到(getvar)系统变量的值。二、文件操作函数 三、实体访问函数,2023/7/5,82,练习题,一、概念题 1.AutoLISP程序有何特点?2.填空(1)在表达式(sin af)中,af以_为单位,表达式结果是_数。(2)表达式(rtos 45.23 2 1)返回值是:_。表达式(rtos 45.235 2 2)返回值是:_。,2023/7/5,83,(3)(setq db(DXD 76.543 23.763 56.87)(setq dm(nth 0 db)dm返回值是:_。(4)表达式(read“23.5 67.89”)返回值是

47、:_。(5)已知x=5,y=8,r=10,调用command函数绘制一个圆,判断下列表达式哪些是错误的,并指出错误原因。1)(command circle(list x y)r)2)(command circle(list x y)r)3)(command circle(x y)r)4)(command circle(list x y)r),2023/7/5,84,3.写出自定义命令和自定义函数的格式。二、编程应用题 1已知线段AB,C点是线段AB外一点,用自定义函数编写方式,求C点到线段AB的距离。2.定义一个求三角形面积的函数。3.用自定义命令方式编写建立图层的应用程序。4.已知、点,绘制如图。,2023/7/5,85,5.设A、1、2、3、B是导线点(坐标已知),编写绘制导线略图的AutoLISP程序(要求绘制用圆圈表示导线点,并注记点号)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号