AutoLISP 基础——认识自定义函数
- 格式:rtf
- 大小:1.02 MB
- 文档页数:23
一、数学运算功能函数l(+ 数值数值…) 返回:累计实数或整数数值2(- 数值数值…) 返回:差值3(* 数值数值…) 返回:所有数值乘积4(/ 数值数值…) 返回:第一个数值除以第二个以后数值的商5(l+ 数值) 返回:数值+l6(1- 数值) 返回:数值-l7(abs 数值) 返回:数值的绝对值8(atan 数值) 返回:反正切值9(cos 角度) 返回:角度的余弦值,角度值为弧度10(exp 数值) 返回:数值的指数11(expt 底数指数) 返回:底数的指数值12(fix 数值) 返回:将数值转换为整数值13(float数值) 返回:将数值转换为实数值14(gcd 数值1 数值2) 返回:两数值的最大公因数15(log 数值) 返回:数值的自然对数值16(max 数值数值…) 返回:数值中的最大值17(min 数值数值…) 返回:数值中的最小值18 pi 常数∏,其值约为3.141592619(rem数值1数值2) 返回:M数值的相除的余数20(sin角度) 返回:角度的正旋值,角度值为弧度21(sqrt数值) 返回:数值的平方根二、检验与逻辑运算功能函数l(=表达式1表达式2) 比较表达式1是否等于式2,适用数值及字符串2(/=表达式1表达式2) 比较表达式1是否大于等于表达式23(<表达式1表达式2) 比较表达式1是否<小于表达式24(<=表达式1表达式2) 比较表达式1是否<一小于等于表达式25(>表达式1表达式2) 比较表达式1是否>大于表达式26(>=表达式1表达式2) 比较表达式1是否大于等于表达式27(~数值) 返回:数值的位not值,(1的补码)8(and表达式1表达式2…) 返回:逻辑and的结果9(boole函数整数整数…) 返回:位式布尔运算10(eq表达式1表达式2) 比较表达式1与表达式2是否相同,适用列表比较(实际相同)11(equal表达式1表达式2[差量])比较表达式1与表达式2是否相同,差量可省略(内容相同)三、转换运算功能函数l(angtof字符串[模式])返回:角度值的字符串转成实数2(angtos角度[模式[精度]])返回:角度转成的字符串值3(atof字符串)返回:字符串转成实数值4(atoi字符串)返回:字符串转成整数值5(cvunit数值原始单位转换单位)返回:数值转换单位后的值转换根据acad.nut文件6(distof字符串[模式])返回:根据模式将字符串转成实数值7(itoa整数)返回:整数转成字符串8(rtos数值模式[精度])返回:实数转成字符串9(trans点原位置新位置[位移])返回:转换坐标系统值四、列表处理功能函数1(append列表列表……)结合所有列表成一个列表2(assoc关键元素联合列表)根据关键元素找寻联合列表中关系信息3(car列表)返回列表中的第一个元素,通常用来求X坐标4(cadr列表)返回列表中的第二个元素,通常用来求y坐标5(caddr列表)返回列表中的第三个元素,通常用来求Z坐标6(cdr列表)返回:除去第一个元素后的列表7(cons新元素列表)返回:将新元素添加到列表8(foreach名称列表表达式)返回:将列表的每一元素对应至名称再根据表达式执行响应9(length列表)返回:列表内的元素数量10(list元素元素…)返回:将所有元素合并为一列表11(listp元素)返回:判断元素是否为一串12(mapcar函数列表1列表2…)返回:将列表1、列表2列表的元素配合函数,求得新列表13(member关键元素列表)返回:根据关键元素(含似后的列表14(nthn列表)返回:列表的第n个元素15(reverse列表)返回:将列表元素根据顺序颠倒过来的列表16(subst新项旧项列表)返回:替换新旧列表后的列表五、字符串、字符、文件处理函数l(ascii字符串)返回:字符串第一个字符的“ASCII”码2(chr整数)返回:整数所对应的ASCII单一字符串3(close文件名称)关闭文件4(open文件名模式)返回:打开文件代码,准备读取或写入信息5(read字符串)返回:列表中的字符串的第一组元素6(read-char[文件代码])返回:通过键盘或文件中读取单一字符7(read-line[文件代码])返回:经由键盘或文件中读取一行字符串8(strcase字符串[字样])返回:转换字符串大小写9(strcat字符串1字符串2…)返回:将各字符串合并为一个字符串10(strlen字符串)返回:字符串构成的字符数(即字符串长度)11(substr字符串起始长度)返回:取出于字符串‘12(wcmatch字符串格式)返回:T或nil,将字符串与通用字符进行比较13(write-char数值[文件代码])返回:将一ASCII字符写到文件或屏幕14(write-line字符串[文件代码])返回:将字符串写到文件或屏幕上六、等待输入功能函数l(getangle[基点][提示])请求输入十进制角度数值,响应一个弧度值提示及参考点可有可无2(getcorner基点[提示])请求输入另一矩形框对角点坐标3(getdist[基点][提示])请求输入一段距离4(getint[提示])请求输入一个整数值5(getkword[提示]请求输入“关键词”6(getorient[基点][提示])请求输入十进制角度,响应一弧度值不受angbase、angdir影响7(getPoint[基点][提示])请求输入一个点的坐标8(getreal[提示]请求输入一个实数9(getstring[提示])请求输入一个字符串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函数…)对函数设定解除追踪标记十三、显示、打印控制功能函数l(gfaphscr)作图环境切换到图形画面2(grclear)暂时清除模前的屏幕画面3(grdraw起点终点颜色[亮显])暂时性的画出一条线4(grread[追踪])由输入设备读取追踪值5(grtext位置字符串[亮显])将字符串显示在状态列或屏幕菜单上6(grvecs向量列表[转置矩阵])暂时性的画出多条线7(menucmd字符串);提供在AlltOLISP中调用各菜单8(Prinl[表达式[文件代码]]将表达式打印于命令区或已打开的文件句柄字符则以“\”为前缀展开9(pinc[表达式[文件代码]]除句柄字符则不以”\”为前缀展外开其余同Prinl10(print[表达式[文件代码]]除表达式会往下一新行列出,及空一格外其余同prinl11(prompt信息)将信息显示于屏幕的命令区,并随后响应一个nil信息12(redraw[对象名称[模式]])重绘整张图或根据对象名称重绘该图形13(terpri)在屏幕上显示新列14(textscr)作图环境切换到文字画面15(textpage)清除文字画面文字类似DOS的cls命令16(vports)返回:窗口组态列表十四、符号、元素、表达式处理功能函数l(atom元素)如果元素不是列表,响应T,否则为nil2(atoms-family格式闲号列表])返回:一组己定义函数的符号列表3(boundp表达式)返回:T或nil,响应表达式是否有值存在4(minusp元素)返回:T或n儿元素是否为负值5(not元素)返回:T或n儿判定元素是否为ni16(null元素)返回:T或nil判定元素是否被赋予nil值7(numberp元素)返回:T或nil,元素是否为整数或实数8(quote表达式)响应表达式未检算前状态,同“‘”功能9(set符号表达式)将表达式结果设定给带单引号’符号10(setq符号1表达式1[符号2表达式2]…)设定表达式结果给各符号11(type元素)返回:元素的信息型态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文件名[加载失败])加载AutoLISP文件(*.lsp) 15.7(xload应用程序[错处理])加载ADS应用程序15.8(xunloa应用程序[出错处理])卸载ADS应用程序十六、内存空间管理函数l(alloc数值)以节点数值设定区段大小2(expand数值)以区段数值配置节点空间3(gc)强制收回废内存4(mem)显示目前的内存使用状态5(xdroom对象名称)返回对象扩展信息允许使用的内存空间6(xdsize列表)返回对象扩展信息所占用的内存空间十七、其它重要的功能函数l(acad_colordlg颜色码旗号)显示出标准AutoCAD颜色选择对话框2(acad_helpdlg求助文件名主题)显示出标准AutoCAD求助对话框3(acad_strlsort字符串列表)作字符串列表排序4(bherrs)取得bhatch与bpcly失败所产生的错误信息5(bhatch点[选择集[向量]])根据Pickpoint选点方式调用bhatch命令,绘制选集区域的剖面线6(bpoly点[选择集[向量]])根据Pickpoint选点方式调用bpoly命令并产生一定域Polyline7(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、TIF18.17(C:rmat模式选项)控管材质建立、贴附、编辑、分离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[渲染信息文件])显示渲染信息统计信息十九、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程序。
第5章 AutoLISP基本函数函数是AutoLISP语言处理数据的基本工具,学习AutoLISP编程最主要的是要掌握AutoLISP语言系统内部函数和符号的基本用法。
如:函数的调用格式,即函数名、参数的个数及类型;函数的功能、求值情况及返回值类型等。
AutoLISP基本函数主要包括:数值函数、赋值与求值函数、表处理函数、字符串处理函数、逻辑运算函数和控制结构函数等。
5.1 数值函数数值函数用于处理整型数和实型数,数值函数包括:基本算术函数、三角函数、数据类型转换函数。
数值函数的返回值类型取决于参数表中参数的数据类型。
AutoLISP中数值计算要遵循整实原则,具体运算规则为:A.整整得整;B.实实得实;C.整实得实。
例:command: (/ 18 4 2) 返回: 2command: (* 4.5 2.0) 返回:9.0command: (+ 6 4.2) 返回:10.25.1.1 基本算数函数这类函数包括:+、-、*、/、1-、1+、abs、sqrt、min、max、expt、exp、log、gcd、rem 1) (+ 〈数〉〈数〉… )功能: 求表中所有整数或实数的和。
例如:Command:(+ 1.2 3.1 3.8)返回:8.12) (- 〈数〉〈数〉… )功能: 求表中第 1 个数减去后面所有数的差, 当表中只有一个数时, 返回这个数的相反数。
例如:Command:(- 8. 1 5)返回:3.1Command:(- 0.25)返回:-0.253) ( *〈数〉〈数〉… )功能: 求表中所有数的积, 例如:Command:( * 0.0174533 30)返回:0.5235994) (/ 〈数〉〈数〉… )功能: 求表中第1 个数除以后面所有数的商。
例如:cmnmand:(/ 10 5 2.0)返回:1.05) (1+ 〈数〉)功能: 求一个整数或实数加 1 的和。
例如:Command:(1+ 2.7)返回:3.76) (1- 〈数〉)功能: 求一个整数或实数减 1 的差。
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 ( - <数> <数> ...)这个函数把第一个<数>减去第二个<数>,返回它们的差。
如果给定的<数>多于两个,那么将第一个<数>减去其后所有数之和,并返回最后的结果。
C#自定义autolisp函数研究本人是lisp爱好者,初学C#对AutoCAD编程。
从教材上看到C#可以自定义autolisp函数。
教材例子:定义一个命名为DisplayFullName 的AutoLISP 函数。
虽然在 .NET 工程中定义的这个方法接收一个值,但是这个AutoLISP 函数期待两个字符串值以给出合适的输出。
加载 .NET 工程到AutoCAD 中。
预期运行效果如下:在命令提示中输入下列的命令:(displayfullname "First" "Last")下面是这个AutoLISP 函数执行后输出窗口中显示的:Name: First Last自定义代码如下:C#using Autodesk.AutoCAD.Runtime;using Autodesk.AutoCAD.ApplicationServices;[LispFunction("DisplayFullName")]public static void DisplayFullName(ResultBufferrbArgs){if (rbArgs != null)string strVal1 = "";string strVal2 = "";intnCnt = 0;foreach (TypedValuerb in rbArgs){if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text) {switch(nCnt){case 0:strVal1 = rb.Value.ToString();break;case 1:strVal2 = rb.Value.ToString();break;}nCnt = nCnt + 1;}}Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nName: " + strVal1 + " " + strVal2);}(注:本例子来自于《开发人员手册中文版》)我们看到这个例子中自定义的autolisp函数是(displayfullname),它接收两个字符串参数,没有返回参数。
第5章 AutoLISP基本函数函数是AutoLISP语言处理数据的基本工具,学习AutoLISP编程最主要的是要掌握AutoLISP语言系统内部函数和符号的基本用法。
如:函数的调用格式,即函数名、参数的个数及类型;函数的功能、求值情况及返回值类型等。
AutoLISP基本函数主要包括:数值函数、赋值与求值函数、表处理函数、字符串处理函数、逻辑运算函数和控制结构函数等。
5.1 数值函数数值函数用于处理整型数和实型数,数值函数包括:基本算术函数、三角函数、数据类型转换函数。
数值函数的返回值类型取决于参数表中参数的数据类型。
AutoLISP中数值计算要遵循整实原则,具体运算规则为:A.整整得整;B.实实得实;C.整实得实。
例:command: (/ 18 4 2) 返回: 2command: (* 4.5 2.0) 返回:9.0command: (+ 6 4.2) 返回:10.25.1.1 基本算数函数这类函数包括:+、-、*、/、1-、1+、abs、sqrt、min、max、expt、exp、log、gcd、rem 1) (+ 〈数〉〈数〉… )功能: 求表中所有整数或实数的和。
例如:Command:(+ 1.2 3.1 3.8)返回:8.12) (- 〈数〉〈数〉… )功能: 求表中第 1 个数减去后面所有数的差, 当表中只有一个数时, 返回这个数的相反数。
例如:Command:(- 8. 1 5)返回:3.1Command:(- 0.25)返回:-0.253) ( *〈数〉〈数〉… )功能: 求表中所有数的积, 例如:Command:( * 0.0174533 30)返回:0.5235994) (/ 〈数〉〈数〉… )功能: 求表中第1 个数除以后面所有数的商。
例如:cmnmand:(/ 10 5 2.0)返回:1.05) (1+ 〈数〉)功能: 求一个整数或实数加 1 的和。
例如:Command:(1+ 2.7)返回:3.76) (1- 〈数〉)功能: 求一个整数或实数减 1 的差。
Autolisp基础教程ㄟAutolisp基础教程单元一:AutoLISP主角潇洒登场(setver “cmdecho” 0) 设定指令不相应(steq “filedia” 0)设定打开文件的时候不弹出窗口一. 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语言及其程序设计LISP(List Processing)是一种计算机的表处理语言。
LISP语言是人工智能领域中广泛应用的一种程序语言。
AutoLISP语言是一种运行在AutoCAD环境下的LISP编程语言,或称为AutoCAD的一种嵌入式语言。
它采用了与CommandLISP(一种通用的LISP语言版本)相近的语法及习惯约定,并吸收了LISP语言的主要函数,同时增加了针对AutoCAD特点的许多功能,如:可以把AutoLISP和AutoCAD的绘图命令透明地结合起来,使设计和绘图完全融为一体。
利用AutoLISP语言编程可以实现对AutoCAD当前图形数据库进行直接访问和修改。
在LISP语言中,最基本的数据类型是符号表达式。
LISP语言的特点是程序和数据都采用符号表达式的形式,即一个LISP程序可以把另一个LISP程序作为它的数据进行处理。
因此使用LISP语言编程十分灵活,看起来是一个一个的函数调用。
支持递归定义也是Auto LISP语言的重要特性。
AutoLISP语言是提供给用户的主要二次开发工具之一。
用AutoLISP语言编写应用程序,可以为AutoCAD增加新的命令或修改AutoCAD,以适应用户的特殊需要。
AutoCAD软件的开发者——AutoDesk公司许诺,将保证今后AutoCAD软件对AutoLISP语言的支持。
掌握使用和编制AutoLISP应用程序的方法和技术将大大提高用户的工作效率和二次开发水平,增强AutoCAD的灵活性,并将得到长期、稳定的技术支持。
1.1 AutoLISP语言的基本知识1.1.1 AutoLISP语言的特性AutoLISP语言是一种解释型语言,它的特点如下:1.解释型语言编程语言有两种基本类型:解释型和编译型。
AutoLISP属于解释型语言。
在解释型语言中,用户编写的源程序直接由解释器解释并执行。
而在编译型的语言中,源代码首先要编译为一种中间格式(目标文件),然后再与所需的库文件链接,生成机器码可执行文件。
第八讲:AutoLISP的基本函数AutoLISP程序可看作是一个一个函数的调用。
函数的调用格式:(函数名[<参数1>] [<参数2>] ⋯[<参数n>])2.1 赋值函数与求值函数1 赋值函数格式:(setq <sym1> <expr1> [<sym2> <expr2>] ⋯)依次将每个表达式<expr>的值赋给符号<sym>,要求参数必须成对出现,返回最后一个表达式的值。
例如:command: (setq a 5.0)5.0000command: !a5.0000command : (setq x12 2.5 y12 (+ x12 2.0))4.5000相当于(setq x12 2.5)(setq y12 (+ x12 2.0))2 禁止求值函数格式:(quote <expr>)阻止求值器对其参数<expr>求值,返回没被求值的表达式。
’(+ 6 5) 简写形式,等效的表达形式是( quote (+ 6 5))作用:可以“保护”一些表达式作为数据使用,而不是作为AutoLISP函数调用被求值。
例如:command : (car ‘(1 2 3)) 等效于(car (list 1 2 3))取表中第一个元素1返回结果2.2 数值函数数的运算遵循以下规则:(1)若参数表中的所有参数都为整型数,则AutoLISP求值器对参数表做整型运算,返回整型数值。
(2)若参数表中有一个实型数,则对表中的参数进行浮点数学运算,返回实型数。
2.2.1 算术运算函数1(+ <number> <number> ⋯)返回所有<number>的和(+ 20 5 13) 返回38(+ -20 5.5)返回-14.5000(+ (setq x 2) (+ x 3.0) 6.5) 返回13.5000注意:多个整数相加时,要防止总和超出范围而出错。
AutoLISP语言第一节概述1.1简介AutoLISP是一种嵌入AutoCAD内部的LISP语言。
它可让用户和AUTOCAD 开发者以非常强大的高级语言编写出宏语言程序和函数,它非常适合于图形的应用,LISP很易于学习和使用,它也非常灵活多变。
1.2AUTOLIAP中的数据类型.表.符号.字符串.实型数.整型数.文件指针.AUTOCAD实体名.AUTOCAD选择集.子程序整型数是16位带符号的数,因此,它的范围是在—32768和+32767之间。
实型数是以双精度的浮点数表示。
字符串可以是任意长度,它们的存贮空间是动态分配的。
1.3AUTOLISP的求值程序、词汇约定每一个LISP解释程序的核心就是求值程序。
求值程序装入用户的输入行,对它进行计算,并返回一些结果。
AUTOLISP的输入可以采用好几种形式。
它们可以在运行AUTOCAD时从键盘输入,也可以从ASCII文件读入,或者可以从字符串变量读入。
在所有这些形式中,必须要遵守上定的约定:1.符号名称可以由除下列字符之外的所有可打印字符序列组成:().’”;2.符号和函数名称(子程序)在AUTOLISP中大小写等效。
符号名称不能以数字开头。
3.实型数由一个或多个数字组成,后面跟着小数点,再就是一个或多个数字;如:“.4”并不被认作为实型数,“0.4”才是正确的写法。
4.文字字符串是一个由双引号引起来的字符序列。
在引起来的字符串中,可以使用反斜号,使得其中包括的控制字符可被正确识别,规定:\\ 表示字符“\”\n 表示换行\e 表示ESC\r 表示回车\t 表示光标\nnn 表示其八进制码为nnn的字符第二节AUTOLISP函数AUTOLISP提供了大量的预定义函数,本节介绍一些主要的函数。
需要说明的是,逻辑常数T与NIL这两个值相当于逻辑上的真与假。
是两个特殊原子。
这两个原子的值预先设置为T和NIL;常数PI表示数学上的π,它不是一个函数。
2.1数值运算函数1.(+ 〈数〉〈数〉…)函数返回所有数的总和2.(—〈数〉〈数〉…)函数返回所有数的差3.(* 〈数〉〈数〉…)函数返回所有数的积4.(/ 〈数〉〈数〉…)函数返回所有数的商其中的〈数〉可以是整型的,也可以是实型的。
AutoLISP程序入门教学资料AutoLISP程序入门-教学资料一. AutoLISP简介(优越性及缺点)AutoLISP语言是开发Autocad的主要工具,是LISP语言和Autocad有机结合的产物,在Autocad的发展及壮大过程中起到了重要的作用。
正是以AutoLISP为代表的开放式结构,才使Autocad在众多的CAD软件竞争中长期处于不败之地。
AutoLISP是一种解释型语言,可直接在Autocad中运行,而不象编译型语言必须借助于编译器对原程序进行编译和连接,才能生成可执行的代码模块,用户只需借助于文本编辑器(例如DOS的"EDIT"程序)即可进行编程。
AutoLISP(List Processing Language)是一种表处理语言?quot;表"是AutoLISP语言独有的数据结构,在AutoLISP中广泛使用,表是在一个变量中储存大量相关数据的有效方法。
例如AutoCAD中以三个实数(X Y Z)这种表的形式来表示三维点。
二. 在AutoLISP的赋值方法不象大多数计算机语言采用"中缀法"来表示程序语句(表达式),而采用"前缀法"。
例如:C语言中为实型数X赋值125.0,写成:X = 125.0;运算符"="放在操作数X和125.0之间。
而AutoLISP中则写成:(setq X 125.0)运算符"setq"放在操作数X和125.0之前。
"setq"是AutoLISP最主要的赋值函数,几乎所有的变量赋值都要依?quot;setq"来实现。
三. 如何向AutoCAD增加一个新命令(或如何定义一个函数)一般程序的结构组成及加载在下面的例子中,我们将了解AutoLISP语言一般程序的结构组成、如何定义一个在AutoCAD中可执行的函数、"setq"的用法以及如何在AutoCAD中加载程序。
Autolisp加载文件操作方法及自定义函数说明:本文件的函数与过程主要是针对程序初始化操作,可以批量加载文件,当文件不在Autocad支持搜索路径中时,选择文件后自动将路径添加到AutoCad支持搜索路径中。
对于常规的批量加载文件,可以自定义个简化程序,不作环境变量的操作。
;;****************************************************************************** ********;;;;本程序由红色金刚石开发,你可以任意使用,如果你有好的意见和建议请给作者反馈;;;;****************************************************************************** ********;;****************************************************************************** ********;;;;文件名:LoadFile.lsp;;;;功能:文件加载函数;;;;需要引用的文件:string.lsp dir.lsp;;;;函数一Loadlsp--加载文件;;;;函数二LoadSTRING--加载string.lsp;;;;函数三LoadDIR--加载dir.lsp;;;;函数四GetDir--目录选择对话框,获取文件夹路径;;;;函数五LoadFile加载文件。
在支持路径中搜索lsp文件,找到就加载,;;没有找到就选择目录或文件;;;与函数Loadlsp不同之处添加了错误捕获;;;;函数六LoadFiles加载lsp文件列表。
在支持路径中搜索lsp文件,;;找到就加载,没有找到就选择目录或文件;;;;函数七GetSupportPath获取支持搜索路径;;这个方法还不如基础函数编写,一句代码解决“getevn"ACAD"”;;;;****************************************************************************** ********;;****************************************************************************** ********;;;;函数名:Loadlsp;;;;功能:加载lsp文件。
AutoLISP简介AutoLISP规定了函数的形式:一: ( function argument )1.( ) 括号,表示执行某一函数,而括号中的内容即所要执行的部分.2.function 表示函数名. AutoLISP就是根据菡数名来区分各基本函数和用户自定义的函授数的.3.argument表示函数的参4.如果函数中套有函数称为嵌套函授数. AutoLISP允许用户使用诸如下列嵌套函授数:( fun1 (fun2 argu2) (fun3 argu3))(1)括号“(” 和“)”要匹配使用,用户在编写AutoLISP程序时一定要注意左\右手枪号匹配问题.(2)AutoLISP程序中,所有的括号( )和双引号" " 都必须在英文状态下输入,即必须是半角符号,为AutoLISP不识加紧中文全角符号.二: 设置变量函数( setq或SETQ )格式:(setq 变量名1值1[变量名2值2变量名3值3···])功能:创建给定的变量,并赋特定值.说明:(1)setq函数允许用户同时设置多个变时并赋予相应的数值.(2)对于字符串类型的值,应加上“”以于区分.注意:各变量名\数值之间只用空格隔开,而不能用其它标点符号,如要把3赋给变量abc可采用setq abc 3)方式.三: 执行AutoCAD标准命令( command )格式: ( command" 标准命令" "具体参数1" "具体参数2" ······)例如: (1)如果要画从(5,3)到(7,8)再到@10<0 三点的联机,可采用:( command " Line" "5,3" "7,8" "@10<0" "")(2)如果用户从已经定义的P1点到P2点画一条直线,可采用:( command "Line" P1 P2 "")四: 选择定点( getpoint)格式: getpoint("\n操作提示:")功能:用户可通过键盘输入体的坐标参数,可以用十字光标在屏幕区域内选取一点,通过该函数, AutoLISP就得知了用户所选取的点的坐标值.说明:(1)A utoLISP将首先显示用户设置的操作提示,在此提示下,才可确定某一给定一点.(2)G etpoint的操作提示中\n表示换行.通常,我们都是用(setq P1(getpoint"\n请输入第一点的坐标: "))这和方式来选取给定的点,并把该点坐标赋给变量P1.五: 目标捕捉( osnap)格式; osnap 给定顶点名称“目标捕捉方式”功能:以某种特定的目标捕捉方式, 捕捉最近给定顶点的某个特殊点.语名( setq Pt2(osnap pt1 "midp"))表示捕捉靠近Pt1端的中点,并把该中点坐标赋给Pt2六: 提取实体名称( entlast)格式: entlast功能:将用户的操作的上一实体的名称提取出来.( setq m (entlast))表示把用户的操作的上一实体的名称提取出来.并赋于m 这样AutoCAD就可以通过变量m来识别图形实体.例如:(1) Command :(command "circle" "5,5" "2") 以(5,5)这点为圆心,2为半径画一个圆.(2) Command :(command"line" "3,5" "7,5" "") 以这2点画一条直线,然后结束命令(3)Command :(setq el (entlast))(4)Command :(setq pt "5,7") 将点(5,7)赋给变量pt(5)Command :(command "trim" el "" pt "") 剪切多余的线.通过entlast 函数得知用户操作的上一实体为直线,并把该直线的实体名赋给变量el 这样el 就代表该直线.用户自定义函数AutoLISP提拱defun函数用以自定义用户函数,操作格式如下:( defun c :XXX( )表达式)现就该格式作说明:(1):defun 函数后面所跟C :XXX( )是一种特定的格式,XXX是用户定义函数的函数名.(2):表达工可由AutoLISP基本函数变量\字符串和运算符等组成,是用户定义函数的核心部.(3):定义完函数后,用户就可像AutoLISP基本函数一样调用XXX( )函数.注意:(1):defun 函数后所跟的C并不是代表硬盘驱动器符C,而是代表command line fuuction (命令行函数).(2):用这种方式所定义的函数XXX( ) 是无参函数,即不允许携带参数.(3):定义后,该函数XXX( ),还可以像AutoCAD基本命令一样,在command: 提示符下输入XXX并回车激活运行.(4):XXX( )函数, 还可以像AutoCAD透明命令一样,在某一函数运行过程中XXX形式运行.例如:( defun C : LXH( )(setq P1( getpoint"\ n请确定零件标注线第一点: ")(setq P2( getpoint"\ n请确定零件标注线第二点: "))( command "Line" P1P2 "@5<0" "")(setp P3 ( osnap P2 "midp" ))(command "dtext" " J " " bc" P350 )( Princ ))。