第五章第二节AUTOLISP程序设计简介
- 格式:pdf
- 大小:312.93 KB
- 文档页数:26
AUTOLISP程序设计技巧AUTOLISP(即AutoCAD Lisp)是一种用于AutoCAD软件的编程语言。
它基于Lisp语言,可以用于创建自定义命令和功能,以自动执行一系列任务。
在编写AUTOLISP程序时,可以采用一些技巧来提高代码的可读性和性能。
下面将介绍一些常用的AUTOLISP程序设计技巧。
1.变量命名:为了增加代码的可读性,应该选择具有描述性的变量名。
避免使用单个字母或简写的名称,而应使用有意义的名称来描述变量的用途或含义。
2.注释:在代码中使用适当的注释是非常有帮助的,可以解释代码的目的、逻辑和特定部分的功能。
注释应该清晰明了,不冗余,并使用大写字母或其他方法来突出显示。
3.函数:使用函数来分割代码段,以便在需要时可以多次调用相同的代码块。
函数的使用可以提高代码的可读性,并使其更容易维护。
4.错误处理:在代码中加入适当的错误处理机制非常重要,可以避免程序崩溃或产生不期望的结果。
使用条件语句和错误处理函数来检测和处理可能发生的错误。
5.循环:使用循环语句来处理重复性任务,并减少代码的冗余。
根据任务的特点选择合适的循环类型(例如FOR循环、REPEAT循环等)。
6.嵌套:在必要时使用嵌套结构,将代码组织成逻辑结构清晰的块。
使用适当的缩进和代码布局来增加代码的可读性。
7.字符串处理:AUTOLISP中的字符串处理功能非常强大,可以使用字符串函数来处理、操作和格式化字符串。
了解并熟练使用字符串函数可以提高代码的灵活性和功能。
8.数组和列表:使用数组和列表可以存储和处理多个值。
熟练使用与数组和列表相关的函数(如CAR、CDR、CONS、LIST等)可以简化代码并提高性能。
9. 命令行交互:通过与用户进行命令行交互,可以提高程序的交互性。
使用getstring、princ等函数来获取用户输入,并使用条件语句来根据输入执行相应的操作。
10.优化:编写高效的代码可以提高程序的性能。
使用较少的迭代步骤、减少不必要的计算、选择合适的数据结构等都可以提高程序的效率。
AutoLISP程序语言设计AutoLISP程序语言设计目录⒈简介⑴ AutoLISP概述⑵ AutoLISP的应用领域⒉基本语法⑴变量定义与赋值⑵控制流语句⑶函数定义与调用⑷条件语句⒊常用函数⑴坐标点函数⑵图形绘制函数⑶数据处理函数⑷字符串处理函数⒋高级技巧⑴调试与错误处理⑵程序优化与性能提升⑶与外部程序交互⒌示例程序⑴绘制简单图形⑵自动化处理CAD图纸⑶数据导出与导入⒍附录⑴ AutoLISP开发工具推荐⑵ AutoCAD版本兼容性⑶ AutoLISP常用工具介绍⒈简介⑴ AutoLISP概述AutoLISP是一种方便的自动计算与绘图程序设计语言,它是用于AutoCAD中的一种宿主程序语言,可以用于控制CAD软件的各项功能,实现自动化操作。
⑵ AutoLISP的应用领域AutoLISP可用于各种CAD绘图软件的自动化操作,包括但不限于以下方面:●绘制复杂图形●数据处理与导出●组装CAD图纸●批量操作与修改⒉基本语法⑴变量定义与赋值AutoLISP可以使用变量来存储数据,并在程序中使用。
变量可以通过赋值来初始化或修改其值。
⑵控制流语句AutoLISP支持各种控制流语句,如条件语句、循环语句等,用于根据不同条件执行不同的代码块或重复执行特定的代码块。
⑶函数定义与调用AutoLISP允许用户自定义函数以实现特定的功能。
函数是一组逻辑相关的代码块,可以通过函数名来调用。
⑷条件语句条件语句用于根据不同的条件执行不同的代码块。
AutoLISP提供了if、cond等条件语句供用户使用。
⒊常用函数⑴坐标点函数AutoLISP提供了一系列用于处理坐标点的函数,如polar、polar-point、polar-angle等,用于计算、转换坐标点。
⑵图形绘制函数AutoLISP提供了丰富的图形绘制函数,如line、circle、text 等,用于绘制直线、圆形、文本等图形元素。
⑶数据处理函数AutoLISP提供了一些用于处理数据的函数,如list、append、assoc等,用于创建列表、连接列表、关联列表等操作。
第5章 AutoLISP基本函数函数是AutoLISP语言处理数据的基本工具,学习AutoLISP编程最主要的是要掌握AutoLISP语言系统内部函数和符号的基本用法。
如:函数的调用格式,即函数名、参数的个数及类型;函数的功能、求值情况及返回值类型等。
AutoLISP基本函数主要包括:数值函数、赋值与求值函数、表处理函数、字符串处理函数、逻辑运算函数和控制结构函数等。
5.1 数值函数数值函数用于处理整型数和实型数,数值函数包括:基本算术函数、三角函数、数据类型转换函数。
数值函数的返回值类型取决于参数表中参数的数据类型。
AutoLISP中数值计算要遵循整实原则,具体运算规则为:A.整整得整;B.实实得实;C.整实得实。
例:command: (/ 18 4 2) 返回: 2command: (* 4.5 2.0) 返回:9.0command: (+ 6 4.2) 返回:10.25.1.1 基本算数函数这类函数包括:+、-、*、/、1-、1+、abs、sqrt、min、max、expt、exp、log、gcd、rem 1) (+ 〈数〉〈数〉… )功能: 求表中所有整数或实数的和。
例如:Command:(+ 1.2 3.1 3.8)返回:8.12) (- 〈数〉〈数〉… )功能: 求表中第 1 个数减去后面所有数的差, 当表中只有一个数时, 返回这个数的相反数。
例如:Command:(- 8. 1 5)返回:3.1Command:(- 0.25)返回:-0.253) ( *〈数〉〈数〉… )功能: 求表中所有数的积, 例如:Command:( * 0.0174533 30)返回:0.5235994) (/ 〈数〉〈数〉… )功能: 求表中第1 个数除以后面所有数的商。
例如:cmnmand:(/ 10 5 2.0)返回:1.05) (1+ 〈数〉)功能: 求一个整数或实数加 1 的和。
例如:Command:(1+ 2.7)返回:3.76) (1- 〈数〉)功能: 求一个整数或实数减 1 的差。
§5.2 AutoLISP程序设计一、概述LISP语言(List Processing Language的缩写)是一种表处理语言。
因为LISP在描述表方面有独到之处,且本身灵活而精巧,自创立以来,在人工智能的程序设计中得到广泛应用。
在英、美等国应用尤为普遍。
AutoLISP是LISP语言的一个版本,其独特性在于专门为AutoCAD开发的。
所以AutoLISP仅能运行于AutoCAD软件包环境里。
同样,也正是在AutoCAD内置AutoLISP这样一种灵活、精巧的开发语言,使得AutoCAD 得到进一步广泛使用。
1.A utoLISP特点:(1)AutoLISP语言是一种仅能以解释方式运行于AutoCAD内的程序设计语言。
即:脱离AutoCAD环境,它就不能运行。
(2)AutoLISP语言是函数型语言,其函数和数据形式是一致的,即(function argument)·function(函数名):内建函数或用户自定义函数名;·argument(参数):参数种类:①变量(V aribles)②常量(Constants)③其他函数(function)所以表达式可以嵌套.④标志数(flag)⑤可选性参数(optional parameters)因此,表达式的形式是:“先说做什麽,再说对谁做”。
(3)可以在AutoLISP程序中引用AutoCAD的几乎所有功能进行图形处理的自动化,尤其是较深层的应用——对象数据库的操作。
在Visual LISP的协助下,对于AutoCAD进行操作功能上的讨论,LISP仅比ARX少一个功能。
在AutoCAD R14已经不再使用ADS程序设计,取而代之的是ARX程序设计模式。
ARX一般是在AutoCAD和开发商中使用。
使用Visual C++作为基本程序设计语言,其效率、数据处理和软硬件的控制能力都是相当好的。
但是,要想真正发挥这种开发模式的作用,对于程序设计者的要求也较高。
AutoLISP语言第一节概述1.1简介AutoLISP是一种嵌入AutoCAD内部的LISP语言。
它可让用户和AUTOCAD 开发者以非常强大的高级语言编写出宏语言程序和函数,它非常适合于图形的应用,LISP很易于学习和使用,它也非常灵活多变。
1.2AUTOLIAP中的数据类型.表.符号.字符串.实型数.整型数.文件指针.AUTOCAD实体名.AUTOCAD选择集.子程序整型数是16位带符号的数,因此,它的范围是在—32768和+32767之间。
实型数是以双精度的浮点数表示。
字符串可以是任意长度,它们的存贮空间是动态分配的。
1.3AUTOLISP的求值程序、词汇约定每一个LISP解释程序的核心就是求值程序。
求值程序装入用户的输入行,对它进行计算,并返回一些结果。
AUTOLISP的输入可以采用好几种形式。
它们可以在运行AUTOCAD时从键盘输入,也可以从ASCII文件读入,或者可以从字符串变量读入。
在所有这些形式中,必须要遵守上定的约定:1.符号名称可以由除下列字符之外的所有可打印字符序列组成:().’”;2.符号和函数名称(子程序)在AUTOLISP中大小写等效。
符号名称不能以数字开头。
3.实型数由一个或多个数字组成,后面跟着小数点,再就是一个或多个数字;如:“.4”并不被认作为实型数,“0.4”才是正确的写法。
4.文字字符串是一个由双引号引起来的字符序列。
在引起来的字符串中,可以使用反斜号,使得其中包括的控制字符可被正确识别,规定:\\ 表示字符“\”\n 表示换行\e 表示ESC\r 表示回车\t 表示光标\nnn 表示其八进制码为nnn的字符第二节AUTOLISP函数AUTOLISP提供了大量的预定义函数,本节介绍一些主要的函数。
需要说明的是,逻辑常数T与NIL这两个值相当于逻辑上的真与假。
是两个特殊原子。
这两个原子的值预先设置为T和NIL;常数PI表示数学上的π,它不是一个函数。
2.1数值运算函数1.(+ 〈数〉〈数〉…)函数返回所有数的总和2.(—〈数〉〈数〉…)函数返回所有数的差3.(* 〈数〉〈数〉…)函数返回所有数的积4.(/ 〈数〉〈数〉…)函数返回所有数的商其中的〈数〉可以是整型的,也可以是实型的。
AutoLISP程序入门教学资料AutoLISP程序入门-教学资料一. AutoLISP简介(优越性及缺点)AutoLISP语言是开发Autocad的主要工具,是LISP语言和Autocad有机结合的产物,在Autocad的发展及壮大过程中起到了重要的作用。
正是以AutoLISP为代表的开放式结构,才使Autocad在众多的CAD软件竞争中长期处于不败之地。
AutoLISP是一种解释型语言,可直接在Autocad中运行,而不象编译型语言必须借助于编译器对原程序进行编译和连接,才能生成可执行的代码模块,用户只需借助于文本编辑器(例如DOS的"EDIT"程序)即可进行编程。
AutoLISP(List Processing Language)是一种表处理语言?quot;表"是AutoLISP语言独有的数据结构,在AutoLISP中广泛使用,表是在一个变量中储存大量相关数据的有效方法。
例如AutoCAD中以三个实数(X Y Z)这种表的形式来表示三维点。
二. 在AutoLISP的赋值方法不象大多数计算机语言采用"中缀法"来表示程序语句(表达式),而采用"前缀法"。
例如:C语言中为实型数X赋值125.0,写成:X = 125.0;运算符"="放在操作数X和125.0之间。
而AutoLISP中则写成:(setq X 125.0)运算符"setq"放在操作数X和125.0之前。
"setq"是AutoLISP最主要的赋值函数,几乎所有的变量赋值都要依?quot;setq"来实现。
三. 如何向AutoCAD增加一个新命令(或如何定义一个函数)一般程序的结构组成及加载在下面的例子中,我们将了解AutoLISP语言一般程序的结构组成、如何定义一个在AutoCAD中可执行的函数、"setq"的用法以及如何在AutoCAD中加载程序。
第一篇基本知识第1节基本知识AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50年代末期出现,是一种擅于处理串行文字(List of Processing),属第四代人工智能(Artificial Intelligence)的计算机语言。
目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令。
AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成。
是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言。
程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响。
数据及程序均统一以串行 (List)结构表示。
优点:可直接调用几乎全部的AutoCAD命令。
既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力。
内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境。
可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框。
缺点:执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取。
第2节函数(Function)在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数。
函数的运行过程就是对函数的求值(结果)过程;函数的基本语法: (函数名称参数1 参数2……) 例如: (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应;左边开括号后紧随函数名称;函数名称与参数之间,或参数与参数之间须最少留一个空格;函数可有一个或多个参数(也可能没有参数),视该函数而定;函数名称不分大小写,即大小写字母视为相同。
AutoLISP简介AutoLISP规定了函数的形式:一: ( function argument )1.( ) 括号,表示执行某一函数,而括号中的内容即所要执行的部分.2.function 表示函数名. AutoLISP就是根据菡数名来区分各基本函数和用户自定义的函授数的.3.argument表示函数的参4.如果函数中套有函数称为嵌套函授数. AutoLISP允许用户使用诸如下列嵌套函授数:( fun1 (fun2 argu2) (fun3 argu3))(1)括号“(” 和“)”要匹配使用,用户在编写AutoLISP程序时一定要注意左\右手枪号匹配问题.(2)AutoLISP程序中,所有的括号( )和双引号" " 都必须在英文状态下输入,即必须是半角符号,为AutoLISP不识加紧中文全角符号.二: 设置变量函数( setq或SETQ )格式:(setq 变量名1值1[变量名2值2变量名3值3···])功能:创建给定的变量,并赋特定值.说明:(1)setq函数允许用户同时设置多个变时并赋予相应的数值.(2)对于字符串类型的值,应加上“”以于区分.注意:各变量名\数值之间只用空格隔开,而不能用其它标点符号,如要把3赋给变量abc可采用setq abc 3)方式.三: 执行AutoCAD标准命令( command )格式: ( command" 标准命令" "具体参数1" "具体参数2" ······)例如: (1)如果要画从(5,3)到(7,8)再到@10<0 三点的联机,可采用:( command " Line" "5,3" "7,8" "@10<0" "")(2)如果用户从已经定义的P1点到P2点画一条直线,可采用:( command "Line" P1 P2 "")四: 选择定点( getpoint)格式: getpoint("\n操作提示:")功能:用户可通过键盘输入体的坐标参数,可以用十字光标在屏幕区域内选取一点,通过该函数, AutoLISP就得知了用户所选取的点的坐标值.说明:(1)A utoLISP将首先显示用户设置的操作提示,在此提示下,才可确定某一给定一点.(2)G etpoint的操作提示中\n表示换行.通常,我们都是用(setq P1(getpoint"\n请输入第一点的坐标: "))这和方式来选取给定的点,并把该点坐标赋给变量P1.五: 目标捕捉( osnap)格式; osnap 给定顶点名称“目标捕捉方式”功能:以某种特定的目标捕捉方式, 捕捉最近给定顶点的某个特殊点.语名( setq Pt2(osnap pt1 "midp"))表示捕捉靠近Pt1端的中点,并把该中点坐标赋给Pt2六: 提取实体名称( entlast)格式: entlast功能:将用户的操作的上一实体的名称提取出来.( setq m (entlast))表示把用户的操作的上一实体的名称提取出来.并赋于m 这样AutoCAD就可以通过变量m来识别图形实体.例如:(1) Command :(command "circle" "5,5" "2") 以(5,5)这点为圆心,2为半径画一个圆.(2) Command :(command"line" "3,5" "7,5" "") 以这2点画一条直线,然后结束命令(3)Command :(setq el (entlast))(4)Command :(setq pt "5,7") 将点(5,7)赋给变量pt(5)Command :(command "trim" el "" pt "") 剪切多余的线.通过entlast 函数得知用户操作的上一实体为直线,并把该直线的实体名赋给变量el 这样el 就代表该直线.用户自定义函数AutoLISP提拱defun函数用以自定义用户函数,操作格式如下:( defun c :XXX( )表达式)现就该格式作说明:(1):defun 函数后面所跟C :XXX( )是一种特定的格式,XXX是用户定义函数的函数名.(2):表达工可由AutoLISP基本函数变量\字符串和运算符等组成,是用户定义函数的核心部.(3):定义完函数后,用户就可像AutoLISP基本函数一样调用XXX( )函数.注意:(1):defun 函数后所跟的C并不是代表硬盘驱动器符C,而是代表command line fuuction (命令行函数).(2):用这种方式所定义的函数XXX( ) 是无参函数,即不允许携带参数.(3):定义后,该函数XXX( ),还可以像AutoCAD基本命令一样,在command: 提示符下输入XXX并回车激活运行.(4):XXX( )函数, 还可以像AutoCAD透明命令一样,在某一函数运行过程中XXX形式运行.例如:( defun C : LXH( )(setq P1( getpoint"\ n请确定零件标注线第一点: ")(setq P2( getpoint"\ n请确定零件标注线第二点: "))( command "Line" P1P2 "@5<0" "")(setp P3 ( osnap P2 "midp" ))(command "dtext" " J " " bc" P350 )( Princ ))。
§5.2 AutoLISP程序设计一、概述LISP语言(List Processing Language的缩写)是一种表处理语言。
因为LISP在描述表方面有独到之处,且本身灵活而精巧,自创立以来,在人工智能的程序设计中得到广泛应用。
在英、美等国应用尤为普遍。
AutoLISP是LISP语言的一个版本,其独特性在于专门为AutoCAD开发的。
所以AutoLISP仅能运行于AutoCAD软件包环境里。
同样,也正是在AutoCAD内置AutoLISP这样一种灵活、精巧的开发语言,使得AutoCAD得到进一步广泛使用。
1. AutoLISP特点:(1)AutoLISP语言是一种仅能以解释方式运行于AutoCAD内的程序设计语言。
即:脱离AutoCAD环境,它就不能运行。
(2)AutoLISP语言是函数型语言,其函数和数据形式是一致的,即(function argument)·function(函数名):内建函数或用户自定义函数名;·argument(参数):参数种类:①变量(Varibles)②常量(Constants)③其他函数(function)所以表达式可以嵌套.④标志数(flag)⑤可选性参数(optional parameters)因此,表达式的形式是:“先说做什麽,再说对谁做”。
(3)可以在AutoLISP程序中引用AutoCAD的几乎所有功能进行图形处理的自动化,尤其是较深层的应用——对象数据库的操作。
在Visual LISP的协助下,对于AutoCAD进行操作功能上的讨论,LISP仅比ARX少一个功能。
在AutoCAD R14已经不再使用ADS程序设计,取而代之的是ARX 程序设计模式。
ARX一般是在AutoCAD和开发商中使用。
使用Visual C++作为基本程序设计语言,其效率、数据处理和软硬件的控制能力都是相当好的。
但是,要想真正发挥这种开发模式的作用,对于程序设计者的要求也较高。
因此这种开发模式不适于在专业设计工程师中间普及。
(4)AutoLISP是典型的结构化程序设计语言,AutoLISP是解释运行的语言,原程序保密性差。
巨量数据的复杂运算效率较低,文件管理功能简单,但可以在绝大多数原程序内容不变的条件下,用Visual LISP将其编译成ARX程序。
这样处理之后的AutoLISP程序,将具有与ARX程序相同的高保密性能,将具有相当高的运行效率(是原来AutoLISP程序运行速度的5~10倍)。
而且AutoLISP程序设计的复杂程度和运行风险大大低于ARX。
2。
AutoLISP的基本语法规则(参考例程):例程:用户输入P1、P2、P3三点绘一个三角形程序。
程序名:TRIANG.lsp;This program will prompt you to enter three;points of a triangle from the keyboard; or;select three points by using the screen cursor.;p1、p2、p3 are triangles corners. (Defun c:TRIANG()(Setq p1 (Getpoint “\nEnter first point of triangles:”))(Setq p2 (Getpoint “\nEnter second point of triangles:”))(Setq p3 (Getpoint “\nEnter third point of triangles:”))(Command “LINE” P1 P2 P3 “C”))(1)AutoLISP的函数要放在括号()里面,且所有括号要左右匹配;(2)AutoLISP解释程序阅读函数时,按从左向右的规则进行;(3)括号内的第一个字符串为函数名(函数运算符),函数运算符与参数之间至少要有一个空格来分开;(4)两个函数之间的和函数内的多余空格和回车是不需要的,即在一个ASCII文件中,一个程序可以占许多行;(5)函数使用标准的ASCII字符,它们不分字符的大写和小写。
但如果在程序设计中遵循一定的规则,将会有助于程序的阅读和维护。
常用习惯:·同层次括号左对齐,低层次的程序行缩入一个词;·所有的标准函数和自定义函数都用大小写结合的方法写,如:(PrinC …)(SetQ …)等。
(6)AutoLISP源程序中注释的写法:·注释用分号(;)开始,作用至行尾;例:;This entire line is a Comment(Setq area (* PI r r )) ;Compute area ofcircle·行内注释:行中处于;│…│;之间的任何文本均被忽略。
例:(Setq tmode ;│some note here│;(Getvar“tilemode”))下面举几个简单的函数实例:例1(+ 84.037 2.56)函数的意义:进行加法运算,将2.56加到84.037;例2(- 84.037 2.56)函数的意义:进行减法运算,从84.037中减去2.56;例3(* 84.037 2.56)函数的意义:进行乘法运算,将84.037与2.56相乘。
二、程序的生成、调用与执行1. 生成:(1)程序文件的扩展名是:*.lsp(2)源程序可以用任何一种文本文件制作功能产生。
比如:EDLIN,QEDIT,NOTEPAD等。
推荐使用:记事本(NOTEPAD)开始 => 程序 => 附件 => 记事本(3)将源程序文件存入自己的工作目录,并设置支持文件的路径,方法如下:Tools=>Preferences=>Files=>Support File Search Path=>Add=>Browse=>c:\*** =>确定2.调用:(1)在Command:提示下调入。
格式:Command:(Load “程序名”)例:调用C:\DLM\TRIANG.lsp,如设置文件支持路径为C:\DLM ,则调用格式为:Command:(Load “triang”)后缀可省略;如果没有设置文件支持路径,则调用格式为:Command:(Load “c:/dlm/triang”)或 Command:(Load “c:\\dlm\\triang”)。
(2)通过菜单调入:格式:Tools => Load Application => File => 选择“. lsp” 文件 => 打开=> Load3.执行:(1)直接运行函数名:程序中函数名前有“C:” 例:Command:triang(2)将函数名放在括号中运行:程序中函数名前没有“C:”例:Command:(triang)三、在命令行使用AutoLISP表达式在命令行使用AutoLISP表达式是一种很有价值的应用技术,也是调试程序的一种方法。
可以在任何AutoCAD命令要数据的提示下,使用AutoLISP表达式。
在命令行使用AutoLISP表达式的方法有两种:1.用表达式响应有关的命令提示:例:在一条齿条的节线上分出精确绘图用的点。
间距=模数 ×π× 0.5 设:模数 = 3Command:measureSelect object to measure:(选择目标)<Segment length> / Block:(* 3 pi 0.5)2.引用已经赋过值的变量:格式:Command:!A例:Command:(Setq A 2)Command:!A2四、函数的返回值每个AutoLISP函数执行之后,都会有一个返回值送回给它的调用者,这种规则是AutoLISP语言的一大特点,使用者可以在程序中利用这个返回值。
对返回值的理解和使用,是AutoLISP程序设计的重要技术。
更好地理解和主动使用这个特性,会使程序更加简洁和巧妙。
返回值:函数最后一个表达式的值。
产生自定义函数返回值有两种可能:1.自然生成:后一个表达式的结果就是所要生成的返回值。
例:(Defun Exy(pt)(List (+ 5 (Car pt))(+ 10 (Cadr pt))))(Defun C:Exp-P()……(Setq p (Exy (Getpoint “\n指定一点:”))) ;将Exy函数返回值赋给P……)程序设计优化原则:“主动、合理地利用返回值,尽量少设置变量”2.人为生成:如果程序的自然表达式序列不能在最后生成返回值,就需要在程序的最后人为生成返回值。
例如:要返回的结果在变量RV中,可以在程序的最后写上:(Setq rv rv)五、AutoLISP的数据类型1.内部/外部函数(Subrs/External Subes)特殊的数据类型,代表函数的是函数的名称,只能在AutoLISP程序内部用相关的表达式引用,能被重新赋值和夹在表达式中充当一个操作数。
(1)内部函数:AutoLISP标准函数;用户自定义函数;被用户重新定义的AutoLISP标准函数。
(2)外部函数:用ARX模式生成的,可以在AutoLISP程序内部使用的函数。
这是另一种来源的AutoLISP函数。
(3)函数的返回值:在函数结束后返回给调用者。
2.整型数:(Integers)带正负号的整数,计算范围是:-2,147,483,647至+2,147,483,648。
但在AutoLISP和AutoCAD之间传递的整数只能是16位,计算范围是:+32767至-32768.3.实型数:带正负号的包含小数点的数。
也可以用科学计数法描述。
例:199.239, 0.87E5(0.87e5)在程序中,AutoCAD至少确保小数点后14位数字精确有效,但在AutoCAD命令行显示出的实型数仅有6位有效数字。
4.字符串(Strings)字符串是由双引号引起来的一组字符。
一个常量字串的长度最大为132个字符位。
一个没有内容的一对双引号是空字串(“”)。
例:“I am a teacher.”“\nEnter first point…”其中,在字串中可出现下列控制字:\\ (右斜杠字符\) \” (双引号字符 ”)\e (Escape字符) \n (换行)\r (回车符) \nnn (代表字符的8进制码nnn)5.表(LIST)这是AutoLISP中的最常用也是最有特色的数据类型。
表是一组由空格分隔的相关值,并用圆括号将该组值括起来。
表为存储相关的数字值提供了有效方法。
例:(1.0 1.0 1.0)(”this” “that” “the other”)(1 “one”)都是有效表。