CADLISP函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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按钮菜单项选择等。
“跟踪”指定是否对定标器的移动进行跟踪。