第四章 Auto LISP的绘图功能.ppt_第1页
第四章 Auto LISP的绘图功能.ppt_第2页
第四章 Auto LISP的绘图功能.ppt_第3页
第四章 Auto LISP的绘图功能.ppt_第4页
第四章 Auto LISP的绘图功能.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第四章AutoLISP的绘图功能如前所述,AutoLISP语言体现了人工智能语言lisp的特点和AutoCAD强大的图形编辑功能,可以说它是集设计与绘图为一体的人工智能语言,因此,它是开发实用工程计算机辅助设计和绘图软件的强有力工具。AutoLISP具有强大的绘图编辑功能,主要是由于它提供了与AutoCAD相互通讯的简单透明的接口功能,即提供了一个系统内部函数command,AutoLISP程序中利用command函数可以非常简单而方便地调用几乎全部AutoCAD命令,以完成所要求的各种工程图形的绘制任务,本章将重点介绍command函数的功能、编程技巧及应用实例。,4.1COMMAND函数,4.1.1调用格式(command参数)command函数的参数可以是任意的AutoLISP的S表达式,但与AutoLISP其它函数不同,它的参数是没有固定的格式。由于它是AutoLISP系统提供的与AutoCAD相互通讯的接口,利用它可以直接执行AutoCAD的命令,所以它的参数就是它所调用的AutoCAD命令及其子命令或命令所需的数据。,例如:用command函数调用AutoCAD命令画一直线,可写成(command“line”/(5.06.0)/(10.015.0)”)它相当于在AutoCAD中键入command:lineFrompoint:5.0,6.0Topoint:10.0,15.0Topoint:回车由此可见,command函数的参数格式取决于所执行的AutoCAD命令及其所需的数据类型。但是由于command是AutoLISP的内部函数,其参数必须符合AutoLISP的数据类型,即采用S表达式形式。为此,将AutoCAD的命令及其子命令所要求的数据作为command函数的参数时,作了以下规定:,1.AutoCAD的命令、子命令和选择项要用字符串表示,大小写均可。例如:(command“DIM”“hor”/(2.03.0)/(5.03.0)/(5.05.0)8)“DIM”为命令,“hor”为子命令,均用字符串表示。2.数字常量(整型数或实型数)可写成本身亦可写成字符串形式。如上例中数字8亦可写成“8”。3.点常量有两种表示法:一是AutoLISP表的形式,如上例中/(2.03.0),/(5.03.0)。二是用字符串表示,字符串中数据要符合AutoCAD的规定。如写成“2.0,3.0”,“5.0,10.0”。,mand调用参数中的空串(”)等效于键盘上按一次空格键。如上例中画直线的程序最后要求以终止该命令的执行,即用(“”)。空串亦可代表缺省值。例如:(command“text”“2.0,3.0”“”“”“example”)标准表中二空串表示写文本时,其高度和旋转角采用缺省值。mand调用的参数,如数字、点常量亦可为AutoLISP的其它表达式,但其求值结果的数据类型,要与AutoCAD命令要求的数据类型一致。例如:(setqp1(list30.020.0)(command“line”p1(list(+(carp1)50.0)(cadrp1)”)但command函数的参数不能用get类函数,这是特别要注意的,否则将出错。,mand可以不带任何参数,即(command),它等效于在键盘上按CTRLC键,即取消了AutoCAD命令。例如:(command“dim”“hor”/(44)/(64)/(54)10)(command)相当于取消DIM命令并返回到命令提示。(command)也可以用“”代替,如上式可写成:(command“dim”“hor”/(44)/(64)/(54)10),4.1.2功用及求值结果command函数的功用是在AutoLISP编程中直接调用AutoCAD命令,以编制绘图程序。求值器在遇到command函数时与对其它AutoLISP函数一样,也要对各参数求值。但不同的是它把各参数的求值结果交给AutoCAD去调用相应的AutoCAD命令,执行完AutoCAD命令后,又返回到AutoLISP。command函数求值结果总是返回nil。,command函数的实际应用有如下几种情况:1.用一个command的实际应用是在执行一条AutoCAD命令。这是最常用的,例如:(setqp1/(1.21.2)p2/(5.812.4)(command“line”p1p2”)(command“circle”/(5.04.0)3)(command“text”/(4.00.4)“3.5”“0.0”“ABC”)2.用一个command函数执行多条AutoCAD命令,这也是正确的。例如:(command“line”p1p2”“circle”/(5.04.0)3“text”/(4.00.4)“3.5”“0.0”“ABC”),3.一条AutoCAD命令,可以由多个command函数完成。例如:(command“circle”)(command/(5.04.0)(command3)在这种情况下可在其中间插入其它函数,如前所述command函数是不允许用get类函数作参数的。如(command“circle”(getpoint)(getreal)就是错误的。但我们可以在多个command函数调用中间,插进get类函数。例如;(command“circle”)(setqp1(getpoint“n圆心点”)(commandp1)(setqr(getreal“n半径”)(commandr),4.利用暂停符号pause使正在执行的AutoCAD命令暂停。作法是command函数调用参数表中加pause符号,该AutoCAD命令即暂停,以等待用户键入或拖拽输入。例如:(command“circle”/(5.04.0)pause)该式是用command函数调入AutoCAD中的circle命令。先设置圆心(5.04.0),然后暂停下来让用户在屏幕上拖拽圆的半径,当用户给出所要的点或输入所需的半径后,在屏幕上便画出一个圆。,4.1.3注意mand函数调用中的参数类型,个数与顺序应与AutoCAD命令严格对应。为防止出错,对于初学者建议在编写用command函数的AutoLISP程序之前,先用AutoCAD的命令提示状态下敲入命令,确定其输入命令、子命令及其数据后,再进行编程。mand函数在调用象line,pline,layer等需要不定个数据的AutoCAD命令时,最后必须按一次空格键,以终止该命令的执行。即在command参数最后加一个(“”)。mand函数中的参数不能用get族函数。mand函数调用中的命令、子命令及其选项等字符串中不能含空格,因为空格在字符串中也是有效的。例如:(command“line”“1”“2”“34”“”);非法命令(command“line”“1,2”“3,4”“”);合法mand函数调用script命令时只能作为程序文件或函数定义中的最后一个表达式,否则程序易于出现不正确的结果,这在开发CAD应用软件中特别出现要加以注意。,4.2图形处理函数AutoLISP编写绘图程序时,常需要一些几何特征点、距离、角度等数据,如两点距离、两直线交点等。AutoLISP专门提供了一些解决这类问题的函数,即图形处理函数。利用这些函数,可使很多复杂问题的求解简化,充分利用这些函数,可使编程大大简化。,4.2.1求相对角度的函数ANGLE1.调用格式(angle点1点2)2.功用及求值结果该函数是求点1到点2连成一条直线的正方向与当前作图平面X轴方向所组成的角度,单位为弧度。求值结果返回该角度。若点为三维点,则将其投影到当前作图平面上计算。例如:(angle/(5.01.2)/(2.41.2)返回值3.141593.注意点1、点2顺序不能写错,因它决定直线的方向。若上例写成:(angle/(2.41.2)/(5.01.2)返回值0,4.2.2求两点间距离的函数DISTANCE1.调用格式(distance点1点2)2.功用及求值结果该函数的功用是求点1和点2的距离,并返回该函数值。同样,若为三维点,它返回到投影在当前作图平面上的两点间的距离。例如:(distance/(5.01.2)/(2.41.2)返回值2.600000(distance/(5.01.23.0)/(2.41.25.1)返回值4.045990,4.2.3求极坐标函数POLAR,1.调用格式(polar点方向角距离)2.功用及求值结果该函数用于求一个点的极坐标,返回在UCS坐标系统中的一个点。其方向角是从X轴方向按逆时针方向计算,其单位为弧度。点不管二维点还是三维点总是返回二维点。例如:(polar/(7.01.0)pi(+2.03.0)返回值(2.000001.000000)(polar/(4.07.0)0(/4.02)返回值(6.000007.000000)(polar/(4.07.0)(/pi3.0)4.0)返回值(6.0000010.464100),p1,p2,p3,a,c,b,在编制绘图程序时,已知一点求另一相关点时,常采用两个函数即List和polar。由于polar函数在很多情况下,使用起来更简便,应尽可能使用polar函数,例如:已知p2点及三角形三个边长a,b,c,确定p1、p3点,用polar函数:(setqp1(polarp2(/pi2.0)a)p3(polarp10b);注意p2、a、b、c应先赋值用List函数:(setqp1(list(carp2)(+(cadrp2)a)p3(polar(+(carp1)b)(cadrp1)显然,用polar函数确定相对坐标点是比较简单的。,图4.1,p1,p2,p3,图4.2,另外polar函数还可以配合angle,distance等函数使用,使用程序更简化,例如:已知直线二端点p1、p2,求距p1点为3/7线长的一点p3(图4.2)。(setqp3(polarp1(anglep1p2)(*3.0(/(distancep1p2)7.0)用polar函数时比较麻烦的是常常要将角度转化成弧度,为简化起见,可先将一些常用的角度赋给一些简单符号。如:(setqf1(*0.01745330)f2(*0.01745345)f3(*0.01745360)f4(*0.01745390)f5(*0.017453135)f6(*0.017453225)然后,将上面的函数放在绘图环境中,这样使用起来很方便。,4.2.4求二直线交点坐标的函数INTERS1.调用格式(inters端点1端点2端点3端点4任选项)2.功用及求值结果该函数求以端点1,端点2确定的一条直线和以端点端点3,端点4确定的另一直线的交点,并返回该交点。若不相交,则返回nil。任选项提示是否求延长线交点。若任选项存在,且其值为nil,则提示可以求两条线上或其延长线上的交点。若任选项不存在或其值为非nil,则提示所求交点只在两条线上,两条线不能延长。例如:任选项不存在或存在但其值为nil,如:(inters/(4.04)/(1.01.0)/(1.02.0)/(3.56.0)(inters/(4.04)/(1.01.0)/(1.02.0)/(3.56.0)T)均返回nil,但同样上面函数若任选项为nil如:(inters/(4.04)/(1.01.0)/(1.02.0)/(3.56.0)nil)则可返回交点(0.7826090.782609),4.2.5目标捕捉函数OSNAPAutoLISP提供的OSNAP函数所完成的功能与AutoCAD中的OSNAP命令完成的功能相似,即捕捉目标的特征点。1.调用格式(osnap点目标捕捉方式)2.功用及求值结果该函数是用点先取屏幕图形目标,再根据目标捕捉方式求出该目标的特征点如(圆心、直线端点、切点、线段中点、交点等),并返回该特征点。若对给定点没有捕捉到目标,但找不到与指定捕捉方式相匹配的目标特征点。OSNAP则返回nil。,有关目标捕捉功能在AutoCAD的OSNAP命令已作介绍,下面对目标捕捉方式只作一简述:(1)NEA(Nearest)捕捉靶区中心点位置最近的线、弧线或圆上的点。(2)ENDP(Endpoint)捕捉靶区中心点最近的线、弧线的端点。(3)MID(Midpoint)捕捉线段或弧线的中点。(4)CEN(Center)捕捉弧线或圆(可见部份)的圆心。(5)NOD(Node)捕捉点元素,这些点应置于块定义的插入基点上,该块插入时的snap节点。(6)QUA(Quadrand)捕捉圆或弧线上的象限点(可见的)-0o、90o、180o、270o的点,若圆或弧线是旋转后的块的一部份,其象限点也是随之转动,(7)INT(Interserction)捕捉两条线(或者一线与圆或弧,或者两个圆或弧)的交点。(8)INS(Insert)捕捉一个形、文本、属性定义或块的插入点。(9)PER(Perpendicular)在直线、弧线或圆捕捉一点,该点与前一点的连接为该直线、弧线或圆的法线。用该方式的弧线或圆不能是块的一部份。(10)TAN(Tangent)捕捉圆或弧线上的某一点,该点与前一点连接为该弧线的一条切线。用该方式的圆或弧线不能是块的一部份,,(11)QUI(Quick)该方式只能与上述方式一起使用,目标捕捉一般搜索落入靶区的所有目标,并先取最靠近指定方式的特征点,当屏幕上出现多个可见图素时,这种搜索很费时,若加上QUI快捷方式,则只要找到符合指定类型的目标的一个点便停止搜索,但若遇到INT方式时,则不管QUI方式均进行全面搜索。(12)NON(None)关闭目标捕捉方式。以上的目标捕捉方式,除Quick和None方式外,其它目标方式可以任意结合,并用逗号隔开。Quick只能与其它目标捕捉方式一起使用。,3.注意目标捕捉只能辨认屏幕上可见图素,对关闭层上的图形或虚线中“抬笔”段,则捕捉不到,下面举例说明其用法,例如:(setqpc(osnap(getpoint“nselectobject:”)“cen”)selectobject:用鼠标选取屏幕中圆上一点,返回该圆的圆心。又如:(command“line”/(3.06.0)(setqpt(osnap(getpoint“nselectobject:”)“tan”)(commandpt“”)selectobject:用鼠标选取屏幕上圆上的一点,在屏幕上绘出由点(3.06.0)到该圆的切线。再如:(setqpt(osnap(getpoint“nselectobject:”)“midp,endp)selectobject:选取已有的直线上一点。若目标距某端点近则返回该端点,否则返回中点。,4.3屏幕操作函数屏幕操作函数主要是对屏幕显示、读取进行控制、管理、操作的函数。这类函数除少数外一般无参数,学习这类函数着眼点不在求值结果(其求值结果总是返回nil),主要是了解这类函数的功用。4.3.1文本图形屏幕转换函数GRAPHSCR和TEXTSCR1.调用格式(graphscr)(textscr),2.功用在执行AutoLISP程序过程中,文本屏幕和图形屏幕一般都可根据情况自动转换,特别是转换成图形屏幕。如用command命令调用AutoCAD命令时,大都会自动从文本屏幕转换为图形屏幕,而执行一些列表等命令时,又会自动转换到文本屏幕。但在有些情况下屏幕并不能按需要自动转换,而需要人为控制,这时就要在AutoLISP程序中使用graphscr或textscr函数,graphscr的功能是使文本屏幕转换为图形屏幕,而textscr的功能是使图形屏幕转换成文本屏幕,其作用相当于按F1键。,4.3.2重画屏幕图形函数REDRAW,1.调用格式(redraw实体名方式)2.功用该函数用于在图形屏幕上重画图形,其应用用三种情况:1)当无任选项实体名和方式时,将重画当前视区内的所有图形;2)当指定任选项实体时,在屏幕上重画当前图形数据库中选中的实体;3)当存在任选项方式和实体名时,将根据选定方式(为整型数)执行以下功能:方式为1在屏幕上重画实体2把实体从屏幕上清除3把实体加亮显示(若显示器具有加亮显示功能)4实体,不加亮显示(若显示器具有加亮显示功能),redraw函数在编程中实际应用:当图形比较复杂,再选择目标时因其它线条干扰而选不定目标时,可用(redraw实体名方式)函数,其中方式选2,将某些实体暂时隐去,待目标选定后,在利用此函数方式选1恢复该部分图形,如在标注小角度尺寸及在剖面线上标注尺寸时常用此法。,4.3.3清图形屏幕函数GRCLEAR,1.调用格式(grclear)2.功用该函数用于清除当前视窗的图形,而命令提示区,状态行及菜单提示区保持不变。此函数并没有删去屏幕上已有的任何实体,而只是将其“隐藏”起来。调用redraw函数可使其恢复,注意它与(redraw实体名方式)不同的是grclear是对整个视区起作用。,4.3.4向屏幕文本显示区写文字的函数GRTEXT1.调用格式(grtext框区文字字符串加亮)2.功用前面讲过的用command函数调用AutoCAD命令如Text和attdef等只能在绘图区中显示文字。函数参数中任选项的意义:框区参数值若为正整数、则文字显示在菜单区,且参数值由0到最大。参数值若为负整数,则文字显示在状态行区。若参数值为-1,文字显示在方式状态行区。若其值为-2,则文字显示在坐标状态行区。文字字符串用于书写文字,文字不能太长,否则将截尾显示。加亮若提供了其值不为0,将加亮显示;若其值为0,则去掉加亮显示。若(grtext)不带任何参数,将使屏幕上所有文本区恢复到它们的标准状态。Grtext函数常用于在程序运行过程中,对程序运行各阶段的提示。如齿轮CAD程序运行过程中可在菜单区依次显示:数据输入、设计计算、结果显示、结构类型、图形绘制、尺寸标注、图形输出等,以提示程序运行的各个阶段。,4.4存取AutoCAD系统变量的函数AutoLISP提供了存取AutoCAD系统变量的函数。利用这些函数可以很方便地查阅或改变系统的值,以满足各种需要,存取AutoCAD系统变量的函数有两个:即getvar和setvar。4.4.1获得系统变量值的函数GETVAR1.调用格式(getvar系统变量名)2.功用及求值结果该函数用于获取AutoCAD系统变量的当前值,并返回该值。系统变量名用字符串表示。例如:(getvar“filletrad”)返回值0.250000即返回当前圆角半径的缺省值为0.25个图形单位。,4.4.2设置系统变量值的函数SETVAR,1.调用格式(setvar系统变量名值)2.功用及求值结果该函数用来改变系统变量的值,即给它设置一新值。并返回该值。例如:(setvar“filletrad”0.50)返回值0.5即给圆角半径设一新值0.5个图形单位。3.注意1)系统变量分两类:一类是只读的,另一类是可读写的。前一种只能用getvar查阅,只有后一种才能用setvar来改变其值。2)每个系统变量的值都有规定的数据类型,在用setvar进行修改值时要特别注意。,4.应用setvar函数,在使用CAD程序开发中非常有用,常用的有:1)改变屏幕控制显示(setvar“bilpmode”0);使绘图时不显示“+”字光标(setvr“cmdecho”0);使AutoCAD命令提示和输入数据不显示在文本屏幕上2)控制目标捕捉方式及改变目标框大小的系统变量,在标注尺寸时常因目标选不到而中断程序,通常可采用以下的系统变量值的重新设置来改善目标选取。(setvar“osmode”512)返回值512;采用目标最近点的方式(setvar“pickbox”3)返回值3;改变靶区的大小3)利用viewctr来确定视图基点(setqpc(getvar“viewctr”)(setqp1(polarpcpi5)其它系统变量如angbase,angdir等亦常用。,4.5综合举例例1编程设置图形环境(defuntxhi()(command“layer”“n”1“n”2“n”3“n”4“n”5“c”11“c”22“c”33“c”44“c”55“1”“center”1“”);设置层(command“ltscale”10)(command“setvar”“blipmode”0“setvar”“cmdecho”0);系统变量设置不出现十字标记;后者不再显示提示信息(command“style”“standard”“text”00.90“”“”);字体定义(command“style”“hz”“nztxt”00.70“”“”)(command“dim”“dimth”“off”“dimtoh”“off”dimtad”“on”);尺寸变量设置(command“exit”)(setqdimx10)(setqdimt(*0.35dimx)dima(*0.3dimx)dime(*0.3dimx)(command“dim”“dimtxt”dimt“dimexe”dime“dimasz”dima)(command“exit),例2编程绘制图框。(defuntk1(/pp(th);第三章综合举例4(txhj)(command“layer”“s”3“”“limits”/(00)(listtkctkk)“zoom”“a”)(grclear);清屏(xt2tkcctk/(00)0.1);绘外图框(setqpp(list25ctk);内图框左下角点(xt2(-tkcctk25)(tkk(*2ctk)pp0.4);绘内图框);defun(defunxt2(1wpllw/p3);l长,w宽,pl左下角点,lw线宽(setqp3(list(+(carpl)1)(+cadrpl)w)(command“pline”pl“w”lw“”(polarpl01)p3(polarpl(/pi2.0)w)p1“”),例3水平对称函数。(defunhsym(pina0/xxyy);p点变量的符号字符串,i点变量的下标,n点变量数目,a0对称轴上一点(repeatn(setqxx(read(stractp(itoai)“h”);将pih赋给xxyy(read(stractp(itoai);将pi赋给yy(setxx(list(car(evalyy)(-(*(cadra0)2)(cadr(evalyy);将pi的镜像点的值赋给xx的值pih(setqi(1+i);repeat),例4垂直对称函数。(defunvsym(pina0/xxyy);p点变量的符号字符串,i点变量的下标,n点变量数目,a0对称轴上一点。(repeatn(setqxx(read(stractp(itoai)“v”);将piv赋给xxyy(read(stractp(itoai);将pi赋给yy(setxx(list(-(*(cara0)2)(car(evalyy)(cadr(evalyy);pi的垂直镜像点的值赋给xx的值piv);repeat),例5编程绘制整体式齿轮主视图。(defunctg(/l1p0p3p4c3ss1ss2ss3)(cljg);第三章综合举例5(tk1);本章例2(sfcofbdada);第三章综合举例6(setql1/(dadfdbdhn)(b1l1cof);第三章综合举例4;确定绘图基点:(setqpc(getvar“viewctr”);屏幕中心点pc(polarpcpi(*0.2tkc);绘图基点);确定主视图各点(见图4.4a):(setqf2(/pi0.2)f3(*0.017453270);角度变量(setqp0(polarpcpi(/b2.0);点坐标p1(polarp0f2(/dh2.0)p2(polarp0f2(/df2.0)p3(polarp0f2(/da2.0)p4(polarp3f3n)p5(polarp30n)c1(polarp0pi4)c3

温馨提示

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

评论

0/150

提交评论