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入门单元一: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入门单元一: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 支持软件。
AutoCAD之AutoLisp入门教程
AutoLisp入门教程本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。
首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, Visual LISP!”。
36.2.1 Visual LISP与AutoCAD的通信用户可以直接在AutoCAD命令行中键入AutoLISP表达式。
AutoCAD通过括号来确认AutoLISP表达式。
AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。
注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。
此外,在AutoCAD中调用并执行AutoLISP程序。
在AutoLISP程序中采用COMMAND函数来与AutoCAD 命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。
36.2.2 实例1 最简单的LISP程序——“Hello.lsp”Step 1 创建新文件(1) 运行AutoCAD 2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入Visual LISP环境。
(2) 单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。
Step 2 输入代码并保存文件(1) 在编辑窗口中输入源文件“Hello.lsp”的代码,如图36-3所示。
程序清单如下:;;;* Hello.lsp – Visual LISP文件实例(prompt "Pick point:") ;指定运行时的提示信息(setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt”(setq hgt 15) ;给变量“hgt”赋值(Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!");调用“Commnad”函数与AutoCAD进行通信[img]/Files/AutoCad/146-1.JPG[/img](2) 单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。
Autolisp基础教程
Autolisp基础教程单元一: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主角潇洒登场一. 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编程入门
基本指南:两数求和在命令行输入:(+ 2 3) (- 2 3) (* 2 3) (/ 2 3)如果直接输入(/ 2 3)则会显示0 因为2和3是整型所以AutoLisp把这些数字译为整型(AutoLisp进行了四舍五入)所以输入(setq x (/2.0 3))就可得到0.666667六位小数在命令行输入:!p则会显示p这个变量的值SETQ和变量Setq是来保存计算的结果的,相当于给一个变量赋值例:(setq x (/2.0 3)) 这边x是变量就是把2.0/3的值赋给xSetq能完成多项“设置相等”例如:(setq x 1.0 y 2.0 z 3.0) 就是分别赋给x y z 赋值AutoLISP函数1.数学函数(min 7 3 5 11) 就是取7 3 5 11这四个数的最小值(setq minbr (min 7 3 5 11))数学函数功能+加- 减*乘/除1+自增11- 自减1FLX截取实数的整数部分FLOAT整数变为实数REM返回除法的余数EXPT指数SIN求弧度角的正弦COS求弧度角的余弦ATAN求两个数字的反正切(setq rad (*(/ 45 180.0)pi))2.几何函数(setq p1 '(1.3 5.7)) ‘表示指定2个(3个)的坐标值,这样AutoLISP就不会计算这些值了(setq p2 '(7.5 3.1))(setq p3 '(9 4))(setq p4 '(0.1 2.5))(distance p1 p2)(angle p1 p2)(inters p1 p2 p3 p4)(osnap p1 "mid")2.例:在一个绘制楼梯间的AutoLISP例程中,一部分程序检查层高是否大于8英寸:如果大于,就绘制出14级台阶,如果小于就绘制13级台阶。
3.(strlen “Using AutoCAD”)STRLEN函数将报告Using AutoCAD为13个字符,计算空格。
AutoLISP从入门到精通初级教程(新手必备)
AutoLISP入门单元一: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 支撑软件.2. 对设计人员而言:A. 得到一笔晋升绩效奖金呢? 当然,无形中,『AutoCAD 高手的封号』也将功力又往前迈出了一大步,对小我的成长帮忙匪浅,荣幸的话,搞不好还可以黄袍加身,不亦乐乎!!!B. 『半桶水.响叮当』,万万不要因为会写 AutoLISP 程序而自负.孤介.嚣张起来,功力的增长,只是让您有更多『办事他人.办事公司』的机遇,若自恃过重,宁可不要!C. AutoLISP 程序功力的累进,是无远弗届的,万万不要『自命不凡』,『人外有人,天外有天』,也许您以为是『宝贝加三级』的程序,只是其它设计师根本程序中的一部分罢了!D. 既然 AutoLISP 是 AutoCAD 的『最大功臣』,当然不会随意马虎被舍弃,如斯,您的进修,包管不会白搭!E. 『千锤百炼』.『虚心求教』.『居心进修.不雅摩』.『决心成为高手』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 程序中,在『分号 ;』后的内容均为批注,程序不处理,合时的增长批注,将使程序更具可看性.进修惯及完全性典范: pp.lsp 内容如下:;本程序功效可快速画门.窗;设计者:QQ博士;版权所有,迎接应用(defun c:pp(): :; 以下为画门子程序: :; 以下为画窗子程序,: :: :)规矩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.您不必再摸不着头绪了,因为您荣幸的失去了本书,就是您成功的开端!!!第一类数学运算功效函数项目函数语法传回1.1 (+ 数值数值 ...) 累计实数或整数数值1.2 (- 数值数值 ...) 减去数值1.3 (* 数值数值 ...) 所稀有值乘积1.4 (/ 数值数值 ...) 第一个数值除以第二个今后数值的商1.5 (1+ 数值) 数值+11.6 (1- 数值) 数值-11.7 (abs 数值) 数值的绝对值1.8 (atan 数值) 横竖切值1.9 (cos 角度) 角度的余弦值,角度值为弧度.1.10 (exp 数值) 数值的指数1.11 (expt 基数指数) 基数的指数值1.12 (fix 数值) 将数值转换为整数值(取整)1.13 (float 数值) 将数值转换为实数值1.14 (gcd 数值 1 数值2) 二数值的最大公因子(greatest common divisor)1.15 (log 数值) 数值的天然对数值(相当于ln,e=2.71828182845904523……)1.16 (max 数值数值 ...) 数值中的最大值1.17 (min 数值数值 ...) 数值中的最小值1.18 pi 常数p ,其值约为 3.14159261.19 (rem 数值1 数值2) 二数值的相除的余数(remainder)1.20 (sin 角度) 角度的正旋值,角度值为弪度1.21 (sqrt 数值) 数值的平方根第二类磨练 & 逻辑运算功效函数项目函数语法传回2.1 (= 暗示式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.1 (angtof 字符串 [模式]) 角度值(单位为度)的字符串转成实数3.2 (angtos 角度 [模式 [精度]]) 角度(单位为弧度)转成的字符串值3.3 (atof 字符串) 字符串转成实数值3.4 (atoi 字符串) 字符串转成整数值3.5 (cvunit 数值原始单位转换单位) 数值转换单位后的值转换根据acad.unt 档案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个元素(串行中的元素是从0开端编号的)4.15 (reverse 串行) 将串行元素依次序颠倒过来的串行4.16 (subst 新项旧项串行) 用新项调换串行中的旧项 (substitute,调换)第五类字符串.字符.档案处理功效函数项目函数语法传回5.1 (ascii 字符串) 字符串第一个字符的『ASCII』码(a~z:97~122;A~Z:65~90)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字符写到档案或屏幕5.14 (write-line 字符串 [档案代码]) 将字符串写到档案或屏幕上第六类等待输入功效函数项目函数语法传回6.1 (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.1 (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.1 (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 x 4矩形暗示)单元四:快速分类阅读AutoLISP功效函数(二)第九类选择集.符号表处理功效函数项目函数语法传回9.1 (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.1 (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 整数 [<表达式> <表达式> ...]) 反复履行<整数>次数11.3 (while 标题内定档名扩大名旗帜) 透过尺度 AutoCAD 档案对话DCL攀谈框求得档案11.4 (cond "情况变量") 取得该情况变量的设定值,以字符串暗示11.5 (progn 表达式 1 表达式2 ...) 贯穿连接其内的表达式为一组,经常应用于合营if.cond等函数第十二类函数处理.界说.追踪 & 错误处理功效函数项目函数语法传回12.1 (*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.1 (graphscr) 作图情况切换到图形画面13.2 (grclear) 临时消除模前的屏幕画面13.3 (grdraw 起点终点色彩 [亮显]) 临时性的画出一条线13.4 (grread [追踪]) 由输入装备读取追踪值13.5 (grtext 地位字符串 [亮显]) 将字符串显示在状况列或屏幕菜单上13.6 (grvecs 向量串行 [转置矩阵]) 临时性的画出多条线13.7 (menucmd 字符串) 供给在AutoLISP中呼叫各菜单13.8 (prin1 [暗示式 [档案代码]) 将暗示式打印于敕令区或已开启的档案,句柄字符则以"\" 为前缀睁开13.9 (princ [暗示式 [档案代码]) 除句柄字符则不以 "\" 为前缀睁开外其余同prin113.10 (print [暗示式 [档案代码]) 除暗示式会往下一新行列出,及一空非分特别其余同prin113.11 (prompt 讯息) 将讯息显示于屏幕的敕令区,并随后响应一个nil讯息13.12 (redraw [图元名称 [模式]]) 重绘整张图或依图元名称重绘该图形13.13 (terpri) 在屏幕上显示新列13.14 (textscr) 作图情况切换到文书画面13.15 (textpage) 消除文书画面文字相似DOS的cls指令13.16 (vports) 传回:窗口组态串行第十四类符号.元素.暗示式处理功效函数。
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初学者参考程序
((= v 3) (setq Data_j (cons (getreal "请输入参数<w>的值:") Data_j)))
((= v 4) (setq Data_j (cons (getreal "请输入参数<B>的值:") Data_j)))
);;;End cond
(setq v (1+ v))
);;;End repeat j
(setq Data_i (cons (reverse Data_j) Data_i);;;将数据表Data_j转存入数据表Data_i
u (1+ u) v 1
;;;此函数完成绘制 F'(t)=Ain(w*t)+B 函数曲线“t”的定义域[t1,t2]
(princ "\n输入[Ft]执行程序:\n")
(command)
);;;End defun
;;;
;;;#主函数#
;;;目标方程式:
;;;F(t)=[A1*sin(w1*t)+B1] + [A2*sin(w2*t)+B2] +[A2*cos(w3*t)+B1]...... [t1,t2]
(End)
);;;End defun
;;;
;;;#数据录入#
;;efun Data_In (n / i j u v Data_i Data_j )
(setq Data nil i n j 4 u 1 v 1
AutoLISP程序入门教学资料
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 基础
strcase
格式:(strcase str [mode])
作用:字符串转大小写,mode可以是任意表达式,mode为nil转大写,为nil转小写
strlen
格式:(strlen str)
作用:字符串长度
substr
格式:(substr str <integer> <interger>)
c(a|d){1, 4}r
car是指取列表首元素,cdr取除首元素外的列表部分
a与d可以任意组合,只要总量不超过4。即可以是:
aaaa aaad aaa aada aadd aad aaa aad aa adaa adad ada adda addd add ada add ad aaa aad aa ada add ad aa ad a daaa daad daa dada dadd dad daa dad da ddaa ddad dda ddda dddd ddd dda ddd dd daa dad da dda ddd dd da dd d aaa aad aa ada add ad aa ad a daa dad da dda ddd dd da dd d aa ad a da dd d a d
length
格式:(length <list>)
作用:获取列表长度
subst
格式:(subst new old <list>)
作用:用新项替代原列表中的旧项,返回新生成的列表
CAD交互输入
getint
格式:(getiห้องสมุดไป่ตู้t "提示:")
作用:获取整数输入
getreal
AutoLISP编程
AutoLISP编程第五篇机械CAD/CAM技术实验指导书《机械CAD/CAM技术》课程已作为本科及大专教学的一门必修课,为了加强实践环节训练,配合《机械CAD/CAM技术》课程的教学,本篇精选8项实验内容进行阐述, 以便于教师的教学参考和学生的实验指导。
实验一:数表的文件化处理实验二:最小二乘法的应用实验三:图形变换实验四:B样条曲线的绘制实验五:零件三维造型实验六:AutoLISP编程实验七:零件编码系统实验八:零件加工数控编程与仿真1实验六:AutoLISP编程一、实验目的1(熟悉AutoCAD中的二次开发工具AutoLISP的各功能函数;2(了解AutoLISP的编程过程和方法。
二、AutoCAD常用绘图指令1( 图形的绘制直线的绘制(LINE命令)点的绘制(POINT命令)圆的绘制(CIRCLE命令)圆弧的绘制(ARC命令)粗线的绘制(TRACE命令)填实线的绘制(SOLID命令)多边形的绘制(POLYGON命令) 圆环的绘制(DOUGHNUT命令)椭圆的绘制(ELLIPSE命令)复合线的绘制(PLINE命令)图素的等分(DIVIDE命令)图素的测量(MEASURE命令)图形的层(LAYER命令)线型的设置(LINETYPE命令)图形的颜色(COLOR命令)图形剖面线的绘制(HATCH命令) 图形的视图(VIEW命令)图幅的边界(LIMITS命令)2( 图形的编辑与查询图形的擦除(ERASE命令)图形的映像(MIRROR命令)图形的数组(ARRAY命令)图形的倒圆(FILLET命令)图形的倒角(CHAMFER命令)复合线的编辑(PEDIT命令)图形的修改(CHANGE命令)图线的切断(BREAK命令)图线的修剪(TRIM命令)图形的延伸(EXTEND命令)图形的平行偏移(OFFSET命令)图形的拉伸(STRETCH命令)图块与复合线的分解(EXPLODE命令)23( 图形的变换图形的变焦放缩(ZOOM命令)图形的快速变焦放缩(VIEWRES命令)图形的比例变换(SCALE命令)移屏幕(PAN命令)图形的平移(MOVE命令)图形的复制(COPY命令)图形的旋转(ROTATE命令)4( 辅助绘图方式抽点网格(SNAP命令)点阵网格(GRID命令)轴对刻度线的显示(AXIS命令)正交绘图方式(ORTHO命令)选择当前轴测平面绘制正等测图(ISOPLANE命令) 目标抽点方式(OSNAP命令)调节标示框尺寸(APERTURE命令)5( 块与形块定义(BLOCK命令)块的调用(INSERT命令)将块写入磁盘(WBLOCK命令)形(SHAPE)6( 图形的标注文字标注(TEXT命令)字体定义(STYLE命令)文字的动态书写(DTEXT命令)尺寸单位制的设置(UNITS命令)三、AutoLISP函数AutoLISP语言是在LISP语言的基础上,扩充了许多适用于CAD应用和专用功能后形成的一种能以解释方式运行于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高手的您,一定不会那么容易就『被十几行打败』的。