AutoLISP绘图程序设计PPT课件

上传人:夏** 文档编号:568778420 上传时间:2024-07-26 格式:PPT 页数:86 大小:264.50KB
返回 下载 相关 举报
AutoLISP绘图程序设计PPT课件_第1页
第1页 / 共86页
AutoLISP绘图程序设计PPT课件_第2页
第2页 / 共86页
AutoLISP绘图程序设计PPT课件_第3页
第3页 / 共86页
AutoLISP绘图程序设计PPT课件_第4页
第4页 / 共86页
AutoLISP绘图程序设计PPT课件_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《AutoLISP绘图程序设计PPT课件》由会员分享,可在线阅读,更多相关《AutoLISP绘图程序设计PPT课件(86页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 AutoLISP AutoLISP绘图程序设计绘图程序设计 主要内容主要内容1.AutoLISP特点2.AutoLISP函数的用法3.AutoLISP程序结构4.AutoLISP程序执行方式2021/6/72021/6/71 13.1 AutoLISP3.1 AutoLISP概述概述 一、一、AutoLISPAutoLISP介绍介绍 1.AutoLISP1.AutoLISP的作用的作用( 1) AutoLISP是 一 种 表 语 言 , 是 常 用 的AutoCAD二次开发手段。 所谓二次开发:是指以AutoCAD软件为平台,加入自己所需要的功能。开发过程,就是编程的过程。 二次

2、开发所支持的语言有VB、C+,大型的二次开发,以C+为主,而小型二次开发,一般以AutoLISP为主。 2021/6/72021/6/72 2(2 2)必须在)必须在AutoCADAutoCAD环境下运行(内嵌);环境下运行(内嵌);(3 3)AutoLISPAutoLISP可可以以编编写写程程序序,调调用用AutoCADAutoCAD的的许许多多 命令;命令;举例举例: :在水平方向画在水平方向画n n个大小相等的圆。个大小相等的圆。;调用调用AutoCADAutoCAD命令画圆命令画圆(defun C:HY()(defun C:HY() (setq P0 (getpoint (setq P

3、0 (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 P

4、0 0 L) (setq a (1+ a) (setq a (1+ a) ) ) )2021/6/72021/6/73 3(4)AutoLISP语言中使用大量的函数(有200多个函数),进行各种运算;(5)AutoLISP编写的程序特点(学习中注意):v以表形式描述数据处理过程,程序执行过程就是函数求值过程;v每段程序都是一个函数;v具有交互处理功能,边解释边执行;v采用模块化设计方法。2021/6/72021/6/74 42.AutoLISP2.AutoLISP的数据类型的数据类型 (1 1)整型数()整型数(INTINT):是由):是由0 0、1 1、2929、+ +、- -组成的。组成的

5、。(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:

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

7、-26.58)例:(setq P (12.36 -26.58)结果是:(12.36 -26.58)提示:(1)表的嵌套时一定要注意括号“(”、“)”匹 配。(2)西文状态下输入!2021/6/72021/6/77 7(6)文件描述符(7)AutoLISP内部函数(8)AutoCAD的选择集(9)AutoCAD的实体名 上述数据类型中,前四种称原子,原子包括数值原子(整型数、实型数),符号原子和字符串原子。 AutoLISP基本数据类型是原子和表,重点介绍前五种数据类型。2021/6/72021/6/78 8二、几个基本概念二、几个基本概念1.1.常数常数 PI PI数学中的数学中的(3.141

8、59293.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)2021/6/72021/6/79 94.点 是表的一种形式,也叫点表。 有三种获得点的方式: (1)用表示 (120

9、.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输入一点:”) 2021/6/72021/6/71010三、三、AutoLISPAutoLISP程序结构程序结构1.1.1.1.举例举例举例举例例(例(例(例(1 1 1 1) ;在屏幕上显示在屏幕上显示在屏幕上显示在屏幕上显示 ASCII ASCII ASCII ASCII码为(码为(码为(码为(65

10、65656590909090)的字符)的字符)的字符)的字符(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

11、 (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) ) ) ) ) ) ) )2021/6/72021/6/71111例(例(2 2);绘制正多边形程序绘制正多边形程

12、序(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(ge

13、tpointn (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 p

14、1 p2) ) ) )2021/6/72021/6/71212例(例(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) )2021/6/72021/6/71313例(4)(defun ld( ) (setq p1 (getpointn p1:) p2 (getpointn p2:) );输入两点

15、 (setq d (distance p1 p2);求距离 (setq ang (angle p1 p2);求方位角 (print d) (print ang) (command line p1 p2 );画直线)2021/6/72021/6/714142.2.结构结构 (1 1)注注释释行行以以 ;开开始始,可可在在程程序序头头或或句句尾尾,增增加加程程序可读性。也可以不要。序可读性。也可以不要。(2 2)除字符串外,字母大小写等效。)除字符串外,字母大小写等效。(3 3)表表与与表表之之间间可可以以有有空空格格,也也可可没没有有,建建议议有有,这这样清楚。样清楚。如:如:(distance

16、(3 4)(56 32)(distance(3 4)(56 32)或或 (distance (3 4) (56 32) (distance (3 4) (56 32)(4 4)函函数数名名后后至至少少要要有有一一个个空空格格,函函数数名名与与表表之之间间可可有可无。有可无。2021/6/72021/6/715153.3.3.3.特点特点特点特点 (1 1)所谓语句都是以表形式出现。)所谓语句都是以表形式出现。 (2 2)一切成分都是以函数的形式给出。)一切成分都是以函数的形式给出。 (3 3)程序执行过程就是求函数值的过程。)程序执行过程就是求函数值的过程。四、四、AutoLISPAutoLI

17、SP程序执行方式程序执行方式有三种方式:行方式、源文件方式、编译文件方式。有三种方式:行方式、源文件方式、编译文件方式。 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) 2021/6/72021/6/716162.2.源文件方式源文件方式 用用写写字字板板或或记记事事本本把把Aut

18、oLISPAutoLISP程程序序保保存存起起来来(后后缀缀为为.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) (comma

19、nd 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) ) ) )2021/6/72021/6/71717 (2)(2)用用“load”“load”装载装载 即在命令行上输入即在命令行上输入(load “e:zm.lsp”)(load “e:zm.lsp”) (3) (3)在命令行上输入在命令行上输入zm zm 3.3.编译文件方式(重点掌握)编译文件方式(重点掌握) (1) Visual L

20、ISP (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程序程序举例举例: :2021/6/72021/6/718183.2 3.2 基本函数基本函数一、算数运算函数一、算数运算函数 1.1.加运算加

21、运算 格式:(格式:(+ 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”及各数之间必须要有空格,后及各数之间必须要有空格,后面的函数格式都是如此。面的函数格式都是如此。

22、 2021/6/72021/6/719192. 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 C

23、ommand: (- 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.02021/6/72021/6/72020 3. 3. 乘运算乘运算 格式:(格式:(* num1 num2 num3 .* num1 num2 num3 .) 4. 4. 除运算除运算 格式:(格式:(/ num1 num2 num3 ./ num1 num2 num3 .) “ “除除”函数以第一个数除以其他所有运算数的积,函数以第一个数除以其他所

24、有运算数的积,即即 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 2021/6/72021/6/721215. 5. 增量增量 格式:(格式:(1+ number1+ number) 注意:注意:1 1和和“+”“+”之间不

25、能空格,之间不能空格,+ + 与与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)2021/6/72021/6/72222举例举例: :1.求a,b,c三个数的平方和。2.根据前后视读数,求两点间高差。3

26、.求闭合水准线路的高差闭合差。2021/6/72021/6/72323参考答案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)2021/6/72021/6/72424参考答案3:(setq n (getint 输入高差个数:)(setq fh 0.0)(repeat n (setq h

27、(getrealn依次输入高差:) (setq fh(+ fh h)2021/6/72021/6/72525二、标准函数二、标准函数 1.绝对值(abs)、平方根 (sqrt) 、正弦(sin) 、余弦(cos) 、 反正切(atan) 以上函数格式:(函数名 )2.幂函数(expt)、(exp) 格式: (expt 底数 幂) 格式: (exp 底数 ) 注意:以上各函数返回的数值类型。3.举例2021/6/72021/6/72626举例:用AutoLISP表示下列公式:(1)计算三角高程的表达式 (2)计算坐标增量的表达式(3)将度化成弧度单位2021/6/72021/6/72727参考答

28、案参考答案: :(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)2021/6/72021/6/72828参考答案:(3) (setq af (getreal “输入af:”); af是整度数 (setq af (/ 180 (* pi af)v如何将度分秒化成弧度?

29、2021/6/72021/6/72929三、赋值函数三、赋值函数 赋值函数有两个: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输入一点:)2021/6/72021/6/730302.set2.set与se

30、tq不同之处,是set为符号赋值,setq为变量赋值。如:(set a 9) 结果a为9 此函数非常有用,和其它函数配合使用,可以得到一维数组。举例:(1) (set(read(getstringn输入点 名:)(getpointn输入点坐标:)(2) (set(read(getstringn输入变量 名:)(getrealn输入变量值:)2021/6/72021/6/73131四、字符串处理函数四、字符串处理函数1.strcat格式:(strcat 串1 串2.)把“串1”、“串2”、等连成一个新的字符串。如:(strcat a bout) 返回 about(strcat a b c) 返回

31、 abc(strcat a c) 返回 ac“2.strlen格式:(strcat 字符串)此函数求“字符串”长度。如:(strlen one two three) 返回11 2021/6/72021/6/732323.substr格式:(substr 字符串 起点 长度)此函数将返回“字符串”的子字符串。子串的起始位置是以“起点”确定,子串长度由“长度”指定。如果“长度”没有设定, 则子串将从“起点”到最后。“起点”和“长度”均须为正整型数。如:(substr abcde 2) 返回 bcde(substr abcde 3 2) 返回 cd2021/6/72021/6/73333五、类型转换

32、函数五、类型转换函数1.fix1.fix格式:格式: (fix number) (fix number) 此此函函数数将将numbernumber变变为为整整型型数数。如如果果numbernumber是是实实型型数,则舍去小数部分。数,则舍去小数部分。如:如: (fix 3) (fix 3) 返回返回 3 3 (fix 3.7) (fix 3.7) 返回返回 3 3 2021/6/72021/6/734342.float2.float格式:格式: (float number) (float number) 此函数将此函数将numbernumber变为实型数。变为实型数。如:如:(float 3

33、) (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 972021/6/72021/6/735354. atof4. atof格式:格式: (atof (atof 字符串字符串) ) 此函数可用来将字符串转换成实型数。此函数可用来将字符串转换成实型数。如:如:(atof 67.9)(atof 67.9)返回返回

34、 67.9 67.9(atof “97”)(atof “97”)返回返回 97.0 97.05. itoa5. itoa格式:格式:(itoa (itoa 整型数整型数) ) 此函数将整型数转换成字符串。如:此函数将整型数转换成字符串。如:(itoa 56) (itoa 56) 返回返回 “56” “56”2021/6/72021/6/736366. rtos6. rtos rtosrtos函函数数将将按按给给定定的的方方式式和和精精度度把把数数转转换换为为字字符符串。串。格式:格式:(rtos (rtos 数数 方式方式 精度精度) )方方式式:有有五五种种,其其代代码码分分别别是是1 1、

35、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.22021/6/72021/6/737377.(angtos 7.(angtos 角度角度 模式模式 精度精度)把弧度转换为度(取整度)把弧度转换为度(取整度)注意:(注意:(1 1)角度以弧度表示;)角度以弧度表示; (2 2)模

36、式是)模式是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互补的函数互补的函数(angto

37、f 32 )(angtof 32 )2021/6/72021/6/738388.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 字符串字符串) )此函数是将字符串转换成此函数是将字符串转换成ASCI

38、IASCII。如。如 :(ascii “A”) (ascii “A”) 返回返回65652021/6/72021/6/7393910.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.72021/6/72021/6/74040举例举例1:1:;得到一组

39、点得到一组点, ,如:如: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) ) ) ) )2021/6/72021/6/74141举例举例举例举例2:2

40、: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(

41、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) ;以字符串形式保存角的度数以字符串形式保存角的度数以字符串形式保存角的度数以字符串形式保存角的度数 (set

42、q 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) ;以字符串形式保存角的秒数以字符串形式保存角的秒数以字符串形式保存角的秒数以字符串形式保存角的秒数

43、) ) ) ) (= (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

44、 (substr a 6 2) (setq as (substr a 6 2) (setq as (substr a 6 2) ) ) ) )2021/6/72021/6/74242(= (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 (a

45、tof 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) (pri

46、nc) (princ)2021/6/72021/6/74343六、求值函数六、求值函数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(空间距离)2021/6/72021/6/744442.angle2.angle函数函数 是是求求点点1 1到到点点2 2的的方方向向与与X X轴轴正正向向的的夹夹角角(),如如图图,单位是弧度。单位是弧度。格式:(格式:(angle angle 点

47、点1 1 点点2 2)(angle (5 1) (2 1)(angle (5 1) (2 1)返回:返回:3.1415933.1415932021/6/72021/6/745453. polar3. polar函数函数 polarpolar函数以一个给定角度和一个与给定点的距离来函数以一个给定角度和一个与给定点的距离来定义一个新点,如下图所示。定义一个新点,如下图所示。其中角用弧度表示,并以逆时针方向测量为正其中角用弧度表示,并以逆时针方向测量为正 。polarpolar函数的格式:函数的格式:(polar (polar 点点 角度角度 距离距离) )(setq pt2 (polar (2.0

48、 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) 2021/6/72021/6/746464.eval4.eval格式:格式:(eval (eval 表达式表达式 ) )此函数求出表达式结果。如此函数求出表达式结果。如: :(setq a 56 b 45.3)(setq a

49、56 b 45.3)(eval a)(eval a)(eval b)(eval b)提提示示:evaleval和和strcatstrcat、readread、setqsetq等等函函数数配配合合用用, ,可可以以建立一个一维数组。建立一个一维数组。例如:例如:建立一维数组建立一维数组xixi(i=1i=1,2 2,n n)。)。2021/6/72021/6/74747(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+

50、 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。2021/6/72021/6/74848七、表处理函数七、表处理函数1.list函数2.car函数 格式:(car 表) 返回一个

51、列表中的第一个元素的数值(X元素)。如果该列表中没有任何元素,则返回空值nil。3.cadr函数 返回一个列表的第二个元素(Y元素)。4.last函数 返回一个列表的最后一个元素。5.(nth 表)返回表中第n个元素(n从0算起)。2021/6/72021/6/749491.(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)2021/6/72021/6/7505

52、0八、八、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 )2021/6/72021/6/751513.注意事项 (1)Command函数不能调用AutoLISP的输入函数,如getpoint、getangle、getstring、getint等。

53、(2)AutoCAD命令名称和选项必需放在双引号中,并要求双引号中不能有空格。( 3) 不 带 “AutoCAD命 令 及 其 选 项 ”, 即(command),等效ESC键(中止)。(4)几个命令和数据可以写在一个command函数中,也可分开写在两个或两个以上的command函数中。如: (Command “line” p1 p2 p3 p4 “” ) 和 (Command “Pline” p1 p2) (Command p3 p4 “”)等效。2021/6/72021/6/75252(5)文字注记时,字符串也要用“”括起来。如:(Command “Text” (100 100) 5 “

54、” “AutoLISP”)(6)调用对话框命令时,不显示对话框,以提示方式执行。如:新建“控制点”图层,设置图层为红色。(command layer m 控制点 c 1 )2021/6/72021/6/75353举例:画一个边长为L,中心点坐标为P的正三角形,要求底边水平。 (setq L (getrealn输入边长:)(setq P (getpointn输入中心:)(setq r (* 0.288675134 L) ;求内切圆半径12r*r=L*L(command polygon 3 P c R)2021/6/72021/6/754543.3 3.3 自定义命令和自定义函数自定义命令和自定义

55、函数 一、自定义函数(一、自定义函数(defundefun) 用函数(defun)可以定义用户自己的函数,叫自定义函数。自定义函数象AutoLISP函数一样可以被调用,比如说,把常用的符号定义成自定义函数,实际用时,带入具体参数就可以得到图形,不别再绘制。 2021/6/72021/6/755551. 1. 自定义函数格式自定义函数格式(defun (defun 函数名函数名 变元表变元表 表达式表达式1 1表达式表达式2 2) )例例:用用自自定定义义函函数数方方式式编编写写一个程序,绘制正三角形。一个程序,绘制正三角形。(defun sjx()(defun sjx()(setq L (ge

56、trealn(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) )2021/6/72021/6/756562.2.注意注意 (1)函数名是用户自己设定的,不能与AutoLISP内部函数名、变量名相同;(2)变元表的形式有四种:v

57、(参数1 参数2),如上例。变元表为此形式 时,调用要带参数。v( ),无参形式。调用时不带参数。 v(参数1 参数2/局部变量1 局部变量2)。变元表为此形式时,调用要带参数。v(/局部变量1 局部变量2)。调用时不带参数。q/ 与参数、局部变量之间必须有空格。 2021/6/72021/6/75757(3)表达式是函数的定义体,完成计算和绘图。( 4) 自 定 义 函 数 的 作 用 : defun函 数 用 于 在AutoLISP程序中定义一个函数。它就象其它标准函数一样,可以为我所用。使用时,通过不同的参数,可以绘制不同的图形。调用自定义函数举例:;度化弧度自定义函数(defun hd

58、(af) (setq hhd(/ (* af pi) 180)2021/6/72021/6/75858(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

59、 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) )2021/6/72021/6/75959二、自定义命令二、自定义命令 自定义命令的作用是用defun函数为Au

60、toCAD增加各种新命令。 1.1.格式格式(defun C:()(defun C:() 1 2) )或或(defun C:(/(defun C:(/)2) 1 2) )2021/6/72021/6/760602.注意事项(1)自定义命令格式中是命令名称;必须有C:(大小写等效);与C:之间不能有空格。(2)不能和内部或外部函数名相同;也不能和其它命令同名。 (3)注意与自定函数的区别。 3. 自定义命令调用加载(load)程序后,在命令行上输入自定义命令名。 2021/6/72021/6/76161例.编写计算三角高程的AutoLISP程序。程序清单如下:;计算三角高程(defun c:sj

61、gc() (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)2021/6/72021/6/76262; ;把度分秒化成弧度把度分秒化成弧度(defun hd()(defun hd()(setq a (getstring nA:)(setq a (getstring nA:); ;输入角度(按输入角度(按6.36286.3628形式输入)形式输入)(con

62、d(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

63、 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

64、 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)2021/6/72021/6/763633.4 3.4 程序结构函数程序结构函数 程序结构函数用于控制程序的进程,把它叫程序结构函数。包括:关

65、系函数、逻辑函数、谓词函数、条件函数、循环函数。一、关系函数一、关系函数 1.1.等于等于 格式:(= atom1 atom2.) 等于函数(= )判断数是否相等。如果相等则条件为真,返回值为T(真值)。同样,如果不相等,则条件为假,返回值为nil(假值)。 2021/6/72021/6/76464 2.不等于 格式:(/= atom1 atom2.) 不等于函数( / =)判断数是否不相等。如果不相等,则条件为真,返回值为T。 3.小于 格式:( atom1 atom2 .) 小于函数( )判断前一个数( atom1)是否小于后面的作数( atom2),如果小于,则条件为真,返回值为T,否则

66、返回nil。 2021/6/72021/6/76565 4.小于等于 格式:(= atom1 atom2.)小于等于函数( atom1 atom2.)大于函数判断第一个数是否大于第二个数,如果大于,则条件为真,返回值为T,否则返回nil。 6.大于等于 格式:(= atom1 atom2.)2021/6/72021/6/76666二、逻辑函数二、逻辑函数 1.逻辑“与” 格式:(and 表达式1) 这个函数求出表达式之间的“与”运算值,即当所有表达式值同时为T时,函数结果为T,如果其中任何一个表达式值为nil,函数结果为nil。例如:(setq a 10 b 20)(and ( a 5)( b

67、 5)( b 15) 结果为nil2021/6/72021/6/76767 2. 逻辑“或” 格式:(or 表达式1) 这个函数求出表达式之间的“或”运算值,即当所有表达式值同时为nil时,函数结果为nil,如果其中任何一个表达式值为T,函数结果为T。例如:(setq a 10 b 20)(or ( a 15) 结果为nil(or ( b 15) 结果为T2021/6/72021/6/76868 3. 逻辑“非” 格式:(not 数或表达式) 这个函数求出表达式之间的“非”运算值,即当“数或表达式”值为nil时,函数结果为T,否则函数结果为NIL。例如:(setq a 10 b 20 c ni

68、l)(not a) 结果为nil(not c) 结果为T(not (or ( a 15) 结果为T(not (or ( b 15) 结果为nil2021/6/72021/6/76969三、数据谓词函数和等值谓词函数三、数据谓词函数和等值谓词函数(自学自学)四、条件函数和顺序处理函数四、条件函数和顺序处理函数 1.If1.If函数函数 格式:格式: (If (If 1 2 ) )2021/6/72021/6/77070举例:举例:(1 1) (If (If (= (= 1 1 3) 3) “YES” “YES” “NO”) “NO”) 结结果果为为“NO”“NO”(2 2) (setq a 15

69、) (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。2021/6/72021/6/771712.cond函数格式:(cond )是逻辑表达式,为一个或多个表达式。执行过程见图。 2021/6/72021/6/77272举例:(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。 2021/6/720

70、21/6/773733.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 (

71、= 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.02021/6/72021/6/77474五、循环函数五、循环函数 有两个循环函数:repeat、while。 1.Repeat函数 格式:(Repeat 数 表达式1)数:必须是正整数。 表达式:是循环体,循环次数由数来决定。最后返回表达式的值。举例:(setq a 10

72、 b 100)(repeat 4(setq a (+ a 10) (setq b (+ b 100) ) 2021/6/72021/6/775752.while函数 格式:(while 表达式1) 执行过程:先计算,若为T,则计算后面若干个表达式(循环体);若为NIL,则退出循环体。举例:按要求画下列图形。 2021/6/72021/6/77676(defun C:HY () (setq P0 (getpoint 圆心1:) (setq R (getreal半径:) (setq L (getreal间距:) (setq a 1) (while (= a 4) (command circle P

73、0 R) (setq P0 (polar P0 0 L) (setq a (1+ a) ) )如果要绘制圆如果要绘制圆心的连线与心的连线与x x轴有一夹角轴有一夹角a a,则程序如何,则程序如何编?编?2021/6/72021/6/77777附加:设置长度和角度单位附加:设置长度和角度单位 如:如:长度单位设置十进制、长度单位设置十进制、3 3位小数,角度单位设位小数,角度单位设置十进制的度置十进制的度2 2位小数、位小数、X X轴正方向为轴正方向为0 0度、逆时针度、逆时针方向为正。方向为正。 用用commandcommand(command units 2 3 1 2 0 N)(comma

74、nd units 2 3 1 2 0 N) units units:绘图单位命令;:绘图单位命令; 2 2:长度十进制单位;:长度十进制单位; 3 3:3 3位小数;位小数; 1 1:角度十进制单位;:角度十进制单位; 0 0:X X轴正方向为轴正方向为0 0度;度; N N:逆时针方向为正。:逆时针方向为正。 2021/6/72021/6/77878(defun C:HY ()(defun C:HY ()(defun C:HY ()(defun C:HY () (setq P0 (getpoint (setq P0 (getpoint (setq P0 (getpoint (setq P0

75、(getpoint 圆心圆心圆心圆心1:)1:)1:)1:) (setq R (getreal (setq R (getreal (setq R (getreal (setq R (getreal半径半径半径半径:):):):) (setq L (getreal (setq L (getreal (setq L (getreal (setq L (getreal间距间距间距间距:):):):) (setq n (getint (setq n (getint (setq n (getint (setq n (getint圆的数量圆的数量圆的数量圆的数量:):):):) (setq jd (get

76、angle (setq jd (getangle (setq jd (getangle (setq jd (getangle倾斜角度倾斜角度倾斜角度倾斜角度:):):):) (command units 2 3 1 2 0 N) (command units 2 3 1 2 0 N) (command units 2 3 1 2 0 N) (command units 2 3 1 2 0 N) (setq a 1) (setq a 1) (setq a 1) (setq a 1) (while (= a n) (while (= a n) (while (= a n) (while (= a

77、n) (command circle P0 R) (command circle P0 R) (command circle P0 R) (command circle P0 R) (setq P0 (polar P0 jd L) (setq P0 (polar P0 jd L) (setq P0 (polar P0 jd L) (setq P0 (polar P0 jd L) (setq a (1+ a) (setq a (1+ a) (setq a (1+ a) (setq a (1+ a) ) ) ) ) ) ) ) )2021/6/72021/6/779793.5 3.5 交互输入函数

78、交互输入函数 getpoint 、getint 、getreal 、getstring 、getangle 、getdist v(getangle “提示内容”)getangle函数等待用户输入角度。若用户输入一个数,则得到由该数代表的角度值转化为的弧度值。若输入一点,系统提示输入第二点,其结果得到由第一点到第二点构成的向量与X轴正向夹角,单位是弧度。 2021/6/72021/6/780803.63.6系统变量、文件操作和实体访问函数系统变量、文件操作和实体访问函数 一、系统变量函数一、系统变量函数 AutoLISP AutoLISP有两个系统变量函数,用于改变有两个系统变量函数,用于改变(

79、setvar (setvar ) )或得到或得到(getvar )(getvar )系统变量的值。系统变量的值。 二、文件操作函数二、文件操作函数 三、实体访问函数三、实体访问函数 2021/6/72021/6/78181练习题练习题一、概念题 1.AutoLISP程序有何特点? 2.填空(1)在表达式(sin af)中,af以_为单位,表达式结果是_数。(2)表达式(rtos 45.23 2 1) 返回值是:_ 。 表达式(rtos 45.235 2 2) 返回值是:_ 。2021/6/72021/6/78282(3 3)(setq db (DXD 76.543 23.763 56.87)(

80、setq db (DXD 76.543 23.763 56.87)(setq dm (nth 0 db)(setq dm (nth 0 db)dmdm返回值是:返回值是:_ _ 。(4 4)表达式)表达式(read “23.5 67.89”)(read “23.5 67.89”)返回值返回值是:是:_ _ 。(5 5)已知)已知x=5,y=8,r=10,x=5,y=8,r=10,调用调用commandcommand函数绘制一个函数绘制一个圆,判断下列表达式哪些是错误的,并指出错误圆,判断下列表达式哪些是错误的,并指出错误原因。原因。 1 1)(command circle (list x y)

81、 r )(command circle (list x y) r ) 2 2)(command circle (list x y) r) (command circle (list x y) r) 3 3)(command circle (x y) r) (command circle (x y) r) 4 4)(command circle (list x y) r)(command circle (list x y) r)2021/6/72021/6/783833.写出自定义命令和自定义函数的格式。二、编程应用题 1已知线段AB,C点是线段AB外一点,用自定义函数编写方式,求C点到线段AB的距离。 2. 定义一个求三角形面积的函数。 3. 用自定义命令方式编写建立图层的应用程序。4.已知、点,绘制如图。2021/6/72021/6/784845.设A、1、2、3、B是导线点(坐标已知),编写绘制导线略图的AutoLISP程序(要求绘制用圆圈表示导线点,并注记点号)。2021/6/72021/6/78585部分资料从网络收集整理而来,供大家参考,感谢您的关注!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号