AutoLISP绘图程序设计课件

上传人:风*** 文档编号:240744344 上传时间:2024-05-04 格式:PPT 页数:85 大小:200KB
返回 下载 相关 举报
AutoLISP绘图程序设计课件_第1页
第1页 / 共85页
AutoLISP绘图程序设计课件_第2页
第2页 / 共85页
AutoLISP绘图程序设计课件_第3页
第3页 / 共85页
点击查看更多>>
资源描述
第三章第三章 AutoLISP AutoLISP绘图绘图程序程序设计设计 主要内容主要内容1.AutoLISP特点2.AutoLISP函数的用法3.AutoLISP程序结构4.AutoLISP程序执行方式5/4/20245/4/20241 1-3.1 AutoLISP3.1 AutoLISP概述概述 一、一、AutoLISPAutoLISP介介绍绍 1.AutoLISP1.AutoLISP的作用的作用(1)AutoLISP是 一 种 表 语 言,是 常 用 的AutoCAD二次开发手段。所谓二次开发:是指以AutoCAD软件为平台,加入自己所需要的功能。开发过程,就是编程的过程。二次开发所支持的语言有VB、C+,大型的二次开发,以C+为主,而小型二次开发,一般以AutoLISP为主。5/4/20245/4/20242 2-(2 2)必)必须须在在AutoCADAutoCAD环环境下运行(内嵌);境下运行(内嵌);(3 3)AutoLISPAutoLISP可可以以编编写写程程序序,调调用用AutoCADAutoCAD的的许许多多 命令;命令;举举例例:在水平方向画在水平方向画n n个大小相等的个大小相等的圆圆。;调调用用AutoCADAutoCAD命令画命令画圆圆(defun C:HY()(defun C:HY()(setq P0(getpoint (setq P0(getpoint 第一第一圆圆心坐心坐标标:):)(setq R(getreal (setq R(getreal半径半径:):)(setq L(getreal (setq L(getreal圆圆心心间间距离距离:):)(setq a 1)(setq a 1)(setq n(getintn (setq n(getintn圆圆的个数的个数:):)(while(=a n)(while(=a n)(command circle P0 R)(command circle P0 R)(setq P0(polar P0 0 L)(setq P0(polar P0 0 L)(setq a(1+a)(setq a(1+a)5/4/20245/4/20243 3-(4)AutoLISP语言中使用大量的函数(有200多个函数),进行各种运算;(5)AutoLISP编写的程序特点(学习中注意):v以表形式描述数据处理过程,程序执行过程就是函数求值过程;v每段程序都是一个函数;v具有交互处理功能,边解释边执行;v采用模块化设计方法。5/4/20245/4/20244 4-2.AutoLISP2.AutoLISP的数据的数据类类型型(1 1)整型数()整型数(INTINT):是由):是由0 0、1 1、2929、+、-组组成的。成的。(2 2)实实型型数数(REALREAL):如如0.40.4(0 0不不能能少少)、-1.23-1.23、0.526E90.526E9(0.526100.526109 9)。)。(3 3)符号()符号(SYMSYM):除):除(、)、*、”、;之外的、;之外的字符序列,并且不能全部是数字。字符序列,并且不能全部是数字。符号常用着符号常用着变变量,如:量,如:Command:(setq X 12);Command:(setq X 12);整型数整型数 Command:(setq X 12.0);Command:(setq X 12.0);实实型数型数 Command:(setq X“12”);Command:(setq X“12”);字符串字符串5/4/20245/4/20245 5-(4)字符串(STR):如:“ABC”、“abc”、“457”等。(5)表(LIST):带有一对括号、有若干元素组成。(元素1 元素2 元素n)如:(2 4 f)元素的个数叫表的长度。元素也可以是表,如(45(3 6)7),这叫嵌套。元素之间必须用“空格”隔开。表的定义方式:(LIST 5 6);(5 6);还可以用defun定义(后面讲)。5/4/20245/4/20246 6-例:(setq P(list 12.36-26.58)结果是:(12.36-26.58)例:(setq P(12.36-26.58)结果是:(12.36-26.58)提示:(1)表的嵌套时一定要注意括号“(”、“)”匹 配。(2)西文状态下输入!5/4/20245/4/20247 7-(6)文件描述符(7)AutoLISP内部函数(8)AutoCAD的选择集(9)AutoCAD的实体名 上述数据类型中,前四种称原子,原子包括数值原子(整型数、实型数),符号原子和字符串原子。AutoLISP基本数据类型是原子和表,重点介绍前五种数据类型。5/4/20245/4/20248 8-二、几个基本概念二、几个基本概念1.1.常数常数 PI PI数学中的数学中的(3.14159293.1415929)T T逻辑逻辑真,即成立。真,即成立。NIL NIL逻辑逻辑假,即不成立。假,即不成立。还还代表空,即无代表空,即无值值。注意:注意:(1 1)大小写等效;()大小写等效;(2 2)它)它们们不能作不能作为变为变量。量。2.2.原子原子 是程序是程序处处理中最小的数据理中最小的数据单单元。元。3.3.表达式表达式 原子和表的原子和表的统统称。称。如:如:(setq P(12.36 -26.58)(setq P(12.36 -26.58)5/4/20245/4/20249 9-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输入一点:”)5/4/20245/4/20241010-三、三、AutoLISPAutoLISP程序程序结结构构1.1.1.1.举举举举例例例例例(例(例(例(1 1 1 1);在屏幕上在屏幕上在屏幕上在屏幕上显显显显示示示示 ASCII ASCII ASCII ASCII码为码为码为码为(6565656590909090)的字符)的字符)的字符)的字符(defun C:zm(/as);(defun C:zm(/as);(defun C:zm(/as);(defun C:zm(/as);自定自定自定自定义义义义命令命令命令命令(setq as 65 n 100)(setq as 65 n 100)(setq as 65 n 100)(setq as 65 n 100)(while(=as 90)(while(=as 90)(while(=as 90)(while(=as 90)(command text(list n 100)15 (chr as)(command text(list n 100)15 (chr as)(command text(list n 100)15 (chr as)(command text(list n 100)15 (chr as)(setq as(+as 1)n(+n 20)(setq as(+as 1)n(+n 20)(setq as(+as 1)n(+n 20)(setq as(+as 1)n(+n 20)5/4/20245/4/20241111-例(例(2 2);绘绘制正多制正多边边形程序形程序(defun c:dbx()(defun c:dbx()(defun c:dbx()(defun c:dbx()(setq n(getintn (setq n(getintn (setq n(getintn (setq n(getintn输输输输入多入多入多入多边边边边形形形形边边边边数数数数:):):):)(setq L(getrealn (setq L(getrealn (setq L(getrealn (setq L(getrealn输输输输入多入多入多入多边边边边形形形形边长边长边长边长:):):):)(setq P1(getpointn (setq P1(getpointn (setq P1(getpointn (setq P1(getpointn输输输输入多入多入多入多边边边边形第一个角点坐形第一个角点坐形第一个角点坐形第一个角点坐标标标标:):):):)(setq P2(polar P1 0 L)(setq P2(polar P1 0 L)(setq P2(polar P1 0 L)(setq P2(polar P1 0 L)(command polygon n e p1 p2)(command polygon n e p1 p2)(command polygon n e p1 p2)(command polygon n e p1 p2)5/4/20245/4/20241212-例(例(3 3)(defun yuan();(defun yuan();画画圆圆函数函数 (setq r(getrealn (setq r(getrealn半径半径:):)(setq p(getpointn (setq p(getpointn圆圆心心:):)(command circle p r)(command circle p r)5/4/20245/4/20241313-例(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);画直线)5/4/20245/4/20241414-2.2.结结构构(1 1)注注释释行行以以 ;开开始始,可可在在程程序序头头或或句句尾尾,增增加加程程序可序可读读性。也可以不要。性。也可以不要。(2 2)除字符串外,字母大小写等效。)除字符串外,字母大小写等效。(3 3)表表与与表表之之间间可可以以有有空空格格,也也可可没没有有,建建议议有有,这这样样清楚。清楚。如:如:(distance(3 4)(56 32)(distance(3 4)(56 32)或或 (distance(3 4)(56 32)(distance(3 4)(56 32)(4 4)函函数数名名后后至至少少要要有有一一个个空空格格,函函数数名名与与表表之之间间可可有可无。有可无。5/4/20245/4/20241515-3.3.3.3.特点特点特点特点 (1 1)所)所谓语谓语句都是以表形式出句都是以表形式出现现。(2 2)一切成分都是以函数的形式)一切成分都是以函数的形式给给出。出。(3 3)程序)程序执执行行过过程就是求函数程就是求函数值值的的过过程。程。四、四、AutoLISPAutoLISP程序程序执执行方式行方式有三种方式:行方式、源文件方式、有三种方式:行方式、源文件方式、编译编译文件方式。文件方式。1.1.行方式行方式 就就是是在在AutoCADAutoCAD的的“command“command:”提提示示符符下下,输输入入表表后后回回车车。如:。如:commandcommand:(+15 6.3)(+15 6.3)commandcommand:(setq a 10)(setq b(+a 5)(setq a 10)(setq b(+a 5)5/4/20245/4/20241616-2.2.源文件方式源文件方式 用用写写字字板板或或记记事事本本把把AutoLISPAutoLISP程程序序保保存存起起来来(后后缀缀为为.LSP.LSP)。然后用)。然后用“LOAD”“LOAD”命令装命令装载载并并调调用。用。例如例如:(1):(1)把下列程序保存到把下列程序保存到“e:zm.lsp”“e:zm.lsp”;在屏幕上在屏幕上显显示示 ASCII ASCII码为码为(65659090)的字符)的字符(defun C:zm(/as);(defun C:zm(/as);自定自定义义命令命令(setq as 65 n 100)(setq as 65 n 100)(while(=as 90)(while(=as 90)(command text(list n 100)15 (chr as)(command text(list n 100)15 (chr as)(setq as(+as 1)n(+n 20)(setq as(+as 1)n(+n 20)5/4/20245/4/20241717-(2)(2)用用“load”“load”装装载载 即在命令行上即在命令行上输输入入(load“e:zm.lsp”)(load“e:zm.lsp”)(3)(3)在命令行上在命令行上输输入入zm zm 3.3.编译编译文件方式(重点掌握)文件方式(重点掌握)(1)Visual LISP(1)Visual LISP的启的启动动、界面和退出、界面和退出 (2)Visual LISP(2)Visual LISP控制台控制台(3)Visual LISP(3)Visual LISP创创建建LISPLISP程序程序(4)Visual LISP(4)Visual LISP中运行中运行LISPLISP程序程序提示提示:建建议议在在Visual LISPVisual LISP中中创创建和运行建和运行LISPLISP程序程序举举例例:5/4/20245/4/20241818-3.2 3.2 基本函数基本函数一、算数运算函数一、算数运算函数 1.1.加运算加运算 格式:(格式:(+num1 num2 num3.+num1 num2 num3.)Command:(+2 5)Command:(+2 5)返回:返回:7 7 Command:(+2.0 30.0 4.0 50.0)Command:(+2.0 30.0 4.0 50.0)返回:返回:86.086.0 Command:(+2 30 4 50.0)Command:(+2 30 4 50.0)返回:返回:86.086.0注意:注意:“+”“+”与与“num1”“num1”及各数之及各数之间间必必须须要有空格,后要有空格,后面的函数格式都是如此。面的函数格式都是如此。5/4/20245/4/20241919-2.2.减运算减运算 格式:(格式:(-num1 num2 num3.-num1 num2 num3.)“减减”函数函数(-)(-)从第一个数中减去后面所有数的和,从第一个数中减去后面所有数的和,即即 num1-(num2+num3+.)num1-(num2+num3+.)。如:如:Command:(-28 14)Command:(-28 14)返回:返回:1 41 4 Command:(-25 7 11)Command:(-25 7 11)返回:返回:7 7 Command:(-50 20 10.0)Command:(-50 20 10.0)返回:返回:20.020.0 Command:(-20.0 30.0)Command:(-20.0 30.0)返回:返回:-10.0-10.05/4/20245/4/20242020-3.3.乘运算乘运算 格式:(格式:(*num1 num2 num3.*num1 num2 num3.)4.4.除运算除运算 格式:(格式:(/num1 num2 num3./num1 num2 num3.)“除除”函数以第一个数除以其他所有运算数的函数以第一个数除以其他所有运算数的积积,即即 num1/(num2*num3*.)num1/(num2*num3*.)。例如例如:(*2 5 3 2.0)(*2 5 3 2.0)返回返回:60.0:60.0 (*2 5 3)(*2 5 3)返回:返回:30 30 (/3 2)(/3 2)(Setq a(/3.0 2)(Setq a(/3.0 2)返回:返回:1.5 1.5 5/4/20245/4/20242121-5.5.增量增量 格式:(格式:(1+number1+number)注意:注意:1 1和和“+”“+”之之间间不能空格,不能空格,+与与n u m b e rn u m b e r之之间间必必须须要空格。要空格。6.6.减量减量 格式:(格式:(1-number1-number)注意:注意:1 1和和“-”“-”之之间间不能空格,不能空格,-与与numbernumber之之间间必必须须要空格。要空格。例如例如:(setq b(1+-12.5):(setq b(1+-12.5)(setq c(1-16.4)(setq c(1-16.4)5/4/20245/4/20242222-举举例例:1.求a,b,c三个数的平方和。2.根据前后视读数,求两点间高差。3.求闭合水准线路的高差闭合差。5/4/20245/4/20242323-参考答案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)5/4/20245/4/20242424-参考答案3:(setq n(getint 输入高差个数:)(setq fh 0.0)(repeat n (setq h(getrealn依次输入高差:)(setq fh(+fh h)5/4/20245/4/20242525-二、二、标标准函数准函数 1.绝对值(abs)、平方根(sqrt)、正弦(sin)、余弦(cos)、反正切(atan)以上函数格式:(函数名 )2.幂函数(expt)、(exp)格式:(expt 底数 幂)格式:(exp 底数 )注意:以上各函数返回的数值类型。3.举例5/4/20245/4/20242626-举例:用AutoLISP表示下列公式:(1)计算三角高程的表达式 (2)计算坐标增量的表达式(3)将度化成弧度单位5/4/20245/4/20242727-参考答案参考答案:(1)(setq HA(getreal 输入HA:)(setq L(getreal 输入L:)(setq AF(getreal 输入AF:)(setq i(getreal 输入i:)(setq v(getreal 输入v:)(setq HB1(+HA(-i v)(setq HB2(*L(sin af)(setq HB(+HB1 HB2)5/4/20245/4/20242828-参考答案:(3)(setq af(getreal“输入af:”);af是整度数 (setq af(/180(*pi af)v如何将度分秒化成弧度?5/4/20245/4/20242929-三、三、赋值赋值函数函数 赋值函数有两个:setq和set1.setq1.setq 格式:(setq 变量1 表达式1 变量2 表达式2)赋给变量的值可以是任何表达式(数值、字符串、字母)。注意:不要用AutoLISP的函数名和常数当作变量。举例:(1)(setq a 32 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输入一点:)5/4/20245/4/20243030-2.set2.set与setq不同之处,是set为符号赋值,setq为变量赋值。如:(set a 9)结果a为9 此函数非常有用,和其它函数配合使用,可以得到一维数组。举例:(1)(set(read(getstringn输入点 名:)(getpointn输入点坐标:)(2)(set(read(getstringn输入变量 名:)(getrealn输入变量值:)5/4/20245/4/20243131-四、字符串四、字符串处处理函数理函数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 5/4/20245/4/20243232-3.substr格式:(substr 字符串 起点 长度)此函数将返回“字符串”的子字符串。子串的起始位置是以“起点”确定,子串长度由“长度”指定。如果“长度”没有设定,则子串将从“起点”到最后。“起点”和“长度”均须为正整型数。如:(substr abcde 2)返回 bcde(substr abcde 3 2)返回 cd5/4/20245/4/20243333-五、五、类类型型转换转换函数函数1.fix1.fix格式:格式:(fix number)(fix number)此此函函数数将将numbernumber变变为为整整型型数数。如如果果numbernumber是是实实型型数,数,则则舍去小数部分。舍去小数部分。如:如:(fix 3)(fix 3)返回返回 3 3 (fix 3.7)(fix 3.7)返回返回 3 3 5/4/20245/4/20243434-2.float2.float格式:格式:(float number)(float number)此函数将此函数将numbernumber变为实变为实型数。型数。如:如:(float 3)(float 3)返回返回 3.0 3.0(float 3.75)(float 3.75)返回返回 3.75 3.753.atoi3.atoi格式:格式:(atoi (atoi 字符串字符串)此函数可用来将字符串此函数可用来将字符串转换转换成整型数。成整型数。如:如:(atoi 97)(atoi 97)返回返回 97 975/4/20245/4/20243535-4.atof4.atof格式:格式:(atof (atof 字符串字符串)此函数可用来将字符串此函数可用来将字符串转换转换成成实实型数。型数。如:如:(atof 67.9)(atof 67.9)返回返回 67.9 67.9(atof“97”)(atof“97”)返回返回 97.0 97.05.itoa5.itoa格式:格式:(itoa (itoa 整型数整型数)此函数将整型数此函数将整型数转换转换成字符串。如:成字符串。如:(itoa 56)(itoa 56)返回返回“56”“56”5/4/20245/4/20243636-6.rtos6.rtos rtosrtos函函数数将将按按给给定定的的方方式式和和精精度度把把数数转转换换为为字字符符串。串。格式:格式:(rtos(rtos 数数 方式方式 精度精度)方方式式:有有五五种种,其其代代码码分分别别是是1 1、2 2、3 3、4 4、5 5(只只要要掌掌握握2 2)。)。精度:是制小数位数。精度:是制小数位数。例如:例如:(setq A(rtos 5.78925 2 4)(setq A(rtos 5.78925 2 4)返回返回5.78935.7893(setq A(rtos 45.23 2 1)(setq A(rtos 45.23 2 1)返回返回45.245.25/4/20245/4/20243737-7.(angtos 7.(angtos 角度角度 模式模式 精度精度)把弧度把弧度转换为转换为度(取整度)度(取整度)注意:(注意:(1 1)角度以弧度表示;)角度以弧度表示;(2 2)模式是)模式是0 04 4的整数;(的整数;(0 0十十进进制;制;1 1度度分秒;分秒;2 2梯度;梯度;3 3弧度;弧度;4 4测测量量单单位)位)(3 3)精度是一整数,表示十)精度是一整数,表示十进进制数小数制数小数位;位;(4 4)角度)角度为负时为负时,angtos angtos自自动动将其将其还还原原成成0 02 2 之之间间的正的正值值。例:例:(angtos 0.785398)(angtos 0.785398)(atof(angtos 0.528 0 2)(atof(angtos 0.528 0 2)与与angtosangtos互互补补的函数的函数(angtof 32)(angtof 32)5/4/20245/4/20243838-8.chr8.chr格式:格式:(chr integer)(chr integer)此此函函数数是是将将 integerinteger中中的的ASCIIASCII码码转转换换成成单单一一的的对对应应字字符串。如符串。如 :(chr 97)(chr 97)返回返回 a a(chr 65)(chr 65)返回返回“A“A(chr 66)(chr 66)返回返回 B“B“9.ascii9.ascii格式:格式:(ascii (ascii 字符串字符串)此函数是将字符串此函数是将字符串转换转换成成ASCIIASCII。如。如 :(ascii “A”)(ascii “A”)返回返回65655/4/20245/4/20243939-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.75/4/20245/4/20244040-举举例例1:1:;得到一得到一组组点点,如:如:P1P1、P2P2、等等、等等(defun c:pt()(defun c:pt()(setq n(getint“n (setq n(getint“n输输入入n n值值:):)(setq m 1)(setq m 1)(repeat n (repeat n (set(read(getstringn (set(read(getstringn输输入点名入点名:)(getpointn:)(getpointn输输入点坐入点坐标标:):)(setq m(1+m)(setq m(1+m)5/4/20245/4/20244141-举举举举例例例例2:2:2:2:将度分秒化将度分秒化将度分秒化将度分秒化为为为为弧度弧度弧度弧度;把度分秒化成弧度把度分秒化成弧度把度分秒化成弧度把度分秒化成弧度(defun hd()(defun hd()(defun hd()(defun hd()(setq a(getstring nA:);(setq a(getstring nA:);(setq a(getstring nA:);(setq a(getstring nA:);输输输输入角度(按入角度(按入角度(按入角度(按6.36286.36286.36286.3628形式形式形式形式输输输输入)入)入)入)(cond(cond(cond(cond (=(strlen a)6);(strlen a)(=(strlen a)6);(strlen a)(=(strlen a)6);(strlen a)(=(strlen a)6);(strlen a)求求求求a a a a的的的的长长长长度度度度 (setq ad(substr a 1 1);(setq ad(substr a 1 1);(setq ad(substr a 1 1);(setq ad(substr a 1 1);以字符串形式保存角的度数以字符串形式保存角的度数以字符串形式保存角的度数以字符串形式保存角的度数 (setq am(substr a 3 2);(setq am(substr a 3 2);(setq am(substr a 3 2);(setq am(substr a 3 2);以字符串形式保存角的分数以字符串形式保存角的分数以字符串形式保存角的分数以字符串形式保存角的分数 (setq as(substr a 5 2);(setq as(substr a 5 2);(setq as(substr a 5 2);(setq as(substr a 5 2);以字符串形式保存角的秒数以字符串形式保存角的秒数以字符串形式保存角的秒数以字符串形式保存角的秒数 )(=(strlen a)7)(=(strlen a)7)(=(strlen a)7)(=(strlen a)7)(setq ad(substr a 1 2)(setq ad(substr a 1 2)(setq ad(substr a 1 2)(setq ad(substr a 1 2)(setq am(substr a 4 2)(setq am(substr a 4 2)(setq am(substr a 4 2)(setq am(substr a 4 2)(setq as(substr a 6 2)(setq as(substr a 6 2)(setq as(substr a 6 2)(setq as(substr a 6 2)5/4/20245/4/20244242-(=(strlen a)8)(=(strlen a)8)(setq ad(substr a 1 3)(setq ad(substr a 1 3)(setq am(substr a 5 2)(setq am(substr a 5 2)(setq as(substr a 7 2)(setq as(substr a 7 2)(setq a1(atof ad);(setq a1(atof ad);把把adad转换为实转换为实数数 (setq a2(atof am);(setq a2(atof am);把把amam转换为实转换为实数数 (setq a3(atof as);(setq a3(atof as);把把asas转换为实转换为实数数 (setq ar(+a1(/a2 60)(/a3 3600)(setq ar(+a1(/a2 60)(/a3 3600)(setq ard(/(*ar pi)180)(setq ard(/(*ar pi)180)(princ ard)(princ ard)(princ)(princ)5/4/20245/4/20244343-六、求六、求值值函数函数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(空间距离)5/4/20245/4/20244444-2.angle2.angle函数函数 是是求求点点1 1到到点点2 2的的方方向向与与X X轴轴正正向向的的夹夹角角(),如如图图,单单位是弧度。位是弧度。格式:(格式:(angle angle 点点1 1 点点2 2)(angle(5 1)(2 1)(angle(5 1)(2 1)返回:返回:3.1415933.1415935/4/20245/4/20244545-3.polar3.polar函数函数 polarpolar函数以一个函数以一个给给定角度和一个与定角度和一个与给给定点的距离来定点的距离来定定义义一个新点,如下一个新点,如下图图所示。所示。其中角用弧度表示,并以逆其中角用弧度表示,并以逆时针时针方向方向测测量量为为正正 。polarpolar函数的格式:函数的格式:(polar(polar 点点 角度角度 距离距离)(setq pt2(polar(2.0 3.0)pi 100)(setq pt2(polar(2.0 3.0)pi 100)返回:返回:(-98.0 3.0)(-98.0 3.0)(setq p2(polar(100 100)(/pi 2)50)(setq p2(polar(100 100)(/pi 2)50)返回:返回:(100.0 150.0)(100.0 150.0)5/4/20245/4/20244646-4.eval4.eval格式:格式:(eval(eval 表达式表达式)此函数求出表达式此函数求出表达式结结果。如果。如:(setq a 56 b 45.3)(setq a 56 b 45.3)(eval a)(eval a)(eval b)(eval b)提提示示:evaleval和和strcatstrcat、readread、setqsetq等等函函数数配配合合用用,可可以以建立一个一建立一个一维维数数组组。例如:例如:建立一建立一维维数数组组xixi(i=1i=1,2 2,n n)。)。5/4/20245/4/20244747-(setq n(getintn(setq n(getintn输输入一个整数入一个整数:):)(setq i 0 s 0)(setq i 0 s 0)(repeat n(repeat n(setq i(1+i)(setq i(1+i)(set(read(strcatx(itoa i)(getrealn(set(read(strcatx(itoa i)(getrealn输输入一入一个个实实数数:):)(setq s(+s(eval(read(strcat x(itoa i)(setq s(+s(eval(read(strcat x(itoa i)此程序运行此程序运行结结果可以得到果可以得到:x1,x2,xn x1,x2,xn。S=x1+x2+xn S=x1+x2+xn。5/4/20245/4/20244848-七、表七、表处处理函数理函数1.list函数2.car函数 格式:(car 表)返回一个列表中的第一个元素的数值(X元素)。如果该列表中没有任何元素,则返回空值nil。3.cadr函数 返回一个列表的第二个元素(Y元素)。4.last函数 返回一个列表的最后一个元素。5.(nth 表)返回表中第n个元素(n从0算起)。5/4/20245/4/20244949-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)5/4/20245/4/20245050-八、八、CommandCommand函数函数 Command函数是AutoLISP中唯一调用AutoCAD命令实现绘图的途径,非常重要。1.作用:使用Command函数(唯一)可调用AutoCAD命令。2.格式:(Command“AutoCAD命令及其选项”)如:(setq p1(100.453 100.567)p2(200.254 201.587)(command line p1 p2)5/4/20245/4/20245151-3.注意事项(1)Command函数不能调用AutoLISP的输入函数,如getpoint、getangle、getstring、getint等。(2)AutoCAD命令名称和选项必需放在双引号中,并要求双引号中不能有空格。(3)不 带“AutoCAD命 令 及 其 选 项”,即(command),等效ESC键(中止)。(4)几个命令和数据可以写在一个command函数中,也可分开写在两个或两个以上的command函数中。如:(Command“line”p1 p2 p3 p4 “”)和(Command“Pline”p1 p2)(Command p3 p4“”)等效。5/4/20245/4/20245252-(5)文字注记时,字符串也要用“”括起来。如:(Command“Text”(100 100)5“”“AutoLISP”)(6)调用对话框命令时,不显示对话框,以提示方式执行。如:新建“控制点”图层,设置图层为红色。(command layer m 控制点 c 1)5/4/20245/4/20245353-举例:画一个边长为L,中心点坐标为P的正三角形,要求底边水平。(setq L(getrealn输入边长:)(setq P(getpointn输入中心:)(setq r(*0.288675134 L);求内切圆半径12r*r=L*L(command polygon 3 P c R)5/4/20245/4/20245454-3.3 3.3 自定自定义义命令和自定命令和自定义义函数函数 一、自定一、自定义义函数(函数(defundefun)用函数(defun)可以定义用户自己的函数,叫自定义函数。自定义函数象AutoLISP函数一样可以被调用,比如说,把常用的符号定义成自定义函数,实际用时,带入具体参数就可以得到图形,不别再绘制。5/4/20245/4/20245555-1.1.自定自定义义函数格式函数格式(defun(defun 函数名函数名 变变元表元表 表达式表达式1 1表达式表达式2 2)例例:用用自自定定义义函函数数方方式式编编写写一个程序,一个程序,绘绘制正三角形。制正三角形。(defun sjx()(defun sjx()(setq L(getrealn(setq L(getrealn输输入入边边长长:):)(setq P(getpointn(setq P(getpointn输输入入中心中心:):)(setq r(*0.288675134(setq r(*0.288675134 L);L);求内切求内切圆圆半径半径12r*r=L*L12r*r=L*L(command polygon 3 P(command polygon 3 P c R)c R)5/4/20245/4/20245656-2.2.注意注意(1)函数名是用户自己设定的,不能与AutoLISP内部函数名、变量名相同;(2)变元表的形式有四种:v(参数1 参数2),如上例。变元表为此形式 时,调用要带参数。v(),无参形式。调用时不带参数。v(参数1 参数2/局部变量1 局部变量2)。变元表为此形式时,调用要带参数。v(/局部变量1 局部变量2)。调用时不带参数。q/与参数、局部变量之间必须有空格。5/4/20245/4/20245757-(3)表达式是函数的定义体,完成计算和绘图。(4)自 定 义 函 数 的 作 用:defun函 数 用 于 在AutoLISP程序中定义一个函数。它就象其它标准函数一样,可以为我所用。使用时,通过不同的参数,可以绘制不同的图形。调用自定义函数举例:;度化弧度自定义函数(defun hd(af)(setq hhd(/(*af pi)180)5/4/20245/4/20245858-(defun hsjx()(defun hsjx()(setq L(getreal n (setq L(getreal n输输入入边长边长:):)(setq P(getpoint n (setq P(getpoint n输输入中心入中心:):)(setq r(*0.288675134 L)(setq r(*0.288675134 L);求内切求内切圆圆半径半径 (setq p1(polar P(hd 210)(*2 r)(setq p1(polar P(hd 210)(*2 r);调调用自定用自定义义函数函数 (setq p2(polar p1(hd 0)L)(setq p2(polar p1(hd 0)L);调调用自定用自定义义函数函数 (setq p3(polar p1(hd 60)L)(setq p3(polar p1(hd 60)L);调调用自定用自定义义函数函数 (command line p1 p2 p3 c)(command line p1 p2 p3 c)5/4/20245/4/20245959-二、自定二、自定义义命令命令 自定义命令的作用是用defun函数为AutoCAD增加各种新命令。1.1.格式格式(defun C:()(defun C:()1 2)或或(defun C:(/(defun C:(/)2)1 2)5/4/20245/4/20246060-2.注意事项(1)自定义命令格式中是命令名称;必须有C:(大小写等效);与C:之间不能有空格。(2)不能和内部或外部函数名相同;也不能和其它命令同名。(3)注意与自定函数的区别。3.自定义命令调用加载(load)程序后,在命令行上输入自定义命令名。5/4/20245/4/20246161-例.编写计算三角高程的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(+h1 h2)5/4/20245/4/20246262-;把度分秒化成弧度把度分秒化成弧度(defun hd()(defun hd()(setq a(getstring nA:)(setq a(getstring nA:);输输入角度(按入角度(按6.36286.3628形式形式输输入)入)(cond(cond (=(strlen a)6)(=(strlen a)6)(setq ad(substr a 1 1)(setq ad(substr a 1 1)(setq am(substr a 3 2)(setq am(substr a 3 2)(setq as(substr a 5 2)(setq as(substr a 5 2)(=(strlen a)7)(=(strlen a)7)(setq ad(substr a 1 2)(setq ad(substr a 1 2)(setq am(substr a 4 2)(setq am(substr a 4 2)(setq as(substr a 6 2)(setq as(substr a 6 2)(=(strlen a)8)(=(strlen a)8)(setq ad(substr a 1 (setq ad(substr a 1 3)3)(setq am(substr a 5 (setq am(substr a 5 2)2)(setq as(substr a 7 (setq as(substr a 7 2)2)(setq a1(atof ad)(setq a1(atof ad)(setq a2(atof am)(setq a2(atof am)(setq a3(atof as)(setq a3(atof as)(setq ar(+a1(/a2 (setq ar(+a1(/a2 60)(/a3 3600)60)(/a3 3600)(setq ard(/(*ar pi)(setq ard(/(*ar pi)180)180)(princ ard)(princ ard)(princ)(princ)5/4/20245/4/20246363-3.4 3.4 程序程序结结构函数构函数 程序结构函数用于控制程序的进程,把它叫程序结构函数。包括:关系函数、逻辑函数、谓词函数、条件函数、循环函数。一、关系函数一、关系函数 1.1.等于等于 格式:(=atom1 atom2.)等于函数(=)判断数是否相等。如果相等则条件为真,返回值为T(真值)。同样,如果不相等,则条件为假,返回值为nil(假值)。5/4/20245/4/20246464-2.不等于 格式:(/=atom1 atom2.)不等于函数(/=)判断数是否不相等。如果不相等,则条件为真,返回值为T。3.小于 格式:(atom1 atom2.)小于函数()判断前一个数(atom1)是否小于后面的作数(atom2),如果小于,则条件为真,返回值为T,否则返回nil。5/4/20245/4/20246565-4.小于等于 格式:(=atom1 atom2.)小于等于函数(atom1 atom2.)大于函数判断第一个数是否大于第二个数,如果大于,则条件为真,返回值为T,否则返回nil。6.大于等于 格式:(=atom1 atom2.)5/4/20245/4/20246666-二、二、逻辑逻辑函数函数 1.逻辑“与”格式:(and 表达式1)这个函数求出表达式之间的“与”运算值,即当所有表达式值同时为T时,函数结果为T,如果其中任何一个表达式值为nil,函数结果为nil。例如:(setq a 10 b 20)(and(a 5)(b 5)(b 15)结果为nil5/4/20245/4/20246767-2.逻辑“或”格式:(or 表达式1)这个函数求出表达式之间的“或”运算值,即当所有表达式值同时为nil时,函数结果为nil,如果其中任何一个表达式值为T,函数结果为T。例如:(setq a 10 b 20)(or(a 15)结果为nil(or(b 15)结果为T5/4/20245/4/20246868-3.逻辑“非”格式:(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)结果为nil5/4/20245/4/20246969-三、数据三、数据谓词谓词函数和等函数和等值谓词值谓词函数函数(自学自学)四、条件函数和四、条件函数和顺顺序序处处理函数理函数 1.If1.If函数函数 格式:格式:(If (If 1 2 )5/4/20245/4/20247070-举举例:例:(1 1)(If(If(=(=1 1 3)3)“YES”“YES”“NO”)“NO”)结结果果为为“NO”“NO”(2 2)(setq a 15)(setq a 15)(If(and(=a 10)(=a 10)(=a 18)(setq d 3)(setq d 3)(setq c 10)(setq c 10)结结果果D D为为3 3。5/4/20245/4/20247171-2.cond函数格式:(cond )是逻辑表达式,为一个或多个表达式。执行过程见图。5/4/20245/4/20247272-举例:(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。5/4/20245/4/20247373-3.progn函数progn函数通常和If函数一道用,来控制计算顺序。格式:(prong 表达式1)举举例:例:(setq a 15 b 15.0)(setq a 15 b 15.0)(if(=a b)if(=a b)(princ“(princ“大家好大家好!”)!”)(setq a(+a 1)(setq a(+a 1)b(+b 1)b(+b 1)运运行行结结果果是是:大大家家好好!a=15a=15,b=15.0 b=15.0(setq a 15 b 15.0)(setq a 15 b 15.0)(if(=a b)if(=a b)(prognprogn (princ“(princ“大家好大家好!”)!”)(setq a(+a 1)(setq a(+a 1)b(+b 1)b(+b 1)运运行行结结果果是是:大大家家好好!a=16a=16,b=16.0 b=16.05/4/20245/4/20247474-五、循五、循环环函数函数 有两个循环函数:repeat、while。1.Re
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!