AUTO LISP函数参考
AUTOLISP函数

AutoLisp函数一、数学运算功能函数1.l(十数值数值…)返回:累计实数或整数数值1.2(一数值数值…)返回:差值1.3(*数值数值…)返回:所有数值乘积1.4(/数值数值…)返回:第一个数值除以第二个以后数值的商1.5(l十数值)返回:数值十ll.6(1—数值)返回:数值一ll.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.14159261.19(rem数值1数值2)返回:M数值的相除的余数l.20(sin角度)返回:角度的正旋值,角度值为弧度1.21(sqrt数值)返回:数值的平方根二、检验与逻辑运算功能函数2.l(=表达式1表达式2)比较表达式1是否等于式2,适用数值及字符串2.2(/=表达式1表达式2)比较表达式1是否大于等于表达式22.3(<表达式1表达式2)比较表达式1是否<小于表达式22.4(<=表达式1表达式2)比较表达式1是否<一小于等于表达式22.5(>表达式1表达式2)比较表达式1是否>大于表达式22.6(>=表达式1表达式2)比较表达式1是否大于等于表达式22.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列表)返回:列表内的元素数量4.10(list元素元素…)返回:将所有元素合并为一列表4.11(listp元素)返回:判断元素是否为一串4.12(mapcar函数列表1列表2…)返回:将列表1、列表2列表的元素配合函数,求得新列表4.13(member关键元素列表)返回:根据关键元素(含似后的列表4.14(nth n列表)返回:列表的第n个元素4.15(reverse列表)返回:将列表元素根据顺序颠倒过来的列表4.16(subst新项旧项列表)返回:替换新旧列表后的列表五、字符串、字符、文件处理函数5.l(ascii字符串)返回:字符串第一个字符的“ASCII”码5.2(chr整数)返回:整数所对应的ASCII单一字符串5.3(close文件名称)关闭文件5.4(open文件名模式)返回:打开文件代码,准备读取或写入信息5.5(read字符串)返回:列表中的字符串的第一组元素5.6(read-char[文件代码])返回:通过键盘或文件中读取单一字符5.7(read-line[文件代码])返回:经由键盘或文件中读取一行字符串5.8(strcase字符串[字样])返回:转换字符串大小写5.9(strcat字符串1字符串2…)返回:将各字符串合并为一个字符串5.10(strlen字符串)返回:字符串构成的字符数(即字符串长度)5.11(substr字符串起始长度)返回:取出于字符串‘5.12(wcmatch字符串格式)返回:T或nil,将字符串与通用字符进行比较5.13(write-char数值[文件代码])返回:将一ASCII字符写到文件或屏幕15.14(write-line字符串[文件代码])返回:将字符串写到文件或屏幕上六、等待输入功能函数6.l(getangle[基点][提示])请求输入十进制角度数值,响应一个弧度值提示及参考点可有可无6.2(getcorner基点[提示])请求输入另一矩形框对角点坐标6.3(getdist[基点][提示])请求输入一段距离6.4(getint[提示])请求输入一个整数值6.5(getkword[提示]请求输入“关键词”6.6(getorient[基点][提示])请求输入十进制角度,响应一弧度值不受angbase、angdir影响6.7(getPoint[基点][提示])请求输入一个点的坐标6.8(getreal[提示]请求输入一个实数6.9(getstring[提示])请求输入一个字符串6.10(initget[位]字符串)设定下次getxxx函数的有效输入七、几何运算功能函数7.l(angle点1点2)取得两点的角度弧度值7.2(distance点1点2)取得两点的距离7.3(inters点1点2点3点4[模式])取得两条线的交点7.4(osnap点模式字符串)按照捕捉模式取得另一坐标点7.5(polar基点弧度距离)按照极坐标法取得另一坐标点7.6(textbox对象列表)取得文字字符串的两个对角点坐标八、对象处理功能函数8.l(entdel对象名称)删除或取消删除对象8.2(entget对象名称[应用程序列表])取出对象名称的信息列表8.3(entlast)取出图形信息中的最后一个对象8.4(entmake对象列表)建立一个新的对象列表8.5(entmod对象列表)根据更新的信息列表更新屏幕上元体8.6(entnext[对象名称])找寻图面中的下一个对象8.7(entsel[提示])请求选取一个对象,响应包含对象名称及选点坐标的列表;8.8(entupd对象名称)更新屏幕上复元体图形8.9(handent图码)返回:图码的元体名称8.10(nentsel[提示])返回:BLOCK所含副元体对象信息列表8.11(nentselp[提示][点])返回:BLOCK所含副元体对象信息似4*4矩形表示)九、选择集、符号表处理函数9.l(ssadd[对象名称][选择集])将对象加入选择集或建立一新选择集9.2(ssdel对象名称选择集)将对象自选择集中移出9.3(ssget[模式][点1][点2]取得一个选择集9.4(ssget”X”[过滤列表])取得根据过滤列表所指定范围的选择集9.5(sslenth选择集)计算选择集的对象个数9.6(ssmemb对象名称选择集)响应对象名称是否包含于选择集内9.7(ssname选择集索引值)根据索引值取出选择集中的对象名称9.8(tblnext符号表名称[T])检视符号表,有效的符号表:”LAYER”、”LTYPE”、”VIEW”、”STYLE”、”BLOCK”9.9(tblsearch符号表名称符号)在符号表中搜寻符号十、AutoCAD相关查询、控制功能函数10.l(command”AutoCAD命令”…)超重量级函数,调用执行AutoCAD命令10.2(findfile文件名)返回:该文件名的路径及文件名10.3(getfiled标题内定档名扩展名旗号)通过标准AutoCAD文件对话DCL对话框获得文件10.4(getenv”环境变量”)取得该环境变量的设定值,以字符串表示10.5(getvar”系统变量”)取得该系统变量的设定值,以字符串表示10.6(setvar”系统变量”值)设定该系统变量的值10.7(regapp应用类项)将目前的AutoCAD图形登记为一个应用程序名称十一、判断式、循环相关功能函数11.1(If<比较式><表达式1>[表达式2]检算比较式结果,如果为真,执行<表达式1>,否则执行<表达式2>11.2(repeat次数[<表达式><表达式>…])重复执行N次表达式11.3(While<比较式><表达式>…)当条件成立则执行表达式内容11.4(cond<比较式1><表达式1>多条件式的if整合功能<比较式2><表达式2><比较式3><表达式3>)11.5(prong表达式1表达式2…)连接其中的表达式为一组,常用于配合if、cond等函数十二、函数处理、定义、追踪与错误处理功能函数12.l(*error*字符串)程序错误时的警示信息12.2(alert字符串)以对话框式显示出警告字符串12.3(apply功能函数列表)将功能函数与列表结合后执行12.4(defun名称自变量列表表达式_.)自定函数或子程序12.5(eval表达式)返回:表达式的执行结果12.6(exit)强制退出目前的应用程序12.7(lambda自变量表达式)定义未命名的函数12.8(progn表达式1表达式2…)连接其内的表达式为一组,常用于配合if、cond等函数12.9(quit)强制退出目前的应用程序12.10(tablet代码[列1列2列3方向])取用或建立对数字板的校调12.11(trace函数…)对函数设定追踪标记,辅助检错12.12(untrace函数…)对函数设定解除追踪标记十三、显示、打印控制功能函数13.l(gfaphscr)作图环境切换到图形画面13.2(grclear)暂时清除模前的屏幕画面13.3(grdraw起点终点颜色[亮显])暂时性的画出一条线13.4(grread[追踪])由输入设备读取追踪值13.5(grtext位置字符串[亮显])将字符串显示在状态列或屏幕菜单上13.6(grvecs向量列表[转置矩阵])暂时性的画出多条线13.7(menucmd字符串);提供在AlltOLISP中调用各菜单13.8(Prinl[表达式[文件代码]]将表达式打印于命令区或已打开的文件句柄字符则以“/”为前缀展开13.9(pinc[表达式[文件代码]]除句柄字符则不以”\”为前缀展外开其余同Prinl13.10(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl 13.11(prompt信息)将信息显示于屏幕的命令区,并随后响应一个nil信息13.12(redraw[对象名称[模式]])重绘整张图或根据对象名称重绘该图形13.13(terpri)在屏幕上显示新列13.14(textscr)作图环境切换到文字画面13.15(textpage)清除文字画面文字类似DOS的cls命令13.16(vports)返回:窗口组态列表十四、符号、元素、表达式处理功能函数14.l(atom元素)如果元素不是列表,响应T,否则为nil14.2(atoms-family格式闲号列表])返回:一组己定义函数的符号列表14.3(boundp表达式)返回:T或nil,响应表达式是否有值存在14.4(minusp元素)返回:T或n儿元素是否为负值14.5(not元素)返回:T或n儿判定元素是否为ni114.6(null元素)返回:T或nil判定元素是否被赋予nil值14.7(numberp元素)返回:T或nil,元素是否为整数或实数14.8(quote表达式)响应表达式未检算前状态,同“‘”功能14.9(set符号表达式)将表达式结果设定给带单引号’符号14.10(setq符号1表达式1[符号2表达式2]…)设定表达式结果给各符号14.11(type元素)返回:元素的信息型态14.12(zerop元素)返回:T或nil,元素是否为0值十五、ADS、ARX、AutoLISP加载与卸载函数15.l(ads)返回:目前加载ADS程序列表15.2(arx)返回:目前加载ARX程序列表15.3(arxload应用程序[出错处理]))返回:加载ARX程序15.4(arxunload应用程序[出错处理]))返回:卸载ARX程序15.5(ver)返回:目前AutoLISP版本字符串15.6(load LSP文件名[加载失败])加载AutoLISP文件(*.lsp)15.7(xload应用程序[错处理])加载ADS应用程序15.8(xunloa应用程序[出错处理])卸载ADS应用程序十六、内存空间管理函数16.l(alloc数值)以节点数值设定区段大小16.2(expand数值)以区段数值配置节点空间16.3(gc)强制收回废内存16.4(mem)显示目前的内存使用状态16.5(xdroom对象名称)返回对象扩展信息允许使用的内存空间16.6(xdsize列表)返回对象扩展信息所占用的内存空间十七、其它重要的功能函数17.l(acad_colordlg颜色码旗号)显示出标准AutoCAD颜色选择对话框17.2(acad_helpdlg求助文件名主题)显示出标准AutoCAD求助对话框17.3(acad_strlsort字符串列表)作字符串列表排序17.4(bherrs)取得bhatch与bpcly失败所产生的错误信息17.5(bhatch点[选择集[向量]])根据Pick point选点方式调用bhatch命令,绘制选集区域的剖面线17.6(bpoly点[选择集[向量]])根据Pick point选点方式调用bpoly命令并产生一定域Polyline 17.7(cal计算式字符串)执行如CAL计算功能十八、ADS、ARX外部定义的3D函数18.1(align自变量1自变量2....)执行如ALIGN命令各选项顺序18.2(c:3dsin模式3DS文件名)导入3DS文件18.3(C:3dsout模式3DS文件名)输出3DS文件18.4(c:background模式[选项])设定渲染背景18.5(C:fog模式[选项])设定渲染的雾效果18.6(C:light模式[选项])设定渲染的灯光控制18.7(c:lsedit模式【选项1】设定渲染的景物控制18.8(C:lslib模式[选项])管理景物图库18.9(c:matilb模式材质材质库名)管理材质数据库18.10(c:mirror3d自变量1自变量2……)执行如MIRROR3D命令18.11(C:psdrap模式)根据模式设定值(0或1),传唤psdrap命令18.12(C:psfill对象名称图案名称[自变量1[自变量2]])以POStSCript图案填满18.13(c:psin文件名位置比例)插入一个Postscript(*.eps)文件18.14(c:render[渲染文件])执行渲染效果18.15(C:rfileopt格式自变量1自变量2自变量3…)设定执行渲染选项18.16(c:replay影像文件名影像类别[选项])展示影像文件TGA、BMP、TIF 18.17(C:rmat模式选项)控管材质建立、贴附、编辑、分离18.18(c:rotate3d自变量1自变量2…)执行如ROTATE3D命令各选项顺序18.19(C:rpref模式选项[设定])渲染环境设定18.20(c:saveimg影像文件名影像类别[选项])储存图像文件TGA、BMP、TIF 18.21(c:scene模式[选项])SCENE场景管理18.22(C:setuv模式选集自变量1自变量2…)SETUV贴图模式管理18.23(C:showmat自变量1)显示对象的材质贴附信息18.24(C:solprof自变量1自变量工..)建立3D实体的轮廓影像18.25(C:StatS[渲染信息文件])显示渲染信息统计信息十九、ADS、ARX外部定义的数据库相关函数19.l(c:aseadmin自变量1自变量2…)管理外部数据库19.2(c:aseexportt自变量1自变量2…)输出信息19.3(c:aselinks自变量1自变量2…)连接对象与信息19.4(c:aserow自变量1自变量2…)管理外部信息表格19.5(c:aseselect自变量1自变量2…)建立外部信息与对象选集19.6(c:asesqled自变量1自变量2…)执行SQL程序。
第三章AutoLISP的基本函数

返回顶层第一个元素 一般性表 ls t为 点对 返回点对左元素 nil(空表) 返回nil
• • • • • • • • 2.
_$ (car '(x y z)) X _$ (car „((a b (c)) d 5)) (A B (C)) _$ (car '(0 . "LINE")) 0 _$ (car '()) nil (cdr lst)
• (setq pt '(1.0 1.0 1.0)) • (setq pt (1.0,1.0,1.0))
;正确 ;错误
• • • • • • • • • • • • • • • • • • • • •
3.1.4再求值函数eval 求表达式值的值,也就是说求两次值。 (eval epxr) 例如 _$ (setq a '(* 5 6)) (* 5 6) _$ (eval a) 30 _$ (setq a 'b) B _$ (setq b 'c) C _$ (eval a) C _$ (eval „a) ;quote只能阻止一次求值 B _$ (eval 5) ;对数求值结果为其自身 5 _$ (eval “(+ 3 4)”) ;对字符串求值结果为其自身 "(+ 3 4)" _$
2AutoLISP基本函数

;返回1.570796 ;返回-1.570796
二、AutoLISP 基本函数
▪ 讨论与练习 写出y x3 ax2 bx c的AutoLISP表达式
(Setq y (+ (expt x 3) (* a x x) (* b x) c))
写出x * y /(tgx a sin 2 y)的AutoLISP表达式
是整型数,实型数,表达式
(- <数1> <数2>…)返回第一个<数>与后面所有数的差
(* <数> <数>…) 返回所有<数>的乘积
(/ <数1> <数2> …)返回<数1>依次除以其他数后的商
(1+ <数>)
返回<数>有空格)
(1- <数>)
返回<数>减1后的值
(注意:1与-号之间不能有空格)
2、表达式求值规则:①整型数、实型数 和字符串其本身的值就是求值结果;② 表根据第一个元素进行求值
3、最好不要给AutoLISP一些内置函数名 及符号赋值。虽然是有效的,但保留符 号和函数将被重新定义
2.1 赋值与求值函数
▪ 2 再赋值函数
(set <变量> <表达式>)
功能:再赋值函数,给变量的值赋值的函数 格式:只能有两个参数,且对<变量><表达式>都要求值,
二AutoLISP 基本函数
▪ 引言
1 AutoLISP函数分为:系统内部函数和用户自定 义的外部函数
2 AutoLISP函数的调用:通过对标准表来实现, 一般格式: (函数名[参数1][参数2]…)
autolisp函数总结计划大全

函数大全一、数学运算功能函数1.l(十数值数值…)返回:累计实数或整数数值1.2(一数值数值…)返回:差值1.3(*数值数值…)返回:所有数值乘积1.4(/数值数值…)返回:第一个数值除以第二个今后数值的商1.5(l十数值)返回:数值十ll.6(1—数值)返回:数值一ll.7(abs数值)返回:数值的绝对值1.8(atan数值)返回:反正切值1.9(cos角度)返回:角度的余弦值,角度值为弧度11.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.14159261.19(rem数值1数值2)返回:M数值的相除的余数l.20(sin角度)返回:角度的正旋值,角度值为弧度21.21(sqrt数值)返回:数值的平方根二、检验与逻辑运算功能函数2.l(=表达式1表达式2)比较表达式1可否等于式2,适用数值及字符串2.2(/=表达式1表达式2)比较表达式1可否大于等于表达式22.3(<表达式1表达式2)比较表达式1可否<小于表达式22.4(<=表达式1表达式2)比较表达式1可否<一小于等于表达式22.5(>表达式1表达式2)比较表达式1可否>大于表达式22.6(>=表达式1表达式2)比较表达式1可否大于等于表达式22.7(~数值)返回:数值的位not值,(1的补码)32.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字符串)返回:字符串转成整数值43.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坐标54.4(cadr列表)返回列表中的第二个元素,平时用来求y坐标4.5(caddr列表)返回列表中的第三个元素,平时用来求Z坐标4.6(cdr列表)返回:除去第一个元素后的列表4.7(cons新元素列表)返回:将新元素增加到列表4.8(foreach名称列表表达式)返回:将列表的每一元素对应至名称再依照表达式执行响应4.9(length列表)返回:列表内的元素数量4.10(list元素元素…)返回:将所有元素合并为一列表4.11(listp元素)返回:判断元素可否为一串4.12(mapcar函数列表1列表2…)返回:将列表1、列表2列表的元素配合函数,求得新列表64.13(member要点元素列表)返回:依照要点元素(含似后的列表4.14(nthn列表)返回:列表的第n个元素4.15(reverse列表)返回:将列表元素依照序次颠倒过来的列表4.16(subst新项旧项列表)返回:代替新旧列表后的列表五、字符串、字符、文件办理函数5.l(ascii字符串)返回:字符串第一个字符的“ASCII”码5.2(chr整数)返回:整数所对应的ASCII单一字符串5.3(close文件名称)关闭文件5.4(open文件名模式)返回:打开文件代码,准备读取或写入信息75.5(read字符串)返回:列表中的字符串的第一组元素5.6(read-char[文件代码])返回:经过键盘或文件中读取单一字符5.7(read-line[文件代码])返回:经由键盘或文件中读取一行字符串5.8(strcase字符串[字样])返回:变换字符串大小写5.9(strcat字符串1字符串2…)返回:将各字符串合并为一个字符串5.10(strlen字符串)返回:字符串构成的字符数(即字符串长度)5.11(substr字符串初步长度)返回:取出于字符串‘5.12(wcmatch字符串格式)返回:T或nil,将字符串与通用字符进行比较85.13(write-char数值[文件代码])返回:将一ASCII字符写到文件或屏幕15.14(write-line字符串[文件代码])返回:将字符串写到文件或屏幕上六、等待输入功能函数6.l(getangle[基点][提示])央求输入十进制角度数值,响应一个弧度值提示及参照点没关紧急6.2(getcorner基点[提示])央求输入另一矩形框对角点坐标6.3(getdist[基点][提示])央求输入一段距离6.4(getint[提示])央求输入一个整数值6.5(getkword[提示]央求输入“要点词”6.6(getorient[基点][提示])央求输入十进制角度,响应一弧度值不受angbase、angdir影响96.7(getPoint[基点][提示])央求输入一个点的坐标6.8(getreal[提示]央求输入一个实数6.9(getstring[提示])央求输入一个字符串6.10(initget[位]字符串)设定下次getxxx 函数的有效输入七、几何运算功能函数7.l(angle点1点2)获取两点的角度弧度值7.2(distance点1点2)获取两点的距离7.3(inters点1点2点3点4[模式])获取两条线的交点7.4(osnap点模式字符串)依照捕捉模式获取另一坐标点7.5(polar基点弧度距离)依照极坐标法获取另一坐标点107.6(textbox对象列表)获取文字字符串的两个对角点坐标八、对象办理功能函数8.l(entdel对象名称)删除或取消删除对象8.2(entget对象名称[应用程序列表])取出对象名称的信息列表8.3(entlast)取出图形信息中的最后一个对象8.4(entmake对象列表)建立一个新的对象列表8.5(entmod对象列表)依照更新的信息列表更新屏幕上元体8.6(entnext[对象名称])找寻图面中的下一个对象8.7(entsel[提示])央求采用一个对象,响应包含对象名称及选点坐标的列表;118.8(entupd对象名称)更新屏幕上复元体图形8.9(handent图码)返回:图码的元体名称8.10(nentsel[提示])返回:BLOCK所含副元体对象信息列表8.11(nentselp[提示][点])返回:BLOCK 所含副元体对象信息似4*4矩形表示)九、选择集、符号表办理函数9.l(ssadd[对象名称][选择集])将对象加入选择集或建立一新选择集9.2(ssdel对象名称选择集)将对象自选择集中移出9.3(ssget[模式][点1][点2]获取一个选择集9.4(ssget”X”[过滤列表])获取依照过滤列表所指定范围的选择集129.5(sslenth选择集)计算选择集的对象个数9.6(ssmemb对象名称选择集)响对付象名称可否包含于选择集内9.7(ssname选择集索引值)依照索引值取出选择集中的对象名称9.8(tblnext符号表名称[T])检视符号表,有效的符号表:”LAYER”、”LTYPE”、”VIEW”、”STYLE”、”BLOCK”9.9(tblsearch符号表名称符号)在符号表中找寻符号十、AutoCAD相关盘问、控制功能函数10.l(command”AutoCAD命令”…)超重量级函数,调用执行AutoCAD命令10.2(findfile文件名)返回:该文件名的路径及文件名1310.3(getfiled标题内定档名扩展名旌旗)经过标准AutoCAD文件对话DCL对话框获取文件10.4(getenv”环境变量”)获取该环境变量的设定值,以字符串表示10.5(getvar”系统变量”)获取该系统变量的设定值,以字符串表示10.6(setvar”系统变量”值)设定该系统变量的值10.7(regapp应用类项)将目前的AutoCAD图形登记为一个应用程序名称十一、判断式、循环相关功能函数11.1(If<比较式><表达式1>[表达式2]检算比较式结果,若是为真,执行<表达式1>,否则执行<表达式2>11.2(repeat次数[<表达式><表达式>…])重复执行N次表达式1411.3(While<比较式><表达式>…)当条件建立则执行表达式内容11.4(cond<比较式1><表达式1>多条件式的if整合功能<比较式2><表达式2><比较式3><表达式3>)11.5(prong表达式1表达式2…)连接其中的表达式为一组,常用于配合if、cond等函数十二、函数办理、定义、追踪与错误办理功能函数12.l(*error*字符串)程序错误时的警告信息12.2(alert字符串)以对话框式显示出警告字符串12.3(apply功能函数列表)将功能函数与列表结合后执行1512.4(defun名称自变量列表表达式_.)自定函数或子程序12.5(eval表达式)返回:表达式的执行结果12.6(exit)逼迫退出目前的应用程序12.7(lambda自变量表达式)定义未命名的函数12.8(progn表达式1表达式2…)连接其内的表达式为一组,常用于配合if、cond等函数12.9(quit)逼迫退出目前的应用程序12.10(tablet代码[列1列2列3方向])取用或建立对数字板的校调12.11(trace函数…)对函数设定追踪标记,辅助检错12.12(untrace函数…)对函数设定清除追踪标记16十三、显示、打印控制功能函数13.l(gfaphscr)作图环境切换到图形画面13.2(grclear)暂时除去模前的屏幕画面13.3(grdraw起点终点颜色[亮显])暂时性的画出一条线13.4(grread[追踪])由输入设备读取追踪值13.5(grtext地址字符串[亮显])将字符串显示在状态列或屏幕菜单上13.6(grvecs向量列表[转置矩阵])暂时性的画出多条线13.7(menucmd字符串);供应在AlltOLISP中调用各菜单13.8(Prinl[表达式[文件代码]]将表达式打印于命令区或已打开的文件句柄字符则以“\”为前缀张开1713.9(pinc[表达式[文件代码]]除句柄字符则不以”\”为前缀展外开其余同Prinl13.10(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl 13.11(prompt信息)将信息显示于屏幕的命令区,并随后响应一个nil信息13.12(redraw[对象名称[模式]])重绘整张图或依照对象名称重绘该图形13.13(terpri)在屏幕上显示新列13.14(textscr)作图环境切换到文字画面13.15(textpage)除去文字画面文字近似DOS 的cls命令13.16(vports)返回:窗口组态列表十四、符号、元素、表达式办理功能函数14.l(atom元素)若是元素不是列表,响应T,18否则为nil14.2(atoms-family格式闲号列表])返回:一组己定义函数的符号列表14.3(boundp表达式)返回:T或nil,响应表达式可否有值存在14.4(minusp元素)返回:T或n儿元素可否为负值14.5(not元素)返回:T或n儿判断元素可否为ni114.6(null元素)返回:T或nil判断元素可否被赐予nil值14.7(numberp元素)返回:T或nil,元素可否为整数或实数14.8(quote表达式)响应表达式未检算前状态,同“‘”功能14.9(set符号表达式)将表达式结果设定给19带单引号’符号14.10(setq符号1表达式1[符号2表达式2]…)设定表达式结果给各符号14.11(type元素)返回:元素的信息型态14.12(zerop元素)返回:T或nil,元素可否为0值十五、ADS、ARX、AutoLISP加载与卸载函数15.l(ads)返回:目前加载ADS程序列表15.2(arx)返回:目前加载ARX程序列表15.3(arxload应用程序[出错办理]))返回:加载ARX程序15.4(arxunload应用程序[出错办理]))返回:卸载ARX程序15.5(ver)返回:目前AutoLISP版本字符串15.6(loadLSP文件名[加载失败])加载20AutoLISP文件(*.lsp)15.7(xload应用程序[错办理])加载ADS应用程序15.8(xunloa应用程序[出错办理])卸载ADS 应用程序十六、内存空间管理函数16.l(alloc数值)以节点数值设定区段大小16.2(expand数值)以区段数值配置节点空间16.3(gc)逼迫回收废内存16.4(mem)显示目前的内存使用状态16.5(xdroom对象名称)返回对象扩展信息赞同使用的内存空间16.6(xdsize列表)返回对象扩展信息所占用的内存空间21十七、其余重要的功能函数17.l(acad_colordlg颜色码旌旗)显示出标准AutoCAD颜色选择对话框17.2(acad_helpdlg求助文件名主题)显示出标准AutoCAD求助对话框17.3(acad_strlsort字符串列表)作字符串列表排序17.4(bherrs)获取bhatch与bpcly失败所产生的错误信息17.5(bhatch点[选择集[向量]])依照Pickpoint选点方式调用bhatch命令,绘制选集地域的剖面线17.6(bpoly点[选择集[向量]])依照Pickpoint 选点方式调用bpoly命令并产生必然域Polyline 17.7(cal计算式字符串)执行如CAL计算功能22十八、ADS、ARX外面定义的3D函数18.1(align自变量1自变量2....)执行如ALIGN 命令各选项序次18.2(c:3dsin模式3DS文件名)导入3DS文件18.3(C:3dsout模式3DS文件名)输出3DS 文件18.4(c:background模式[选项])设定衬着背景18.5(C:fog模式[选项])设定衬着的雾收效18.6(C:light模式[选项])设定衬着的灯光控制18.7(c:lsedit模式【选项1】设定衬着的光景控制18.8(C:lslib模式[选项])管理光景图库2318.9(c:matilb模式材质材质库名)管理材质数据库18.10(c:mirror3d自变量1自变量2……)执行如MIRROR3D命令18.11(C:psdrap模式)依照模式设定值(0或1),传唤psdrap命令18.12(C:psfill对象名称图案名称[自变量1[自变量2]])以POStSCript图案填满18.13(c:psin文件名地址比率)插入一个Postscript(*.eps)文件18.14(c:render[衬着文件])执行衬着收效18.15(C:rfileopt格式自变量1自变量2自变量3…)设定执行衬着选项18.16(c:replay影像文件名影像种类[选项])显现影像文件TGA、BMP、TIF18.17(C:rmat模式选项)控管材质建立、贴24附、编写、分别18.18(c:rotate3d自变量1自变量2…)执行如ROTATE3D命令各选项序次18.19(C:rpref模式选项[设定])衬着环境设定18.20(c:saveimg影像文件名影像种类[选项])储蓄图像文件TGA、BMP、TIF18.21(c:scene模式[选项])SCENE场景管理18.22(C:setuv模式选集自变量1自变量2…)SETUV贴图模式管理18.23(C:showmat自变量1)显示对象的材质贴附信息18.24(C:solprof自变量1自变量工..)建立3D实体的轮廓影像18.25(C:StatS[衬着信息文件])显示衬着信息统计信息25十九、ADS、ARX外面定义的数据库相关函数19.l(c:aseadmin自变量1自变量2…)管理外面数据库19.2(c:aseexportt自变量1自变量2…)输出信息19.3(c:aselinks自变量1自变量2…)连接对象与信息19.4(c:aserow自变量1自变量2…)管理外面信息表格19.5(c:aseselect自变量1自变量2…)建立外面信息与对象选集19.6(c:asesqled自变量1自变量2…)执行SQL程序26。
autolisp函数大全

函数大全一、数学运算功能函数1.l(十数值数值…)返回:累计实数或整数数值1.2(一数值数值…)返回:差值1.3(* 数值数值…)返回:所有数值乘积1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商1.5(l十数值)返回:数值十ll、 6(1—数值)返回:数值一ll.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.14159261.19(rem 数值 1数值 2)返回:M数值的相除的余数l.20(sin 角度)返回:角度的正旋值,角度值为弧度1.21(sqrt 数值)返回:数值的平方根二、检验与逻辑运算功能函数2.l(= 表达式1 表达式2)比较表达式1就是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1就是否大于等于表达式22.3(<表达式1 表达式2) 比较表达式1就是否<小于表达式22.4(<= 表达式1 表达式2)比较表达式1就是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1就是否>大于表达式22.6(>= 表达式1 表达式2) 比较表达式1就是否大于等于表达式22.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 列表)返回:列表内的元素数量4.10(list 元素元素…)返回:将所有元素合并为一列表4.11(listp 元素)返回:判断元素就是否为一串4.12(mapcar函数列表1列表2…)返回:将列表1、列表2列表的元素配合函数,求得新列表4.13(member 关键元素列表)返回:根据关键元素(含似后的列表4.14(nth n 列表)返回:列表的第n个元素4.15(reverse 列表)返回:将列表元素根据顺序颠倒过来的列表4.16(subst 新项旧项列表)返回:替换新旧列表后的列表五、字符串、字符、文件处理函数5.l(ascii 字符串)返回:字符串第一个字符的“ASCII”码5.2 (chr 整数)返回:整数所对应的ASCII单一字符串5.3(close 文件名称)关闭文件5.4(open 文件名模式)返回:打开文件代码,准备读取或写入信息5.5(read 字符串)返回:列表中的字符串的第一组元素5.6(read-char[文件代码])返回:通过键盘或文件中读取单一字符5.7(read-line [文件代码])返回:经由键盘或文件中读取一行字符串5.8(strcase 字符串[字样])返回:转换字符串大小写5.9(strcat 字符串1字符串2…)返回:将各字符串合并为一个字符串5.10(strlen 字符串)返回:字符串构成的字符数(即字符串长度)5.11(substr 字符串起始长度)返回:取出于字符串‘5.12(wcmatch 字符串格式)返回:T或 nil,将字符串与通用字符进行比较5.13(write-char数值[文件代码])返回:将一ASCII字符写到文件或屏幕15.14(write-line字符串[文件代码])返回:将字符串写到文件或屏幕上六、等待输入功能函数6.l (getangle [基点] [提示])请求输入十进制角度数值,响应一个弧度值提示及参考点可有可无6.2(getcorner 基点[提示])请求输入另一矩形框对角点坐标6.3(getdist [基点][提示])请求输入一段距离6.4(getint [提示])请求输入一个整数值6.5(getkword [提示]请求输入“关键词”6.6(getorient [基点][提示])请求输入十进制角度,响应一弧度值不受angbase、angdir 影响6.7(getPoint [基点][提示])请求输入一个点的坐标6.8(getreal [提示]请求输入一个实数6.9(getstring [提示])请求输入一个字符串6.10(initget [位]字符串)设定下次getxxx函数的有效输入七、几何运算功能函数7.l(angle 点1 点2)取得两点的角度弧度值7.2(distance 点1 点2)取得两点的距离7.3(inters 点1 点2 点3 点 4[模式])取得两条线的交点7.4(osnap 点模式字符串)按照捕捉模式取得另一坐标点7.5(polar 基点弧度距离)按照极坐标法取得另一坐标点7、6(textbox 对象列表)取得文字字符串的两个对角点坐标八、对象处理功能函数8.l(entdel 对象名称)删除或取消删除对象8.2(entget 对象名称[应用程序列表])取出对象名称的信息列表8.3 (entlast) 取出图形信息中的最后一个对象8.4(entmake 对象列表)建立一个新的对象列表8.5(entmod 对象列表)根据更新的信息列表更新屏幕上元体8.6(entnext [对象名称])找寻图面中的下一个对象8.7(entsel [提示])请求选取一个对象,响应包含对象名称及选点坐标的列表;8.8(entupd 对象名称)更新屏幕上复元体图形8.9(handent 图码)返回:图码的元体名称8.10(nentsel[提示])返回:BLOCK所含副元体对象信息列表8.11(nentselp [提示][点])返回:BLOCK所含副元体对象信息似4*4矩形表示)九、选择集、符号表处理函数9.l(ssadd [对象名称][选择集])将对象加入选择集或建立一新选择集9.2(ssdel 对象名称选择集)将对象自选择集中移出9.3(ssget [模式][点 1][点 2]取得一个选择集9.4(ssget ”X” [过滤列表])取得根据过滤列表所指定范围的选择集9.5(sslenth 选择集)计算选择集的对象个数9.6(ssmemb 对象名称选择集)响应对象名称就是否包含于选择集内9.7(ssname 选择集索引值)根据索引值取出选择集中的对象名称9.8(tblnext 符号表名称[T])检视符号表,有效的符号表:”LAYER”、”LTYPE”、”VIEW”、”STYLE”、”BLOCK”9.9(tblsearch 符号表名称符号)在符号表中搜寻符号十、AutoCAD相关查询、控制功能函数10.l(command ”AutoCAD命令”…)超重量级函数,调用执行 AutoCAD命令10.2(findfile 文件名)返回:该文件名的路径及文件名10.3(getfiled 标题内定档名扩展名旗号)通过标准 AutoCAD文件对话 DCL对话框获得文件10.4(getenv ”环境变量”)取得该环境变量的设定值,以字符串表示10.5(getvar ”系统变量”)取得该系统变量的设定值,以字符串表示10.6(setvar ”系统变量”值)设定该系统变量的值10.7(regapp 应用类项)将目前的AutoCAD图形登记为一个应用程序名称十一、判断式、循环相关功能函数11.1(If <比较式><表达式1> [表达式2] 检算比较式结果,如果为真,执行<表达式1>,否则执行<表达式2>11.2( repeat 次数 [< 表达式><表达式>…])重复执行 N次表达式11.3(While <比较式><表达式>…) 当条件成立则执行表达式内容11.4(cond <比较式 1><表达式 1>多条件式的 if整合功能<比较式2><表达式2><比较式3><表达式3>)11.5 ( prong 表达式1 表达式2…) 连接其中的表达式为一组,常用于配合if、cond 等函数十二、函数处理、定义、追踪与错误处理功能函数12.l(*error* 字符串)程序错误时的警示信息12.2(alert 字符串)以对话框式显示出警告字符串12.3(apply 功能函数列表)将功能函数与列表结合后执行12.4(defun 名称自变量列表表达式_.)自定函数或子程序12.5(eval 表达式)返回:表达式的执行结果12.6(exit)强制退出目前的应用程序12.7(lambda 自变量表达式)定义未命名的函数12.8(progn 表达式1 表达式2…)连接其内的表达式为一组,常用于配合if、cond等函数12.9(quit)强制退出目前的应用程序12.10(tablet 代码 [列1列2列3方向])取用或建立对数字板的校调12.11(trace 函数…)对函数设定追踪标记,辅助检错12.12(untrace 函数…)对函数设定解除追踪标记十三、显示、打印控制功能函数13.l(gfaphscr)作图环境切换到图形画面13.2(grclear)暂时清除模前的屏幕画面13.3(grdraw起点终点颜色[亮显])暂时性的画出一条线13.4(grread[追踪])由输入设备读取追踪值13.5(grtext位置字符串[亮显])将字符串显示在状态列或屏幕菜单上13.6(grvecs向量列表[转置矩阵])暂时性的画出多条线13.7(menucmd字符串);提供在 AlltOLISP中调用各菜单13.8(Prinl[表达式[文件代码]]将表达式打印于命令区或已打开的文件句柄字符则以“\”为前缀展开13.9(pinc[表达式[文件代码]]除句柄字符则不以”\”为前缀展外开其余同Prinl 13.10(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl 13.11(prompt信息)将信息显示于屏幕的命令区,并随后响应一个nil信息13.12(redraw[对象名称[模式]])重绘整张图或根据对象名称重绘该图形13.13(terpri) 在屏幕上显示新列13.14(textscr) 作图环境切换到文字画面13.15(textpage)清除文字画面文字类似 DOS的cls命令13.16(vports)返回:窗口组态列表十四、符号、元素、表达式处理功能函数14.l(atom元素)如果元素不就是列表,响应T,否则为nil14.2(atoms-family格式闲号列表])返回:一组己定义函数的符号列表14.3(boundp表达式)返回:T或 nil,响应表达式就是否有值存在14.4(minusp元素)返回:T或n儿元素就是否为负值14.5(not元素)返回:T或n儿判定元素就是否为ni114.6(null元素)返回:T或nil判定元素就是否被赋予nil值14.7(numberp元素)返回:T或nil,元素就是否为整数或实数14.8(quote表达式)响应表达式未检算前状态,同“‘”功能14.9(set符号表达式)将表达式结果设定给带单引号’符号14.10(setq符号1 表达式1[符号2表达式2]…)设定表达式结果给各符号14.11(type元素)返回:元素的信息型态14.12(zerop元素)返回:T或nil,元素就是否为0值十五、ADS、ARX、AutoLISP加载与卸载函数15.l(ads)返回:目前加载ADS程序列表15.2(arx)返回:目前加载 ARX程序列表15.3(arxload应用程序[出错处理]))返回:加载 ARX程序15.4(arxunload应用程序[出错处理]))返回:卸载 ARX程序15.5(ver) 返回:目前 AutoLISP版本字符串15.6(load LSP文件名[加载失败])加载 AutoLISP文件(*.lsp)15.7 (xload应用程序[错处理])加载ADS应用程序15.8 (xunloa应用程序[出错处理])卸载 ADS应用程序十六、内存空间管理函数16.l(alloc数值)以节点数值设定区段大小16.2(expand数值)以区段数值配置节点空间16.3(gc)强制收回废内存16.4(mem)显示目前的内存使用状态16.5(xdroom对象名称)返回对象扩展信息允许使用的内存空间16.6(xdsize列表)返回对象扩展信息所占用的内存空间十七、其它重要的功能函数17.l(acad_colordlg 颜色码旗号)显示出标准 AutoCAD颜色选择对话框17.2(acad_helpdlg 求助文件名主题)显示出标准 AutoCAD求助对话框17.3(acad_strlsort字符串列表)作字符串列表排序17.4(bherrs) 取得 bhatch与 bpcly失败所产生的错误信息17.5(bhatch点[选择集[向量]])根据 Pick point选点方式调用 bhatch命令,绘制选集区域的剖面线17.6(bpoly点[选择集[向量]])根据Pick point选点方式调用bpoly命令并产生一定域Polyline17.7(cal计算式字符串)执行如 CAL计算功能十八、ADS、ARX外部定义的3D函数18、1(align自变量 1 自变量 2....)执行如 ALIGN命令各选项顺序18.2(c:3dsin模式3DS文件名)导入3DS文件18.3(C:3dsout模式3DS文件名)输出3DS文件18.4(c:background模式[选项])设定渲染背景18.5(C:fog模式[选项])设定渲染的雾效果18.6(C:light模式[选项])设定渲染的灯光控制18.7(c:lsedit模式【选项1】设定渲染的景物控制18.8(C:lslib模式[选项])管理景物图库18.9(c:matilb模式材质材质库名)管理材质数据库18.10(c:mirror3d 自变量1 自变量2……) 执行如MIRROR3D命令18.11(C:psdrap模式)根据模式设定值(0或1),传唤psdrap命令18.12(C:psfill对象名称图案名称[自变量1[自变量2]])以POStSCript图案填满18.13(c:psin文件名位置比例)插入一个Postscript(*.eps)文件18.14(c:render[渲染文件])执行渲染效果18.15(C:r格式自变量1 自变量2 自变量3…)设定执行渲染选项18.16(c:replay影像文件名影像类别[选项])展示影像文件TGA、BMP、TIF 18.17(C:rmat模式选项)控管材质建立、贴附、编辑、分离18.18(c:rotate3d自变量 1 自变量2…)执行如 ROTATE3D命令各选项顺序18.19(C:rpref模式选项[设定])渲染环境设定18.20(c:saveimg影像文件名影像类别[选项])储存图像文件TGA、BMP、TIF 18.21 (c:scene模式 [选项]) SCENE场景管理18.22(C:setuv模式选集自变量1 自变量2…)SETUV贴图模式管理18.23(C:showmat自变量1)显示对象的材质贴附信息18.24(C:solprof自变量 1 自变量工..)建立 3D实体的轮廓影像18.25(C:StatS[渲染信息文件])显示渲染信息统计信息十九、ADS、ARX外部定义的数据库相关函数19.l(c:aseadmin自变量1 自变量2…)管理外部数据库19.2(c:aseexportt自变量1 自变量2…)输出信息19.3 (c:aselinks自变量1 自变量2…)连接对象与信息19.4(c:aserow自变量1 自变量2…)管理外部信息表格19.5(c:aseselect自变量1 自变量2…)建立外部信息与对象选集19.6 (c:asesqled自变量 1 自变量2…) 执行SQL程序。
AUTO LISP函数参考5

AUTO LISP函数参考4 实体数据函数下列函数可让用户检索和修改定义实体的数据,所有函数都用实体名指定要操作的实体.4.1 (entdel <实体名> )如果由<实体名>指定的实体在当前图中,它就被删掉,如果在这次编辑中该实体已被删除,那么它将被重新恢复出来(从当前图中).退出图形编辑程序时,被删除的实体便从图中彻底清除掉了,所以ENTDEL只能在删除实体的那次编辑过程中使实体再恢复.ENTDEL只对主实体进行操作.对属性和多义线的顶点是不能脱离其双亲实体而予删除的(可使用COMM AND函数执行ATTEDIT或PEDIT命令来达到这一目的).例如:(setq e1 (entnext) ) ;置E1为图中第一个实体的名(entdel e1) ;删去实体E1(entdel e1) ;不删除(恢复)已被删去的实体E14.2 (entget <实体名> )从数据库中检索到名为<实体名>的实体,并以表形式返回,此表包含实体的定义数据表的结果以LISP的关联表形式编制,用ASSOC函数可以容易地从中检索每一项.表中的对象是用AutoCAD的DXF组码形式定义的,它们是为实体数据的每个部分准备的.例如,用下列命令序列画线,然后再检索此线:对下面的例子,我们假定:. 当前层是"0",. 当前线型是"CONTINUOUS"(缺省值),. 当前Z向高度是零(缺省值),. 实体标号功能被关闭,而且. FLATLAND系统变量值为零.假设用下列命令画一条线:Command: LINEFrom point: 1,2To point: 6,6To point: RETURN然后可以用下述命令为线检索实体数据:Command: (setq a (entget (entlast)))假定系统变量FLATLAND为零(即要求3D点).这样,将把A置为下表(为了可读,作了缩进排列):( (-1 . <Entity name: 60000014>)(0 . "LINE") ;Entity type(8 . "0") ;Layer(10 1.0 2.0 0.0) ;Start point(11 6.0 6.0 0.0) ;End point)表的开头-1项包含这个所代表的实体名.下面描述的ENTMOD函数将用这种表来识别要修改的实体.表示某一值的点对表可以很容易地用ASSOC提取,再用CDR分离出它们的值.实体中各部分的编码是DXF所用的那些编码,在AutoCAD参考手册的附录C中有描述.和DXF一样,实体题头项(实体的颜色和线型,属性跟随标志,厚度,及实体标号)只有在不为缺省值时才被输出. 和DXF不同的是,任选的实体定义字段不管是否和它们的缺省值相等都将被输出.这样做的意图是为了简化处理;对于使用那种操作和处理它们的通用程序,可以总是假设这些字段是存在的.另外与DXF不同的是,三维坐标是被组合成一个点值表,如(10 1.0 2.0 3.0),而不象DXF格式中所出现的三个独立的10,20和30组值.注意,点的子表不同于以上所述的点对型的.我们约定,子表的CDR即为组值,由于点是由两个实数(或三个函数)组成的一个表,所以使得整个组为一个三元素(或四元素)表.这个组的CDR即为代表此点的表.因此,这便保证了CDR总能返回组值的这个约定.当编写函数来处理这些实体表时,必须保证它们与子表的顺序无关.使用ASSOC能保证达到这个要求.包含实体名的-1组使得修改操作只须诉诸于实体表,也避免了在平行(另外的)结构内保持实体名的要求.在多义线或属性集最后的SEQEND实体中包含-2组,它的CDR 是这个实体的排头的实体名.这样,查到SEQEND,就能从子实体序列中找到排头,然后用SEQ END实体中-2组的CDR作为实体名,从而由此获得相关联的主实体.下面的例子表示一个更复杂的实体数据.对此例,我们假定当前的UCS处在WCS中关于Z 轴逆时针旋转40度的位置,实体标号的功能是打开状态和系统变量FLATLAND为零.Command: LINETYPE?/Create/Load/Set: SETNew entity linetype <BYLAYER>: DASHED?/Create/Load/Set: RETURNCommand: COLORNew entity color <BYLAYER>: BLUECommand: LAYER?/Make/Set/New/On/Off/Color/Ltype/Freeze/Thaw: MAKENew current layer <0>: ANNOTATION?/Make/Set/New/On/Off/Color/Ltype/Freeze/Thaw: RETURNCommand: TEXTStart point or Align/Center/Fit/Middle/Right/Style: 2,2Height <0.2000>: 0.3Rotation angle <0>: 30Text: So long,and thanks for all the fish!Command: (setq ed (entget (setq e (entlast))))在这种情况下,E将被置为TEXT的实体名,而ED被置为它的实体表(如下示).查找Auto CAD参考手册中的附录C就能知道这个表的具体含意.( (-1 . <Entity name: 6000053c>)(0 . "TEXT") ;Entity type(8 . "ANNOTANTION") ;Layer(6 . "DASHED") ;Linetype(62 . 5) ;Color(5 . "7E") ;Handle(10 2.0 2.0 0.0) ;Start point(40 . 0.3) ;Height(1 . "So long,and thanks for all the fish!")(50 . 0.523599) ;Rotation angle (radians)(41 . 1.0) ;Width factor(51 . 0.0) ;Obliquing angle(7 . "STANDARD") ;Text style(71 . 0) ;Generation flags(72 . 0) ;Justification(11 0.0 0.0 0.0) ;Alignment point(210 0.0 -0.642788 0.766044) ;Extrusion direction vector)所有与实体有关的点均以实体坐标系的形式表达(ECS),对于点(point),线(Line),三维线(3DLine),三维面(3DFace),三维多义线(3DPolyline),三维网格(3DMesh),和标注(D imension)实体,而对于所有其余实体,其实体坐标(ECS)则可从通用坐标系(WCS)和实体本身的延伸方向(组代码为210)中导出.当用非通用坐标系绘制实体时(如上例中的Text),需将点值变换为通用坐标或当前的用户坐标(UCS),这可通过TRANS函数来实现.用上面的Tex t实体为例:(setq p (cdr (assoc 10 ed) ) ) 可能返回 (2.0 2.0 0.0)将文本实体的起点赋给P,即Text实体的实体坐标(ECS),(注意按这种形式返回的点与在用ENTGET时设置的当前用户坐标系无关).现在:(trans p e 0) 可能返回 (2.0 1.53209 1.28558)这里用e作为"from"转换码,将文本实体的起点从其实体坐标形式转换为通用坐标形式.如果系统变量FLATLAND是非零值并且上例中的实体是在与通用坐标系(WCS)等效的用户坐标系<UCS>中绘制的,则ENTGET返回的有关点值将是二维通用坐标(2D WCS)形式,并具有一个组代码为38的组值,该组值用以定义实体的Z向高度(如果为非零值的话),同时210组值(延伸方向)将被取消.4.3 (entmod <实体表> )ENTMOD接受由ENTGET返回的那种格式的表( <实体表> ),为此实体更新其在数据库中信息,该实体名由<实体表>中的-1组指定.因此,AutoLISP更新数据库的基本方法就是用ENTG GET提取实体,修改定义该实体的表(注意,AutoLISP的SUBST函数对这种操作非常有用),而用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) ;修改图中实体EN的图层ENTMOD对它要做的更改加了一此限制.首先,不能更改实体的类型和实体标号(如果要这样做,则先用ENTDEL删除它,再用COMMAND函数建立一个新的实体).实体表引用的所有对象在执行ENTMOD之前必须是AutoCAD已知的.因此文本类型、线型、形状和块名,在ENTMOD 修改实体表之前必须预先定义好.这个规定的一个例外就是层名,如果在实体表中用到还没有定义的层,那么ENTMOD将用"LAYER NEW"命令和层的标准缺省值产生一个新层.对于那些使用浮点值的字段(如厚度thickness),ENTMOD可以接受一个整数,但它会自动将其转变成浮点值.同样;如果为那些整数型实体数据段(如颜色码)指定了一个浮点值,则ENTMOD也会自动将其截断成整数来处理.正如DXFIN对DXF文件中的数据处理一样,ENTMOD对提供给它的表也进行一致性检查.如果检测出严重错误,且严重到数据库已无法更新,则返回nil.否则,ENTMOD将返回作为变元送给它的表.ENTMOD将不会改变内部字段,如:实体中SEQEND实体中的-2组中的实体名--- 对更改这样字段的企图被作为无效处理.更新主实体时,ENTMOD既修改这个实体,又更新它在屏幕上的图象(包括子实体).当使用ENTMOD更新子实体(多义线的顶点或块的属性)时,子实体将只在数据库中被更新,但是屏幕上的图象不会被重新显示.当对给定子实体的所有修改完成后,就可以用下面描述的ENTUPD函数来更新屏幕上的图象.4.4 (entupd <实体名> )如上所述,当使用ENTMOD对多义线顶点或块属性进行修改后,整个复合实体并不在屏幕上更新.例如,如果修改某条复杂多义线上的100个顶点,那么当每个顶点更改时都对多义线进行重新计算和重新显示,这样会使工作速度变得不可接受地缓慢.ENTMOD函数可用于在屏幕上更新经修改的多义线或块.可以用多义线或块中的任何部分的实体名调用ENTUP D.它没有必要是领头实体--ENTMOD将会找到头.虽然ENTUPD是用于多义线和具有属性的块,但实际上也可被其它任何实体调用.它将总是重新生成屏幕上的实体,包括所有的子实体.例如,设图中第一个实体是一条有若干顶点的多义线,那么:(setq e1 (entnext) ) ;置E1为多义线的实体名(setq e2 (entnext e1) ) ;置E2为多义线的第一个顶点(setq ed (entget e2) ) ;置ED为顶点的数据(setq ed(subst '(10 1.0 2.0)(assoc 10 ed) ;改变ED中的顶点位置为1,2ed))(entmod ed) ;移动图中的顶点(entupd e1) ;重新生成多义线实体E14.5 限制实体名和选择集只对图形编辑过程有效,它们是在图形编辑过程中从AutoCAD取得的. 另外在执行PLINE和ATTEDIT命令的过程中企图执行下列操作,则会返回nil,而且不执行所要求的函数.ENTMOD 修改一个现存实体ENTUPD 重新生成一个经修改的复杂实体ENTDEL 恢复和重新生成一个删去的实体5 将实体名和选择集与AutoCAD一起使用对于AutoCAD的实体选择提示,用实体名和选择集输入是有效的.因此,对由AutoLISP命名的实体可以用AutoCAD命令进行操作.在"Select object: "提示下AutoLISP可以提供一个实体名,它指定了单个实体,或者一个选择集,它选择了集中的所有实体.凡在AutoCAD允许使用"Last"选择项的地方,用AutoLISP给出实体名或选择集也是有效的(不管实体是否可见,它们都具有与拾取一个实体相同的效果,但却不必指定一个拾取点).在AutoCAD允许使用指点目标方式进行选择的地方,ENTSEL返回的那种格式的表将被选择过程接收.它们从表中选择实体,指定表中的点作为它们的拾取点.这就允许AutoLISP 将这种形式的实体拾取点传送给如BREAK,FILLET,CHAMFER,TRIM和EXTEND这样的命令.注意,只要命令允许拾取点,ENTSEL型格式的表也可用于其它选择.6 对处理曲线拟合和样条拟合多义线的说明当使用ENTNEXT逐步通过多义线的各顶点时,可能会碰到一些不是有意建立的顶点,这些是辅助顶点,是PEDIT的Fit和Spline选择项自动插入的.用户可能想略去这些辅助顶点,因为在下次对多义线使用PEDIT的Fit和Spline时会取消对这些辅助点作的变动.从多义线实体的组标号70中,用户可看出多义线是曲线拟合(位值为2)的还是样条拟合(位值为4)的.如果未设置这两种位值,则多义线的所有顶点都是正常的.如果设置了曲线拟合位(2),则多义线的辅助顶点将具有其组标号70设置的位值1.以表示这些顶点是在曲线拟合过程中插入的.如果您想使用ENTMOD来移动这种多义线的顶点,并使用PEDIT来重新拟合曲线,那么您应该略去这些辅助的顶点.同样,如果多义线实体的样条拟合标记位值置为4,则会对各顶点进行分类,有些顶点的标记位值为1(在曲线拟合时插入,若系统变量SPLINESEGS为负),有些顶点的位值为8(在样条拟合时插入),所有其他顶点的位值都为16(样条骨架的控制点).同样,如果您使用ENTMOD 来移动顶点,然后想重新拟和样条,那么只应该移动作为控制点的那些顶点.7 符号表访问函数函数,它们能够读取(也只能读取)增加了两个分别由AutoCAD的图层、线型、赋名视图, 字型和块定义所组成的符号表.这两个新函数是TBLENXT和TBLSERCH,它们的描述如下.7.1 (tblnext <表名> [ <第一个> ] )本函数用于扫描整个符号表.第一个变元是一个字符串,它表明你想访问的符号表名.有效的表名包括"LAYER"、"LTYPE"、"VIEW"、"STYLE"、"BLOCK"、"UCS"和"VPORT".字符串不一定要大写.如果给出第二个变元且求值结果不为nil,则反绕回符号表头且返回表中第一项;否则,返回表中下一项.当到表尾时,则返回nil.被删去的表项不再返回.当找到一项后就返回一个如DXF类型的代码点对表,很像ENTGET函数的返回值.例如, (tblnext "Layer" T) ; 检索第1个图层将返回:( (0 . "LAYER") ; 符号类型(2 . "0") ; 符号名(70 . 0) ; 标志(62 . 7) ; 颜色号,如层被开闭则为负(6 . "CONTINUOUS") ; 线型名)注意,这里没有"-1"组.AutoCAD会记住从每个表中最后返回的项,每次调用TBLNEXT将自动地返回下一项.开始扫描表时,必须保证第二变元为非nil值,这样函数才能绕回表头并返回第一项.在"BLOCK"表中有一个组代码为-2的实体名,它是该块定义中的第一个实体的名.这样,如果已知一个块名叫BOX:(tblnext "block") ; 检索块定义可能返回:( ( 0 . "Block") ; 符号类型(2 . "Box") ; 符号名(70 . 0) ; 标志(10 . 9.000000 2.000000 0.000000) ; X,Y,Z的原点(-2 . <实体名:40000126> ) ; 第一个实体)"-2"组中的实体名只能被ENTGET和ENTNEXT所接受,其它实体访问函数是不能访问的. 这就是说,不允许用ENTMOD修改或用SSADD、ENTSEL将其收进某一选择集.依靠-2组的实体名,可以用ENTNEXT扫描构成块定义的各个实体;ENTNEXT对块定义中的最后一个实体名返回nil.如果系统变量FLATLAND为零,TBLNEZT对三维点将总以四元表的形式返回,如( 10 0.0 2.0 3.0).如果FLATLAND为非零值,则三维点按三元表(二维)形式返回,但这时将有一个组码为30的点对表,用以说明点的Z向高度值.7.2 (tblsearch <表名> <符号> [<顺序状态>] )此函数搜索用<表名>指定的符号表(同TBLNEXT一样),寻找由<符号>指定的符号名.两个名称都能自动转换成大写字母.如果找到了给定的符号名,有关该项的信息用TBLNEXT一样的格式返回.如果找不到该项,则返回nil.例如:(tblsearch "style" "standard") ; 字型检索将返回:( ( 0 . "STYLE" ) ; 符号类型( 2 . "STANDARD") ; 符号名字(70 . 0) ; 标志(40 . 0.000000) ; 固定字高(41 . 1.000000) ; 字宽因子(50 . 0.000000) ; 倾斜角(71 . 0 ) ; 生成标志(3 . "txt") ; 主字体文件(4 . "STYLE") ; 大字体文件)一般TBLSEARCH不影响被TBLNEXT检索的符号表顺序,但若TBLSEARCH操作无误,且可选变元<顺序状态>存在并为非空值,则会调整TBLNEXT的检索顺序,使得下次调用TBLNEXT能返回紧随在这次调用TBLSEARCH之后的表项.变元<顺序状态>的这一功能对于处理VPORT符号表是极有用的,因为在特定的设置情况下,所有的视窗均具有同一名称.例如,要在名为"4VIEW"的设置中寻找并处理每一视窗,可使用如下程序段:(setq V (tblsearch "VPORT" "4VIEW" T) ) ;寻找第一个视窗(while (and V (= (cdr assoc 2 V) ) "4VIEW") )... 处理视窗 ...(setq V (tblnext "VPORT") ) ;取得下一个视窗)如果系统变量FLATLAND为零,TBLNEXT对三维点将总以四元素的形式返回,如( 10 1.0 2.0 3.0),如果FLATLAND为非零值,则三维点按三元表(二维)形式返回,但这时将有一个组码为30的点对表,用以说明点的Z向高度值.8 对图形屏幕的输入设备的访问这一节讲述的AutoLISP函数允许从AutoLISP直接对AutoCAD图形屏幕的输入设备进行访问,使得用AutoLISP完成的命令可以和用户进行交互,就像用户和AutoCAD交互一样.这些命令可能会把屏幕图形搞乱,但用户可用下列命令恢复:(grtext)(redraw)所以没有必要担心.这些函数只提供给有经验的应用程序开发者使用.大多数AutoLISP 应用程序将不必用到这些函数.还需提请这些函数的用户注意,这些函数的操作可能会直接随着AutoCAD的发行版本的变化而更改,因此,AutoDISK公司不能保证使用这些函数的应用程序的向上兼容性.使用GRTEXT和GRREAD函数的应用程序也许不能在所有的硬件配置上以同样效果工作,除非开发者非常认真地遵循下面介绍的有关它们的使用规则.8.1 (grclear)这个函数清空当前视窗(在单屏幕系统中,它先从文字屏幕转换图形屏幕).但命令/提示、状态和菜单区保持不变.图形屏幕的原来内容可以用REDRAW函数恢复.8.2 (grdraw <起点> <终点> <颜色> [<加亮>] )GRDRAW在当前视窗中的两点之间画一条矢量线.<起点>和<终点>是两个二维或三维点( 两个实数或三个实数的表),它们指定当前用户坐标系中矢量的两个端点.若矢量线超出当前显示区,它们将被修剪以适合于屏幕.矢量将以整数<颜色>变元指定的颜色画出,-1指定"XOR涂描"方式,它复盖它画过的地方,当被复盖时就抹掉它自己.如果任选项<加亮>变元(整数)存在并且为非零值,矢量就加以加亮的形式画出,就象显示设备加亮所选择的目标一样(通常以虚线形式).如果省略了<加亮>项,或者提供的值为零,则使用通常的显示方式.8.3 (grtext [ <框区> <文本> [<加亮>] ] )利用GRTEXT,AutoLISP可以将文本写到AutoCAD图形屏幕的文本区上.如果调用它时有<框区>变元,且其范围从0到屏幕菜单框区最大编号减一,那么它将在指定的屏幕菜单框区内显示字符串变元<文本>.如果<文本>太长放不进菜单框区,则将它截尾,如果太短则填加空格.如果提供了任选的整数变元<加亮>,则加亮(若变元为非零值)指定菜单框区内的文字,或去掉(若变元为零值)指定菜单框区内的文字加亮态(注意,加亮另一个菜单框区将自动地去掉已被加亮的框区的加亮显示态).当往菜单框区写东西时,文本须先在无<加亮>方式下写,然后才可做加亮显示.对和原来写到菜单框区的文本相同的字符串,必须提供加亮或去掉加亮的变元.如果不注意这些规则,将会导致AutoLISP程序在不同的显示设备上产生不同的结果操作.注意,这个函数只不过能在屏幕菜单区内显示所提供的文本;它并不改变被其覆盖的屏幕菜单项.另外,某些显示器上采用重新涂覆菜单项来实现加亮菜单框区的操作,故用GRTEXT写字可能会导致将用户加亮菜单框区时的菜单项内容恢复出来.还有一些显示器,当用REDRAW, REGEN等命令或执行屏幕切换时;会自动重写菜单区内容.然而对大部分显示器,用GRTEXT 往屏幕菜单区内写字可保留到直至调用下页屏幕菜单为止.如果调用GRTEXT时其框区编号为-1,文本将被写到屏幕的方式状态行上.方式状态行的长度因显示器的类型而不同(除IBM彩色图形适配器之外,大多数显示器至少允许40个字符).当<文本>太长以致不能容纳在状态行可用空间内,GRTEXT将对它进行截尾.如果使用的框区号为-2,将把文本写到坐标状态行上.注意,如果坐标跟踪处于打开态, 一旦定标器发送新的一组坐标值,写到该处的文本值将被复盖掉.对于-1或-2菜单框区号, <加亮>变元不起作用.最后,如果调用GRTEXT时不加任何变元,就能将屏幕上所有的文本区域恢复到它们的标准数值状态.8.4 (grread [ <跟踪> ] )利用GRREAD,用户可以直接读AutoCAD的输入设备,任选变元<跟踪>指定了是否跟踪定标器的移动.只有非常特殊的命令才会用到这个函数--AutoLISP的大多数输入应该通过各种各样的"GETxxx函数",如GETSTRING,GETREAL等.<跟踪>变元如果存在且不为nil,那么当定标器移动时,就能从它那儿返回坐标值,而不需要按选择按钮.这就是AutoCAD用于实现拖曳的机制.GRREAD返回一个表,它的第一个元素是指定输入类型的编码.第二个元素既可能是一个整数,也可能是一个点表,这取决于输入类型.表中第一个元素编码方式如下:2 键盘字符----第二个元素为ASCII码.3 选择的点----作为表的坐标4 屏幕菜单单元选择----第二个元素作为菜单框区号.5 第二个元素为拖曳方式坐标.只有当第二个变元指定了且不为nil时,才返回.6 BUTTONS(按钮)菜单项选择----第二个元素为按钮号.7 数字化TABLET1菜单项----第二个元素为菜单项编号.8 数字化TABLET2菜单项----第二个元素为菜单项编号.9 数字化TABLET3菜单项----第二个元素为菜单项编号.10 数字化TABLET4菜单项----第二个元素为菜单项编号.11 数字化AUXI菜单项----第二个元素为菜单项编号.12 第二个元素作为与定标器按钮对应的坐标返回.总是跟随类型6的返回表.13 由键盘输入选择加亮屏幕菜单项.返回的第二个元素是菜单项编号.当返回表中的第二项为点值时,系统变量FLATLAND的当前设置状态会自动决定其返回形式.如FLATLAND为零,则返回点值为与当前用户坐标系统对应的三维坐标;否则为二维坐标.当GRREAD正在运行时,若输入了CTRL-C,就能从键盘上中止AutoLISP程序.任何其它输入将直接传送给GRREAD,使得它能完成对输入设备的控制.附录A 错误信息当AutoLISP检测到一个错误时,它就停止执行当前正在执行的函数而去调用用户定义的错误处理函数*ERROR*.如果用户没有定义自己的错误处理函数(即*ERROR*的约束值为nil), 标准的错误处理便以下列格式显示信息:error: message (错误信息)接下来显示函数的历程报告.如果用户定义了自己的错误处理函数*ERROR*,则把message作为仅有的变元传给*ERROR*函数.1. 用户程序错误下面是错误信息表,当编写和调试AutoLISP函数时经常能见到这些信息.大部分信息指出了典型的LISP程序错误,例如:. 函数或符号名拼写错误;. 函数变元的个数或类型错误;. 括号不匹配;. 引号不匹配(字符串没有终止符);. 函数没有执行完就试图使用它的结果.尽管这些信息通常指出的是用户程序的错误,但有时也可能是由于AutoLISP本身的程序产生的错误.如果系统报告了错误而你又在你的程序中没有找到任何错误,请你填写一份错误报告(Bug Report)寄Autodesk公司.atomlist modified after function swap (函数交换后,修改了atomlist表) 一个表达式修改了ATOMLIST表.在VMON函数被激活以后,这是不允许的.AutoCAD rejected function (AutoCAD不接受的函数)传送给AutoCAD函数的变元不合法(如:在函数SETVAR中用了只读的系统变量或在函数TBLNEXT中用了无效的表名),或函数本身在当前的正文中不合法.例如,不能在COMMAND函数中使用用户输入函数GETxxx.bak argument type (变元类型有错)传送给函数的变元类型不正确(例如,不能把一个整型数传给函数STRLEN).bad association list (关联表有错)提供给ASSOC函数的关联表不能由"(key value)"表组成.bad entmod list (entmod表有错)传送给ENTMOD的变元不是一个合适的实体数据表(如同ENTGET返回的那样的表).bad entmod list value (entmod表值有错))传送给ENTMOD的关联表中的一个子表包含错误的值.bad formal argument list (形式变元表有错)当AutoLISP计算函数时,它测到一个非法的形式变元表.也许此函数根本不是一个函数,而是一个数据表.bad function (函数有错)表中的第一个元素不是一个合法的函数名.也许它是一个变量名或一个数.这个信息也可能表明函数的定义有问题,不要忘记所需要的形式变元表.bad list (表有错)一个构造有错的表传给了函数.如果实型数以一个小数点开头,也会产生这种错误;这种情形下必须在小数点前面加一个零.bad node (结点有错)TYPE函数遇到了非法类型的项.bad node type in list (表中出现错误的结点类型)FOREACH函数遇到了非法类型的项.bad point argument (点变元有错)一个定义不合适的点(两个实数的表)被传送给需要点的函数.请注意,实型数不能以小数点开头;在这种情况下必须在小数点前面加一个零.bad point value (点值有错)一个定义不合适的点(两个实数的表)被传送给需要点的函数.请注意,实型数不能以小数点开头;在这种情况下必须在小数点前面加一个零.bad ssget list (ssget表有错)传送给(SSGET"X")的变元不是一个合适的实体数据表(就象ENTGET返回的那样的表).bad ssget list volue (ssget表值有错)传送给(SSGET"X")的关联表中的一个子表有不正确的值.base point is required (需要基点)GETCORNER函数被调用时,没有传给所需要的基点变元.boole arg1 <0 or>15 (boole的第一个变元<0或>15)BOOLE函数的第一个变元必须是从0到15之间的整数.can't evaluate expression (不能计算表达式)这个错误可能是由于小数点位置不合适和表达式的形式不合适而产生的.Can't open (file) for input--LOAD failed (装入失败)LOAD函数中描述的文件没找到,或用户无权访问这个文件.Can't reenter AutoLISP (不能再进入AutoLISP)AutoCAD与AutoLISP的通讯缓冲区正被当前运行的函数使用,直到这个函数执行完, 别的函数才能被调用.console break (控制台中断)当函数正在运行时用户输入了CTRL-C。
AutoCADLISP基本知识及函数

AutoCADLISP基本知识及函数1.lisp数据类型INT 整型REAL 实数型(最多有6位小数)STR 字符串型2.预定义符号nil 尚无定义或者falseT 常量PAUSE 暂停PI 常量π3.赋值函数(setq x 1.5 y 20 p "center");给x、y、p赋值,返回值center。
4.查询变量的值和数据类型command:!a或者直接输入a;返回a的值command:(type a)或者直接输入(type a);返回a的数据类型5.quote函数(quote(10 20 ...))(quote(10 20))或者'(10 20);表示禁止对表求值,返回(10 20) 定义二维点(setq p '(10 20))6.定义函数(defun 函数名(变元.../局部变量...) 表达式... )7.调用函数(函数名变量)8.调用CAD命令(command "autocad命令" "所需数据" ...)如绘制圆心(2,4),半径为5的圆(command "circle" "2,4" 5)或者(command "circle" '(2 4) 5)9.画矩形(defun c:rect1(/ p1 p2 p3 p4)(setq p1 (getpoint "\n输入矩形的一个角点"))(setq p3 (getcorner p1 "\n输入矩形的另一个角点:"))(setq p2 (list(car p3) (cadr p1)))(setq p4 (list(car p1) (cadr p3)))(command "pline" p1 p2 p3 p4 "c"))10.cond函数多条件判断(cond(测试表达式1 结果表达式1)(测试表达式2 结果表达式2) ...);从第一个子表起,测试每个子表的测试表达式直至有一个子表测试表达式成立,计算该子表的结果表达式并返回这个结果表达式的值。
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 POLARENTGET INITGET TBLNEXTGETDIST INTERS TBLSEARCHGETPOINT OSNAP在各函数说明中,已注明FLATLAND对上述函数起作用的方式。
2 ( + <数> <数> ...)这个函数返回所有<数>的总和。
其中的<数>可以是整型或实型的。
如果所有的<数>都是整数,其结果也是整数;如果其中有一个是实型的,那么其它整型数将转换为实型数结果将是实型数。
例如:(+ 1 2) returns 3(+ 1 2 3 4.5) returns 10.5(+ 1 2 3 4.0) returns 10.03 ( - <数> <数> ...)这个函数把第一个<数>减去第二个<数>,返回它们的差。
如果给定的<数>多于两个,那么将第一个<数>减去其后所有数之和,并返回最后的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AUTO LISP函数参考1(10版本)以下为十年前纯手工录入的函数参考手册,以分享给爱好LISP这方面的朋友参考!AutoLISP提供了大量的预定义函数。
若将函数名(大小写都可)作为表中的第一个元素函数变元(若有的话)作为表中后面的元素,就可以调用那个函数。
本章按字母顺序列出AutoLISP所有基本函数。
用户会发现其中许多函数都是标准函数,可在LISP程序设计语言中找到。
还有一些函数是由 AutoCAD提供的且专用于交互图形环境。
1 FLATLAND 系统变量--与老版本的兼容性AutoLISP版本10支持AutoCAD的最新增强型三维图形功能,则时继续保证与AutoCAD老版本的兼容性。
FLATLAND系统变量就是用来控制该兼容性的。
当FLATLAND为零时,实现新三维功能;否则各函数操作与AutoLISP版本9的一样。
FLATLANDR的设置作用于下列AutoLISP函数:DISTANCE GRREAD POLARENTGET INITGET TBLNEXTGETDIST INTERS TBLSEARCHGETPOINT OSNAP在各函数说明中,已注明FLATLAND对上述函数起作用的方式。
2 ( + <数> <数> ...)这个函数返回所有<数>的总和。
其中的<数>可以是整型或实型的。
如果所有的<数>都是整数,其结果也是整数;如果其中有一个是实型的,那么其它整型数将转换为实型数结果将是实型数。
例如:(+ 1 2) returns 3(+ 1 2 3 4.5) returns 10.5(+ 1 2 3 4.0) returns 10.03 ( - <数> <数> ...)这个函数把第一个<数>减去第二个<数>,返回它们的差。
如果给定的<数>多于两个,那么将第一个<数>减去其后所有数之和,并返回最后的结果。
如果只给了一个<数>,即返回零减这个<数>的结果。
此函数中的<数>可以是实型或整型,按标准规则进行类型转换。
例如:(- 50 40) returns 10(- 50 40.0 2) returns 8.0(- 50 40.0 2.5) returns 7.5(- 8) returns -84 (* <数> <数>...)这个函数返回所有<数>的乘积.其中<数>可以是实型或整型.按标准规则进行类型转换例如:(* 2 3) returns 6(* 2 3 4.0) returns 24.0(* 3 -4.5) returns -13.55 (/ <数> <数>...)这个函数将第一个<数>除以第二个<数>,返回其商.如果给出的<数>多于两个,则把第一个<数>除以其它所有<数>的乘积,并返回最后的商.此函数中的<数>可以是实型或整型,类型的转换按标准规则进行.例如:(/ 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.3756 (= <原子> <原子>...)这是"等于"关系函数.如果所有指定的<原子>在数值上是相等的,则返回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 nil7 (/= <原子1> <原子2>...)这是一个"不等于"关系函数.如果<原子1>数值上不等于<原子2>,则返回T;否则返回nil.如果提供的<变元>多于两个,则函数无定义.例如:(/= 10 20) returns T(/= "you" "you") returns nil(/= 5.43 5.44) returns T8 (< <原子> <原子>...)这是一个"小于"关系函数.如果第一个<原子>值小于第二个,则返回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 nil9 (<= <原子> <原子>...)这是一个"小于或等于"关系函数.如果第一个<原子>值大于或等于第二个原子,则返回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 nil10 (> <原子> <原子>...)这是一个"大于"关系函数.如果第一个<原子>值大于第二个,则返回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 nil11 (>= <原子> <原子>...)这是一个"大于或等于"关系函数.如果第一个<原子>值大于或等于第二个,则返回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 nil12 (~ <数>)这个函数返回<数>的按位非(NOT),即补码.<数>必须为整数.例如: (~ 3) returns -4(~ 100) returns -101(~ -4) returns 313 (1+ <数>)这个函数返回<数>加1(增量)的结果. <数>可以是实数或整数. 例如: (1+ 5) returns 6(1+ -17.5) returns -16.514 (1- <数>)这个函数返回<数>加1(增量)的结果. <数>可以是实型或整型数. 例如: (1- 5) returns 4(1- -17.5) returns -18.515 (abs <数>)这个函数返回<数>的绝对值. <数>可以是实型数或整型的. 例如: (abs 100) returns 100(abs -100) returns 100(abs -99.25) returns 99.2516 (and <表达式>...)这个函数返回所列出的表达式的逻辑"与"(AND). 如果其中任何一个表达式的结果等于nil,则停止求值并返回<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 nil17 (angle <点1> <点2>)这个函数返回从UCS坐标系统点<pt1>到UCS坐标系统<pt2>的一直线的角度,该角度从当前作图平面的X轴开始反时针方向计算(以弧度为单位). 如果提供了三维点,则将其投影至当前作图平面. 例如:(angle '(1.0 1.0) '(1.0 4.0)) return 1.5708(angle '(5.0 1.33) '(2.4 1.33)) return 3.1415918 (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 6622 (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) returns0.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.025 (atoi <字符串> )这个函数将字符串转换为整数,并返回此值. 例如:(atoi "97") returns 97(atoi "3") returns 3(atoi "3.9") returns 326 (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函数.其中<func>是一个0到15之间的整数,它表示16种可能的双变量Boolean函数中的一种.后面的整型变元根据这个函数和下列的真值表进行方式(即逻辑)组合:<整数1> <整数2> <func>位 -----------------------------------------------------0 080 141 021 11<整数1>的每一位和<整数2>的相应位配对,选择真值表中的一水平行.其结果位是0或1,将取决于对应真值表中这一行中<func>位的设置情况.如果<func>中位的设置适当,结果位就为1,否则结果位为0.<func>的一些值等效于标准的Boolean操作:AND, OR , XOR和NOT,如下所示:func 操作结果位为1时的条件--------------------------------------------------------1 AND 两个输入位都为16 XOR 只有其中一个输入位为17 OR 有一个或两个输入位为18 NOT 两个输入位都为0(即补码)例如:(Boole 1 12 5)指定了数12和5的逻辑"与"(AND).其结果为4.同样:(Boole 6 6 5)指定了数6和5的逻辑"异或"(XOR),返回结果为3可以使用<func>的其他值来完成其它的Boolean操作,这些操作可能没有标准名称.例如,如果<func>为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 nil29 caar, cadr, cddr, cadar等等AutoLISP支持CAR和CDR的连接,其深度可达四级. 例如,已知赋值: (setq x '((a b) c d))那么:(caar x) is equivalent to (car (carx)) returning a(cdar x) is equivalent to (cdr (carx)) returning (b)(cadar x) is equivalent to (car (cdr (car x))) returning b(cadr x) is equivalent to (car (cdrx)) returning c(cddr x) is equivalent to (cdr (cdrx)) 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.030 (car <表> )这个函数返回<表>的第一个元素.如果<表>是空的,则返回nil. 例如: (car '(a b c)) returns a(car '((a b) c)) returns (a b)(car '( )) returns nil31 (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.038 (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: PSQUARELower 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)) returns2.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 T42 (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 12343 (exp <数> )这个函数返回e的<数>次方(自然对数的逆).它返回的结果是实数.例如: (exp 1.0) returns 2.71828(exp 2.2) returns 9.02501(exp -0.4) returns 0.6703244 (expt <底数> <幂> )这个函数返回<底数>的<幂>次方.如果两个变元都是整数,其结果也是整数;否则,结果为实数. 例如:(expt 2 4) returns 16(expt 3.0 2.0) returns 9.045 (findfile <文件名> )这个函数允许用户程序在AutoCAD库路径上查找指定的文件.AutoCAD库路径按先后顺序由下列目录组成:当前目录、包括当前绘图文件的目录、由ACAD系统环境变量命名的目录(如果有的话)、以及包含AutoCAD程序文件的目录.FINDFILE不能事先假定文件的类型和<文件名>的扩展名,因此用户必须加以说明.如果文件名不带路径(即没有驱动器/目录前缀),AutoCAD就对其进行搜索并且返回全名,如果找不到该文件,就返回空(nil).如给出驱动器/目录前缀时,AutoCAD仅在此目录中查找(不再沿库路径搜索).FINDFILE返回的全名适合于OPEN函数的使用(下例中我们用"/"作为目录前缀分隔符;在PC-DOS/MS-DOS系统上用"/"或者"\\"作分隔符均可).例如,假设. 当前目录是"/acad/"并有文件"abc.lsp". 正在编辑"/acad/drawings"目录中的一图形文件。