AutoLISP基础入门案例,很受用_第1页
AutoLISP基础入门案例,很受用_第2页
AutoLISP基础入门案例,很受用_第3页
AutoLISP基础入门案例,很受用_第4页
AutoLISP基础入门案例,很受用_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

AutoLISP基础入门案例,很受用AutoLISP基础入门案例,很受用AutoLISP基础入门案例,很受用xxx公司AutoLISP基础入门案例,很受用文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度单元一:AutoLISP主角潇洒登场

一.AutoLISP是何方神圣AutoLISP是AutoCAD的最佳拍檔!AutoLISP内含于AutoCAD软件内,不用另外花钱买!AutoLISP是强化AutoCAD最好、最直接的『程序语言』!AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能!若说AutoLISP的出现,是替AutoCAD创造一片天的『最大功臣』,实不为过一点也不夸张!AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷!二.AutoLISP程序语言的特质分析:学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序!语法简单不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格!功能函数强大除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已!撰写的环境不挑剔只要是一般的文书编辑软件都适用!如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT等直译式程序不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感!横跨各作业平台悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行!三.撰写AutoLISP的动机欲强化AutoCAD原有指令时.欲创造更有用的AutoCAD新指令.欲简化繁琐的环境设定或绘图步骤时.欲处理参数式绘图时.欲做图面资料读文件、写文件.欲做AutoCAD简报展示时.欲达到真正灵活掌控AutoCAD时.欲提升自己跨上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先由小程序着手,认识AutoLISP语法规定!浏览所有的AutoLISP功能函数,重要的功能函数要熟记脑海,俗语说的好『一回生,二回熟』,除非您不用心,否则没有学不好的道理!!!要懂得偷懒:不要认为在绘图的过程中,繁琐的步骤是合理的,困难的绘图过程是必须忍耐的,试着用AutoLISP解决看看!多观摩别人的程序设计,吸取精华,像海棉一样=>『吸』、『吸』、『吸』!!!动手『写』程序比用眼睛看程序,更能够领略深记脑海!随时随地整理您的程序,并加以批注,以免因时间的飞逝,当时用心的成果也烟消云散,忘的一乾二净!!!『决心』是学好AutoLISP最重要的关键!期许自己,要由操作者变成创造者!!!

单元二:AutoLISP的关键、基本结构及语法一、学好AutoLISP的关键、基本结构与语法:1.AutoLISP程序语言的特质A.语法简单B.功能函数强大C.撰写的环境不挑剃D.直译式程序,『即写即测、即测即用』E.横跨AutoCAD各作业平台,悠然自得

(注:以上五点,读者可以参考上一章的剖析!!!)2.学好AutoLISP的关键:充份掌握『语法结构』&『功能函数』的搭配!!!3.重要的AutoLISP的基本语法结构规则1:以括号组成表达式,、相对称左右括号数一定要成双成对规则2:表达式型态:(操作数运算子运算子运算子)操作数包括『功能函数』&『自定函式』运算子(自变量)包括:A.整数(Integer)如8,-17,500,9999B.实数(Real)如,C.字符串(String)如"AutoCAD","123"D.串行(List)如("a""b""c"),(xy)E.像素名称代码如<entityname:6000f262>F.档案代码如<file:#12438>G.选择群集代码如<Selectionset: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:以(defunC:函式名(自变量/变数))程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』二、学好AutoLISP的关键:充份掌握『语法结构』&『功能函数』的搭配!!!其时这个关键亦是学习其它程序语言的关键.『语法结构』AutoLISP的语法结构规定的并不多,变量不用事先定义及宣告,读者可熟记下一单元有关重要的AutoLISP基本语法结构,十四条设计上要求的『规则』『功能函数』AutoLISP之所以能功能如此强大,都有赖功能函数,其成员共约200个:一般性函数170个ADS定义特殊函数9个配合DCL交谈框设计函数22个各功能函数在使用上要求配合的运算子(自变量)型态,均有其规定,当然,您可不能乱给!例如:指令:(+123"ABC")传回:error:badargumenttype(自变量型态错误)因为『+』函数不接受字符串,而"abc"正是字符串指令:(rtos"abc")传回:error:badargumenttype(自变量型态错误)因为『rtos』函数只接受实数转字符串详细内容可参考下一章『快速浏览AutoLISP功能函数』至于各功能函数详细的语法与实例应用,读者请参阅本书『第三篇AutoLISP功能函数详解』三、重要的AutoLISP的基本语法结构:规则1:以括号组成表达式,左右括号数一定要成双成对、相对称请依序在『指令:』列(或指令:)后面直接键入以下表达式指令:(+12345)传回加总和15指令:(max35)传回最大值35指令:(menucmd"p1=*")显示拉下POP1指令:(getint"EnterReal:")传回EnterReal:要求输入一个实数指令:(setqa(*4))传回相乘值50,同时设定给『变量a』指令:!a回应50(注:!号可用来查询变数值)指令:(min75a63)响应最小值50(因为变量值a代表50)错误的范例:指令:(setqa(*4)1>传回1>表示少了一个括号1>)此时,只要再补上一个)即可指令:(setqa(*42>传回2>表示少了二个括号2>))此时,只要再补上二个)即可规则2:表达式型态(操作数运算子运算子运算子...)或(函数(式)自变量自变量自变量...)或(函数(式)元素元素元素...)操作数包括『功能函数』&『自定函式』功能函数:如上练习中的+、max、menucmd、getint、setq、*、min,详细内容可参考下一章『快速浏览AutoLISP功能函数』&『第三篇AutoLISP功能函数详解』自定函式:由设计者自行定义的新函式或子程序运算子(又称自变量或元素)包括:A.整数(Integer):如8,-17,500,9999…正常范围:2的16次方,介于-32768与+32767之间特殊范围:若以float函数将其转为实数,则范围2的32次方,介于-48与+47之间B.实数(Real):如,…正常范围:带有小数点的数,精度可达14位有效数字C.字符串(String):如"AutoCAD","123","EnterReal:","",…正常范围:以双引号内夹『字符』为认定,字符数不受限制D.串行(List):如("a""b""c"),(xy),(xyz),("a"8,正常范围:以左右括号内夹『元素』为认定,元素型态非常弹性使用频率:在AutoLISP程序设计中应用非常高范例说明:("a"8kk(12))表示此串行内有五个元素"a"表示字符串a、8表示整数8、表示实数、kk表示变量kk、(12)表示串行(12)2D点坐标(xy)表示法=>以二实数形成串行3D点坐标(xyz)表示法=>以三实数形成串行E.像素名称代码:如<entityname:6000f使用范围:AutoCAD会自动赋予像素指向代码,透过此代码可找到像素的数据库记录范例说明:(setqen(entlast))

传回<entityname:>(entgeten)可找到像素的数据库串行F.档案代码:如<file:#12438>…使用范围:开启(open)档案作读档(r)、写档(w)使用时,所产生的代码,如下:范例说明:(setqffr(open"""r"))

回应<file:#24138>(setqffw(open"""w"))回应<file:#34812>G.选择群集代码:如<Selectionset:1>、<Selectionset:1>…使用范围:一个或数个像素所形成的选择集范例说明:(setqss(ssget))选取对象:

(可选择物体)选取对象:

(可选择物体)选取对象:(按[ENTER]键)

回应<Selectionset:1>规则3:表达式中的『运算子』,可以是另一『表达式』或『子程序』功能函数使用语法:(strcat字符串1字符串2字符串3)字符串结合功能函数(getstring提示)要求键入一个字符串(rtos实数)将实数转换成字符串范例说明1:(strcat"abc""123""LISP")传回:"abc123LISP"范例说明2:(strcat"abc"(getstring"EnterString:")(rtos)执行结果:EnterString:键入任一字符串,假设是键入*HELLO*回应"abc*HELLO*"本例中的strcat函数在语法中要求的『运算子』必须是『字符串』型态『运算子1』="abc"是正常的字符串运算子『运算子2』=表达式(getstring"EnterString:")传回结果是一字符串"*HELLO*"『运算子3』=表达式(rtos传回结果是一字符串""规则4:多重的括号表达式,运算的先后顺序是『由内而外、由左而右』范例说明:请将+17-/7的结果,设定给变量kk,并转换成AutoLISP的表达式解法技巧A:1:运用『二分法、加括号』:+17)-/7)2:操作数往前提:kk=(-+17)/7))3:操作数再往前提:kk=(-(+17)(/7))4:转换完成:(setqkk(-(+17)(/7)))解法技巧B:1:运用『二分法、加括号』:+(17-/7)))2:操作数往前提:kk=(+(17-/7)))3:操作数再往前提:kk=(+(-17(/7)))4:转换完成:(setqkk(+(-17(/7))))规则5:以档案型态存在的AutoLISP程序(ASCII档案),其扩展名必须是.LSP规则6:撰写的环境,只要是一般的文书编辑软件,可编辑ASCII档案者都适用如:PE2、PE3、DW3、书中仙、汉书、EDIT、记事本等规则7:以defun功能函数定义新的指令或新的功能函式(注:自变量及区域变量可省略)程序结构型态:(defun函式名称(自变量/区域变量)::::程序内容::)规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD新指令(注:自变量及区域变量可省略)程序结构型态:(defunC:KK(自变量/区域变量)::程序内容::::)则加载此LISP程序后,可在指令:后直接键入新定义的KK指令规则9:

加载AutoLISP程序的作法:指令:后直接键入(load"LISP主檔名")注:load与字符串间的空格,可有可无注:load与双引号间的空格,可有可无(load"LISP主檔名")范例:在c:\lsptools目录下有一LISP程序,而您目前的工作目录在c:\dwg下若『环境设定』之『支持档案搜寻路径』有指定到c:\lsptools目录,则欲使用加载à指令:后键入(load"tt")即可若『环境设定』之『支持档案搜寻路径』无指定到c:\lsptools目录,则键入(load"tt")后,会出现错误讯息如下:无法开启「」做输入错误:载入失败(LOAD"tt")*取消*此时您可键入:

指令:(load"c:\\lsptools\\tt")或指令:(load"c:"/lsptools/tt)不可键入:(load"c:\lsptools\tt")因为『\』在AutoLISP结构语法中已经用于『跳脱码控制』了规则10:AutoLISP程序中,在『分号;』后的内容均为批注,程序不处理,适时的增加批注,将使程序更具可看性、学习性及完整性规则11:AutoLISP最常用的变量型态是『整数』、『实数』、『字符串』、『点串行』四种,变量的型态依据设定值而自动定义,变量会一直储存该值,直到被重新设定值或绘图结束自动消失规则12:以setq功能函数设定变量值(setq变量名称设定值)范例:(setqa100);变量a值设定成整数100(setqb;变量b值设定成实数(setqc"Goodmorning!!!");变量c值设定成字符串(setqpt1(getpoint"EnterPOINT:"));变量pt1值设定成点串行(setqpt2(listab));此时,a值是100,b值是变量pt2值设定成点串行(100(setqpt3'(297210));变量pt3值设定成点串行(297210)注意:直接设定成点串行时,不能省略单引号『'』否则会被误认(297210)又是一个表达式,297是操作数而出错!规则13:欲在AutoCAD的环境中,查看一变量值,指令:下键入『!变量名』即可范例:指令:(setqaa(+10075))传回:175指令:!aa传回:175指令:(setqpp(list9050))传回:(9050)指令:!pp传回:(9050)指令:!ww传回:nil空值无设定规则14:以(defunC:函式名(自变量/变数))程序中,程序中的变量若在『/』右边变量内,则称为『区域变量』,否则为『整体变量』(注:在AutoLISP中,未赋予值的变量,其值皆响应nil)『区域变量』于此程序执行完毕后,其值自动消失『整体变量』于此程序执行完毕后,其值仍然存在范例:内容如下(defunc:tt(/sasbsc)(setqsa100)(setqsb20)(setqsc10)(setqsd(+sasbsc)))回到:指令:键入(load"tt")传回:c:tt指令:tt传回:130指令:!sa传回:nil(属区域变量)指令:!sb传回:nil(属区域变量)指令:!sc传回:nil

(属区域变量)指令:!sd传回:130(属整体变量)

单元三:快速分类浏览AutoLISP功能函数(一)一看到以下那么多的AutoLISP功能函数,洋洋洒洒17大类:您第一个念头,一定惊讶怎么会那么多,您可能快吓坏了!您第二个念头,一定会想『那么多,怎么记得下来』,您可能快放弃了!二其实,您应该要『很兴奋』而『充满信心』的,怎么说呢您有那么多的『大将』协助您撰写AutoLISP程序,当然左右又逢源,不但轻松,而且要快乐的不得了!!!这些函数只要您先浏览有印象,要用时,再翻查该函数,了解用途语法再加入到您的程序中就可以了!!!常用的函数,写久、用久后,自然会深深牢记脑海,想忘都很难,不常用的函数,若硬要您记下来,相信连高手都很困难,更何况是初学的您!!!您不用再摸不着头绪了,因为您幸运的拥有了本书,就是您成功的开始!!!第一类数学运算功能函数函数语法传

回(+数值数值...)累计实数或整数数值(-数值数值...)减去数值(*数值数值...)所有数值乘积(/数值数值...)第一个数值除以第二个以后数值的商(1+数值)数值+1(1-数值)数值-1(abs数值)数值的绝对值(atan数值)反正切值(cos角度)角度的余弦值,角度值为弪度(exp数值)数值的指数(expt基数指数)基数的指数值(fix数值)将数值转换为整数值(float数值)将数值转换为实数值(gcd数值1数值2)二数值的最大公因子(log数值)数值的自然对数值(max数值数值...)数值中的最大值(min数值数值...)数值中的最小值pi常数p,其值约为(rem数值1数值2)二数值的相除的余数(sin角度)角度的正旋值,角度值为弪度(sqrt数值)数值的平方根第二类检验&逻辑运算功能函数项目函数语法传

回(=表示式1表示式2)比较表示式1是否等于表示式2适用数值及字符串(/=表示式1表示式2)比较表示式1是否大于等于表示式2(<表示式1表示式2)比较表示式1是否<小于表示式2(<=表示式1表示式2)比较表示式1是否<=小于等于表示式2(>表示式1表示式2)比较表示式1是否>大于表示式2(>=表示式1表示式2)比较表示式1是否大于等于表示式2(~数值)传回:数值的位not值,(1的补码)(and表示式1表示式2…)逻辑and的结果(boole函数整数整数…)位式布尔运算(eq表示式1表示式2)比较表示式1与表示式2是否相同,适用串行比较(实际相同)(equal表示式1表示式2[差量])比较表示式1与表示式2是否相同,差量可省略(内容相同)第三类转换运算功能函数项目函数语法传

回(angtof字符串[模式])角度值的字符串转成实数(angtos角度[模式[精度]])角度转成的字符串值(atof字符串)字符串转成实数值(atoi字符串)字符串转成整数值(cvunit数值原始单位转换单位)数值转换单位后的值转换根据档案(distof字符串[模式])依模式将字符串转成实数值(itoa整数)整数转成字符串(rtos数值模式[精度])实数转成字符串(trans点原位置新位置[位移])转换坐标系统值第四类串行处理功能函数项目函数语法传

回(append串行串行...)结合所有串行成一个串行(assoc关键元素联合串行)依关键元素找寻联合串行中关系数据(car串行)串行中的第一个元素通常用来求x坐标(cadr串行)串行中的第二个元素通常用来求y坐标(caddr串行)串行中的第三个元素通常用来求z坐标(cdr串行)除去第一个元素后的串行(cons新元素串行)将新元素结合到串行(foreach名称串行表示式)将串行的每一元素对应至名称再依表示式执行响应(length串行)串行内的元素数量(list元素元素…)将所有元素结合成一串行(listp元素)判断元素是否为一串(mapcar函数串行1串行2...)将串行1、串行2、…等串行的元素配合函数,求得新串行(member关键元素串行)依关键元素(含)以后的串行(nthn串行)串行的第n个元素(reverse串行)将串行元素依顺序颠倒过来的串行(subst新项旧项串行)替换新旧串行后的串行第五类字符串、字符、档案处理功能函数项目函数语法传

回(ascii字符串)字符串第一个字符的『ASCII』码(chr整数)整数所对应的ASCII单一字符串(close文件名称)关闭档案(open文件名模式)开启档案代码,准备读取或写入数据(read字符串)串行中的字符串的第一组元素(read-char[档案代码])经由键盘或档案中读取单一字符(read-line[档案代码])经由键盘或档案中读取一行字符串(strcase字符串[字样])转换字符串大小写(strcat字符串1字符串2...)将各字符串结合成一字符串(strlen字符串)字符串构成的字符数(即字符串长度)(substr字符串起始长度)取出子字符串(wcmatch字符串格式)T或nil,将字符串与通用字符进行比对(write-char数值[档案代码])将一ASCII字符写到档案或屏幕(write-line字符串[档案代码])将字符串写到档案或屏幕上第六类等待输入功能函数项目函数语法传

回(getangle[基点][提示])请求输入十进制角度数值,响应一弪度值提示及参考点可有可无(getcorner基点[提示])请求输入另一矩框对角点坐标(getdist[基点][提示])请求输入一段距离(getint[提示])请求输入一整数值(getkword[提示])请求输入『关键词』(getorient[基点][提示])请求输入十进制角度,响应一弪度值不受angbase、angdir影响(getpoint[基点][提示])请求输入一个点坐标(getreal[提示])请求输入一实数(getstring[提示])请求输入一字符串(initget[位]字符串)设定下次getxxx函数的有效输入第七类几何运算功能函数项目函数语法传

回(angle点1点2)取得二点的角度弪度值(distance点1点2)取得二点的距离(inters点1点2点3点4[模式])取得两条线的交点(osnap点模式字符串)依辅助抓点模式取得另一坐标点(polar基点弪度距离)依极坐标法取得另一坐标点(textbox像素串行)取得文字符串的二对角点坐标第八类像素处理功能函数项目函数语法传

回(entdel像素名称)删除或逆删除像素(entget像素名称[应用程序串行])取出像素名称的数据串行(entlast)取出图形数据中的最后一个像素(entmake像素串行)建立一个新的像素串行(entmod像素串行)依更新的数据串行更新屏幕上元体(entnext[像素名称])找寻图面中的下一个像素(entsel[提示])请求选取一个像素,响应包含像素名称及选点坐标的串行(entupd像素名称)更新屏幕上复元体图形(handent图码)图码的元体名称(nentsel[提示])BLOCK所含副元体像素数据串行(nentselp[提示][点])BLOCK所含副元体像素数据(以4x4矩形表示)

单元四:快速分类浏览AutoLISP功能函数(二)第九类选择集、符号表处理功能函数项目函数语法传

回(ssadd[像素名称][选择集])将像素加入选择集或建立一新选择集(ssdel像素名称选择集)将像素自选择集中移出(ssget[模式][点1][点2])取得一个选择集(ssget"X"[过滤串行])取得依过滤串行所指定范围的选择集(sslenth选择集)计算选择集的像素个数(ssmemb像素名称选择集)响应像素名称是否包含于选择集内(ssname选择集索引值)依索引值取出选择集中的像素名称(tblnext符号表名称[T])检视符号表,有效的符号表:"LAYER"、"LTYPE"、"VIEW"、"STYLE"、"BLOCK"(tblsearch符号表名称符号)在符号表中搜寻符号第十类AutoCAD相关查询、控制功能函数项目函数语法传

回(command"AutoCAD指令"...)呼叫执行AutoCAD指令(findfile檔名)传回:应该文件名的路径及文件名(getfiled标题内定档名扩展名旗号)透过标准AutoCAD档案对话DCL交谈框求得档案(getenv"环境变量")取得该环境变量的设定值,以字符串表示(getvar"系统变量")取得该系统变量的设定值,以字符串表示(setvar"系统变量"值)设定该系统变量的值(regapp应用类项)将目前的AutoCAD图形登记为一个应用程序名称第十一类判断式、循环相关功能函数项目函数语法传

回(if<比较式><表示式1>[表示式2])检算比较式结果,如果为真,执行<表示式1>否则,执行<表示式2>(repeat整数[<表达式><表达式>...])重复执行<整数>次数(while标题内定档名扩展名旗号)透过标准AutoCAD档案对话DCL交谈框求得档案(cond"环境变量")取得该环境变量的设定值,以字符串表示(progn表达式1表达式2...)连结其内的表达式为一组,常用于配合if、cond等函数第十二类函数处理、定义、追踪&错误处理功能函数项目函数语法传

回(*error*字符串)程序错误时的警示讯息(alert字符串)以交谈框式显示出警告字符串(apply功能函数串行)将功能函数与串行结合后执行(defun名称自变量串行表示式...)自定函数或子程序(eval表示式)传回:表示式的执行结果(exit)强制退出目前的应用程序(lambda自变量表示式)定义未具名的函数(progn表达式1表达式2...)连结其内的表达式为一组,常用于配合if、cond等函数(quit)强制退出目前的应用程序(tablet代码[列1列2列3方向])取用或建立对数字板的校调(trace函数…)对函数设定追踪旗号,辅助除错(untrace函数…)对函数设定解除追踪旗号

第十三类显示、打印控制功能函数项目函数语法传

回(graphscr)作图环境切换到图形画面(grclear)暂时清除模前的屏幕画面(grdraw起点终点颜色[亮显])暂时性的画出一条线(grread[追踪])由输入设备读取追踪值(grtext位置字符串[亮显])将字符串显示在状态列或屏幕菜单上(grvecs向量串行[转置矩阵])暂时性的画出多条线(menucmd字符串)提供在AutoLISP中呼叫各菜单(prin1[表示式[档案代码])将表示式打印于命令区或已开启的档案,句柄字符则以"\"为前缀展开(princ[表示式[档案代码])除句柄字符则不以"\"为前缀展开外其余同prin1(print[表示式[档案代码])除表示式会往下一新行列出,及一空格外其余同prin1(prompt讯息)将讯息显示于屏幕的命令区,并随后响应一个nil讯息(redraw[像素名称[模式]])重绘整张图或依像素名称重绘该图形(terpri)在屏幕上显示新列(textscr)作图环境切换到文字画面(textpage)清除文字画面文字类似DOS的cls指令(vports)传回:窗口组态串行

第十四类符号、元素、表示式处理功能函数项目函数语法传

回(atom元素)如果元素不是串行,响应T,否则为nil(atoms-family格式[符号串行])传回:一组已定义函数的符号串行(boundp表示式)传回:T或nil,响应表示式是否有值存在(minusp元素)传回:T或nil,元素是否为负值(not元素)传回:T或nil,判定元素是否为nil(null元素)传回:T或nil判定元素是否被赋予nil值(numberp元素)传回:T或nil,元素是否为整数或实数(...'表示式)响应表示式未检算前状态(quote表示式)响应表示式未检算前状态,同『'』功能(set符号表示式)将表示式结果设定给带单引号'符号(setq符号1表示式1[符号2表示式2]...)设定表示式结果给各符号(type元素)传回:元素的数据型态(zerop元素)传回:T或nil,元素是否为0值

第十五类ADS、AutoLISP加载与释放函数项目函数语法传

回(ads)传回:目前加载ADS程序串行(ver)传回:目前AutoLISP版本字符串(loadLSP檔名[加载失败])载入AutoLISP档案(*.lsp)(arxload<应用程序名称>[错误响应])加载一个ARX应用程序文件(arxunload<应用程序名称>[错误响应])释放ARX应用程序文件(autoarxload<文件名称><指令定义>)载入一个关连式的ARX檔(autoloadADS定义的函数&指令)载入一个关连式的AutoLISP檔(autoxload<文件名称><指令定义>)载入一个关连式的ADS檔(xload应用程序[出错处理])加载ADS应用程序(xunload应用程序[出错处理])释放ADS应用程序

第十六类内存空间管理函数项目函数语法传

回(alloc数值)以节点数值设定区段大小(expand数值)以区段数值配置节点空间(gc)强制收回废内存(mem)显示目前的内存使用状态(vmon)释放ADS应用程序(xdroom像素名称)传回像素延伸数据允用得内存空间(xdsize串行)传回像素延伸数据所占用的内存空间

单元五:轻松快速的掌握AutoLISP设计技巧一、AutoLISP程序设计的四个步骤:1.第一步骤:产生写程序的动机、预期目标2.第二步骤:构思程序流程、所需之LISP功能函数、相关变量订定&提示讯息3.第三步骤:利用文书软件(如记事本)撰写程序4.第四步骤:回到AutoCAD下,加载AutoLISP程序以(load"LSP主檔名")或(load"LSP主檔名")5.第五步骤:执行新的AutoLISP指令二、透过简单范例全程演练AutoLISP:1.第一步骤:动机、预期目标如图:希望能在输入『左下角点』、『矩形宽』、『矩形高』后,自动的将图形依所给的条件画出,如此一来,尔后画这个图就轻松愉快了!2.第二步骤:构思程序相关变量订定(如下图)定出程序名为构思程序流程、相关变量:变量名称可自行设定(如pa、ww、hh、pb、pc、pd、mp1、mp2、mp3、mp4),掌握三个原则:不可重复好记不会混淆适时的以分号『;』加上批注(defunc:pbox();以下pa、ww、hh值须由使用者输入(setqpa(请求输入左下角点))(setqww(请求输入矩形宽度实数值))(setqhh(请求输入矩形高度实数值));以下pb、pc、pd值须由程序依据pa、ww、hh求出(setqpb(依据相对极坐标法求出pb点坐标值))(setqpc(依据相对极坐标法求出pc点坐标值))(setqpd(依据相对极坐标法求出pd点坐标值));以下依据pa、pb、pc、pd点画矩形(以pline指令画出矩形);以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh;&pb、pc、pd值求出(setqmp1(求出mp1点坐标值))(setqmp3(求出mp3点坐标值))(setqmp2(求出mp2点坐标值))(setqmp4(求出mp4点坐标值));以下依据mp1、mp2、mp3、mp4点画出二条线(以line指令画出mp1到mp3的线)(以line指令画出mp2到mp4的线))本程序所需的AutoLISP功能函数及其用法(getpoint[基点][提示])<--请求输入一个点坐标(getreal[提示])<--请求输入一实数(polar基点弪度距离)<--依极坐标法取得另一坐标点其中『弪度值』之转换为:十进制角度弪度值十进制转弪度公式0度0090度1/2(/pi2)或(*pi180度pi270度2/3(*piN度*N/180(*pi(/n180))(command"AutoCAD指令"...)

<--呼叫执行AutoCAD指令注意:指令及其副选项皆要用双引号处理假设pa、pb、pc、pd皆为变量,其值为点坐标正确:(command"pline"papbpcpd"c")错误:(commandplinepapbpcpdc)原因:指令pline及其副选项c皆没用双引号括住错误:(command"pline"papbpcpdc)原因:副选项c(代表close)没用双引号括住,会被误认为是AutoLISP的变量名,但事实又没有c这个变数错误:(command"pline""pa""pb""pc""pd""c")原因:变数pa、pb、pc、pd不须用双引号括住注意:副选项中,若使用"",连续二个双引号,代表按[ENTER]键若想画一条pa到pc的LINE&一条pb到pd的LINE正确:(command"line"papc"")(command"line"pbpd"")错误:(command"line"papc)(command"line"pbpd)其它相关接近的功能函数...(getdist[基点][提示])请求输入一段距离(getint[提示])请求输入一整数值(getcorner基点[提示])请求输入另一矩框对角点坐标(car串行)

传回:串行中的第一个元素通常用来求x坐标(cadr串行)传回:串行中的第二个元素通常用来求y坐标(caddr串行)传回:串行中的第三个元素通常用来求z坐标3.第三步骤:利用PE2、CE或记事本,撰写程序并储存到C:\LISPTOOL目录下!!!(defunc:pbox();以下pa、ww、hh值须由使用者输入(setqpa(getpoint"EnterLeft/LowPoint:"))(setqww(getreal"Width:"))(setqhh(getreal"Height:"));以下pb、pc、pd值须由程序依据pa、ww、hh求出(setqpb(polarpa0ww))(setqpc(polarpb(/pi2)hh))(setqpd(polarpcpiww));以下依据pa、pb、pc、pd点画矩形(command"pline"papbpcpd"c");以下mp1、mp2、mp3、mp4值须由程序依据pa、ww、hh;&pb、pc、pd值求出(setqmp1(polarpa0(/ww2)))(setqmp2(polarpb(/pi2)(/hh2)))(setqmp3(polarpd0(/ww2)))(setqmp4(polarpa(/pi2)(/hh2)));以下依据mp1、mp2、mp3、mp4点画出二条线(command"line"mp1mp3"")(command"line"mp2mp4""))4.第四步骤:回到AutoCAD下,加载AutoLISP程序若您的AutoCAD『环境设定』中『支持文件搜寻路径』有加上c:\lisptool,则您可轻松载入程序指令:(load"pbox")传回:c:pbox或

指令:(load"pbox")传回:c:pbox或

指令:(load"")传回:c:pbox若您的AutoCAD『环境设定』中『支持文件搜寻路径』并未加上c:\lisptool,则您载入程序时,须包含程序所在路径:错误的加载:指令:(load"pbox")会出现:无法开启「」做输入错误:加载失败(LOAD"pbox")*取消正确的加载方式:指令:(load"c:/lisptool/pbox")传回:c:pbox或:指令:(load"c:\\lisptool\\pbox")传回:c:pbox5.第五步骤:执行新的AutoLISP指令指令:pbox

<--成功加载后,直接键入pbox指令EnterLeft/LowPoint:<--请给一左下角点Width:<--给一实数当宽度,例如100Hieght:<--给一实数当高度,例如50指令:nil指令三、程序产生的问题&改良1.原程序虽是成功的加载执行了,但却有以下几点小问题:问题1:给完左下角点后,『Width:』及『Height:』提示却在同一行出现,应该一个提示各别一行才好ANS:很简单,只要做如下的改变,加入『\n』即可!!!(setqww(getreal"Width:"))(setqww(getreal"\nWidth:"))(setqhh(getreal"Height:"))(setqhh(getreal"\nHeight:"))问题2:希望给宽度及高度时,也能直接在屏幕上拉一段距离代替ANS:很

温馨提示

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

评论

0/150

提交评论