AUTOLISP函数参考.docx
《AUTOLISP函数参考.docx》由会员分享,可在线阅读,更多相关《AUTOLISP函数参考.docx(60页珍藏版)》请在冰豆网上搜索。
AUTOLISP函数参考
AUTOLISP函数参考1(10版本)
以下为十年前纯手工录入的函数参考手册,以分享给爱好LISP这方面的朋友参考!
AutoLISP提供了大量的预定义函数。
若将函数名(大小写都可)作为表中的第一个元素函数变元(若有的话)作为表中后面的元素,就可以调用那个函数。
本章按字母顺序列出AutoLISP所有基本函数。
用户会发现其中许多函数都是标准函数,可在LISP程序设计语言中找到。
还有一些函数是由AutoCAD提供的且专用于交互图形环境。
1FLATLAND系统变量--与老版本的兼容性
AutoLISP版本10支持AutoCAD的最新增强型三维图形功能,则时继续保证与AutoCAD
老版本的兼容性。
FLATLAND系统变量就是用来控制该兼容性的。
当FLATLAND为零时,实
现新三维功能;否则各函数操作与AutoLISP版本9的一样。
FLATLANDR的设置作用于下列
AutoLISP函数:
DISTANCE GRREAD POLAR
ENTGET INITGET TBLNEXT
GETDIST INTERS TBLSEARCH
GETPOINT OSNAP
在各函数说明中,已注明FLATLAND对上述函数起作用的方式。
2(+<数><数>...)
这个函数返回所有<数>的总和。
其中的<数>可以是整型或实型的。
如果所有的<数>
都是整数,其结果也是整数;如果其中有一个是实型的,那么其它整型数将转换为实型
数结果将是实型数。
例如:
(+12) returns3
(+1234.5) returns10.5
(+1234.0) returns10.0
3(-<数><数> ...)
这个函数把第一个<数>减去第二个<数>,返回它们的差。
如果给定的<数>多于两个,
那么将第一个<数>减去其后所有数之和,并返回最后的结果。
如果只给了一个<数>,即返
回零减这个<数>的结果。
此函数中的<数>可以是实型或整型,按标准规则进行类型转换。
例如:
(-5040) returns10
(-5040.02) returns8.0
(-5040.02.5)returns7.5
(-8) returns-8
4(*<数><数>...)
这个函数返回所有<数>的乘积.其中<数>可以是实型或整型.按标准规则进行类型转换
例如:
(*23) returns6
(*234.0) returns24.0
(*3-4.5) returns-13.5
5(/<数><数>...)
这个函数将第一个<数>除以第二个<数>,返回其商.如果给出的<数>多于两个,则把第
一个<数>除以其它所有<数>的乘积,并返回最后的商.此函数中的<数>可以是实型或整型,
类型的转换按标准规则进行.例如:
(/1002) returns50
(/1002.0) returns50.0
(/10020.02) returns2.5
(/135360) returns0
(/135360.0) returns0.375
6(=<原子><原子>...)
这是"等于"关系函数.如果所有指定的<原子>在数值上是相等的,则返回T;否则返回
空(nil).这个函数适用于数和字符串.例如:
(=44.0) returnsT
(=20388) returnsnil
(=2.42.42.4)returnsT
(=499499500)returnsnil
(="me""me") returnsT
(="me""you") returnsnil
7(/=<原子1><原子2>...)
这是一个"不等于"关系函数.如果<原子1>数值上不等于<原子2>,则返回T;否则返回
nil.如果提供的<变元>多于两个,则函数无定义.例如:
(/=1020) returnsT
(/="you""you")returnsnil
(/=5.435.44) returnsT
8(<<原子><原子>...)
这是一个"小于"关系函数.如果第一个<原子>值小于第二个,则返回T;否则返回nil.
如果所给的<原子>多于两个,那么当每个<原子>都小于其右边的<原子>时,则返回T.
例如:
(<1020) returnsT
(<"b""c") returnsT
(<35733.2) returnsnil
(<2388) returnsT
(<2344) returnsnil
9 (<=<原子><原子>...)
这是一个"小于或等于"关系函数.如果第一个<原子>值大于或等于第二个原子,则返
回T;否则返回nil.如果所给的<原子>多于两个,则当每一个<原子>都小于或等于其右边
的<原子>时,才返回T.例如:
(<=1020) returnsT
(<="b""b") returnsT
(<=35733.2) returnsnil
(<=299) returnsT
(<=2945) returnsnil
10 (><原子><原子>...)
这是一个"大于"关系函数.如果第一个<原子>值大于第二个,则返回T;否则返回nil.
若所给定的<原子>多于两个,当每个<原子>都大于其右边的<原子>时,则返回T.例如:
(>12017) returnsT
(>"c""b") returnsT
(>3.51792) returnsnil
(>7742) returnsT
(>7744) returnsnil
11 (>=<原子><原子>...)
这是一个"大于或等于"关系函数.如果第一个<原子>值大于或等于第二个,则返回T;
否则返回nil.如果给出的<原子>多于两个,当每一个<原子>都大于或等于其右边的<原子>
时才返回T.例如:
(>=12017) returnsT
(>="c""c") returnsT
(>=3.51792) returnsnil
(>=7744) returnsT
(>=7749) returnsnil
12 (~<数>)
这个函数返回<数>的按位非(NOT),即补码.<数>必须为整数.例如:
(~3) returns-4
(~100) returns-101
(~-4) returns3
13 (1+<数>)
这个函数返回<数>加1(增量)的结果.<数>可以是实数或整数.例如:
(1+5) returns6
(1+-17.5) returns-16.5
14 (1-<数>)
这个函数返回<数>加1(增量)的结果.<数>可以是实型或整型数.例如:
(1-5) returns4
(1--17.5) returns-18.5
15 (abs<数>)
这个函数返回<数>的绝对值.<数>可以是实型数或整型的.例如:
(abs100) returns100
(abs-100) returns100
(abs-99.25) returns99.25
16 (and<表达式>...)
这个函数返回所列出的表达式的逻辑"与"(AND).如果其中任何一个表达式的结果等
于nil,则停止求值并返回;否则返回T.例如,对于下面给定的赋值:
(setqa103)
(setqbnil)
(setqc"string")
那么
(and1.4ac) returnsT
(and1.4abc)returnsnil
17 (angle<点1><点2>)
这个函数返回从UCS坐标系统点到UCS坐标系统的一直线的角度,该角度从
当前作图平面的X轴开始反时针方向计算(以弧度为单位).如果提供了三维点,则将其投
影至当前作图平面.例如:
(angle'(1.01.0)'(1.04.0)) return1.5708
(angle'(5.01.33)'(2.41.33)) return3.14159
18 (angtos<角>[<方式>[<精度>]])
这个函数处理<角>(实型数,单位为弧度),返回一个对应于<角>的字符串.该字符串是
根据所设置的<方式>、<精度>及AutoCADDIMZIN变量,对<角>编辑后所得.其中<方式>变
元是一个整型数,它指示完成什么类型的编辑,如下所示:
ANGTOS方式 编辑格式
-----------------------------------------
0 度
1 度/分/秒
2 梯度
3 弧度
4 测地单位
其中<精度>变元是一个整型数,它选择所需要的十进制精度的小数位数.<方式>和<精度>
与AutoCAD系统变量AUNITS和AUPREC相对应,如果没有指明<方式>和<精度>,则使用AUNITS
和AUPREC的当前值.
例如,已知DIMZIN=0和下面的赋值:
(setqpt1'(5.01.33))
(setqpt2'(2.41.33))
(setqa (anglept1pt2))
那么,
(angtosa00) returns"180"
(angtosa04) returns"180.0000"
(angtosa14) returns"180d0'0""
(angtosa34) returns"3.1416r"
(angtosa42) returns"W"
ANGTOS可接受一负<角>变元,但总是先将其化为相当的正值(在0~2π弧度间),
然后再执行指定的变换.例如:
(angtos0.78539804) returns"45.0000"
(angtos-0.78539804)returns"315.0000"
19 (append<表达式>...)
这个函数将所有的表(<表达式>)放置在一起,作为一个表.例如:
(append'(ab)'(cd)) returns(abcd)
(append'((a)(b))'((c)(d)))returns((a)(b)(c)(d))
APPEND需要的变元必须是表.
20 (apply<函数><表>)
它执行由<函数>给定的函数,<表>指定了函数的变元.例如:
(apply'+'(123)) return6
(apply'strcat'("a""b""c")) return"abc"
APPLY既可用于内部函数(子程序),也可用于用户定义的函数(即那些用DEFUN或者
LAMBDA产生的函数).
21 (ascii<字符串>)
这个函数返回<字符串>中第一个字符的ASCII字符码(整数).它和BASIC语言中的ASC函
数相似.例如:
(ascii"A") return65
(ascii"a") return97
(ascii"BIG") return66
22 (assoc<项><关联表>)
这个函数在<关联表中>以<项>作为关键字进行搜索,返回<关联表>中对应元素的值.如
果在关联表中找不到作为关键字的<项>,ASSOC返回nil.例如,假设表"al"定义为:
((namebox)(width3)(size4.7263)(depth5))
那么,
(assoc'sizea1) returns(size4.7263)
(assoc'weighta1) returnsnil
关联表常用于储存数据,这些数据可通过"关键字"存取.它和程序设计语言的数组或结构
相似.本章后面描述的SUBST函数提供了一种方便的方法可把关联表中与关键字关联的值
进行替换.
23 (atan<数1>[<数2>])
如果没有给出<数2>,ATAN将返回<数1>的反正切值,其单位为弧度.<数1>可以为负值;
返回的角度的范围为:
-pi到+pi弧度.例如:
(atan0.5) returns0.463648
(atan1.0) returns0.785398
(atan-1.0) returns-0.785398
(angtos(atan-1.0)04)returns"315.0000"
如果给出<数1>和<数2>,则返回<数1>/<数2>的反正切值,其单位为弧度.如果<数2>为零,
即返回的角度值为1.570796弧度(90度或-90度),这取决于<数1>是正数还是负数.例如:
(atan2.03.0) returns0.588003
(angtos(atan2.03.0)04) returns"33.6901"
(atan2.0-3.0) returns2.55359
(angtos(atan2.0-3.0)04) returns"146.3099"
(atan-2.03.0) returns-0.588003
(atan-2.0-3.0) returns-2.55359
(atan1.00.0) returns1.5708
(angtos(atan1.00.0)04) returns"90.0000"
(atan-0.50.0) returns-1.5708
(angtos(atan-0.50.0)02) returns"270.00"
24 (atof<字符串>)
这个函数将字符串换为实型数.并返回此值.例如:
(atof"97.1") returns97.1
(atof"3") returns3.0
25 (atoi<字符串>)
这个函数将字符串转换为整数,并返回此值.例如:
(atoi"97") returns97
(atoi"3") returns3
(atoi"3.9") returns3
26 (atom<项>)
如果<项>是一个表,此函数返回nil;否则返回T.任何不是表的东西都被认为是一个原
子(atom).例如,对于以下的赋值:
(setqa'(xyz))
(setqb'a)
那么,
(atom'a) returnsT
(atom a) returnsnil
(atom'b) returnsT
(atom b) returnsT
(atom'(abc)) returnsnil
有些LISP对ATOM的解释有差异,因此在使用互相移植的程序时要加以注意.
27 (Boole<函数><整型1><整型2>)
这是一个通用的位方式boolean函数.其中是一个0到15之间的整数,它表示16种
可能的双变量Boolean函数中的一种.后面的整型变元根据这个函数和下列的真值表进行
方式(即逻辑)组合:
<整数1> <整数2> 位
-----------------------------------------------------
0 0 8
0 1 4
1 0 2
1 1 1
<整数1>的每一位和<整数2>的相应位配对,选择真值表中的一水平行.其结果位是0或1,
将取决于对应真值表中这一行中位的设置情况.如果中位的设置适当,结果
位就为1,否则结果位为0.
的一些值等效于标准的Boolean操作:
AND,OR,XOR和NOT,如下所示:
func 操作 结果位为1时的条件
--------------------------------------------------------
1 AND 两个输入位都为1
6 XOR 只有其中一个输入位为1
7 OR 有一个或两个输入位为1
8 NOT 两个输入位都为0(即补码)
例如:
(Boole1125)
指定了数12和5的逻辑"与"(AND).其结果为4.同样:
(Boole665)
指定了数6和5的逻辑"异或"(XOR),返回结果为3
可以使用的其他值来完成其它的Boolean操作,这些操作可能没有标准名称.例
如,如果为4,那么当<整数2>中的位是1而<整数1>中的相应位是零时,其结果位才为
1.因此:
(Boole4314)
将返回结果12.
28 (boundp<原子>)
如果<原子>有一个值约束它(不管值的范围),那么此函数返回T;若没有值约束<原子>
(或受nil约束),则返回nil.例如,对于下列赋值:
(setqa2)
(setqbnil)
那么:
(boundp'a) returnsT
(boundp'b) returnsnil
29 caar,cadr,cddr,cadar等等
AutoLISP支持CAR和CDR的连接,其深度可达四级.例如,已知赋值:
(setqx'((ab)cd))
那么:
(caarx) isequivalentto (car(carx)) returning a
(cdarx) isequivalentto (cdr(carx)) returning (b)
(cadarx)isequivalentto (car(cdr(carx)))returning b
(cadrx) isequivalentto (car(cdrx)) returning c
(cddrx) isequivalentto (cdr(cdrx)) returning (d)
(caddrx)isequivalentto (car(cdr(cdrx)))returning d
在AutoLISP中常使用CADR来取得二维点或三维点的Y坐标(即由两个或三个实数组成
的表中第二个元素).同样,使用CADDR可取得三维点的Z坐标.例如,已知赋值:
(setqpt2'(5.251.0)) (a2Dpoint)
(setqpt3'(5.251.03.0))(a3Dpoint)
那么:
(carpt2) returns5.25
(cadrpt2) returns1.0
(caddrpt2) returnsnil
(carpt3) returns5.25
(cadrpt3) returns1.0
(ca