CADLISP函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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组合而成的函数
car与cdr是取表元素的基本函数。

这两个函数可以组合起来使用,从而获得表中的其它元素,例如 cadr。

这种组合最多可达四级,即最多六个字符,如 caddar。

AutoLISP执行这组合函数时先从后面做起。

例如:(caddr ’(1 2 3))返回3
(caddr ’(a (b c) d))返回(c)
也就是说,若L为一张表,则有:
(cadr ’L)〈=〉(car(cdr L))
(cdadar ’L)〈=〉(cdr(car(cdr(car ’L))))
5.(last 表)取表中最后一个元素
6.(nth n 表)取表中第n个元素(第一个元素的序号为0)
7.(list 表达式……)建立表函数
8.(length 表)测量表长
9.(append 表1 表2 ……)连接表函数
10.(cons 新元素表)向表中添加元素
11. (subst 新项旧项表)元素替换函数
12.(reverse 表)表倒置函数
13.(assoc 关键字关联表)assoc 函数。

该函数在“关联表”中搜索“关键字”,并返回关联表中对应元素。


索无结果,则返回NIL
14.(member 表达式表)member函数。

该函数在“表”中搜索“表达式”,并返回一张由第一次出现的“表达式”
及其后面所有元素构成的新表。

15.(foreach 变量名表表达式……)foreach函数。

该函数依次将“表”中的每个元素的值赋给“变量名”对
表中的每个元素计算每个表达式的值。

函数返回最后一个表达式的计算结果。

16.(apply 函数表)Apply函数。

以表为变元,执行“函数”给定的函数。

如:
(apply ’+’(1 2 3))返回 6
(apply ’strcat’(“a”“b”))返回“ab”
Apply既可用于内部函数,也可用于用户定义的函数。

17.(mapcar 函数表1 表2……)mapcar 函数。

它执行“函数”给定的函数,并以后面各表中的每个元素作为
函数的变元。

如:
(mapcar ’1+’(10 20 30))返回(11 21 31)
(mapcar ’+’(10 20 30)’(4 3 2))返回(14 23 32)
▲Apply函数的操作对象是单个表中的所有元素;mapcar函数则每次只处理多个表中的对应元素,依次处理,直到结束。

自定义函数
1.defun函数
格式:(defun 函数名变量表表达式……)
其中变量表被一个前后均有空格的斜杠符号“ / ”分成两部分(形参 / 局部变量):形参在调用函数时接受参数传递而转换为实参;局部变量仅用于函数内部
1)变量表可以是空格,此时调用函数时无参数传递。

2)变量表中的形参与局部变量均只在所定义的函数中起作用,甚至可以与某外部变量同名,而不会对
外部变量造成任何影响
2.defun函数定义AutoCAD新命令
格式:(defun C:命令名()表达式……)
其中:“命令名”前必须有“C:”,后面必须带一张没有形参的变元表。

mbda函数
格式:(lambda 变元表表达式……)
该函数定义一个无名函数。

在经常需要使用某一表达式,而又没必要用defun将它定义为一个新函数时,可使用lambda来完成这个任务。

它返回最后一个表达式的值,且经常与apply和mapcar一起使用。

如:(apply ’(lambda (x y z )(* x(- y z)))’(5 20 14))
返回30,即5*(20-14)。

又如:
(mapcar ’(lambda (x)(* x 5))’(2 4 -6 10.2))
返回(10 20 -30 51.0)
数据交换及相关的计算函数
1.(getint [提示]) 整数输入函数
2.(getreal [提示]) 实数输入函数
3.(getstring [cr] [提示]) 字符串数输入函数。

字符串最大长度为132个字符。

如果提供了cr且cr不为NIL,
则输入的字符串中可以有空格,此时只有用回车来终止输入,否则可以用空格终止输入。

4.(getpoint [基点] [提示]) 点输入函数
5.(getdist [基点] [提示]) 距离输入函数。

等待用户输入一个距离值或用光标输入两个点,返回两点间的距离。

若有基点,则只需再输入一个点,该点与基点间的距离就是输入的值。

6.(getcorner 基点 [提示]) 矩形对角点输入函数。

他必须有基点,且当用户移动光标时,屏幕上画一个由基
点和当前光标点为对角点的矩形。

7.(getangle [基点] [提示]) 角度输入函数。

等待用户输入一个角度,并将该角以弧度值返回。

度量角度时,
以变量ANGBASE设置的当前角度为零弧度,逆时针方向为正。

用户可以键盘输入角度。

也可以指定屏幕上两个点的方式输入角度,此时两点间连线与零度基准线的夹角就是输入的角度。

若指定了“基点”,则可输入一个点来获取角度。

后两种方式屏幕上会出现拖动线。

8.(getorient [基点] [提示]) 方位角输入函数。

和getangle唯一不同的是getorient的零度基准方向是水平
向右的
9.(initget [位值] [关键字符串])输入控制函数。

该函数为其后使用getХХХ函数建立各种选项。

“位值”控
1 关键字
2 关键字3,缩写……”。

每个关键字间用空格分隔,逗号后面是缩写部分。

有两种方式定义关键字的缩写:一是把保留的缩写字母大写,其余部分全用小写字母;二是缩写字母放在整个关键字后面(全部用大写字母表示缩写),并用逗号将它们分隔开。

注意:iniget建立的控制标记和关键字表只对紧跟其后的getХХХ函数产生作用,然后被自动清除。

此外,iniget 函数不用于getstring和getvar函数。

10.(getkword [提示])关键字输入函数。

要求用户输入一个关键字。

在调用本函数之前需先用iniget函数设置
一个关键字表。

Getkword把与用户输入相匹配的关键字作为字符串返回。

11.(angle 点1 点2)求方位角函数。

返回弧度值。

12.(distance 点1 点2)求两点间距离函数。

3D的。

13.(polar 点角度距离)求另一点的坐标函数。

角度是以弧度为单位的。

14.(inters 点1 点2 点3 点4 [方式])求交点函数。

其中点1和点2为第一直线,点3和点4为第二直线。

“方
式”控制求交点的方式,即若此处有值且为NIL时,该函数允许交点在这两条线段的延长线上;若无方式或不为NIL,则函数只求两线段内的交点。

若无交点,返回NIL。

与文件有关的函数
1.(load 文件名 [出错处理])AutoLISP应用程序加载函数。

该函数装入一个AutoLISP程序文件,并执行之。

2.(ads)ads函数。

返回当前装入的ADS应用程序及ARX应用程序的列表。

3.(arx) arx函数。

返回ARX应用程序的列表
4.(arxload 文件名 [出错处理])arx程序加载程序。

5.(xload 文件名 [出错处理])ads程序加载程序。

6.(arxunload 文件名 [出错处理])arx程序卸载程序。

7.(xunload 文件名 [出错处理])ads程序卸载程序。

8.(unload 文件名 [出错处理])AutoLISP应用程序卸载函数。

9.(autoarxload 文件名命令列表) arx程序自动加载程序
10.(autoload 应用程序名命令列表) AutoLISP应用程序自动加载函数。

11.(autoxload 应用程序名命令列表) ADS应用程序自动加载函数。

12.(tartapp 应用程序命令文件)WINDOWS应用程序启动函数。

13.(open 文件名读/写标志)打开文件函数。

“r”为读,“w”为写。

“a”向旧文件中读写的内容(该文件中应
没有以CTRL/Z表示的文件结束符)。

“w”和“a”状态下,可新建一个文件。

文件名中含路径时,要以“/”
代替“\”。

如:(setq f(open “new.txt”“w”))
14.(close 文件描述符)关闭文件函数。

如:(close f)
15.(read 字符串)读取函数。

该函数返回从字符串中取得的第一个表或元素。

16.(read-char [文件描述符])读字符函数。

该函数从键盘输入缓冲区或从“文件描述符”表示的打开文件中读
入一个字符,并返回该字符的ASCII码。

17.(read-line [文件描述符])读行函数。

和read-char类似。

只是返回一行的字符串。

每执行一次,指针指向
下一行。

18.(write-char 整数 [文件描述符])写字符函数。

整数是要写字符的ASCII码。

写到屏幕或“文件描述符”
表示的打开的文件中。

19.(write-line 字符串 [文件描述符])写行函数。

字符串要用引号,返回一个字符串。

20.(prinl [表达式 [文件描述符]])prinl函数。

该函数可以将“表达式”打印在屏幕上或文件中,返回表达
式。

表达式可以是含控制字符的字符串。

\e代表ESC
\n代表换行
\r代表回车
\t代表tab
\nnn代表八进制码为nnn的字符,例如:
(prinl “hello”) 打印“hello”
(prinl “hello” f) 将“hello”写入文件中
(prinl (char 2)) 打印“002”
(prinl (char 10)) 打印“\n”
21.(princ [表达式 [文件描述符]]) 和prinl基本相同,区别是它能在表达式中实现控制字符的作用。

一般的,
prinl打印表达式的方法和load相兼容,而princ打印的表达式可以由如read-line这样的函数读出。

22.(print [表达式 [文件描述符]])和prinl基本相同,只是前面换行和打印之后加空格。

23.(terpri)在屏幕上打印一个空行。

不用于文件的I/O操作。

24.(prompt 信息)提示函数。

25.(findfile 文件名)文件查找函数。

其他函数
1.(command AutoCAD命令参数……)
注意:(1)一个空字符串(“”)等效从键盘输入一个空格,通常用于结束一个命令。

(2)空调用(不加任何参数),即(command),等效在键盘上键入Ctrl+C,它取消AutoCAD大多数命令
(3)当AutoCAD命令需要目标选择时,应提供一个包含entsel(实体选择)的表,而不是一个点来选择目标。

(4)下列命令不能与AutoLISP的command函数一起使用:dtext,sketch,plot和prplot。

(5)用户输入函数getХХХ不能在AutoLISP的command函数中使用。

此外,command函数还具有暂停功能。

当变量中出现PAUSE时,command函数暂停,以便用户进行某些操作。

2.(menucmd 字符串)menucmd函数。

该函数可以实现AutoCAD菜单中各子菜单之间的转换。

格式为:
菜单类型名=子菜单名
菜单类型名为:S,B,I,P1~P10,T1~T4,A1等,其含义和菜单文件中的规定相同。

如:
(command “s=line”)
3.(getenv 环境变量名)getenv函数。

返回赋给系统环境变量的字符串。

环境变量名是要读取的内容,若不存
在则返回NIL
4.(getvar 系统变量名)getvar 函数。

提取AutoCAD系统变量的值。

如:最近一次设定的倒角半径为0.25,则:
(getvar “FILLETRAD”)返回0.25
5.(setvar系统变量名值)设定系统变量的值。

CAD命令的setvar在设定ANGBASE时按度为单位,setvar函数
按弧度为单位,再设定SNAPANG时setvar函数为相对于屏幕坐标X轴正方向的弧度值,而setvar命令为相对于ANGBASE的度。

6.(osnap 点捕捉方式)按捕捉方式的要求,根据点去寻找所要求的点。

如:
(setq pt2(osnap pt1 “mid”))表示根据pt1去捕捉目标的中点,并赋值给pt2。

7.(vports)返回当前的视窗说明表。

这个表由视窗标号及视窗左下角、右上角的位置构成的表。

该函数与系统
变量TILEMODE的值有关。

8.(type项)返回项的类型。

类型有:
REAL 实型数
FILE 文件描述符
STR 字符串
INT 整型数
SYM 符号
LIST 表及用户函数
SUBR AutoLISP内部函数
PICKSET AutoLISP选择集
ENAME AutoLISP实体名
PAGETB 函数分页表
9.(redraw [实体名[方式]])该函数的操作取决于变量的个数:
1.无变量时相当于AutoCAD的REDRAW命令。

2.有实体变量名时,仅重画该实体。

3.若两个变量都有,方式变量控制重画的方式。

11.(textscr)将图形屏幕转换为文本屏幕。

12.(textpage)将图形屏幕转换为文本屏幕,并清除该文本屏幕。

13.(trace 函数名……)该函数为一个辅助调试工具。

他为指定的函数设置跟踪标志。

14.(untrace 函数名)解除函数的跟踪。

15.(eval 表达式)返回表达式的计算结果,其中表达式为任何LISP表达式。

16.(ver)返回当前AutoLISP的版本号。

17.(*error* 字符串)自定义出错提示。

实体和设备访问函数
1.(ssget [方式][点1 [点2]])该函数得到一个选择集。

方式指定了选择实体的方式,有:
W(窗口) C(交叉) L(最新的) P(前一个)等,如:
(ssget “W”’(0 0)’(5 5))选择在角点(0 0),(5 5)窗口内的实体
(ssget “C”’(0 0)’(5 5))选择在角点(0 0),(5 5)窗口内以及与其相交的实体
(ssget ’(2 2))选择通过点(2 2)的实体
(ssget “L”)选择最后完成的实体
(ssget “P”)选择前一次选过的实体
(ssget )要求用交互式选择实体
该函数返回(selection set:n)。

n为选择集的序号。

AutoCAD规定每次构成的选择集的个数不能多于六
个。

通常将选择集赋值给一个变量。

如:
(setq s (ssget “p”))
函数还有按“过滤表”的要求来构造选择集的方式。

形式为(ssget “x”过滤表)。

过滤表为一关联表,它指明要检查的实体特性及匹配值。

如:
(ssget “x”(list (cons 0 “circle”)))
将返回由图中所有圆组成的选择集。

如果过滤表中含有一个以上的关联表,则选择集中的每个实体必须满足所有的条件。

过滤表中可以使用通配符。

2.(sslength 选择集)返回选择集的长度。

3.(ssname 选择集索引号)返回选择集中一个实体的名称,该实体在选择集中的序号为其索引号。

如:
(setq entx (ssname sset 600))取出选择集sset中第601个实体的名称
4.(ssadd 实体名 [选择集])向选择集中加入新实体。

若无选择集,则构成新选择集。

若无任何变量,则返回
一个新的空选择集。

5.(ssdel 实体名选择集)从选择集中删除指定实体。

6.(ssmemb 实体名选择集)测试给定实体是否在选择集中。

若在,则返回实体名,否则返回NIL。

7.(entnext [实体名])返回数据库中实体名之后的那个实体。

若无变量调用,则返回数据库中第一个实体。


ssget函数构成的选择集中只有主实体名。

但一个复杂实体除了主实体外,还有一些子实体。

如块的属性及多义线的顶点等。

用entnext函数可顺序找出各子实体
8.(entlast)返回数据库中最后一个实体的名称。

9.(entdel)删除当前图中的指定实体。

若在本次编辑中该实体已被删除,则调用本函数可将其恢复。

但它只
能在删除实体的那次编辑中使实体恢复。

块中定义的实体不能被删除。

10.(entsel [提示])要求用户以交互的方式选择一个实体。

选择实体时只能采用选点的方式,返回一张表:(实
体名选择点)。

11.(nentsel [提示])用于存取包含插入的实体(内部块)定义数据。

若被选择的实体不是一个复杂实体(多义
线和块),nentsel和entsel返回的信息一个。

若被选择实体是多义线,则nentsel返回包含子实体(顶点)和选取点的一个表。

当被选择目标是一个块时,netsel返回包含描述下一个块的四个元素的一个表。

12.(entget 实体名 [任选集])根据实体名在数据库中检索实体,返回实体定义数据的一张表,用assoc函数可以
从中检索到每一个项。

表中的内容是用AutoCAD的 .DXF文件的组码的形式定义的。

若提供了记录应用程序名的任选表,则返回上述表的同时返回相关指定应用程序的扩展实体数据。

13.(entmake 实体定义数据表)在图中生成一个新的实体:若成功则返回数据表,否则返回NIL。

其变量必须是一个实体的定义数据表,该表与entget函数返回的表格式相似,且必须提供实体的所有信息。

生成一个实体的一种方法是用entget函数获取一个实体的定义数据,然后对其进行修改后加入图中。

如:按圆心坐标(4,4)、半径为1绘制一个红色的圆。

层和线型为缺省值:
(entmake’((0“CIRCLE”) ;实体类型
(62 1) ;颜色
(10 4.0 4.0 0.0);中心点
(40 1.0) ;半径
)
)
14.(entmod实体定义数据表)更新实体数据库中的信息。

变量为一个修改过的实体定义数据表。

如:
(setq en (entnext)) ;置en为库中第一个实体的名
(setq ed(entget en)) ;置ed为en的实体定义数据表
(setq ed(subst(cons 8 “0”)
(assoc 8 ed) ed) ;将ed中图层组设为“0”层
)
(entmod ed) ;更新数据库中的内容
本函数的限制:
1.不能更改实体类型和标号。

2.实体表引用的所有对象必须是AutoCAD以知的,如文本类型、线型、形、块等必须预先定义好。

此外,修改主实体时,本函数更新其屏幕显示(包括子实体),当修改子实体时,entmod只修
改数据库中内容,而不更新屏幕显示。

15.(entupd 实体名)更新子实体的屏幕显示。

16.(handent 实体标号)返回当前编辑期间使用的与实体标号相对应的实体名。

注意:本函数中实体标号是以字符串的形式传递的。

17.(regapp 应用程序名)注册具有当前图形的应用程序名。

18.(xdroom 实体名)返回足够用于实体的扩展实体数据(xdata)空间。

19.(xdsize 表)变量表是一个有效表。

Xdsize返回当用户把表作为扩展实体数据添加到一个实体时,表占用的
空间大小。

20.(tblnext 表名 [返转]) 返回一个DXF类型的点对表,它与entget返回的值类似。

本函数根据第一个变量“表
名”的要求对整个符号表进行检索。

表名以字符串的形式给出,是希望获得的符号表的名称。

它可以是“LAYER”,“LTYPE”,“VIEW”,“STYLE”,“BLOCK”,“APPID”,“DIMSTYLE”,“UCS”和“VPORT”。

当重复调用此函数时,一般每次返回符合指定表中下一个实体。

当第二个变量给出且不为NIL时,则转到符号表头并返回表中的第一项。

如:
(tblnext “layer” T)
返回:
((0 “LAPER”);符号类型
(2 “0”) ;符号名
(70 0) ;标志
(62 7) ;颜色
(6 “CONTINUOUS”) ;线型名
)
21.(tblsearch 表名符号 [设置下一个])搜索用“表名”指定的符号表,寻找用“符号”指定的符号名。


找到,则有关信息用与tblnext一样的格式返回。

22.(grdraw 起点终点颜色 [高亮度])在当前视窗中的两点之间画一条矢量线。

“颜色”若为-1,则按异或方
式画。

若有“高亮度”则该矢量以高亮度显示。

23.(grtext [框文本 [高亮度]])该函数可将文本写在图形屏幕的文本区内。

若有“框”,则在指定的屏幕菜
单框内写字符串,该字符串就是“文本”的内容。

24.(grread [跟踪])用户可以使用该函数直接读AutoCAD输入设备。

返回一个表,表的第一个数是输入类型的
编码(整数)。

如:2键盘字符,3选择的点,4屏幕菜单单元选择,6按钮菜单项选择等。

“跟踪”指定是否对定标器的移动进行跟踪。

相关文档
最新文档