AutoLISP基础入门案例,很受用精编版
AUTOLISP程序命令(精校版本)

AUTOLISP程序命令(精校版本)1.+ (加)返回所有数的和2.– (减)将第一个数减去其他数的和并返回差值3.* (乘)返回所有数的乘积4./ (除)将第一个数除以其他数的乘积并返回商5.= (等于)比较参数是否相等6./= (不等于)比较参数是否值不相等7.< (小于)如果每个参数值都小于它右边的参数则返回T,否则返回 nil8.<= (小于或等于)如果每个参数值都小于或等于它右边的参数则返回 T,否则返回 nil9.> (大于)如果每个参数值都大于它右边的参数则返回T,否则返回 nil10.>= (大于或等于)如果每个参数值都大于或等于它右边的参数则返回 T,否则返回 nil11.~ (按位非)返回参数的按位非(即 1 的补码)12.1+ (增1)将参数加 113.1– (减1)将参数减 114.abs返回参数的绝对值15.acad_colordlg显示标准的 AutoCAD 颜色选择对话框16.acad_helpdlg启动帮助工具(已废弃)17.acad-pop-dbmod恢复DBMOD 系统变量的值到最近用acad-push-dbmod保存的值18.acad-push-dbmod储存 DBMOD 系统变量的当前值19.acad_strlsort以ASCII码字母顺序对字符串表进行排序20.acad_truecolorcli从命令行中选择 AutoCAD 真彩色21.acad_truecolordlg显示 AutoCAD 真彩色选择对话框22.acdimenableupdate控制关联标注的自动更新23.acet-layerp-mode查询和设置 LAYERPMODE 配置24.acet-layerp-mark放置图层先前记录的开始和结束标记25.acet-laytrans转换图形中的图层为其它图形或标准文件中所定义的标准26.acet-ms-to-ps从模型空间单位转换实数值到图纸空间单位27.acet-ps-to-ms从图纸空间单位转换实数值到模型空间单位28.action_tile为某一对话框控件指定一个动作表达式,用户在对话框中选中这个控件时,就会执行该动作表达式29.add_list在当前激活的对话框的列表框中增加一个字符串或修改其中的一个字符串30.alert显示一个警告框,其中显示一条出错或警告信息31.alloc设置段长度以供 expand 函数使用32.and返回表达式的逻辑与 (AND) 运算结果33.angle以弧度为单位返回两点之间连线与当前UCS 下X 轴之间的夹角34.angtof将表示角度的字符串转换为实数(浮点数)形式的弧度值35.angtos将一个以弧度为单位的角度值转换成字符串36.append将任意多个表组合成一个表37.apply将参数表传给指定的函数38.arx返回当前已加载的 ObjectARX 应用程序名表39.arxload加载 ObjectARX 应用程序40.arxunload卸载 ObjectARX 应用程序41.ascii将字符串中的第一个字符转换成其 ASCII 码(整数)后返回42.assoc从关联表中搜索一个元素,如果找到则返回该关联表条目43.atan返回一个数的反正切值(以弧度为单位)44.atof将一个字符串转换成实数45.atoi将一个字符串转换成整数46.atom验证一个项是否是原子47.atoms-family返回由当前已定义的符号组成的一个表48.autoarxload预定义可自动加载某相关ObjectARX 应用程序的命令名49.autoload预定义可自动加载某相关 AutoLISP 应用程序的命令名50.Boole用作一个通用的按位逻辑运算函数51.boundp检验符号是否被设置为某个值52.caddr返回表的第三个元素53.cadr返回表的第二个元素54.car返回表的第一个元素55.cdr返回去掉了第一个元素的表56.chr将代表字符ASCII 码的整数转换成包含相应的单一字符的字符串57.client_data_tile将特定应用数据与一个对话框控件相关联58.close关闭一个已打开的文件/doc/2b78ad21b107e87101f69e3143 323968011cf4ec.html mand执行一条 AutoCAD 命令60.cond多条件、多处理结果函数61.cons向表的头部添加一个元素,或构造一个点对62.cos返回弧度角度的余弦值63.cvunit在不同测量单位之间进行换算64.defun定义函数65.defun-q将函数定义为表66.defun-q-list-ref返回用 defun-q 定义的函数的表结构67.defun-q-list-set将符号设置为以表形式定义的函数68.dictadd在指定词典内添加非图形对象69.dictnext查找词典中的下一个条目70.dictremove从指定词典中删除一个条目71.dictrename重命名词典条目72.dictsearch在词典中搜索某个项73.dimx_tile返回控件的宽度74.dimy_tile返回控件的高度75.distance返回两个点之间的距离76.distof将一个表示实(浮点)数的字符串转换成一个实数77.done_dialog中断对话框78.end_image结束当前激活的对话框图像控件的操作79.end_list结束对当前激活的对话框列表的操作80.entdel删除对象(图元)或恢复先前删除的对象。
AutoLisp函数大全(可编辑)

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(数值数值…)返回:数值中的最大值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是否<小于表达式2 2.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〔表达式〔文件代码〕〕除表达式会往下一新行列出,及空一格外其余同prinl13.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: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程序1111AutoLisp函数19。
AutoLISP实用编程四例

AutoLISP实用编程四例-------------------------------------------------- 江苏崔华明AutoCAD是一个功能强大的通用图形设计软件,其内嵌的AutoLISP语言为用户进行二次开发提供了方便。
下面就介绍几则用AutoLISP编写的实用程序,这些程序相当于新增的AutoCAD命令,可以弥补AutoCAD本身的一些不足,为日常使用带来方便。
1(快速更改文本的大小在标准的AutoCAD中,要更改已有文本的大小,需要使用Change命令。
该命令的缺陷是:即使只更改文本的大小,也要重新确认文本的插入点、字型、倾斜角等一系列参数。
也就是说,除输入文本的新高度值外,还需要按5次回车键才能完成一个文本的更改~而且每次只能修改一个文本。
这对于同时更改多个文本的大小非常不便。
本文的AutoLISP程序使这一工作变得十分方便和快捷。
使用方法如下:在AutoCAD的Command提示下,打入命令:cthAutoCAD将提示“Selectobjects:”,这时可以使用AutoCAD允许的任意方式选择目标。
对于有多个文本需要更改的情况,使用窗口选择比较方便,而且你不用担心选择窗口中包含了非文本目标,程序能够自动在选择的目标中查找出文本实体,并只对文本进行更改。
选择目标后,AutoCAD提示“Newtextheight:”,这时输入一个新的文本高度值然后回车,则所有选中的文本被更改成新设定的高度。
2(延伸直线的长度在实际使用中,常常要将一条直线延伸指定的长度。
通常的做法是:在需要延伸的直线的端点画一个辅助圆,圆的半径等于直线要延伸的长度,然后使用Extend命令将直线延伸到与圆相交,最后删除辅助圆。
本文的AutoLISP程序将使你非常容易地实现这一点。
你只需选择要延伸的直线并输入要延伸的长度即可,其余的工作由程序自动完成。
使用方法如下:在AutoCAD的Command提示下,打入命令:stl然后根据提示选择要延伸的直线(选择点要靠近直线需要延伸的端点),并输入延伸的长度。
AutoLISP从入门到精通初级教程[新手必备]
![AutoLISP从入门到精通初级教程[新手必备]](https://img.taocdn.com/s3/m/d91331bc84868762caaed59a.png)
AutoLISP入门单元一:AutoLISP主角登场 (2)单元二:AutoLISP的关键、基本结构及语法 (4)单元三:快速分类浏览AutoLISP功能函数(一) (10)单元四:快速分类浏览AutoLISP功能函数(二) (13)单元五:轻松快速的掌握AutoLISP设计技巧 (16)单元六:图元数据的取得与活用技巧(一) (21)单元七:图元数据的取得与活用技巧(二) (25)单元八:新手上路-参数设计的关键技巧 (32)单元一: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 基础........................................................................................................................... 4 1.1 AutoLISP 简介........................................................................................................................ 4 1.2 AutoLISP 的基本结构和语法................................................................................................. 4 1.3 AutoLISP 程序的加载............................................................................................................. 6 1.4 本章总结.................................................................................................................................. 6 第二章 AutoLISP 功能函数分类........................................................................................................... 7 2.1.功能函数的分类....................................................................................................................... 7 2.2.数学运算功能函数................................................................................................................... 7 2.3 检验与逻辑运算功能函数....................................................................................................... 8 2.4 转换运算功能函数................................................................................................................... 8 2.5 列表处理功能函数................................................................................................................... 9 2.6 字符串、字符、文件处理函数............................................................................................... 9 2.7 等待输入功能函数................................................................................................................. 10 2.7 几何运算功能函数................................................................................................................. 10 2.8 对象处理功能函数................................................................................................................. 11 2.9 选择集、符号表处理功能函数............................................................................................. 11 2.10 AutoCAD 相关查询、控制功能函数................................................................................. 12 2.11 判断式、循环功能函数....................................................................................................... 12 2.12 函数处理、定义、追踪与错误处理功能函数 ................................................................... 12 2.13 显示、打印控制功能函数................................................................................................... 13 2.14 符号、元素、表达式处理功能函数................................................................................... 13 2.15 ADS、ARX、AutoLISP 加载与卸载函数......................................................................... 1412.16 内存空间管理函数............................................................................................................... 14 2.17 其他重要的功能函数........................................................................................................... 15 2.18 DCL 对话框定义相关的函数与命令.................................................................................. 15 2.19 本章总结............................................................................................................................... 15 第三章 AutoLISP 的程序设计............................................................................................................. 16 3.1 AutoLISP 的程序设计步骤................................................................................................... 16 3.2 第一个 AutoLISP 程序...........................................................................................................16 第四章 AutoLISP 参数化设计............................................................................................................ 22 4.1 什么是参数化设计................................................................................................................. 22 4.2 重要关键-三角函数................................................................................................................ 22 4.3 AutoLISP 三角函数和转换相关函数................................................................................... 24 4.4 三角函数应用实例................................................................................................................. 24 4.5 本章小结................................................................................................................................. 27 第五章 对象属性的获取与修改............................................................................................................28 5.1 什么是对象属性..................................................................................................................... 28 5.2 对象属性应用的相关功能函数............................................................................................. 28 5.3 在 AutoCAD 的命令提示行练习获取对象属性列表.......................................................... 28 5.4 对象属性的修改与更新......................................................................................................... 31 5.5 对象属性修改的应用练习..................................................................................................... 32 5.6 本章小结................................................................................................................................. 33 第六章 循环与判断式............................................................................................................................34 6.1 循环与判断式的作用............................................................................................................. 3426.2 判断式、循环相关功能函数................................................................................................ 34 6.3 IF 判断式应用......................................................................................................................... 36 6.4 COND 判断式应用.................................................................................................................37 6.5 repeat 循环式应用................................................................................................................. 37 6.6 WHILE 循环式的应用............................................................................................................ 38 6.7 本章小结................................................................................................................................ 39 第七章 AutoLISP 的子程序................................................................................................................ 40 7.1 什么是子程序........................................................................................................................ 40 7.2 子程序的应用........................................................................................................................ 40 7.3 子程序的自变量.................................................................................................................... 413第一章 AutoLISP 基础1.1 AutoLISP 简介一、AutoLISP AutoLISP 的由来是基于 LISP 语言衍生出来的高阶编程语言,专门用于 AutoCAD 及相 关的各种产品。
AutoLISP基础

原子: 1 整型数 如:0,1,2,-25,68,3678 … 2. 实型数 如: 4.3, -2.36, 47.542, 2.5E-6, 1.8E12 … 3. 字符串 如:“ABC” “234” “BDe56” “这是字符 串” … “ ” “\nPress Any Key!” “\101=A” 4. 符号原子 如:x1,a24,ab,B*,r-2,u_1 …
2.1.2 AutoLISP的数据类型
整型数(INT) -2147483647~2147483648 实型数(REAL) 2.45, -0.38, -4.56E8 符号(SYM) x, y1, ax2, abc, … 字符串(STR) “fx” “AutoCAD” “2.36” 表(LIST) (COS phai) ‘(2 5) 文件描述符(FILE) AutoLISP的内部函数(SUBR) 选择集(PICKSET) 实体名(ENAME) 函数分页表(PAGETB)
2.2.10 表处理函数
1. 取表中部分内容的函数
函数名 car cdr last nth 格式 (car [表]) (cdr [表]) (last [表]) (nth [n] [表]) 功能
表(LIST)是AutoLISP语言中最基本的的数据类型,表处理正 是LISP所具有的特性。
提取表中首元素并返回其值
2.2.6 cond多分支函数
调用格式:(cond ([条件1] [表达式1]) ([条件2] [表达式2]) 。。。 ([条件n] [表达式n]) ) 功能:自顶向下逐个检查每个条件分支,若符合条件,则执 行相应的表达式并返回该表达式的求值结果。 例如:(cond ((and (> d 30) (<= d 38)) (setq b 10 h 8)) ((and (> d 38) (<= d 44)) (setq b 12 h 8)) ((and (> d 44) (<= d 50)) (setq b 14 h 9)) ((and (> d 50) (<= d 58)) (setq b 16 h 10)) )
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 支援軟體。
AutoLISP从入门到精通初级教程[新手必备]
![AutoLISP从入门到精通初级教程[新手必备]](https://img.taocdn.com/s3/m/d91331bc84868762caaed59a.png)
AutoLISP入门单元一:AutoLISP主角登场 (2)单元二:AutoLISP的关键、基本结构及语法 (4)单元三:快速分类浏览AutoLISP功能函数(一) (10)单元四:快速分类浏览AutoLISP功能函数(二) (13)单元五:轻松快速的掌握AutoLISP设计技巧 (16)单元六:图元数据的取得与活用技巧(一) (21)单元七:图元数据的取得与活用技巧(二) (25)单元八:新手上路-参数设计的关键技巧 (32)单元一: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 支持软件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单元一: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. 对设计人员而言:3.对程序本身而言:A.少少的几行,却可能有『大大满意』的时候B.充份掌握了控制、创造AutoCAD 的『尚方宝剑』,让您在AutoCAD 的设计运作中『得心应手』,享受无比的快乐与成就感五.如何有效的学习AutoLISP ?1.先由小程序着手,认识AutoLISP语法规定!2.浏览所有的AutoLISP功能函数,重要的功能函数要熟记脑海,俗语说的好『一回生,二回熟』,除非您不用心,否则没有学不好的道理3.要懂得偷懒:不要认为在绘图的过程中,繁琐的步骤是合理的,困难的绘图过程是必须忍耐的,试着用AutoLISP解决看看!4.多观摩别人的程序设计,吸取精华,像海棉一样=>『吸』、『吸』、『吸』5.动手『写』程序比用眼睛看程序,更能够领略深记脑海!6.随时随地整理您的程序,并加以批注,以免因时间的飞逝,当时用心的成果也烟消云散,忘的一乾二净7.『决心』是学好AutoLISP 最重要的关键!8.期许自己,要由操作者变成创造者单元二:AutoLISP的关键、基本结构及语法一、学好AutoLISP 的关键、基本结构与语法:1. AutoLISP 程序语言的特质A.语法简单B.功能函数强大C.撰写的环境不挑剃D.直译式程序,『即写即测、即测即用』E.横跨AutoCAD 各作业平台,悠然自得(注:以上五点,读者可以参考上一章的剖析)2.学好AutoLISP 的关键:充份掌握『语法结构』&『功能函数』的搭配3.重要的AutoLISP 的基本语法结构规则1:以括号组成表达式,、相对称左右括号数一定要成双成对规则2:表达式型态:(操作数运算子运算子运算子)1.1 操作数包括『功能函数』&『自定函式』1.2 运算子(自变量)包括:A.整数(Integer) 如8,-17,500,9999 .....B.实数(Real) 如8.5,-17.456 .....C.字符串(String) 如"AutoCAD","123"D.串行(List) 如("a" "b" "c"),(x y)E.像素名称代码如<entity name: 6000f262>F.档案代码如<file:#12438>.....G.选择群集代码如<Selection set:1>规则3:表达式中的『运算子』,可以是另一『表达式』或『子程序』规则4:多重的括号表达式,运算的先后顺序是『由内而外、由左而右』规则5:以档案型态存在的AutoLISP 程序(ASCII 档案),其扩展名必须是.lsp规则6:撰写的环境,只要是一般的文书编辑软件、记事本,可编辑ASCII 档案者都适用规则7:以defun 功能函数定义新的指令或新的功能函式规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD新指令规则9:加载AutoLISP 程序的作法:=> 指令:后直接键入(load "LISP主檔名")规则10:AutoLISP 程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性规则11:AutoLISP 最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失规则12:以setq 功能函数设定变量值(setq 变量名称设定值)规则13:欲在AutoCAD 的环境中,查看一变量值,指令:下键入『!变量名』即可规则14:以(defun C:函式名(自变量/ 变数) ........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』二、学好AutoLISP 的关键:充份掌握『语法结构』&『功能函数』的搭配其时这个关键亦是学习其它程序语言的关键.•『语法结构』AutoLISP 的语法结构规定的并不多,变量不用事先定义及宣告,读者可熟记下一单元有关重要的AutoLISP基本语法结构,十四条设计上要求的『规则』•『功能函数』AutoLISP 之所以能功能如此强大,都有赖功能函数,其成员共约200个:1.一般性函数170个2.ADS 定义特殊函数9个3.配合DCL 交谈框设计函数22个各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然,您可不能乱给!例如:指令:(+ 1 2 3 "ABC")传回:error : bad argument type (自变量型态错误)因为『+』函数不接受字符串,而"abc" 正是字符串指令:(rtos "abc")传回:error : bad argument type (自变量型态错误)因为『rtos』函数只接受实数转字符串详细内容可参考下一章『快速浏览AutoLISP 功能函数』至于各功能函数详细的语法与实例应用,读者请参阅本书『第三篇AutoLISP功能函数详解』三、重要的AutoLISP 的基本语法结构:规则1:以括号组成表达式,左右括号数一定要成双成对、相对称请依序在『指令:』列(或指令:) 后面直接键入以下表达式指令:(+ 1 2 3 4 5) 传回加总和15指令:(max 14.5 8.9 35) 传回最大值35指令:(menucmd "p1=*") 显示拉下POP1指令:(getint "Enter Real:") 传回Enter Real:要求输入一个实数指令:(setq a (* 12.5 4)) 传回相乘值50,同时设定给『变量a』指令:!a 回应50 (注:! 号可用来查询变数值)指令:(min 75 a 63) 响应最小值50 (因为变量值a代表50)错误的范例:指令:(setq a (* 12.5 4)1> 传回1>表示少了一个括号1> ) 此时,只要再补上一个) 即可指令:(setq a (* 12.5 42> 传回2>表示少了二个括号2> )) 此时,只要再补上二个) 即可规则2:表达式型态(操作数运算子运算子运算子...)或(函数(式) 自变量自变量自变量...)或(函数(式) 元素元素元素...)1.1 操作数包括『功能函数』&『自定函式』功能函数:如上练习中的+、max、menucmd、getint、setq、*、min,详细内容可参考下一章『快速浏览AutoLISP 功能函数』&『第三篇AutoLISP功能函数详解』自定函式:由设计者自行定义的新函式或子程序1.2 运算子(又称自变量或元素)包括:A.整数(Integer): 如8,-17,500,9999…正常范围: 2的16次方,介于-32768与+32767之间特殊范围:若以float 函数将其转为实数,则范围2的32次方, 介于-2147483648与+2147483647之间B.实数(Real): 如8.5,-17.456…正常范围:带有小数点的数,精度可达14 位有效数字C.字符串(String): 如"AutoCAD","123","Enter Real:","7.5",…正常范围:以双引号内夹『字符』为认定,字符数不受限制D.串行(List): 如("a" "b" "c"),(x y),(x y z),("a" 8 3.5),....正常范围:以左右括号内夹『元素』为认定,元素型态非常弹性使用频率:在AutoLISP 程序设计中应用非常高范例说明: ("a" 8 3.5 kk (1 2))表示此串行内有五个元素"a"表示字符串a、8表示整数8、3.5表示实数3.5、kk表示变量kk、(1 2)表示串行(1 2)2D 点坐标(x y) 表示法=> 以二实数形成串行3D 点坐标(x y z) 表示法=> 以三实数形成串行E.像素名称代码:如<entity name: 6000f262> ...使用范围: AutoCAD 会自动赋予像素指向代码,透过此代码可找到像素的数据库记录范例说明: (setq en (entlast))传回<entity name: 60000062>(entget en) 可找到像素的数据库串行F.档案代码: 如<file:#12438>…使用范围:开启(open)档案作读档(r)、写档(w)使用时,所产生的代码,如下:范例说明:(setq ffr (open "test.txt" "r")) 回应<file:#24138>(setq ffw (open "abc.txt" "w")) 回应<file:#34812>G.选择群集代码: 如<Selection set:1>、<Selection set:1>…使用范围:一个或数个像素所形成的选择集范例说明:(setq ss (ssget))选取对象: (可选择物体)选取对象: (可选择物体)选取对象: (按[ENTER] 键)回应<Selection set:1>规则3:表达式中的『运算子』,可以是另一『表达式』或『子程序』功能函数使用语法:(strcat 字符串1 字符串2 字符串3 ....) 字符串结合功能函数(getstring 提示) 要求键入一个字符串(rtos 实数) 将实数转换成字符串范例说明1: (strcat "abc" "123" "LISP") 传回:"abc123LISP"范例说明2: (strcat "abc" (getstring "Enter String:" ) (rtos 123.45))执行结果: Enter String: 键入任一字符串,假设是键入*HELLO*回应"abc*HELLO*123.45"本例中的strcat函数在语法中要求的『运算子』必须是『字符串』型态『运算子1』= "abc" 是正常的字符串运算子『运算子2』= 表达式(getstring "Enter String:") 传回结果是一字符串"*HELLO*"『运算子3』= 表达式(rtos 123.45) 传回结果是一字符串"123.45"规则4:多重的括号表达式,运算的先后顺序是『由内而外、由左而右』范例说明:请将10.25 + 17 - 13.2 / 7的结果,设定给变量kk,并转换成AutoLISP 的表达式解法技巧A:1:运用『二分法、加括号』:(10.25 + 17) - (13.2 / 7)2:操作数往前提:kk = (- (10.25 + 17) (13.2 / 7))3:操作数再往前提:kk = (- (+ 10.25 17) (/ 13.2 7))4:转换完成:(setq kk (- (+ 10.25 17) (/ 13.2 7)))解法技巧B:1:运用『二分法、加括号』:(10.25 + (17 - (13.2 / 7)))2:操作数往前提:kk = (+ 10.25 (17 - (13.2 / 7)))3:操作数再往前提:kk = (+ 10.25 (- 17 (/ 13.2 7)))4:转换完成:(setq kk (+ 10.25 (- 17 (/ 13.2 7))))规则5:以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.LSP规则6:撰写的环境,只要是一般的文书编辑软件,可编辑ASCII 档案者都适用如:PE2、PE3、DW3、书中仙、汉书、EDIT、记事本....等规则7:以defun 功能函数定义新的指令或新的功能函式(注:自变量及区域变量可省略)程序结构型态:(defun 函式名称(自变量/区域变量): :: : 程序内容: :)规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD 新指令(注:自变量及区域变量可省略)程序结构型态:(defun C:KK(自变量/区域变量): :程序内容: :: :)则加载此LISP 程序后,可在指令: 后直接键入新定义的KK 指令规则9:加载AutoLISP程序的作法:指令:后直接键入(load "LISP主檔名")注:load 与字符串间的空格,可有可无注:load 与双引号间的空格,可有可无(load"LISP主檔名")范例:在c:\lsptools 目录下有一LISP程序tt.lsp,而您目前的工作目录在c:\dwg 下•若『环境设定』之『支持档案搜寻路径』有指定到c:\lsptools目录,则欲使用加载tt.lspà指令:后键入(load "tt") 即可•若『环境设定』之『支持档案搜寻路径』无指定到c:\lsptools目录,则键入(load"tt") 后,会出现错误讯息如下:无法开启「tt.lsp」做输入错误: 载入失败(LOAD "tt")*取消*此时您可键入:指令:(load "c:\\lsptools\\tt") 或指令:(load "c:"/lsptools/tt)不可键入: (load "c:\lsptools\tt")因为『\』在AutoLISP 结构语法中已经用于『跳脱码控制』了规则10:AutoLISP 程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性规则11:AutoLISP 最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失规则12:以setq 功能函数设定变量值(setq 变量名称设定值)范例:(setq a 100) ;变量a 值设定成整数100(setq b 123.56) ;变量b值设定成实数123.56(setq c "Good morning") ;变量c 值设定成字符串(setq pt1 (getpoint "Enter POINT:")) ;变量pt1 值设定成点串行(setq pt2 (list a b));此时,a值是100,b值是123.56变量pt2值设定成点串行(100 123.56)(setq pt3 '(297 210)) ;变量pt3 值设定成点串行(297 210)注意: 直接设定成点串行时,不能省略单引号『'』否则会被误认(297 210)又是一个表达式, 297是操作数而出错!规则13:欲在AutoCAD 的环境中,查看一变量值,指令:下键入『!变量名』即可范例:指令:(setq aa (+ 100 75)) 传回:175指令:!aa 传回:175指令:(setq pp (list 90 50)) 传回:(90 50)指令:!pp 传回:(90 50)指令:!ww 传回:nil 空值无设定规则14:以(defun C:函式名(自变量/ 变数) ........)程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』(注:在AutoLISP 中,未赋予值的变量,其值皆响应nil)『区域变量』于此程序执行完毕后,其值自动消失『整体变量』于此程序执行完毕后,其值仍然存在范例: test.lsp 内容如下(defun c:tt(/ sa sb sc)(setq sa 100)(setq sb 20)(setq sc 10)(setq sd (+ sa sb sc)))回到:指令:键入(load"tt") 传回:c:tt指令:tt 传回:130指令:!sa 传回:nil (属区域变量)指令:!sb 传回:nil (属区域变量)指令:!sc 传回:nil (属区域变量)指令:!sd 传回:130 (属整体变量)单元三:快速分类浏览AutoLISP功能函数(一)一?看到以下那么多的AutoLISP 功能函数,洋洋洒洒17大类:1.您第一个念头,一定惊讶怎么会那么多,您可能快吓坏了!2.您第二个念头,一定会想『那么多,怎么记得下来』,您可能快放弃了!二?其实,您应该要『很兴奋』而『充满信心』的,怎么说呢?1.您有那么多的『大将』协助您撰写AutoLISP 程序,当然左右又逢源,不但轻松, 而且要快乐的不得了2.这些函数只要您先浏览有印象, 要用时,再翻查该函数,了解用途语法再加入到您的程序中就可以了3.常用的函数,写久、用久后,自然会深深牢记脑海,想忘都很难,不常用的函数, 若硬要您记下来,相信连高手都很困难,更何况是初学的您4.您不用再摸不着头绪了,因为您幸运的拥有了本书,就是您成功的开始第一类数学运算功能函数第二类检验& 逻辑运算功能函数第三类转换运算功能函数第四类串行处理功能函数第五类字符串、字符、档案处理功能函数第六类等待输入功能函数第七类几何运算功能函数第八类像素处理功能函数单元四:快速分类浏览AutoLISP功能函数(二)第九类选择集、符号表处理功能函数第十类AutoCAD 相关查询、控制功能函数第十一类判断式、循环相关功能函数第十二类函数处理、定义、追踪& 错误处理功能函数第十三类显示、打印控制功能函数第十四类符号、元素、表示式处理功能函数第十五类ADS、AutoLISP 加载与释放函数第十六类内存空间管理函数单元五:轻松快速的掌握AutoLISP设计技巧一、AutoLISP 程序设计的四个步骤:1.第一步骤:产生写程序的动机、预期目标2.第二步骤:构思程序流程、所需之LISP功能函数、相关变量订定&提示讯息3.第三步骤:利用文书软件(如记事本) 撰写xxx.lsp程序4.第四步骤:回到AutoCAD下,加载AutoLISP程序以(load"LSP主檔名") 或(load "LSP主檔名")5.第五步骤:执行新的AutoLISP 指令二、透过简单范例全程演练AutoLISP:1.第一步骤:动机、预期目标如图: 希望能在输入『左下角点』、『矩形宽』、『矩形高』后,自动的将图形依所给的条件画出,如此一来,尔后画这个图就轻松愉快了!2.第二步骤:构思程序相关变量订定(如下图)•定出程序名为pbox.lsp•构思程序流程、相关变量:变量名称可自行设定(如pa、ww、hh、pb、pc、pd、mp1、mp2、mp3、mp4),掌握三个原则:不可重复好记不会混淆适时的以分号『;』加上批注(defun c:pbox();以下pa、ww、hh 值须由使用者输入(setq pa (请求输入左下角点))(setq ww (请求输入矩形宽度实数值))(setq hh (请求输入矩形高度实数值));以下pb、pc、pd值须由程序依据pa、ww、hh求出(setq pb (依据相对极坐标法求出pb点坐标值))(setq pc (依据相对极坐标法求出pc点坐标值))(setq pd (依据相对极坐标法求出pd点坐标值));以下依据pa、pb、pc、pd 点画矩形(以pline指令画出矩形);以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh;& pb、pc、pd 值求出(setq mp1 (求出mp1 点坐标值))(setq mp3 (求出mp3 点坐标值))(setq mp2 (求出mp2 点坐标值))(setq mp4 (求出mp4 点坐标值));以下依据mp1、mp2、mp3、mp4 点画出二条线(以line 指令画出mp1 到mp3 的线)(以line 指令画出mp2 到mp4 的线))本程序所需的AutoLISP功能函数及其用法(getpoint [基点] [提示]) <-- 请求输入一个点坐标(getreal [提示]) <-- 请求输入一实数(polar 基点弪度距离) <-- 依极坐标法取得另一坐标点其中『弪度值』之转换为:(command "AutoCAD 指令" ...) <--呼叫执行AutoCAD 指令注意:指令及其副选项皆要用双引号处理假设pa、pb、pc、pd 皆为变量,其值为点坐标正确:(command "pline" pa pb pc pd "c")错误:(command pline pa pb pc pd c)原因:指令pline 及其副选项 c 皆没用双引号括住错误:(command "pline" pa pb pc pd c)原因:副选项c (代表close) 没用双引号括住,会被误认为是AutoLISP的变量名,但事实又没有c 这个变数错误:(command "pline" "pa" "pb" "pc" "pd" "c")原因:变数pa、pb、pc、pd 不须用双引号括住注意:副选项中,若使用"" ,连续二个双引号,代表按[ENTER] 键若想画一条pa 到pc 的LINE & 一条pb 到pd 的LINE 正确:(command "line" pa pc "")(command "line" pb pd "")错误:(command "line" pa pc)(command "line" pb pd)其它相关接近的功能函数...(getdist [基点] [提示])✍请求输入一段距离(getint [提示])✍请求输入一整数值(getcorner 基点[提示])✍请求输入另一矩框对角点坐标(car 串行) ∙ ✍传回:串行中的第一个元素通常用来求x坐标(cadr 串行)∙∙ ✍传回:串行中的第二个元素通常用来求y 坐标(caddr 串行)∙ ✍传回:串行中的第三个元素通常用来求z坐标3.第三步骤:利用PE2、CE 或记事本,撰写PBOX.LSP 程序并储存到C:\LISPTOOL目录下(defun c:pbox();以下pa、ww、hh 值须由使用者输入(setq pa (getpoint "Enter Left/Low Point:"))(setq ww (getreal "Width:"))(setq hh (getreal "Height:"));以下pb、pc、pd值须由程序依据pa、ww、hh求出(setq pb (polar pa 0 ww))(setq pc (polar pb (/ pi 2) hh))(setq pd (polar pc pi ww));以下依据pa、pb、pc、pd 点画矩形(command "pline" pa pb pc pd "c");以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh;& pb、pc、pd 值求出(setq mp1 (polar pa 0 (/ ww 2)))(setq mp2 (polar pb (/ pi 2) (/ hh 2)))(setq mp3 (polar pd 0 (/ ww 2)))(setq mp4 (polar pa (/ pi 2) (/ hh 2)));以下依据mp1、mp2、mp3、mp4 点画出二条线(command "line" mp1 mp3 "")(command "line" mp2 mp4 ""))4.第四步骤:回到AutoCAD 下,加载AutoLISP 程序若您的AutoCAD『环境设定』中『支持文件搜寻路径』有加上c:\lisptool,则您可轻松载入pbox.lsp 程序指令:(load"pbox") 传回:c:pbox或指令:(load "pbox") 传回:c:pbox或指令:(load "pbox.lsp") 传回:c:pbox若您的AutoCAD『环境设定』中『支持文件搜寻路径』并未加上c:\lisptool,则您载入pbox.lsp 程序时,须包含程序所在路径:错误的加载:指令:(load "pbox")会出现:无法开启「pbox.lsp」做输入错误: 加载失败(LOAD "pbox")*取消正确的加载方式:指令:(load "c:/lisptool/pbox") 传回:c:pbox或:指令:(load "c:\\lisptool\\pbox") 传回:c:pbox5.第五步骤:执行新的AutoLISP 指令指令:pbox <-- 成功加载后,直接键入pbox 指令Enter Left/Low Point: <-- 请给一左下角点Width: <-- 给一实数当宽度,例如100Hieght: <-- 给一实数当高度,例如50指令:nil指令三、PBOX.LSP 程序产生的问题& 改良1. 原程序虽是成功的加载执行了,但却有以下几点小问题:问题1:给完左下角点后,『Width:』及『Height:』提示却在同一行出现,应该一个提示各别一行才好ANS:很简单,只要做如下的改变,加入『\n』即可(setq ww (getreal "Width:"))→ (setq ww (getreal "\nWidth:"))(setq hh (getreal "Height:"))→ (setq hh (getreal "\nHeight:"))问题2:希望给宽度及高度时,也能直接在屏幕上拉一段距离代替ANS:很简单,只要做以下的函数变动即可将(setq ww (getreal "\nWidth:"))改成(setq ww (getdist pa "\nWidth:")) ✍ pa为参考基准点将(setq hh (getreal "\nHeight:"))改成(setq hh (getdist pa "\nHeight:")) ✍ pa为参考基准点问题3:给完宽度及高度值后,开始画出所要的图形,可是指令操作过程却也跟着在『指令:』下一一配合出现着,不但影响速度,也没有实质的意义,如何改善? ANS:很简单,只要在程序一开始加入如下一行即可改善:(setvar "cmdecho" 0) ✍设定变量cmdecho=0关闭指令响应问题4:画完所要的图形过程中,画面出现了小十字点,还得用redraw指令清除,该如何使其不出现,但又不影响正常绘图设定呢 (R14环境blipmode内定值为0)ANS:很简单,只要在程序一开始加入(setvar "blipmode" 0) 即可有效压抑小十字虚点出现!但须在程序结束前恢复设定(setvar "blipmode" 1) ,才不会影响正常绘图设定问题5:全部过程执行完后,在『指令:』后却出现了空响应nil,如何消除呢指令:pboxEnter Left/Low Point:Width:Hieght:指令:nil ✍就是这一行指令ANS:很简单,只要在程序结束前,加入一行(prin1) 即可问题6:程序确认无误后,想将所有变量均处理成『区域变量』,以免占据内存ANS:很简单,只要做如下的改变即可将(defun c:pbox()改成(defun c:pbox(/ pa pb pc pd ww hh mp1 mp2 mp3 mp4)问题7:希望在(load "pbox") 程序的响应讯息能有更多样的变化ANS:很简单,原回应是c:pbox,请在程序结束后,再加入二列:(prompt "********** << C:PBOX >> **********")2.改良后完整PBOX.LSP 程序的全貌:(defun c:pbox(/ pa pb pc pd ww hh mp1 mp2 mp3 mp4) (setvar "cmdecho" 0)(setvar "blipmode" 0);以下pa、ww、hh 值须由使用者输入(setq pa (getpoint "Enter Left/Low Point:"))(setq ww (getdist pa "\nWidth:"))(setq hh (getdist pa "\nHeight:"));以下pb、pc、pd值须由程序依据pa、ww、hh求出(setq pb (polar pa 0 ww))(setq pc (polar pb (/ pi 2) hh))(setq pd (polar pc pi ww));以下依据pa、pb、pc、pd 点画矩形(指令"pline" pa pb pc pd "c");以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh ;& pb、pc、pd 值求出(setq mp1 (polar pa 0 (/ ww 2)))(setq mp2 (polar pb (/ pi 2) (/ hh 2)))(setq mp3 (polar pd 0 (/ ww 2)))(setq mp4 (polar pa (/ pi 2) (/ hh 2)));以下依据mp1、mp2、mp3、mp4 点画出二条线(指令"line" mp1 mp3 "")(指令"line" mp2 mp4 ""))(prompt "********** << C:PBOX >> **********")(prin1)四、本章结语:•经由简单的PBOX.LSP 程序设计全程演练,从『产生动机、预期目标』→『构思程序流程、相关变量订定』→『撰写程序』→『加载程序』→『执行PBOX指令』→『改良PBOX.LSP』•相信您已能更了解AutoLISP 是怎么回事了,短短的十几行,能做的事却不少,一路循序渐进练习下来,您应该觉得一点儿也不吃力、『游刃有余』才对,果真如此,那恭喜您,『好戏还在后头』,还有体力的话,就继续『征服下一章』吧•若您仍觉得有点『迷迷糊糊』,那就休息一下,配合复习第二章『学好AutoLISP的关键、基本结构与语法』再好好的把第四章『看』&『做』个明白,相信有心成为AutoCAD高手的您,一定不会那么容易就『被十几行打败』的。