AUTO LISP函数参考

AUTO LISP函数参考
AUTO LISP函数参考

AUTO LISP函数参考1(10版本)

以下为十年前纯手工录入的函数参考手册,以分享给爱好LISP这方面的朋友参考!

AutoLISP提供了大量的预定义函数。若将函数名(大小写都可)作为表中的第一个元素函数变元(若有的话)作为表中后面的元素,就可以调用那个函数。本章按字母顺序列出AutoLISP所有基本函数。用户会发现其中许多函数都是标准函数,可在LISP程序设计语言中找到。还有一些函数是由 AutoCAD提供的且专用于交互图形环境。

1 FLATLAND 系统变量--与老版本的兼容性

AutoLISP版本10支持AutoCAD的最新增强型三维图形功能,则时继续保证与AutoCAD

老版本的兼容性。FLATLAND系统变量就是用来控制该兼容性的。当FLATLAND为零时,实

现新三维功能;否则各函数操作与AutoLISP版本9的一样。FLATLANDR的设置作用于下列

AutoLISP函数:

DISTANCE GRREAD POLAR

ENTGET INITGET TBLNEXT

GETDIST INTERS TBLSEARCH

GETPOINT OSNAP

在各函数说明中,已注明FLATLAND对上述函数起作用的方式。

2 ( + <数> <数> ...)

这个函数返回所有<数>的总和。其中的<数>可以是整型或实型的。如果所有的<数>

都是整数,其结果也是整数;如果其中有一个是实型的,那么其它整型数将转换为实型

数结果将是实型数。例如:

(+ 1 2) returns 3

(+ 1 2 3 4.5) returns 10.5

(+ 1 2 3 4.0) returns 10.0

3 ( - <数> <数> ...)

这个函数把第一个<数>减去第二个<数>,返回它们的差。如果给定的<数>多于两个,

那么将第一个<数>减去其后所有数之和,并返回最后的结果。如果只给了一个<数>,即返

回零减这个<数>的结果。此函数中的<数>可以是实型或整型,按标准规则进行类型转换。

例如:

(- 50 40) returns 10

(- 50 40.0 2) returns 8.0

(- 50 40.0 2.5) returns 7.5

(- 8) returns -8

4 (* <数> <数>...)

这个函数返回所有<数>的乘积.其中<数>可以是实型或整型.按标准规则进行类型转换

例如:

(* 2 3) returns 6

(* 2 3 4.0) returns 24.0

(* 3 -4.5) returns -13.5

5 (/ <数> <数>...)

这个函数将第一个<数>除以第二个<数>,返回其商.如果给出的<数>多于两个,则把第

一个<数>除以其它所有<数>的乘积,并返回最后的商.此函数中的<数>可以是实型或整型,

类型的转换按标准规则进行.例如:

(/ 100 2) returns 50

(/ 100 2.0) returns 50.0

(/ 100 20.0 2) returns 2.5

(/ 135 360) returns 0

(/ 135 360.0) returns 0.375

6 (= <原子> <原子>...)

这是"等于"关系函数.如果所有指定的<原子>在数值上是相等的,则返回T;

否则返回

空(nil).这个函数适用于数和字符串.例如:

(= 4 4.0) returns T

(= 20 388) returns nil

(= 2.4 2.4 2.4) returns T

(= 499 499 500) returns nil

(= "me" "me") returns T

(= "me" "you") returns nil

7 (/= <原子1> <原子2>...)

这是一个"不等于"关系函数.如果<原子1>数值上不等于<原子2>,则返回T;否则返回

nil.如果提供的<变元>多于两个,则函数无定义.例如:

(/= 10 20) returns T

(/= "you" "you") returns nil

(/= 5.43 5.44) returns T

8 (< <原子> <原子>...)

这是一个"小于"关系函数.如果第一个<原子>值小于第二个,则返回T;否则

返回nil.

如果所给的<原子>多于两个,那么当每个<原子>都小于其右边的<原子>时,则返回T.

例如:

(< 10 20) returns T

(< "b" "c") returns T

(< 357 33.2) returns nil

(< 2 3 88) returns T

(< 2 3 4 4) returns nil

9 (<= <原子> <原子>...)

这是一个"小于或等于"关系函数.如果第一个<原子>值大于或等于第二个原子,则返

回T;否则返回nil.如果所给的<原子>多于两个,则当每一个<原子>都小于或等于其右边

的<原子>时,才返回T.例如:

(<= 10 20) returns T

(<= "b" "b") returns T

(<= 357 33.2) returns nil

(<= 2 9 9) returns T

(<= 2 9 4 5) returns nil

10 (> <原子> <原子>...)

这是一个"大于"关系函数.如果第一个<原子>值大于第二个,则返回T;否则返回nil.

若所给定的<原子>多于两个,当每个<原子>都大于其右边的<原子>时,则返回T. 例如:

(> 120 17) returns T

(> "c" "b") returns T

(> 3.5 1792) returns nil

(> 77 4 2) returns T

(> 77 4 4) returns nil

11 (>= <原子> <原子>...)

这是一个"大于或等于"关系函数.如果第一个<原子>值大于或等于第二个,则返回T;

否则返回nil.如果给出的<原子>多于两个,当每一个<原子>都大于或等于其右边的<原子>

时才返回T. 例如:

(>= 120 17) returns T

(>= "c" "c") returns T

(>= 3.5 1792) returns nil

(>= 77 4 4) returns T

(>= 77 4 9) returns nil

12 (~ <数>)

这个函数返回<数>的按位非(NOT),即补码.<数>必须为整数.例如:

(~ 3) returns -4

(~ 100) returns -101

(~ -4) returns 3

13 (1+ <数>)

这个函数返回<数>加1(增量)的结果. <数>可以是实数或整数. 例如:

(1+ 5) returns 6

(1+ -17.5) returns -16.5

14 (1- <数>)

这个函数返回<数>加1(增量)的结果. <数>可以是实型或整型数. 例如:

(1- 5) returns 4

(1- -17.5) returns -18.5

15 (abs <数>)

这个函数返回<数>的绝对值. <数>可以是实型数或整型的. 例如:

(abs 100) returns 100

(abs -100) returns 100

(abs -99.25) returns 99.25

16 (and <表达式>...)

这个函数返回所列出的表达式的逻辑"与"(AND). 如果其中任何一个表达式的结果等

于nil,则停止求值并返回;否则返回T. 例如,对于下面给定的赋值:

(setq a 103)

(setq b nil)

(setq c "string")

那么

(and 1.4 a c) returns T

(and 1.4 a b c) returns nil

17 (angle <点1> <点2>)

这个函数返回从UCS坐标系统点到UCS坐标系统的一直线的角度,该角度从

当前作图平面的X轴开始反时针方向计算(以弧度为单位). 如果提供了三维点,则将其投

影至当前作图平面. 例如:

(angle '(1.0 1.0) '(1.0 4.0)) return 1.5708

(angle '(5.0 1.33) '(2.4 1.33)) return 3.14159

18 (angtos <角> [ <方式> [ <精度> ] ] )

这个函数处理<角>(实型数,单位为弧度),返回一个对应于<角>的字符串.该字符串是

根据所设置的<方式>、<精度>及AutoCAD DIMZIN变量,对<角>编辑后所得. 其中<方式>变

元是一个整型数,它指示完成什么类型的编辑,如下所示:

ANGTOS方式编辑格式

-----------------------------------------

0 度

1 度/分/秒

2 梯度

3 弧度

4 测地单位

其中<精度>变元是一个整型数,它选择所需要的十进制精度的小数位数. <方式>和<精度>

与AutoCAD系统变量AUNITS和AUPREC相对应,如果没有指明<方式>和<精度>,则使用AUNITS

和AUPREC的当前值.

例如,已知DIMZIN=0和下面的赋值:

(setq pt1 '(5.0 1.33))

(setq pt2 '(2.4 1.33))

(setq a (angle pt1 pt2))

那么,

(angtos a 0 0) returns "180"

(angtos a 0 4) returns "180.0000"

(angtos a 1 4) returns "180d0'0" "

(angtos a 3 4) returns "3.1416r"

(angtos a 4 2) returns "W"

ANGTOS可接受一负<角>变元,但总是先将其化为相当的正值(在0 ~ 2π弧度间),

然后再执行指定的变换. 例如:

(angtos 0.785398 0 4) returns "45.0000"

(angtos -0.785398 0 4) returns "315.0000"

19 (append <表达式>...)

这个函数将所有的表( <表达式> )放置在一起,作为一个表. 例如:

(append '(a b) '(c d)) returns (a b c d)

(append '((a)(b)) '((c)(d))) returns ((a)(b)(c)(d))

APPEND需要的变元必须是表.

20 (apply <函数> <表>)

它执行由<函数>给定的函数,<表>指定了函数的变元. 例如:

(apply '+ '(1 2 3)) return 6

(apply 'strcat '("a" "b" "c")) return "abc"

APPLY既可用于内部函数(子程序),也可用于用户定义的函数(即那些用DEFUN或者

LAMBDA产生的函数).

21 (ascii <字符串> )

这个函数返回<字符串>中第一个字符的ASCII字符码(整数).它和BASIC语言中的ASC函

数相似. 例如:

(ascii "A") return 65

(ascii "a") return 97

(ascii "BIG") return 66

22 (assoc <项> <关联表> )

这个函数在<关联表中>以<项>作为关键字进行搜索,返回<关联表>中对应元素的值.如

果在关联表中找不到作为关键字的<项>,ASSOC返回nil. 例如,假设表"al"定义为:

(( name box) (width 3) (size 4.7263) (depth 5) )

那么,

(assoc 'size a1) returns (size 4.7263)

(assoc 'weight a1) returns nil

关联表常用于储存数据,这些数据可通过"关键字"存取.它和程序设计语言的数组或结构

相似.本章后面描述的SUBST函数提供了一种方便的方法可把关联表中与关键字关联的值

进行替换.

23 (atan <数1> [<数2>] )

如果没有给出<数2>,ATAN将返回<数1>的反正切值,其单位为弧度.<数1>可以为负值;

返回的角度的范围为:-pi 到 +pi弧度. 例如:

(atan 0.5) returns 0.463648

(atan 1.0) returns 0.785398

(atan -1.0) returns -0.785398

(angtos (atan -1.0) 0 4) returns "315.0000"

如果给出<数1>和<数2>,则返回<数1>/<数2>的反正切值,其单位为弧度.如果<数2>为零,

即返回的角度值为1.570796弧度(90度或-90度),这取决于<数1>是正数还是负数.例如:

(atan 2.0 3.0) returns 0.588003

(angtos (atan 2.0 3.0) 0 4) returns "33.6901"

(atan 2.0 -3.0) returns 2.55359

(angtos (atan 2.0 -3.0) 0 4) returns "146.3099"

(atan -2.0 3.0) returns -0.588003

(atan -2.0 -3.0) returns -2.55359

(atan 1.0 0.0) returns 1.5708

(angtos (atan 1.0 0.0) 0 4) returns "90.0000"

(atan -0.5 0.0) returns -1.5708

(angtos (atan -0.5 0.0) 0 2) returns "270.00"

24 (atof <字符串> )

这个函数将字符串换为实型数. 并返回此值. 例如:

(atof "97.1") returns 97.1

(atof "3") returns 3.0

25 (atoi <字符串> )

这个函数将字符串转换为整数,并返回此值. 例如:

(atoi "97") returns 97

(atoi "3") returns 3

(atoi "3.9") returns 3

26 (atom <项> )

如果<项>是一个表,此函数返回nil;否则返回T. 任何不是表的东西都被认为是一个原

子(atom). 例如,对于以下的赋值:

(setq a '(x y z))

(setq b 'a)

那么,

(atom 'a) returns T

(atom a) returns nil

(atom 'b) returns T

(atom b) returns T

(atom '(a b c)) returns nil

有些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(即补码)

例如:

(Boole 1 12 5)

指定了数12和5的逻辑"与"(AND).其结果为4.同样:

(Boole 6 6 5)

指定了数6和5的逻辑"异或"(XOR),返回结果为3

可以使用的其他值来完成其它的Boolean操作,这些操作可能没有标

准名称.例

如,如果为4,那么当<整数2>中的位是1而<整数1>中的相应位是零时,其结果位才为

1. 因此:

(Boole 4 3 14)

将返回结果12.

28 (boundp <原子> )

如果<原子>有一个值约束它(不管值的范围),那么此函数返回T;若没有值约

束<原子>

(或受nil约束),则返回nil. 例如,对于下列赋值:

(setq a 2)

(setq b nil)

那么:

(boundp 'a) returns T

(boundp 'b) returns nil

29 caar, cadr, cddr, cadar等等

AutoLISP支持CAR和CDR的连接,其深度可达四级. 例如,已知赋值:

(setq x '((a b) c d))

那么:

(caar x) is equivalent to (car (car x)) returning a (cdar x) is equivalent to (cdr (car x)) returning (b) (cadar x) is equivalent to (car (cdr (car x))) returning b (cadr x) is equivalent to (car (cdr x)) returning c (cddr x) is equivalent to (cdr (cdr x)) returning (d) (caddr x) is equivalent to (car (cdr (cdr x))) returning d 在AutoLISP中常使用CADR来取得二维点或三维点的Y坐标(即由两个或三个实数组成

的表中第二个元素). 同样,使用CADDR可取得三维点的Z坐标. 例如,已知赋值:

(setq pt2 '(5.25 1.0)) (a 2D point)

(setq pt3 '(5.25 1.0 3.0)) (a 3D point)

那么:

(car pt2) returns 5.25

(cadr pt2) returns 1.0

(caddr pt2) returns nil

(car pt3) returns 5.25

(cadr pt3) returns 1.0

(caddr pt3) returns 3.0

30 (car <表> )

这个函数返回<表>的第一个元素.如果<表>是空的,则返回nil. 例如:

(car '(a b c)) returns a

(car '((a b) c)) returns (a b)

(car '( )) returns nil

31 (cdr <表> )

这个函数返回除<表>中第一个元素以外的所有元素的表. 如果<表>是空的,则返回nil.

例如:

(cdr '(a b c)) returns (b c)

(cdr '((a b) c)) returns (c)

(cdr '()) returns nil

如果<表>变元是一个点对,即一对中间用点隔开的元素表(见下面的CONS),CDR 则返回没

有表括号的第二个元素. 例如:

(cdr '(a . b)) returns b

(cdr '(1 . "TEXT")) returns "TEXT"

32 (chr <表> )

这个函数把代表ASCII码的整型数转换为只有一个字符的字符串,并返回此结果(类似于

BASIC中的CHR$函数). 例如:

(chr 65) returns "A"

(chr 66) returns "B"

(chr 97) returns "a"

33 (close <文件描述符> )

这个函数关闭指定的文件,返回nil. 其中<文件描述符>是从调用OPEN函数得到的. 在

CLOSE函数执行之后,此文件描述符就不再有效.

例如,假设X是一个有效的打开文件的描述符.

(close x)

将关闭与X相关联的文件,返回nil.

34 (command <变元>...)

这个函数在AutoLISP内部执行AutoCAD命令,它总是返回nil. 其中<变元>代表AutoCAD

的命令及其子命令;对每一个变元都作处理,然后作为对相应提示的响应送给AutoCAD.命

令名和选择项作为字符串传送,二维点作为两个实数的表传送,三维点作为三个实数的表

传送.只有当AutoCAD发出"Command:"提示时,命令名才被AutoCAD识别.例如: (setq pt1 '(1.45 3.23))

(setq pt2 (getpoint "Enter a point: "))

(command "line" pt1 pt2)

(command "")

假设AutoCAD的"Command:"提示已出现,那么以上的表达式将为点"pt1"置值,提示用户输

入点"pt2",执行AutoCAD的LINE命令,用两点作为此命令的输入.COMMAND的变元可以是字

符串,实数,整数或点,这要看AutoCAD命令执行时需要什么.一个空字符串("")等效于在

键盘上打一个空格.调用COMMAND而不加任何变元等效于在键盘上按CTRL-C键,它将取消

AutoCAD的大多数命令.

如果AutoCAD系统变量CMDECHO(可通过SETVAR和GETVAR存取)被置为零,那么从COMMAND

函数中执行的命令将不会在屏幕上显示.COMMAND函数是在AutoLISP中调用AutoCAD命令的

一种基本方法.

在COMMAND函数内不能使用GETxxx用户输入函数

(GETANGLE,GETSTRING,GETINT,GETPOINT

等).如果试图用GETxxx函数,则会显示出错信息:"error: AutoCAD rejected function"

[出错:AutoCAD拒绝执行函数],并中止函数的执行.如果需要提示,则应提前发出GETxxx函

数,如上例所示,或把它们放在几个连续的COMMAND函数调用中间.

AutoCAD的DTEXT和SKETCH命令均能直接从键盘和数字化仪读入,因此不能和AutoLISP的

COMMAND函数一起使用.同样,COMMAND函数不能用于执行PLOT,PRPLOT或SCRIPT 命令.

为用户输入暂停

如果在执行AutoCAD命令过程中,预定义符号PAUSE是作为COMMAND函数的一个变元出现

时,则会暂停COMMAND函数的进程,等待用户直接输入或拖曳输入.这类似于在菜单中具有

暂停功能的反斜杠.

若在暂停COMMAND函数时使用一条透明命令,COMMAND函数继续暂停.这样,当暂停COMMAND

时用户可随心所欲地Z00M(缩放目标)或PAN(平移图纸).当AutoCAD接收到有效输入且不是

透明命令时,则返回COMMAND进程并继续往下执行. 例如

(Command "circle" "5,5" pause "line" "5,5" "7,5" "")

先执行circle命令,置圆心为(5,5),然后暂停以便屏幕上拖曳圆的半径.当拾取了所要

的点(或键入所要的半径值)后,函数继续执行,画一条从5,5到7,5的直线.

AutoLISP的PAUSE不能暂停菜单输入.如果在COMMAND函数暂停时,激活了一个菜单项,

那么菜单项中的输入值会满足PAUSE的要求.如果还要暂停菜单项,则必须在菜单项中用一

个反斜杠.一旦发现了有效输入,AutoCAD将会继续执行COMMAND函数和菜单项.

注意:

1. PAUSE符号当前是由一个反斜杠组成的字串.用户可直接使用一个反斜杠而不用

PAUSE符号;但若用一个菜单项调用COMMAND函数,则反斜杠不会暂停COMMAND函数,而暂停正在读入的菜单项. 同样,暂停机制在AutoLISP的将来版本中可能会有一个不同的触发值. 因此我们建议使用PAUSE符号,而不宜显式使用反斜杠.

2. 当一条命令正在等待输入正文串或属性值时出现了PAUSE,那么只有

在系统变量

TEXTEVAL不为零时,AutoCAD才为输入暂停.否则,认为PAUSE符号(一个反斜杠) 的值等效于正文输入,且不为输入暂停.

3. 当COMMAND函数进程被暂停时,该函数仍处于"激活"态,所以用户此时不可键入

另一个AutoLISP表达式进行求值.

35 (cond ( <测试1> <结果1> ) ...)

这个函数接受任意数目的表作为变元.它计算每一个表的第一项(按提供的表的顺序),

直到有一项的返回值不为nil为止.然后它计算测试成功的那个子表中后面的那些表达式,

返回子表中最后那个表达式的值.如果子表中只有一个表达式(即没有<结果>项);则返回

<测试>表达式的值.COND是AutoLISP中最基本的条件函数.

例如,下列的函数使用COND完成绝对值的计算:

(cond ( (minusp a) (- a) )

( t a )

)

如果"a"的值为-10,它将会返回10.如上所示,COND可以作为"Case"类型的函数.它常常

用T作为缺省的<测试>表达式.下面是另一个简单的例子.在符号S中用户响应的字符串是

已知的,该函数测试用户的响应,若用户响应是Y或y,则返回1;若响应是N或n,则返回0;否

则返回nil.

(cond (( = s "Y") 1)

(( = s "y") 1)

(( = s "N") 0)

(( = s "n") 0)

(t nil)

)

36 (Cons <新的第一个元素> <表> )

这是一个基本的表构造函数.它将一个元素<新的第一个元素>加入<表>的开头,并返回

加入之后的表. 例如:

(cons 'a '(b c d)) returns (a b c d)

(cons '(a) '(b c d)) returns ((a) b c d)

注意,第一个元素可以是原子或是表.

CONS也可在<表>的变元位置上接受一个原子,用以构造前面讲过的点对表,即中间用

点隔开的一对元素的结构.当显示这种结构时,AutoLISP在第一个和第二个元素之间打印

出一个点.这种结构占的存储空间比普通表小,使用CDR函数可返回第二个原子. 如:

(cons 'a 2) returns (a . 2)

(car (cons 'a 2)) returns a

(cdr (cons 'a 2)) returns 2

点对表是一种特殊的表,某些只处理常规表的函数不能把它当作变元接受. AUTO LISP函数参考2(10版本)

37 (cos <角度> )

这个函数返回<角度>的余弦值,这里的<角度>以弧度表示. 例如:

(cos 0.0) returns 1.0

(cos pi) returns -1.0

38 (defun <符号> <变元表> <表达式>...)

DEFUN以<符号>作为函数名定义一个函数(注意,函数名是自动用引号引起来,不需要显

式引起来). 在函数名之后是一个变元表(也可为空表),表中可以任选地跟一个斜杠( / )

和函数的一个或多个局部符号名. 在斜杠和第一个局部符号、最后一个变元(如果有的话

)之间至少用一个空格隔开.如果没有变元或局部符号,那么在函数名后必须有一对空括号.

例如:

(defun myfunc (x y) ...) (函数有两个变元)

(defun myfunc (/ a b) ...) (函数有两个局部符号)

(defun myfunc (x / temp)...) (一个变元和一个局部符号)

(defun myfunc ( )...) (没有变元和局部符号)

在变元表和局部符号后面是一个或多个表达式,它们在函数执行时进行计算.

DEFUN函数本身返回被定义的函数名称.当这个函数被调用时,将计算它的变元,变元由

变元变量约束.局部变量可以用于函数的内部,而不改变它们在外部的同名变量值.函数将

返回最后表达式的计算结果.所有前面的表达式只有辅助效果.DEFUN函数本身

返回所定义

的函数名. 例如:

(defun add10 (x)

(+ 10 x)

) return add10

(add10 5) return 15

(add10 -7.4) return 2.6

(defun dots(x y / temp)

(setq temp(strcat x "..."))

(strcat temp y)

) returns dots

(dots "a" "b") returns "a...b"

(dots "from" "to") returns "from...to"

不准将内部函数名或内部符号名当作<符号>使用,因为这样做会使得内部函数不可调用

函数库和自动装入

函数定义可以存储在文件中,再用AutoLISP的LOAD函数装入,这将在本章后面讲述,如果

文件acad.lsp存在,AutoLISP将在每次进入AutoCAD图形编辑时自动把此文件装入;利用这

个特性可以建立一个用户函数库,保证每次使用时它们总是存在.

任何".lsp"库文件也可包括除DEFUN函数以外的表达式.会由于装入一个文件会引起对

这些表达式的求值,因此一旦文件装入,用户在文件中的函数调用自动执行.但是,acad.lsp

的装入是在AutoCAD图形编辑程序完全启动之前完成的,所以在acad.lsp文件中(在DEFUN外

)不准使用COMMAND函数.为了使用户的"acad.lsp"文件在装入时能自动执行一

命令系列,该

文件应包含有特殊函数名"S::STARTUP"的DEFUN定义).详见后.

C: XXX函数---增加AutoCAD增加新的命令,这些命令是用定义的函数完成的.若要能象

AutoCAD命令一样使用,这些函数必须要遵守下列规则:

1. 函数名的形式必须为"C: XXX",这里所有的字母都是大写的. "C: "部分必须总是

出现在名称中;"XXX"部分可以是你选择的命令名,只要它不和AutoCAD

的内部命令

或外部命令的名称重复就可以.

2. 函数的定义必须带空变元表(但允许有局部符号).

例如,下面定义的一个函数是用多义线画一个正方形:

(defun C:PSQUARE (/ pt1 pt2 pt3 pt4 len)

(setq pt1 (getpoint "Lower left corner:"))

(setq len (getdist pt1 "Length of one side:"))

(setq pt2 (polar pt1 0.0 len))

(setq pt3 (polar pt2 (/ pi 2.0) len))

(setq pt4 (polar pt3 pi len))

(command "PLINE" pt1 pt2 pt3 pt4 "c")

)

以这种方法定义的函数只需在出现AutoCAD的"Command: "提示符时通过输入函数名的

"XXX"部分就能调用.如"XXX"不是一个已知的AutoCAD命令,AutoCAD就试图调用AutoLISP函

数,并且不带任何参数.对于例子C:PSQUARE函数,对话将如形式:

Command: PSQUARE

Lower left Corner: (输入一点)

Length of one side: (输入一条边的长度)

然后这函数就调用AutoCAD的PLINE命令,并回答它的输入提示,画出所要的正方形.

用这种方法为AutoCAD增加命令是AutoLISP特有的一个高级功能.一旦定义了新的

命令,它可以使用AutoLISP提供的所有功能.实际调用新命令时不需要用户用括号将命令

名括起来,因此,使用这种由AutoLISP实现的命令和其它AutoCAD的内部命令没有什么两样.

S::XXXX函数---自动执行

在编辑期间,某些情况下可以自动调用用户定义的,且以"S::"开头命名的函数.应把

函数名前缀"S::"看做是"保留的".为了避免与无关函数发生冲突,除了这些特殊函数以外,

禁止使用前缀.

目前,"S::STARTUP"是唯一能自动执行的函数.一旦它被定义,在AutoCAD

绘图编辑进

入产生新图或编辑一旧图时,就自动调用S::STARTUP函数(无变元).因此,在"acad.lsp"文

件中.用户可以加入"S::STARTUP"的DEFUN定义,以便在开始编辑时先执行所希望的设置操

作.

例如,假设用户想用自己的命令形式来替换AutoCAD的标准命令QUIT及END,为此,可以

用包括下列内容的"acad.lsp"文件:

(defun C:QUIT()

... your definition ...

)

(defun C: END()

... your definition ...

)

(defun S: :STARTUP()

(command "undefine" "quit")

(command "undefine" "end")

)

39 (distance <点1> <点2> )

这个函数返回三维点<点1>和<点2>之间的距离.例如:

(distance '(1.0 2.5 3.0) '(7.7 2.5 3.0)) returns 6.7

(distance '(1.0 2.0 0.5) '(3.0 4.0 0.5)) returns 2.82843 如果系统变量TLATLAND不等于零,则DISTANCE要求二维点(忽略所给定的三维点的Z坐标

),同时返回投影在当前作图平面上的两点间的二维距离.如FLATLAND为零,而所给定的点中

有一个或两个点是二维点,则作用与前同.

40 (eq <表达式1> <表达式2> )

这个函数确定<表达式1>和<表达式2>是否完全一样;就是说,它们是否受同样的目标约

束(例如,用SETQ).如果两个表达式完全一样,EQ返回T;否则返回nil.它的典型应用是检测

两个表实际上是否相同. 例如,对于下列的赋值:

( setq f1 '(a b c))

( setq f2 '(a b c))

( setq f3 f2)

那么:

( eq f1 f3) returns nil (f1 and f3 are not the same list!) ( eq f3 f2) returns T (f3 and f2 are exactly the same

list)

参阅下面的EQUAL函数.

41 (equal <表达式1> <表达式2> [ <误差量> ])

这个函数确定<表达式1>和<表达式2>是否相等;就是说它们的计算结果是否相同.例如

对于下列的赋值:

(setq f1 '(a b c))

(setq f2 '(a b c))

(setq f3 f2)

那么:

(equal f1 f3) 返回 T (f1和f3的计算值相等)

(equal f3 f2) 返回 T (f3和f2是完全相同的表)

注意,两个表对EQUAL成立,对EQ不一定成立;两个原子对EQUAL成立,对EQ也一定成立.另

外,两个表或原子对于EQ成立,对于EQUAL也一定成立的.

在比较两实数(或是由实数组成的两个表,如同表示点的表)时,很重要的一点是应明确:

用不同的方法计算两个"相同"的数,其结果可能有些微差别.任选项数字变元<误差量>,用

来使用户指定<表达式1>及<表达式2>间最大差值,在此差值内仍可认为两表达式是相等的.

如已知:

(setq a 1.123456)

(setq b 1.123457)

那么:

(equal a b) would return nil

(equal a b 0.000001) would return T

42 (eval <表达式> )

本函数返回<表达式>的计算结果,其中<表达式>是LISP表达式.例如,对于以下赋值:

(setq a 123)

(setq b 'a)

则有:

(eval 4.0) returns 4.0

(eval (abs -10)) returns 10

(eval a) returns 123

(eval b) returns 123

43 (exp <数> )

这个函数返回e的<数>次方(自然对数的逆).它返回的结果是实数.例如: (exp 1.0) returns 2.71828

(exp 2.2) returns 9.02501

(exp -0.4) returns 0.67032

44 (expt <底数> <幂> )

这个函数返回<底数>的<幂>次方.如果两个变元都是整数,其结果也是整数;否则,结果

为实数. 例如:

(expt 2 4) returns 16

(expt 3.0 2.0) returns 9.0

45 (findfile <文件名> )

这个函数允许用户程序在AutoCAD库路径上查找指定的文件.AutoCAD库路径按先后顺序

由下列目录组成:当前目录、包括当前绘图文件的目录、由ACAD系统环境变量命名的目录

(如果有的话)、以及包含AutoCAD程序文件的目录.

FINDFILE不能事先假定文件的类型和<文件名>的扩展名,因此用户必须加以说明.如果

文件名不带路径(即没有驱动器/目录前缀),AutoCAD就对其进行搜索并且返回全名,如果找

不到该文件,就返回空(nil).如给出驱动器/目录前缀时,AutoCAD仅在此目录中查找(不再

沿库路径搜索).FINDFILE返回的全名适合于OPEN函数的使用(下例中我们用"/"作为目录前

缀分隔符;在PC-DOS/MS-DOS系统上用"/"或者"\\"作分隔符均可).

例如,假设

. 当前目录是"/acad/"并有文件"abc.lsp"

. 正在编辑"/acad/drawings"目录中的一图形文件

. 系统环境变量ACAD设置为"/acad/support"

. "xyz.txt"文件仅存在于"acad/support"目录中

. 库搜索路径上均无"nosuch"文件

那么:

(findfile "abc.lsp") 将返回 "acad/abc.lsp"

(findfile "xyz.txt") 将返回 "acad/support/xyz.txt" (findfile "nosuch") 将返回 nil

46 (fix <数> )

这个函数返回<数>转换为整数的结果.<数>可以是整型或实型.如果是实数,就舍去小数

部分,截尾至最近的整型数. 例如:

(fix 3) returns 3

(fix 3.7) returns 3

47 (float <数> )

这个函数返回<数>转换为实型数的结果. <数>可以是整型或实型的.例如: (float 3) returns 3.0

(float 3.75) returns 3.75

48 (foreach <名称> <表> <表达式>...)

这个函数扫过整个<表>,将表中每个元素依次赋给<名称>,对于表中的每一个元素计算

每一个<表达式>的值.可以指定任意个<表达式>.FOREACH返回最后<表达式>的计算结果.

例如:

(foreach n '(a b c) (princ n))

(print a)

(print b)

(print c)

等价,只是FOREACH只返回最后表达式的计算结果.

49 (gcd <数1> <数2> )

这个函数返回<数1>和<数2>的最大公约数.<数1>和<数2>必须都是整数.例如:

(gcd 81 57) returns 3

(gcd 12 20) returns 4

50 (getangle [ <点> ] [ <提示> ] )

这个函数为用户输入一个角度而暂停.<提示>是一个任选的字符串,它作为提示符显示,

<点>是一个任选的二维基点(当前UCS坐标系统).返回的角度(以弧度表示)是相对于当前构

造平面(即当前UCS坐标系统的XY平面,且在当前的Z向层高上).用户可以用AutoCAD的当前

角度单位格式键入一个数来指定一个角度.注意,虽然当前的角度单位格式可能是度、弧度

或其它单位,但这个函数总是返回的弧度值.

用户还可以在图形屏幕上指定两个二维点,向AutoLISP"显示"这角

度.AutoCAD会从第一

点到当前光标位置画一条皮筋线,以辅助用户观察这个角度.若指定了GETANGLE 任选的<点>

变元,它就被用作为这两点的第一点,让用户只要指定另一点就能向AutoLIST"显示"这个角

度(用户可以给定一个三维基点,但这可能引起混乱,因为通常是在当前作图平面上测量角

度).

下面是一些调用GETANGLE的例子:

(setq ang (getangle))

(setq ang (getangle '(1.0 3.5)))

(setq ang (getangle "which way? "))

(setq ang (getangle '(1.0 3.5) "which way? "))

不能输入另一个LISP表达式来响应GETANGLE的请求.如果这样做,则会显示

信息"Can't

reenter AutoLIST"(不能再次输入AutoLISP).参见GETORIENT和INITGET.

51 (getcorner <点> [ <提示> ] )

和GETPOINT函数一样,GETCORNER函数返回一个点(当前UCS坐标系统).但GETCORNER要求

输入一个<基点>变元,并要求用户在屏幕上移动光标,从<基点>位置画一个矩形.详见GETPO

INT和INITGET.

基点以当前UCS坐标系统表示,若用户给出一个三维基点,将忽略其Z坐标;总以当前Z向

高度作为Z坐标.

不能输入另一个LISP表达式来响应GETCORNER的请求.

52 (getdist [ <点> ] [ <提示> ] )

这个函数为用户输入一个距离值而暂停.<提示>是一个任选的字符串,它作为提示符显

示,<点>是任选的二维或三维基点(当前UCS坐标系统).用户可以用AutoCAD当前的距离单位

格式输入一个数来指定距离.注意,虽然当前距离单位格式可以是英尺和英寸(建筑上用),

但是这个函数返回的距离值总是实数.

用户还可以指定两个点,AutoCAD将返回点间距离值.AutoCAD在第一点和当前光标位置之

间画一条皮筋线,以辅助用户观察这个距离.若指定了GETDIST的任选的<点>变元,它就被用

作为两点中的第一点.

当采用两点输入方式时,GETDIST测试系统变量FLATLAND和INITGET函数的"三维点"标志,

以便确定如何计算距离.若FLATLAND为零,返回点间三维距离.若FLATLAND不为零时,仅在IN

ITGET的"三维点"标志被设置时才返回三维距离;否则以二维点对待.

下面GETDIST用法举例:

(setq dist (getdist))

(setq dist (getdist '(1.0 3.5)))

(setq dist (getdist "How far "))

(setq dist (getdist '(1.0 3.5) "How far? "))

不能输入另一个LISP表达式来响应GETDIST的请求.参见INITGET.

53 (getenv <变量名> )

这个函数返回赋给系统环境变量的字串. <变量名>变元是要读出的环境变量名的字符

串.若不存在此变量,则返回空(nil).

例如,若系统环境变量ACAD设置成"/acad/support/",同时不存在NOSUCH变量,那么,

(getenv "ACAD") 将返回 "/acad/support/"

(getenv "NOSUCH") 将返回 nil

注: 在基于UNIX的系统中,对大、小写字母是有区别的,因此"ACAD"及"acad"将作为两

个不同的环境变量.

54 (getint [ <提示> ] )

这个函数为用户输入一个整数而暂停,并返回这个整数.数值范围为

-32768 ~ +32767.

<提示>是一个任选的字符串,作为提示符显示.例如:

(setq num (getint))

(setq num (getint "Enter a number: "))

不能输入另一个LISP表达式来响应GETINT的请求.参见INITGET.

55 (getkword [ <提示> ] )

GETKWORD函数要求用户输入一个关键字.在调用GETKWORD之前须先用INITGET函数(见下

述)设置一个有效的关键字表.GETKWORD把与用户输入相匹配的关键字作为字符串返回.如

果输入的不是关键字表中已存在的关键字,那么AutoCAD会要求重新输入.若是空输入,则函

数返回nil(如果允许空输入的话).如果没有建立关键字表,也返回nil.例如: (initget 1 "Yes No")

(setq x (getkword "are you sure? (Yes or No) "))

将提示用户,并根据用户的响应置符号x为Yes或No.如果用户的响应不能与任一关键字

匹配,或用户给出的是空响应,那么AutoCAD会要求用户重新输入.

不能输入另一个LISP表达式来响应GETKWORD的要求.参见INITGET.

56 (getorient [ <点> ] [ <提示> ] )

在AutoLISP中,角度总是用弧度制表示,零度基准方向一般是向右(东方),角度增加方向

一般是逆时针方向.如果用户使用UNITS命令或ANGBASE、ANGDIR系统变量选择了不同的零

度基准和角度增加的方向,那么有时可能需要一些转换.

GETORIENT类似于GETANGLE函数,但零度基准方向和角度增大方向对这两个函数的作用

方式不同.在需要知道旋转大小(相对角度)的情况下应使用GETANGLE;而在需要取得方位(

绝对角度)的情况下应使用GETORIENT.

假设,现使用AutoCAD的UNITS命令选中了零度基准为90°(朝北),并按顺时针方向增大

角度.下面的表格表示对用户输入的不同的角度,GETANGLE和GETORIENT将返回什么弧度值.

LISP函数大全

AutoLisp函数 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l、 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1就是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1就是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1就是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1就是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1就是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1就是否大于等于表达式2 2.7 (~数值)返回:数值的位 not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数整数整数…)返回:位式布尔运算AutoLisp函数2/8 2.10(eq 表达式1 表达式2)比较表达式1与表达式2就是否相同,适用列表比较(实际 相同) 2.11(equal 表达式 1表达式 2[差量])比较表达式 1与表达式 2就是否相同,差量可省 略(内容相同) 三、转换运算功能函数 3.l(angtof 字符串[模式])返回:角度值的字符串转成实数 3.2(angtos 角度[模式[精度]])返回:角度转成的字符串值 3.3(atof 字符串)返回:字符串转成实数值 3.4 (atoi 字符串)返回:字符串转成整数值

AutoLISP 基础——认识自定义函数

AutoLISP基础——认识自定义函数 (本文由LL_J?认识自定义函数?和?Autolisp编程心得?两篇巨著合成,并融入了其他人的一些经验,以快速打通你的任督二脉——自贡黄明儒注) 一、初识Lisp 在AutoCad命令输入(+ 1 2 3),回车返回6,如下 命令: (+ 1 2 3) 6 恭喜你,你已经会写Lisp程序了。这里,我们用到了一个系统定义的函数+,这个函数的作用就是对后面的数字求和。 上式一对英文括号组成的表达式,称之为表,Lisp语言也称为表的语言。表有两种形式,一种是?口袋式?表;一种是?函数式?表。前者如’(0 0)表示一个2维点,前面加’表示此表不求值。如果不加‘,则通常是认为是?函数式?表。?函数式?表如下: ①结构特点:左括号(紧跟函数,函数所需要的参数,右括号)结束。 ②函数是指:系统定义的函数、自定义的函数、匿名函数lambda。如 ((lambda(x y z) (* x y z)) 3 4 5)是合理的。 ③参数可以是:数字(整数、实数)、字符串、T、nil、表(如果此 表是表、函数,就构成了复杂表,这就是lisp程序)、函数。 ④表可以作为函数的参数。如(+ 1 (- 5 2) 3)中,表(- 5 2)就作为+函数 的参数。 ⑤表的返回值也可以传递给其它变量,如(setq x (+ 1 2 3)) ⑥接受输入参数,如(- 5 2)中,-函数接受5和2两个参数。 二、什么是函数 函数一词最早来源于数学,维基百科这样说:函数是将唯一的输出值赋予每一输入的"法则"以及该输出值与对应输入值的集合。 在计算机领域,对函数并没有一个完整的定义,百度百科有这样一句话:"许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,所以,函数也可以说是许多代码的集合,这就是程序中的函数。 综合以上描述,我们可以看到"函数"的基本组成: 输入值:一般称为参数; 表达式:函数体,是代码的集合,共同组成上面所说的"法则";

AUTO LISP函数参考5

AUTO LISP函数参考 4实体数据函数 下列函数可让用户检索和修改定义实体的数据,所有函数都用实体名指定要操作的实体. 4.1(entdel<实体名>) 如果由<实体名>指定的实体在当前图中,它就被删掉,如果在这次编辑中该实体已被删除,那么它将被重新恢复出来(从当前图中).退出图形编辑程序时,被删除的实体便从图中 彻底清除掉了,所以ENTDEL只能在删除实体的那次编辑过程中使实体再恢复.ENTDEL只对 主实体进行操作.对属性和多义线的顶点是不能脱离其双亲实体而予删除的(可使用COMM AND函数执行ATTEDIT或PEDIT命令来达到这一目的). 例如: (setq e1(entnext));置E1为图中第一个实体的名 (entdel e1);删去实体E1 (entdel e1);不删除(恢复)已被删去的实体E1 4.2(entget<实体名>) 从数据库中检索到名为<实体名>的实体,并以表形式返回,此表包含实体的定义数据表的结果以LISP的关联表形式编制,用ASSOC函数可以容易地从中检索每一项.表中的对象是用AutoCAD的DXF组码形式定义的,它们是为实体数据的每个部分准备的.例如,用下列命令序列画线,然后再检索此线: 对下面的例子,我们假定: .当前层是"0", .当前线型是"CONTINUOUS"(缺省值), .当前Z向高度是零(缺省值), .实体标号功能被关闭,而且 .FLATLAND系统变量值为零. 假设用下列命令画一条线: Command:LINE From point:1,2 To point:6,6 To point:RETURN 然后可以用下述命令为线检索实体数据: Command:(setq a(entget(entlast))) 假定系统变量FLATLAND为零(即要求3D点).这样,将把A置为下表(为了可读,作了缩进排列): ((-1.) (0."LINE");Entity type (8."0");Layer (101.02.00.0);Start point (116.06.00.0);End point ) 表的开头-1项包含这个所代表的实体名.下面描述的ENTMOD函数将用这种表来识别要修改的实体. 表示某一值的点对表可以很容易地用ASSOC提取,再用CDR分离出它们的值.实体中各部分的编码是DXF所用的那些编码,在AutoCAD参考手册的附录C中有描述.和DXF一样,实体题头项(实体的颜色和线型,属性跟随标志,厚度,及实体标号)只有在不为缺省值时才被输出. 和DXF不同的是,任选的实体定义字段不管是否和它们的缺省值相等都将被输出.这样做的

lisp功能函数

一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值1数值2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1是否<小于表达式2

2.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式2 2.5(>表达式1 表达式2)比较表达式1是否>大于表达式2 2.6(>= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.7 (~数值)返回:数值的位not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数整数整数…)返回:位式布尔运算 2.10(eq 表达式1 表达式2)比较表达式1与表达式2是否相同,适用列表比较(实际相同) 2.11(equal 表达式1表达式2[差量])比较表达式1与表达式2是否相同,差量可省略(内容相同) 三、转换运算功能函数 3.l(angtof 字符串[模式])返回:角度值的字符串转成实数 3.2(angtos 角度[模式[精度]])返回:角度转成的字符串值 3.3(atof 字符串)返回:字符串转成实数值 3.4 (atoi 字符串)返回:字符串转成整数值 3.5 (cvunit 数值原始单位转换单位)返回:数值转换单位后的值转换根据acad.nut文件 3.6(distof 字符串[模式])返回:根据模式将字符串转成实数值 3.7(itoa 整数)返回:整数转成字符串 3.8(rtos 数值模式[精度])返回:实数转成字符串 3.9 (trans 点原位置新位置[位移])返回:转换坐标系统值 四、列表处理功能函数 4.1 (append 列表列表……)结合所有列表成一个列表 4.2(assoc 关键元素联合列表)根据关键元素找寻联合列表中关系信息 4.3 (car 列表)返回列表中的第一个元素,通常用来求X坐标

AutoLISP详细讲解

AutoLISP详细讲解 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+ num1 num2 num3…) 此函数(+)计算加号(+)右边所有数字的和(+ num1 num2 num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是

AutoCAD二次开发所用的autolisp函数

AutoCAD二次开发所用的autolisp函数。 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(*数值数值…)返回:所有数值乘积 1.4(/数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan数值)返回:反正切值 1.9(cos角度)返回:角度的余弦值,角度值为弧度 1.10(exp数值)返回:数值的指数 1.11(expt底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max数值数值…)返回:数值中的最大值 1.17(min数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值1数值2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1是否大于等于表达式2 2.7 (~数值)返回:数值的位not值,(1的补码)

autolisp多段线处理函数集

;;164.1 [功能] 曲线是否封闭 ;;164.2 [功能]使多段线封闭 ;;164.3 [功能] 多段线端点列表 ;;164.4 [功能] 矩形中点坐标 ;;164.5 [功能] 参数param处的切线方向的角度;;164.6 [功能] 参数param处的法线方向的角度;;164.7 [功能] 曲线一点的切线方向的角度;;164.8 [功能] 曲线一点的法线方向的角度;;164.9 [功能] 去除多段线重点 ;;164.10 [功能] 判断点是否在曲线上 ;;164.11 [功能] 曲线长度 ;;164.12 [功能] 多段线子段数量 ;;164.13 [功能] 曲线中点 ;;164.14 [功能] 曲线一点的参数param ;;164.15 [功能] 参数param处的坐标 ;;164.16 [功能] 多段线第n子段的起点坐标;;164.17 [功能] 多段线第n子段的终点坐标;;164.18 [功能] 多段线所点击子段的两端点列表;;164.19 [功能] 多段线所点击点最近的一个顶点;;164.20 [功能] 多段线所点击子段param(索引) ;;164.21 [功能] 多段线所点击子段的起点坐标;;164.22 [功能] 多段线所点击子段的终点坐标

;;164.23 [功能] 多段线所击点离起点近 ;;164.24 [功能] 多段线所点击子段否是直线(返回nil是弧) ;;164.25 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心by caoyin ;;164.26 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 ;;164.27 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.28 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.29 [功能] 连接线、弧成多段线 ;;164.30 [功能] 构造矩形by highflybird ;;164.31 [功能] 点表生成多段线 ;;164.32 [功能] 3D多段线 ;;164.33 [功能] 多段线反向(起点反成终点) byzml84 ;;164.34 [功能] 多段线删除顶点 ;;164.35 [功能] 多段线增加顶点 ;;164.36 [功能] 多段线修改顶点 ;;164.37 [功能] 多段线拷贝子段 ;;164.38 [功能] 修改多段线子段 ;;164.39 [功能] 修改多段线子段为直线 ;;164.40 [功能] 点在封闭多段线内返回T,其余nil By 狂刀 ;;164.41 [功能] 点在封闭多段线内返回T,其余nil By SmcTools ;;164.42 [功能] 判断点在封闭曲线内外,自交曲线不适用By Gu_xl ;;164.43 [功能] 点在封闭多段线内返回T;线上0;外nil ;;164.44 [功能] 多段线弧段全改为直线段

Autolisp编程心得

Autolisp编程心得 1.养成良好的书写习惯 众所周知,Lisp是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大 费周折,所以,养成一个好的编程习惯是学好Lisp所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp编辑器或Lisplink 等 专用编辑器,此类编辑器可以对函数突出显示。 ⑵按Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使得程序条理化。 2.函数中循环与转移的使用 在高级语言中一般有类似“goto”的语句实现转移,在AutoLisp中没有转移的函数。我们可 以使用自定义函数实现转移,用if及cond辅助实现条件转移。 当我们需要实现在满足一定条件时进行循环的功能,一般使用while函数,但有时需要判断的条件较复杂时,使用while函数往往不能实现或使得程序不够简洁。这时我们可以使用“转移”, 将需要实现的功能作为(子)函数,使用恰当,可以在程序中任意“转移”。 一般认为,当一段代码在不同处重复使用时,我们才会使用子函数定义,其实,利用函数的更大的优点是使得程序更加结构化。这就使得我们不必拘泥于程序中的循环语句,而使用函数的循环调用,辅助适当的判断,实现“转移”,如A->B->A。当然也可以进行自身调用,构成一个“标准的”循环。 如例一中,“程序执行完毕返回”与“空选返回”两种情况如果使用循环语句,其条件是完全不同的,而将函数本身作为子函数调用,程序简洁明了。 3.initget函数中关键字“ ”(空格)的使用 空格可以被用作关键字,一般多用来定义鼠标右键退出。 ⑴当用户输入函数不支持控制位(如entsel、nentsel、nentselp)时,可直接使用“(initget " ")”。 ⑵当用户输入函数支持控制位(如getpoint等)时,可使用“(initget 1 " ")”禁止空输入,而将回车等空输入作为关键字使用。 ⑶当同时使用其它关键字时,应该将空格作为一系列关键字的最后一个,用 “(initget "C ")”(两个空格)调用,否则无效。 见例一。 ************************************************ ;;例一 (defun ett_ct()

lisp函数

函数大全 一、数学运算功能函数 1.l(十 数值 数值…)返回:累计实数或整数数值 1.2(一 数值 数值…)返回:差值 1.3(* 数值 数值…)返回:所有数值乘积 1.4(/ 数值 数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十 数值)返回:数值十l l. 6(1— 数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值 数值…)返回:数值中的最大值 1.17(min 数值 数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.3(< 表达式1 表达式2) 比较表达式1是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式2 2.5(> 表达式1 表达式2) 比较表达式1是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1是否大于等于表达式2 2.7 (~ 数值)返回:数值的位 not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数 整数 整数…)返回:位式布尔运算

autolisp教程

第十四章 AutoLISP 14.1 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 14.2 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 269

Lisp常用函数

Lisp常用函数 Lisp 语法及变量皆不分大小写(case insensitive)。 NIL 空串行,相当于'() 。另外真伪值表示时,T 表真,NIL 表伪。只要是任何不是NIL (空串行) 的值,真伪值都表示真。 QUOTE CODE: (QUOTE 参数) 将参数直接传回,不做任何评估动作。可用' (单引号)取代 SETQ, SETF, LET CODE: (SETQ 参数1 参数2) (SETF 参数1 参数2) (LET ((变量1名称变量1的值) (变量2名称变量2的值) ........ ) 变数1,2...的作用范围,既程序执行叙述 ) SETQ, SETF 将参数1的值连结至参数2。LET 只有在作用范围内有效。 注:SetQ => set quote; SetF => set form 注:全域变数习惯用两个* 把变量名称包起来,例如*globe-variable* CAR, CDR CODE: (CAR 串行参数) (CDR 串行参数) CAR 取得参数串行的第一个元素;CDR 取得扣掉第一个元素之后的新串行。

CONS CODE: (CONS 参数1 参数串行2) 把参数1 加到参数串行2 的第一个元素,产生出新的串行。 对任一串行A 而言,(CONS (CAR A) (CDR A)) 即为 A 。 注:如果第二个参数不是串行,则会产生出点对,故少用。 APPEND CODE: (APPEND 参数串行1 参数串行2 ........ ) 合并若干参数串行,形成新的串行。 注:如果最后一个参数不是串行,也会形成尾巴是带点的串行,故少用。LIST CODE: (LIST 参数1 ........ ) 将若干参数,当作是新串行的元素,形成新串行。 注:APPEND 除了最后一个之外的参数皆需为串行,而LIST 不用。NULL CODE: (NULL 参数) 判断参数是否为空串行(NIL)。 ATOM, LISTP, NUMBERP, ZEROP CODE: (ATOM 参数) (LISTP 参数) (NUMBERP 参数) (ZEROP 参数)

CADLISP函数

CADLISP语言 数据类型 1.表 2.文件描述符 3.实体名 4.选择集 5.内部函数(Auto LISP子程序) 赋值与数值计算函数 1.(1+ 数) 加1函数 2.(1- 数) 减1函数 3.(abs 数)求绝对值 4.(max数数……)求最大数 5.(min数数……)求最小数 6.(sqrt数)求平方根 7.(expt数幂)乘方 8.(exp 幂)e的任意次方 9.(log数)对数 10.(sin 角)正弦函数 11.(cos角)余弦 12.(atan数1[数2])反正切函数 13.(rem数1 数2)求余数 14.(gcd数数……)最大公约数 15.(~ 整数)求补注:用pi表示圆周率π 16.(logand数数……)按位逻辑”与”函数 17.(logior数数……)按位逻辑”或”函数 18.(~ 数)按位逻辑”非”函数 19.(and 表达式……)逻辑”与”函数 20.(or 表达式……)逻辑”或”函数 21.(not 表达式)逻辑”非”函数 22.(lsh 数位数)位移函数 23.(boole 方式数1 数2……)布尔运算。方式有16种,如1为and,6为xor(异或),7为or,8为not等。 24.(= 原子原子……)等于函数 25.(/= 原子原子)不等于函数 26.(< 原子原子)小于函数 27.(<= 原子原子)小于等于函数 28.(> 原子原子)大于函数 29.(>= 原子原子)大于等于函数 30.(atom 项)原子测试

31.(listp 项)表测试 32.(boundp 原子)原子值测试 33.(null 项)空测试 34.(numberp 项)数值测试 35.(minusp 项)负值测试 36.(zerop 项)零测试 37.(eq 式1 式2)相同表达式测试 38.(equal式1 式2)相等测试 39.(wcmatch 字符串模式)字符匹配测试 分支与循环 1.(if 条件式1[式2])若条件为真,则执行式1;否则执行式2。 2.(cond(条件1 式1……)(条件2 式2……)……)分支函数。如:(cond((minusp a)(- a))(T a))求a的 绝对值。注:cond是AutoLISP中最基本的条件函数,由它为核心构成的自定义函数可以实现循环和递归等功能。 3.(repeat 次数式1 式2 ……)重复函数。将多个表达式重复执行多次。 4.(while 条件式1 式2 ……)循环函数。条件为真,执行表达式。否则结束循环。如:(setq s 0 a 1)(while(< a 101)(setq s(+ s a))(setq a(1+ a)))(print s) 计算0~100之间所有整数的和。 5.(progn 式1 式2 ……)求多个表达式值函数。在只能用一个表达式的地方,使用他可完成多个表达式的计算。 如if 语句中 字符串与类型转换函数 1.(ascii 字符串)ASCII码转换 2.(chr 整数)字符转换 3.(strcat 字符串……)字符串连接 4.(strlen 字符串……)字符串长度测试 5.(substr 字符串起点 [长度])取子字符串。如果不设置长度,则取到最后一个字符。 6.(strcase 字符串 [方式])字符串大小写转换。若指定了方式且非空(NIL),则把所有的字母转换为小写; 否则转换为大写。 7.(float 数)整型变实型 8.(fix 数)实型变整型 9.(itoa 整型数)整型变字符串 10.(atoi 字符串)字符串变整型 11.(atof 字符串)字符串变实型 12.(angtos 角方式精度)角度单位转换。“角”是以弧度为单位的实数,转换为其它单位,返回一个字符串。 该字符串是以“方式”和“精度”的要求,按AutoCAD的系统变量UNITMODE(单位模式)对“角”进行处理得到的,“精度”为小数点后的位数。“方式”有:0为度,1为度/分/秒,2为梯度,3为弧度等。 13.(rtos 数方式精度)实数计数制转换。方式:1为科学计数法,2为十进制,3为工程制(英寸与小数英寸), 4为建筑制(英寸与分数英寸) 14.(cvunit 值旧单位新单位)单位制转换。单位名称可以是acad.unt文件中给出的任意单位格式,否则返回 NIL (trans 点旧坐标系新坐标系)坐标转换。坐标:0为WCS(世界坐标系),1为UCS(用户坐标系),2为DCS(显示坐标系) 表处理函数 1.(quote 表达式)引用函数。作用:告诉程序不要对后面的表达式求值。如:(quote(x y z))可简写为’ (x y z) 2.(car 表)取表中的第一个元素 3.(cdr 表)取子表函数。返回除第一个元素以外的所有元素组成的新表 4.由car与cdr组合而成的函数

常用有关对话框-AutoLISP函数

1.装入指定的DCL文件的函数load_dialog 格式:(load_dialogdclfile) 功能:在AutoCAD的搜索路径上寻找指定的DCL 文件并载入文件。与unload_dialog函数相对应。 2.卸载指定的DCL文件的函数unload_dialog 格式:(unload_dialogdcl_id) 功能:根据指定的DCL 文件句柄将相关联的DCL 文件从内存中卸掉。 其中,dcl_id表示的是DCL 文件句柄,用来标识DCL 文件。 3.初始化对话框函数new_dialog 格式:(new_dialogdlgnamedcl_id [action [screen-pt]]) 功能:初始化一个新的对话框并显示它,同时指定一个默认的动作。 其中,dlgname是新对话框名称;dcl_id是用load_dialog所取得的值,用来标识DCL 文件。用户可以为对话框定义一个默认动作,即格式中的action。screen_pt指定的是对话框的左上角在屏幕上的坐标,这也是可选项。用这一项可以使对话框在先前的关闭位置重新打开。 4.启动对话框的函数start_dialog 格式:(load_dialogdclfile) 功能:开始对话框并接受用户输入。 它必须在调用了new_dialog后才能调用,其返回值是一个传递给done_dialog的整数。用户按下了“OK”键,其值为1;按下“CANNEL”键,其值为0;如果所有的对话框都被term_dialog 终止,则返回-1 值。 5.终止显示当前对话框函数done_dialog 格式:(done_dialog [status]) 功能:停止显示对话框,该对话框为前一个new_dialog所指定的对话框。 其中,status 可有可无,有则必为一个正整数,该参数作为函数(start_dialog) 的返回值,以代替按钮的返回值。(done_dialog) 会返回一个表示对话框位置的二维点,可供后续的函数调用。 6.终止当前所有对话框的函数term_dialog 格式:(term_dialog) 功能:用于终止嵌套对话框。 如果应用程序在DCL 文件打开时终止运行,系统会自动调用该函数。 7.动作表达式初始化函数action_tile 格式:(action_tile key action_expression) 功能:使用用户定义的动作代替对话框中的默认动作或代替控件的动作属性。 其中,key 是一个字符串,它用来命名一个控件。action_expression也是一个字符串,用来命名动作表达式。 8.设置指定控件值的函数set_tile

AutoLisp功能函数大全

AutoLisp函数大全 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值1数值2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式2 2.5(>表达式1 表达式2)比较表达式1是否>大于表达式2 2.6(>= 表达式1 表达式2)比较表达式1是否大于等于表达式2

AutoLISP基础入门案例,很受用

单元一:AutoLISP主角潇洒登场 一. AutoLISP 是何方神圣? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3.AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4.AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短 的时间内,写出令人惊讶、赞叹的功能! 5.若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不 为过一点也不夸张! 6.AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅 力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序! 三.撰写AutoLISP 的动机? 1.欲强化AutoCAD 原有指令时. 2.欲创造更有用的AutoCAD 新指令. 3.欲简化繁琐的环境设定或绘图步骤时. 4.欲处理参数式绘图时.

5.欲做图面资料读文件、写文件. 6.欲做AutoCAD 简报展示时. 7.欲达到真正灵活掌控AutoCAD 时. 8.欲提升自己跨上AutoCAD 高手列车时. 四.AutoLISP 的效益评估? 1. 对公司负责人或设计主管而言: A. 也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沈思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』! B.若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受 训,学习更好的设计技巧与创意呢?! C.千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍 了公司计算机化进步的罪魁祸首 D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD 支持软件。 2. 对设计人员而言:

lisp对话框

目录 第一篇.基本知识 (2) 第1节基本知识 (2) 第2节定义档 (2) 第3节批注 (3) 第4节对话框定义文件的内容模式 (3) 第5节练习 (4) 第二篇开启对话框 (5) 第1节AutoLISP函数加载DCL定义文件函数 (5) 第2节对话框开启方式 (6) 第3节编辑框组件(edit_box) (6) 第4节练习 (7) 第三篇设定及取得对话框组件内的值 (8) 第1节AutoLISP函数设定组件的值 (8) 第2节练习 (9) 第3节练习 (9) 第4节AutoLISP函数组件指定动作 (10) 第四篇按钮及核取框(切换钮) (11) 第1节按钮组件(button) (11) 第2节核取框(切换钮)组件(toggle) (12) 第3节练习 (12) 第五篇横列、直行、空白及文字组件 (15) 第1节横列(row)及直行(column)组件 (15) 第2节空白(spacer)组件 (15) 第3节字符串组件(text) (17) 第4节文字段落组件(paragraph) (17) 第六篇滑杆(滚动条)组件 (18) 第1节滑杆(滚动条)组件(slider) (18) 第2节练习 (19) 第七篇按钮及影像按钮组件 (21) 第1节自订按钮 (21) 第2节练习 (22) 第八篇清单选框 (25) 第1节清单选框组件(list_box) (25) 第2节AutoLISP函数开始处理清单选框或弹出式选框 (25) 第3节练习 (26) 第九篇下拉(弹出)式清单选框 (29) 第1节下拉式(弹出式)清单选框组件(popup_list) (29) 第2节练习 (30) 第十篇选台钮组件 (32) 第1节选台钮组件(radio_button) (32) 第2节练习 (33)

AutoLISP 函数大全

一、数学运算功能函数 l(+数值数值…) 返回:累计实数或整数数值 2(-数值数值…) 返回:差值 3(*数值数值…) 返回:所有数值乘积 4(/数值数值…) 返回:第一个数值除以第二个以后数值的商 5(l+ 数值) 返回:数值+l 6(1- 数值) 返回:数值-l 7(abs数值) 返回:数值的绝对值 8(atan数值) 返回:反正切值 9(cos角度) 返回:角度的余弦值,角度值为弧度 10(exp数值) 返回:数值的指数 11(expt底数指数) 返回:底数的指数值 12(fix数值) 返回:将数值转换为整数值 13(float数值) 返回:将数值转换为实数值 14(gcd数值1数值2) 返回:两数值的最大公因数 15(log数值) 返回:数值的自然对数值 16(max数值数值…) 返回:数值中的最大值 17(min数值数值…) 返回:数值中的最小值 18pi 常数∏,其值约为3.1415926 19(rem数值1数值2) 返回:M数值的相除的余数 20(sin角度) 返回:角度的正旋值,角度值为弧度 21(sqrt数值) 返回:数值的平方根 二、检验与逻辑运算功能函数 l(=表达式1表达式2) 比较表达式1是否等于式2,适用数值及字符串 2(/=表达式1表达式2) 比较表达式1是否大于等于表达式2 3(<表达式1表达式2) 比较表达式1是否<小于表达式2 4(<=表达式1表达式2) 比较表达式1是否<一小于等于表达式2 5(>表达式1表达式2) 比较表达式1是否>大于表达式2 6(>=表达式1表达式2) 比较表达式1是否大于等于表达式2 7(~数值) 返回:数值的位not值,(1的补码) 8(and表达式1表达式2…) 返回:逻辑and的结果 9(boole函数整数整数…) 返回:位式布尔运算 10(eq表达式1表达式2) 比较表达式1与表达式2是否相同,适用列表比较(实际相同) 11(equal表达式1表达式2[差量])比较表达式1与表达式2是否相同,差量可省略(内

相关文档
最新文档