autolisp入门教程.docx_第1页
autolisp入门教程.docx_第2页
autolisp入门教程.docx_第3页
autolisp入门教程.docx_第4页
autolisp入门教程.docx_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、学好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,123D.串列(List)如(a b c),(xy)E.图元名称代码如F.档案代码如.G.选择群集代码如规则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),(xy),(xyz),(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点座标(xy)表示法=以二实数形成串列3D点座标(xyz)表示法=以三实数形成串列E.图元名称代码:如 .使用范围:AutoCAD会自动赋予图元指向代码,透过此代码可找到图元的资料库记录范例说明:(setq en (entlast)传回(entget en)可找到图元的资料库串列F.档案代码:如使用范围:开启(open)档案作读档(r)、写档(w)使用时,所产生的代码,如下:范例说明:(setq ffr (open test.txt r)回应(setq ffw (open abc.txt w)回应G.选择群集代码:如、使用范围:一个或数个图元所形成的选择集范例说明:(setq ss (ssget)选取物件: (可选择物体)选取物件: (可选择物体)选取物件: (按ENTER键)回应规则3:运算式中的运算子,可以是另一运算式或副程式功能函数使用语法:(strcat字串1字串2字串3 .)字串结合功能函数(getstring提示)要求键入一个字串(rtos实数)将实数转换成字串范例说明1:(strcat abc 123 LISP)传回:abc123LISP范例说明2:(strcatabc (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与双引号间的空格,可有可无(loadLISP主档名)范例:在c:lsptools目录下有一LISP程式tt.lsp,而您目前的工作目录在c:dwg下 若环境设定之支援档案搜寻路径有指定到c:lsptools目录,则欲使用载入tt.lsp指令:后键入(load tt)即可 若环境设定之支援档案搜寻路径无指定到c:lsptools目录,则键入(loadtt)后,会出现错误讯息如下:无法开启tt.lsp做输入错误:载入失败(LOAD tt)*取消*此时您可键入:指令:(load c:lsptoolstt)或指令:(load c:/lsptools/tt)不可键入: (load c:lsptoolstt)因为在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 ab);此时,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)回到:指令:键入(loadtt)传回: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)二数值的最大公因数1.15(log数值)数值的自然对数值1.16(max数值数值.)数值中的最大值1.17(min数值数值.)数值中的最小值1.18pi常数p ,其值约为3.14159261.19(rem数值1数值2)二数值的相除的余数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是否表示式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个元素4.15(reverse串列)将串列元素依顺序颠倒过来的串列4.16(subst新项旧项串列)替换新旧串列后的串列第五类字串、字元、档案处理功能函数项目函数语法传回5.1(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字元写到档案或萤幕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矩形表示)第九类选择集、符号表处理功能函数项目函数语法传回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、BLOCK9.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 表示式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)传回:视窗组态串列第十四类符号、元素、表示式处理功能函数项目函数语法传回14.1(atom元素)如果元素不是串列,回应T,否则为nil14.2(atoms-family格式符号串列)传回:一组已定义函数的符号串列14.3(boundp表示式)传回:T或nil,回应表示式是否有值存在14.4(minusp元素)传回:T或nil,元素是否为负值14.5(not元素)传回:T或nil,判定元素是否为nil14.6(null元素)传回:T或nil判定元素是否被赋予nil值14.7(numberp元素)传回:T或nil,元素是否为整数或实数14.8(. 表示式)回应表示式未检算前状态14.9(quote表示式)回应表示式未检算前状态,同功能14.10(set符号表示式)将表示式结果设定给带单引号符号14.11(setq符号1表示式1 符号2表示式2.)设定表示式结果给各符号14.12(type元素)传回:元素的资料型态143.13(zerop元素)传回:T或nil,元素是否为0值第十五类ADS、AutoLISP载入与释放函数项目函数语法传回15.1(ads)传回:目前载入ADS程式串列15.2(ver)传回:目前AutoLISP版本字串15.3(load LSP档名载入失败)载入AutoLISP档案(*.lsp)15.4(arxload 错误回应)载入一个ARX应用程式档15.5(arxunload 错误回应)释放ARX应用程式档15.6(autoarxload )载入一个关连式的ARX档15.7(autoloadADS定义的函数&指令)载入一个关连式的AutoLISP档15.8(autoxload )载入一个关连式的ADS档15.9(xload应用程式出错处理)载入ADS应用程式15.10(xunload应用程式出错处理)释放ADS应用程式第十六类记忆体空间管理函数项目函数语法传回16.1(alloc数值)以节点数值设定区段大小16.2(expand数值)以区段数值配置节点空间16.3(gc)强制收回废记忆体16.4(mem)显示目前的记忆体使用状态16.5(vmon)释放ADS应用程式16.6(xdroom图元名称)传回图元延伸资料允用得记忆体空间16.7(xdsize串列)传回图元延伸资料所占用的记忆体空间第十七类ARX?定义的函数项目函数语法传回17.1(acad_colordlg颜色码旗号)显示出标准AutoCAD颜色选择交谈框17.2(acad_helpdlg求 ?助档名主题)显示出标准AutoCAD求助交谈框17.3(acad_strlsort串列)作串列排序评论这张转发至微博单元五:轻松快速的掌握AutoLISP设计技巧一、AutoLISP程式设计的四个步骤:1.第一步骤:产生写程式的动机、预期目标2.第二步骤:构思程式流程、所需之LISP功能函数、相关变数订定&提示讯息3.第三步骤:利用文书软体(如记事本)撰写xxx.lsp程式4.第四步骤:回到AutoCAD下,载入AutoLISP程式以(loadLSP主档名)或(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基点弪度距离) -依极座标法取得另一座标点其中弪度值之转换为:十进位角度弪度值十进位转弪度公式0度0090度1/2p(/ pi 2)或(* pi 0.5)180度ppi270度2/3p(* pi 1.5)N度p*N/180(* pi (/ n 180)(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这个变数错误:(commandpline 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程式指令:(loadpbox)传回: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:lisptoolpbox)传回: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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论