当前位置:文档之家› 第五章第二节AUTOLISP程序设计简介

第五章第二节AUTOLISP程序设计简介

第五章第二节AUTOLISP程序设计简介
第五章第二节AUTOLISP程序设计简介

§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++作为基本程序设计语言,其效率、数据处理和软硬件的控制能力都是相当好的。但是,要想真正发挥这种开发模式的作用,对于程序设计者的要求也较高。因此这种开发模式不适于在专业设计工程师中间普及。(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 of circle ·行内注释:行中处于;│…│;之间的任何文本均被忽略。

例:(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)将源程序文件存入自己的工作目录,并设置支持文件的路径,方法如下:

T ools=>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)通过菜单调入:

格式:T ools => Load Application => File => 选择“. lsp”文件=> 打开=> Load 3.执行:

(1)直接运行函数名:程序中函数名前有“C:”例:Command:triang

(2)将函数名放在括号中运行:程序中函数名前没有“C:”

例:Command:(triang)

三、在命令行使用AutoLISP表达式

在命令行使用AutoLISP表达式是一种很有价值的应用技术,也是调试程序的一种方法。可以在任何AutoCAD命令要数据的提示下,使用AutoLISP表达式。在命令行使用AutoLISP表达式的方法有两种:

1.用表达式响应有关的命令提示:

例:在一条齿条的节线上分出精确绘图用的点。

间距=模数×π×0.5 设:模数= 3

Command:measure

Select object to measure:(选择目标)

/ Block:(* 3 pi 0.5)

2.引用已经赋过值的变量:

格式:Command:!A

例:Command:(Setq A 2)

Command:!A

2

四、函数的返回值

每个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”)都是有效表。

AutoLISP系统规定的表:

·点位:’(100.0 23.45 10.23)表示x,y,z坐标序列;

’-按愿意使用,当把一个表常数赋给一个变量名,或作为其它函数的变元时,

在其左括号前必须冠以单撇号。

例:(Setq L ’(1.1 2.2))

(Car(Cdr (1.1 2.2 3.3)))出错:error:bad function

(Car(Cdr ’(1.1 2.2 3.3))) 2.2

(Car ’(Cdr (1.1 2.2 3.3)))cdr

·对象描述双元表:((50.5 32.5 0.0))

·对象数据点对表:(8 . “base”)

表中的内容叫元素,元素可以是AutoLISP的所有数据类型、表达式、函数,也可以是表。元素在表中的数量和类型没有限制。

6.符号和变量(Symbols and Variables)

与其它程序一样,AutoLISP使用符号来访问数据,即用符号来代表函数名、变量名

常量名。在以后的讨论中,直接将符号称为常量名、变量名或函数名。

例如:使用Setq函数将一个字符串赋给变量STR1(符号)

(Setq str1 “This is a string.”)

符号名的规定:

(1)必须以字母开头,最大长度不超过100个字符,合理的长度:≤6 ;

(2)()·’”;空格不能作符号名的字符;

(3)符号名的大小写不作区别;

(4)一个符号总是分成“名”和“值”两部分内容,若没有给某个符号赋值,它的值是:NIL(空);

注:在AutoLISP中,不用象某些语言那样,要事先设置符号的类型。因为决定符号所具有的数据类型的是符号的值,而不是符号本身,即值决定类型。

(5)可直接使用的预定义系统符号:

PAUSE:这个变量由Command函数使用,可用于实现暂停,且让用户做输入;

PI :3.1415926;

T :常量,用作非空值。

(6)在命令行使用变量:

(! 变量名)

说明:每一个变量都要消耗少量的内存。因此当变量的值不再有用时可重复使用变量名或将变量的值设为:NIL ,从而释放了存储该变量的值的那些存储单元。

例:Command:(Setq val nil)

NIL

7.AutoCAD选择集(Selection Sets)

AutoLISP规定的一种变量值,代表一个AutoCAD“对象选择集”的名称。

选择集的内容是由一系列的对象名组成的表,它仅能用有关的函数产生或使用,没有“常量型”的对象选择集。

例:Command:(Ssget “X”)

Command:erase

Select objects:P

Command:

8.AutoCAD对象名(Entity names)

AutoLISP规定的一种变量值,代表一个AutoCAD“对象”的名称。

对象名是某个对象在ACAD对象数据库中当前的检索名。它仅能用有关的函数产生或使用,没有“常量型”的对象名。

例:使用AutoLISP的Entlast函数,来获得最后加入图形中的那个对象的对象名。

Command:(Entlast)

9.文件描述符(File)

AutoLISP规定的一种变量值,代表一个“文件”的名称。

文件描述符是一个由AutoLISP所打开的文件的字符数字标识代码。它仅能用有关的函数产生或使用,没有“常量型”的文件描述符。

例:为读文件myinfo.dat中的信息,而首先将其打开的一个实例:

Command:(Open “myinfo.dat”“r”)

在讲解基本的AutoLISP函数之前,先举两个简单的AutoLISP程序例子,了解其程序结构及调用过程。

例1.度转换成弧度函数文件名:9-1.lsp 路径:c:\dlm\

程序清单:

;;;--------------------------------------

(Defun dtr(a)

(* pi (/ n 180.0))

调用:Command:(Load “c:\\dlm\\9_1.lsp”)

Command:(dtr 30)

例2.弧度转换成度函数文件名:9-2.lsp 路径:c:\dlm\

程序清单:

;;;--------------------------------------

(Defun rtd(a)

(* (/ n pi)180.0)

调用:Command:(Load “c:\\dlm\\9_2.lsp”)

Command:(rtd 3.14)

说明:在度量角度时,AutoLISP不使用度而使用弧度。在程序设计过程中,频繁地将度转换成弧度或将弧度转换成度是很不方便的。因此可以通过这两个程序建立dtr及rtd函数来完成这个工作。

六、AutoLISP出错处理

任何一种使程序不能按原来的描述运行到底而中断的情况,AutoLISP都认为是错误,之后将自动执行AutoLISP当前出错处理定义中描述的操作过程。

1.AutoLISP标准出错处理可分为四个片段内容。

例:Command:(Setq a (+3.5 20))

error:bad function

(3.520)

(SETQ A(3.5 20))

*Cancel*

2.四个片段:

(1) error:bad function(错误:错误函数)

说明错误性质

(2) (3.5 20)直接发生地:调用(3.5 20)函数时;

(3) (SETQ A(3.5 20))函数嵌套层次的回溯;

(4) *Cancel* 取消操作。

3.查错方法:首先查找(3.5 20)函数是否正确,显然这不是个函数,因为没有函数名,AutoLISP 认为+3.5 就是3.5,正确的写法应当是:(+ 3.5 20)

注:

①在读AutoLISP错误提示时,应细心看清错误类型和发生地;

②逐个分析有关可能性,再试修改有关程序,直到解决问题为止;

③如果出错提示太多,可以查看AutoCAD文本窗口的内容;

④如果当前文本窗口行数不够,可以增加行数设置。

真正理解某个出错提示和解决方法的标志是:能自如地制造这样的错误。

七、基本的AutoLISP函数

AutoLISP函数功能很多,我们分类将一些主要的,常用的命令讲解。

1.赋值函数:

(1)格式:(Setq 符号表达式[符号表达式])

(2)功能:把<表达式>的值赋给<符号>代表的变量或函数。

(3)返回值:返回最后一个被赋值的符号值。

(4)例:(Setq b 123 c 456.90)返回结果:456.9

(Setq s “it”)返回结果:“it”

(Setq x ’(a b))返回结果:(A B)

(Setq angle (…))返回结果:error

(5)说明:

1)这是基本的赋值函数;

2)代表一个AutoLISP的常量或变量的符号,应当先给它赋值,然后使用。即:“先赋值后使用”,若未赋值其原始值为NIL(空值);

3)符号的值取决于最近一次赋值动作的结果;

4)每一个AutoLISP函数执行后,都会产生一个相关的“返回值”,这个返回值将传递给这个函数的调用者。

2.数学计算函数:

(1)(+ [数数])

返回所有数相加后的和。<数>可以是实数或整数。

例:(+ 1 2 3 )返回结果:6

(+1 2 3 4.0)返回结果:10.0

(2)(-[数数])

第一个数减去后面各数之和,返回最后的差;<数>可以是实数或整数。特殊地:如果只有一个数,返回零减去该数的差。

例:(-50 40 )返回结果:10

(-50 40 2.0)返回结果:8.0

(-5)返回结果:-5

(3)(* [数数])

返回所有数的乘积;<数>可以是实数或整数。特殊地:如果只有一个数,返回该数乘一。

例:(* 2 3 )返回结果:6

(* 2 3 4.0)返回结果:24.0

(* 6)返回结果:6

(4)(/[数数])

第一个数除以后面各数之积,返回最后的商;<数>可以是实数或整数。特殊地:如果只有一个数,返回该数除一。

例:(/100 2 )返回结果:50

(/100 2.0)返回结果:50.0

(/135 360)返回结果:0

(/135)返回结果:135

(5)(1+数)

返回<数>加一后的结果;<数>可以是实数或整数。

例:(1+23)返回结果:24

(6)(1-数)

返回<数>减一后的结果;<数>可以是实数或整数。

例:(1-23)返回结果:22

(7)(Abs 数)

返回<数>的绝对值;<数>可以是实数或整数。

例:(Abs –3.25)返回结果:3.25

(8)(Atan 数1 [数2])

求反正切,结果是用弧度表示的角。

只给数1,返回数1的反正切;

给两个数,返回数1/数2的反正切值。

例:(Atan 0.5)返回结果:3.25

(9)(Sin 角)

返回<角>的正旋值,<角>是以弧度制表达的数。

例:(Sin 1.0) 返回结果:0.841471

(Sin 0)返回结果:0.0

(10)(Cos 角)

返回<角>的余旋值,<角>是以弧度制表达的数。

例:(Cos 0) 返回结果:1.0

(Cos pi)返回结果:-1.0

(11)(Exp 数)

返回e的数次方值,<数>可以是实数或整数,返回结果是实数。

例:(Exp 1) 返回结果:2.71828

(Exp -0.4)返回结果:0.67032

(12)(Expt 底数指数)

返回<底数>的<指数>次幂,如果两变量都是整数,结果是整数;反之亦然。例:(Expt 2 4) 返回结果:16

(Expt 3 2.0)返回结果:9.0

(13)(Gcd 整数1 整数2)

返回两个整数的最大公约数。

例:(Gcd 81 57) 返回结果:3

(Gcd 12 20)返回结果:4

(14)(Sqrt 数)

返回<数>的平方根,<数>可以是实数或整数。

例:(Sqrt 4) 返回结果:2.0

(Sqrt 2.0)返回结果:1.41421

3.关系运算函数:

(1)小于函数:(< E1 E2 …… En)

当E1

整型或实型量按表达式的值进行比较;字符型按ASCII码大小进行比较。

例:(< 1.1 2.2 3.3 4.4 5.5)返回结果:T

(< 1 2 3 3 4)返回结果:NIL

(< “A” “B” “C” “X” “Y” “Z”)返回结果:T

(2)大于函数:(> E1 E2 …… En)

当E1>E2>……>En时函数值为T,否则为NIL;

例:(> (+ 1 2 3)(Sqrt 4))返回结果:T

(> 5 4 3 3 1)返回结果:NIL

(3)小于等于函数(<= E1 E2 …… En)

当E1≤E2≤……≤En时函数值为T,否则为NIL;

例:(<= 1 2 3 4 5)返回结果:T

(<= 1 2.2 2.2 2.2)返回结果:T

(4)大于等于函数(>= E1 E2 …… En)

当E1≥E2≥……≥En时函数值为T,否则为NIL;

例:(>= 5 4 3 2 1)返回结果:T

(>= 5 4 5 3 2 1)返回结果:NIL

(5)等于函数(= E1 E2 …… En)

当E1=E2=……En时,函数值为T,否则为NIL;

例:(= 1.0 (exp 0)(sqrt 1))返回结果:T

(= 1.0 1.0 1.0 2.0)返回结果:NIL

(6)不等于函数(/= E1 E2 …… En)

只要有任意两个不等,函数值为T;当E1、E2、……、En全部相等时,函数值为NIL;例:(/= 1.1 1.1 1.1 2.2)返回结果:T

(/= 1.1 1.1 1.1 1.1)返回结果:NIL

4.逻辑运算函数:

(1)逻辑与函数:(AND E1 E2 …… En)

只有全部表达式的值均不为NIL,函数值为T;

只要有一个表达式的值为NIL,函数值为NIL。

例:(AND 1 2 3 T)返回结果:T

(AND t t t NIL)返回结果:NIL

(2)逻辑或函数:(OR E1 E2 …… En)

只要有一个表达式的值不为NIL,函数值为T;

只有全部表达式的值都为NIL,函数值为NIL。

例:(OR NIL NIL ’A)返回结果:T

(OR (= 5 3)(<= 5.8 1.25 NIL))返回结果:NIL

(3)逻辑非函数:(NOT E)

当E的值为NIL,函数值为T;当E的值不为NIL,函数值为NIL。

例:(NOT NIL)返回结果:T

(NOT ’A)返回结果:NIL

5.简单输入函数:

(1)(Getint [提示文字])

输入一个整数,返回这个数。

例:(Setq z (Getint “\n齿轮的齿数”))

(2)(Getreal [提示文字])

输入一个实型数,返回这个数。

例:(Setq a (Getreal “\n活塞的面积”))

(3)(Getpoint [点] [提示文字])

输入一个点位,返回这个点表。若给出<点>,则由<点>向拾取点拉出橡皮筋光标。

例:(Setq p0 (Getpoint “point:”)

p1(Getpoint p0 “:”))

(4)(Getdist [基点] [提示文字])

输入一个距离值,返回距离的实型数。

1)不指定基点,可输入一个距离值或用输入两点指定距离;

2)指定基点,可输入一个距离值或相对<基点>输入另一点指定距离;

例:(Getdist “Point”)

(Getdist ’(10 10) “Other point:”))

(5)(Getangle [基点] [提示文字])

输入一个角度,返回弧度值表达的角。

1)不指定基点,可输入一个角度值或用输入两点指定两点连线与X轴的夹角;

2)指定基点,可输入一个角度值或相对<基点>输入另一点指定两点连线与X轴的夹

例:(Getangle “Point”)

(Getdist ’(10 10) “Other point:”))

(6)(Getstring [提示文字])

输入一个字符串,返回字符串。

例:(Getstring “\nEnter a string”)

执行:Enter a string:ABCDEF

返回:“ABCDEF”

(7)(Polar [基点] [角度] [距离])

按给定的[基点],依据给定的[角度]和[距离]确定一点,并

返回这个点。

·角度:新点与基点连线与X轴之间的夹角,单位为弧度,

逆时针方向为正;

·距离:新点与基点之间的距离;

例:(Polar ’(10.0 10.0)(/ PI 2)20.0)

返回结果:(10.0 30.0)

6.常用显示函数:

(1)(Prin1 [表达式] [文件操作符]])

显示(或向文件写入)<表达式>的返回值。

·若不含任何变元,返回一个空字串;

·若在用户函数最后一行使用,返回一个空行,可提供方便地结束程序执行的方法;

·在输出的字串中控制字按愿意使用。

例:(Prin1 “HELLO”)

返回结果:“HELLO”“HELLO”

(Prin1 “HELLO”)(Prin1)

返回结果:“HELLO”

(2)(Princ [表达式] [文件操作符]])

显示(或向文件写入)<表达式>的返回值。(与Prin1类似)

·对于字串,显示时去掉双引号;

·在输出的字串中控制字有效。

例:(PrinC “\n结果:\nA值=”)(Princ 33.2)(Princ “mm”)(Princ)返回结果:结果:

A值=33.2mm

(3)(PrinT [表达式] [文件操作符]])

与Prin1类似,显示任何<表达式>的返回值。

·输出表达式的值之前,自动回车换行到新一行的开始,打印出表达式值之后,自动留一空格。

·在输出的字串中控制字按愿意处理。

例:(PrinT “A=”)

(PrinT 123)

(PrinT “PRINT”)

(Princ “PRINC”)

返回结果:A=

123

“PRINT”PRINC

(4)(Prompt 字符串)

把文字信息显示到图形屏幕的提示区中。

(5)(Alert “提示字串”)

弹出“AutoCAD信息”对话框,显示“提示字串”所提供的信息。

例:(Alert “没有选中任何对象\n请再试一次”)

注:信息框中所能显示的字串行数及每行的长度由操作系统中的相关设置决定(如:显示分辨率、系统字体大小等)。

7.表处理函数:

(1)(Car 表)

返回<表>中的第一个元素。可用于取出二维点或三维点的X坐标。

例:(Car ’(a b c))返回结果:A

(Car ’((a b) c))返回结果:(A B)

(2)(Cdr 表)

以<表>的形式返回<表>中除第一个元素以外的其它元素。

例:(Cdr ’(a b c))返回结果:(B C)

(Cdr ’((a b)c))返回结果:(C)

Car Cdr的嵌套:

·CAR:取出二维点或三维点的X坐标;

·CADR:取出二维点或三维点的Y坐标;

·CADDR:取出三维点的Z坐标。

例:(Setq pt3(Getpoint “\n基点:”))假如返回(5.25 1.0 2.0)

(Car pt3)返回结果:5.25

(Cadr pt3)返回结果:1.0

(Caddr pt3)返回结果:2.0

(3)(List 表达式)

把所有的表达式的返回值组成一个新表,返回这个表。

·<表达式>的返回值可以是表、字串或数值;

·该函数通常用于生成二维或三维点位。

例:(List ’A(List 1.2 33 56))返回结果:(A(1.2 33 56))(List 33.9 4.8)返回结果:(33.9 4.8)

(Setq p (Getpoint “Base point:”)x (Car p)y (Cadr p)

p1(List x (+ y 20))p2 (List (-x 109.5)(+ y 20)))

(4)(Nth n list)

取出List表中的第n个元素。表中的第一个元素为n = 0

例:Command:(Setq test ’(“ABC” 1.0 “DEF” 2 3 4 “END”))Command:(Nth 2 test)

Lisp return:“DEF”

(5)(Last list)

取出list表中的最后一个元素。

例:Command:(Last test)

Lisp return:“END”

(6)(Cons item1 item/list)item1、item为元素;list为表。

·(Cons item1 item)返回(item1 .item)点对表;

·(Cons item1 list)返回将item1附加到list开头的表。

例:(Setq A(Cons 1 2))返回结果:(1.2)

(Setq B (Cons 12.3 test))返回结果:(12.3 “ABC” 1.0 …)(7)(Subst newitem olditem list)

将list表中的olditem项用newitem项替换,返回替换后的新表。若表中没有olditem项存在,则函数值为原表。

例:(Setq S ’(a b (c d)b))返回结果:(A B (C D)B)(Subst ’qq ’b s)返回结果:(A QQ (C D)QQ)

8.系统变量控制函数:

(1)(Getvar “variable”)

获取AutoCAD系统变量的当前值。V ariable:AutoCAD系统变量名。

例:(Getvar “Ltscale”)返回结果:1.0

Ltscale:确定全局线型比例系数。

(2)(Setvar “variable”value)

为AutoCAD系统变量赋值。V ariable:AutoCAD系统变量名。

例:(Setvar “Ltscale”15.0)返回结果:15.0

9.Defun函数:

用于在AutoLISP程序中定义函数。

格式:(Defun name [argument])

·name :函数名;

·argument:变量名;具体格式:(Ar1 Ar2 ……Arn / V1 V2……Vn)

★Ar1 Ar2 ……Arn:调用本函数时必须提供的变元,同时也是本函数的局部变量;

★V1 V2……Vn:本函数定义体中使用的局部变量;

★“/”前后必须有空格。

★全局变量:对特定的函数调用后,仍然保留其值的变量(保留在系统内存中)。

★局部变量:对某一函数调用后,其值为NIL的变量(不保留在内存中,其它函数无法引用,变元表中出现的变量,都是本函数的局部变量)。

例1:(Defun ADNUM())

此函数没有局部变量,即程序中所有变量都是全局变量。全局变量在程序结束前不会丢失变量值。

例2:(Defun ADNUM(a b c))

此函数具有三个局部变量a,b,c,这些变量的值将在程序外部获得。

此函数具有三个局部变量a,b,c,这些变量是本函数

定义体中使用的变量。

例4:(Defun C:ADNUM())

函数名前加上C:后,在AutoCAD的Command:提示

下直接输入函数名就可以执行该函数;如果没有C:,则应把函

数名括在括号中才能执行。

10.IF函数:

格式1:(If test Expression1 Expression2)

当测试式test成立(不为NIL)时,执行Expression1;

当测试式test不成立(为NIL)时,执行Expression2;

该函数返回被计算的表达式的值。

例:(If (= 1 3)“YES!!”“No.”)“No.”

格式2:(If test Expression)当测试式test成立(不为NIL)

时,执行Expression,返回其值;

当测试式test不成立(为NIL)时,返回NIL;

例:(If (= 2 (+ 1 1))“EQUAL!!”)“EQUAL!!”

(If (= 2 (+ 3 4))“SA VE!”)NIL

·格式:(While test Expression…)

只要测试式test成立(不为NIL),则重复执行诸

Expression,在每个循环中,While函数测试test条件,若不为NIL,

则执行右括弧为止的诸语句。

·返回值:返回最后循环的最后一个计算值,在无一循环被执行

时,返回NIL。

·执行过程:首先计算测试式test的值,若为真(T),则顺序

执行Expression,然后再计算测试式的值。如此循环下去,当某次测

试式的值为NIL时,结束循环,跳转到While语句后的语句继续执行。

例:(Setq a 1)

(While (<= a 10)

(Some-func a)

(Setq a (1+ a))

)此函数调用some-func函数10次。

12.Progn函数:

格式:(Progn Expression…)

计算一系列Expression语句,返回最后计算的Expression的值。

例:(If (> a b)

(Progn

(Setq a (- a 10))

(Setq b (+ b 10))

注:Progn函数可以与If函数联合使用用于计算多个表达式。13.(Command)函数:

(1)功能:用于在AutoLISP中执行ACAD命令,返回值总是NIL。

(2)格式:(Command Expression )

(3)表达式类型:

①AutoCAD命令名:调用AutoCAD命令,可以是内部命令或外部命令。

例:(Command “LINE”)

②变量名或表达式:向命令行加入参数。相当于在Command:直接敲入相关表达

式。例:(Command (List x (+ dy y)))

③“” :回车(RETURN)。

例:(Command “”)

④无参数:Esc,相当于按下Esc键。

例:(Command)

(4)说明:

①(Command)函数中不识别在ACAD.PGP中定义的命令别名;

②如果系统变量CMDECHO设为0,则Command函数执行命令的过程将不会在命令

行上显示出来,可明显提高程序运行速度;

③GetXXX族函数不能在Command函数内使用,可在调用Command函数前或相邻

的Command函数间调用;

④原则上,Command函数中引用AutoCAD命令的具体格式和对于命令提示的响应顺

序与在“Command”:提示下交互操作是相同的。但对于回车的使用描述有些区别:

·表示“输入结束”的回车不需要写入;

·表示使用“默认值”或“默认响应”的回车必须写入。

例:Command:Circle

3P/2P/TTR/

:指定圆心点

Diameter/<20.00>:RETURN (取默认值)

在Command函数中:(Command“Circle”pt “”)

5.实例:指定左下角点、宽度和高度、圆角半径,绘制一个矩形。

(1)交互操作试验:

Command:RECTANG

Chamfer/Elevation/Fillet/Thickness/Width/

corner>:f

Fillet Radius For Rectangles<0.0000>:10

Chamfer/Elevation/Fillet/Thickness/Width/

corner>:指定第一角点

Other Corner:指定另一角点

(2)编写程序,按试验的结果引用命令:

(Defun C:Ibox()

(Setq ip (Getpoint “\n左下角点:”)

ix (Car ip)iy(Cadr ip)

iw (GetDist “\n宽度:”)

ih (GetDist “\n高度:”)

ir (GetDist “\n圆角半径:”)

(Command “RECTANG”“f”ir ip (List (+ ix iw)(+ iy ih)))

(PrinC)

(3)说明:

①对AutoCAD命令的理解和熟练程度,将直接影响到上述应用程序的效果,因此,

在交互操作下的试验是十分必要的。

②追求的目标是:最少的“击键次数”,最少的“命令引用”,最少的“数据输入”,

在满足要求的条件下,“简单”的设计才是“有水平”的设计。

八、在AutoLISP绘图程序中组织和使用对象选择集

1.获得AutoCAD实体名称:

(1)(Entlast)

获得Database中(未删除的)最末个实体的名称。

(2)(Entnext ename)

获得图形数据库中ename的下一个实体的名称;未指明ename 时,获得数据库中第一个实体的名称。

(3)(Entsel prompt)

返回所选实体的名称及选取该实体的选点坐标。只能用点去选,不能用Window选,提示参数的缺省值是Select objects.

例:演示

2.实体选择集的操作:

(1)(Ssget [方式] [点-1] [点-2] [点表] [过滤器表])

返回一个对象选择集,最多可有128个选择集同时存在。(Ssget)在组建选择集时忽略当前Osnap的设置。

1)<方式>码:

“W”—对应AutoCAD的Window对象选择方法;

“C”—对应AutoCAD的Crossing对象选择方法;

“L”—对应AutoCAD的Last对象选择方法;

“P”—对应AutoCAD的Previous对象选择方法;

“X”—对应AutoCAD的All对象选择方法。

例:(Ssget)——用户选择;

(Ssget “P”)——生成一个由最近选择的对象所组成的选择集;

(Ssget “X”)——生成一个包含图形数据库中的全部对象的选择集;

(Ssget ’(120 100))——生成一个通过点(120 100)的那个对象所组成的

选择集。

(S sget “w” ’((10 10)(30 30)))——生成一个选择集,该选择集由

两点组成的窗口内的那些对象组成。2)使用过滤器表:

·AutoCAD将会在执行中提示“选择对象:”,并对所选对象按过滤器表的描述进行筛选,不接受过滤器表所确定的条件之外的对象;

·过滤器表的组码是(Entget)函数返回的对象表中可能的组码;

·例:0—对象类型(0 . “line”)

2—块名(2 . “ccd”)

6—线型名(6 . “center”)

7—字体名(7 . “standard”)

8—层名(8 . “dim”)

62—颜色(62 . 1)

例:(Setq a (Ssget “X” ’((0 . “line”)(8 . “AID”)(62 . 1)))把在“AID”层中,颜色号为1的全部直线收入A中。

(2)(Ssname selection_set number)

返回selection_set中第number个实体的名称。

注:实体集中第一个实体的编号为0。

例:(Setq sset (ssget))

(Ssname sset 0)返回set中第1个实体的名称。

(Ssname sset 3)返回set中第4个实体的名称。

(3)(Ssadd ename selection_set)

把指定对象的<对象名>加入到<选择集名>指定的选择集中,返回新的选择集。

·如果只给出<对象名>,则返回一个仅有该对象的选择集;

·无任何选择项,返回空的预置的选择集(为其后的添加做准备)。

·特殊地:向选择集中加入新对象时,可将(Setq ss (Ssadd ename ss)

AutoLISP-程序创建过程

AutoCAD开发VisualLISP程序 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。 首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。 VisualLISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 实例:最简单的LISP程序——“Hello.lsp” Step1创建新文件 (1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。

(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。Step2输入代码并保存文件 (1)在编辑窗口中输入源文件“Hello.lsp”的代码。程序清单如下:;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!"); 调用“Commnad”函数与AutoCAD进行通信 (2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。 Step3运行LISP程序 (1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。 (2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图

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基础教程 单元一:AutoLISP主角潇洒登场 一. AutoLISP 是何方神圣? 1、AutoLISP是AutoCAD的最佳拍檔! 2、AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能! 若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张! 5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序! 语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格! 功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已! 撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等 直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感! 横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是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 支持软件。

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不同的是,任选的实体定义字段不管是否和它们的缺省值相等都将被输出.这样做的

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()

autolisp函数大全.doc

函数大全 一、数学运算功能函数 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

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. 对设计人员而言:

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功能函数大全

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函数

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

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.18pi常数∏,其值约为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坐标 4.4(cadr列表)返回列表中的第二个元素,通常用来求y坐标 4.5(caddr列表)返回列表中的第三个元素,通常用来求Z坐标 4.6(cdr列表)返回:除去第一个元素后的列表 4.7(cons新元素列表)返回:将新元素添加到列表 4.8(foreach名称列表表达式)返回:将列表的每一元素对应至名称再根据表达式执行响应 4.9(length列表)返回:列表内的元素数量

相关主题
文本预览
相关文档 最新文档