版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
word文档可自由复制编辑摘要20世纪80年代美国Autodesk公司推出一款通用计算机辅助软件——AutoCAD,如今,AutoCAD深受用户青睐,成为风靡世界的辅助设计软件之一。AutoCAD之所以如此受欢迎,一个很重要的原因就是其具有开放的体系结构,可以很方便的进行二次开发,而二次开发的应用可以极大的降低绘图人员的劳动强度,节约绘图时间,提高绘图效率,从而达到降低成本的目的。AutoCAD二次开发就是在原有AutoCAD软件的基础上,利用高级程序语言进行二次开发,以将常用的操作以命令的形式确定下来,从而达到提高绘图效率的目的。常用的AutoCAD二次开发工具有VisualLISP及DCL、VBA、Object-ARX等程序应用接口。本次毕业设计主要讨论利用AutoLISP及DCL对AutoCAD进行简单零件的二次开发,主要是通过使用VisualLISP增加AutoCAD绘图功能、利用VisualLISP对常用零件进行二次开发设计DCL对话框方便参数的输入及查重以说明二次开发在提高绘图效率方面的巨大威力。另外,由于AutoCAD二次开发需将常用操作以命令的形式固定下来,会涉及到大量的程序、图形文件,为了加强文件管理,在本文中也会讨论Access关系数据库的基础操作,比如表的创建、查询的创建、窗体的创建等。根据以上,本次毕业设计主要通过增加AutoCAD绘图功能、对简单零件进行二次开发、DCL对话框的创建来说明二次开发可以大幅度的提高绘图效率以及创建简单的数据库管理系统。关键词:AutoCAD;二次开发;VisualLISP;DCL;Access关系数据库
SecondaryDevelopmentofAutoCADbasedonAutoLISPStudent:RENLI-dongTeacher:LIUYuAbstract:Inthe1980stheAutodeskhasintroducedancommoncomputer-aidedsoftware--AutoCAD,now,AutoCADfavoredbytheusers,tobecomeoneofworldfamousaideddesignsoftware.AutoCADissopopular,averyimportantreasonisthatithasanopenarchitecturethatmakesiteasyforsecondarydevelopment,whiletheseconddevelopmentcangreatlyreducelaborintensitydrawingstaff,savedrawingtime,improvedrawingefficiency,whichcanreducecosts.AutoCADseconddevelopmentisbasedontheoriginalAutoCADsoftwareontheuseofhigh-levelprogramminglanguageforsecondarydevelopment,tocommonoperationsfinalizedintheformoforders,soastoimprovedrawingefficiency.Commonly,designersusedAutoCADseconddevelopmenttoolsVisualLISPandDCL,VBA,Object-ARXapplicationinterfaceandotherprocedures.ThegraduationprojectfocusedontheuseofthesecondarydevelopmentofAutoCADAutoLISPandDCLsimpleparts,mainlytoincreasetheAutoCADdrawingfunctionalitybyusingVisualLISP,VisualLISPtousecommonpartsforsecondarydevelopmentanddesignDCLdialogandconvenientinputparametersre-checktoillustratetheenormouspoweroftheseconddevelopmenttoimprovetheefficiencyofdrawing.Further,sincetheAutoCADseconddevelopmentintheformofcommonactionsneedtobefixedinorder,itwillinvolvealargenumberofprograms,graphicsfiles,inordertoenhancefilemanagement,inthispaperwilldiscusstheunderlyingoperatingAccessrelationaldatabase,suchascreatingtables,createqueries,formsofcreationandsoon.Basedontheabove,thisgraduationprojectmainlythroughincreasedAutoCADdrawingfunction,thesecondarydevelopmentofsimpleparts,createDCLdialogtoillustratethesecondarydevelopmentcangreatlyimprovedrawingefficiencyandcreateasimpledatabasemanagementsystem.Keywords:AutoCAD;secondarydevelopment;VisualLISP;DCL;Accessrelationaldatabase
目次摘要 IAbstract II1绪论 11.1AutoCAD发展现状 11.2AutoCAD二次开发的意义 21.3主要工作 22AutoLISP与VisualLISP简介 32.1AutoLISP简介 32.2VisualLISP简介 32.3AutoLISP基本函数 42.4本章小结 53AutoCAD二次开发在设计中的应用 63.1使用VisualLISP丰富AutoCAD的绘图功能 63.1.1自动生成圆外接正多边形 63.1.2自动绘制图框 83.2使用VisualLISP生成标准零件的二维图 93.3本章小结 124基于AutoLISP的三维零件设计 134.1呆头扳手程序设计思路 134.2绘制呆头扳手二维图的步骤 134.3编写呆头扳手二维图生成程序 134.4人机交互界面的设计——DCL界面 194.5搭建AutoLISP与DCL间沟通的桥梁 224.6绘制呆头扳手二维图 244.7绘制呆头扳手三维图 254.8修改部分主参数的扳手 264.9直接绘图与二次开发的比较 274.10Access关系数据库 284.10.1表的创建 284.10.2完成表结构中的数据对象输入 284.10.3查询的创建 294.10.4窗体的创建 304.11本章小结 315毕业设计总结与展望 32致谢 33参考文献 341绪论1.1AutoCAD发展现状AutoCAD软件是由美国Autodesk公司推出的一款集二维制图、三维建模与设计和渲染等于一体的计算机辅助设计软件,经过不断的发展完善,AutoCAD成为最受工程人员青睐的制图软件,几乎成为CAD技术的代名词。与在绘图板上模拟的传统绘图相比,利用AutoCAD可以更加方便的绘制二维和三维图形,而且其绘图速度更快、精度更高。另外,由于AutoCAD具有良好的用户界面,绘图人员只需通过交互菜单或在命令行输入命令的方式就可以方便的进行各种操作。正是由于这些优点,AutoCAD软件目前被广泛的应用于机械、航天、航空、建筑、电子、化工、美工等领域并取得了巨大的经济效益。AutoCAD的发展经历了五个阶段,分别为:初级阶段、发展阶段、高级发展阶段、完善阶段以及进一步完善阶段。1)初级阶段:在初级阶段,由于其功能并不完善,AutoCAD为不断完善其功能,先后推出了五个版本,现用表格表示如下:表1-1AutoCAD初级阶段版本更新时序1982年11月1983年4月1983年8月1983年10月1984年10月AutoCAD1.0版本AutoCAD1.2版本AutoCAD1.3版本AutoCAD1.4版本AutoCAD2.0版本2)发展阶段:虽然在初级阶段,AutoCAD不断更新,但其功能并不是很完善,因此,发展阶段,AutoCAD又进行了一系列的更新换代,版本更新如下表所示:表1-2AutoCAD发展阶段版本更新时序1985年5月1986年6月1987年9月后AutoCAD2.17及2.18版本AutoCAD2.5版本AutoCAD9.0及9.03版本3)高级发展阶段:这一阶段,AutoCAD软件已经比较成熟,因此,这一阶段AutoCAD版本更新不是很频繁,而且,在这一阶段,AutoCAD的高级协助功能也得到完善,更新时序如下表所示:表1-3AutoCAD高级发展阶段版本更新时序1988年8月1990年1992年AutoCAD10.0版本AutoCAD11.0版本AutoCAD12.0版本4)完善发展阶段:经历了高级发展阶段的3个版本,AutoCAD开始由DOS平台转向Windows平台,其发展如下表所示:表1-4AutoCAD完善发展阶段版本更新1996年6月1998年1月1999年1月AutoCADR13版本AutoCADR14版本AutoCAD2000版本5)进一步完善阶段:至此,AutoCAD的功能已经相当成熟,在此期间推出的AutoCAD2003简体中文版更是将AutoCAD的应用推向高潮,具有划时代的意义,在此期间的版本的版本更新如下表所示:表1-5AutoCAD进一步完善阶段版本更新2001年9月2003年5月Autodesk发布AutoCAD2002版本Autodesk推出AutoCAD2003简体中文版1.2AutoCAD二次开发的意义随着信息技术的发展,微型计算机在我国越来越普及,微型计算机的普及使很多传统的工作方式发生变化。现在,利用纸、笔、绘图板进行模拟的绘图方式已经过去,使用绘图软件进行绘图设计已经成为对设计人员的最基本要求。但是,如何进一步提高绘图效率呢?这就需要进行二次开发,并建立相应的数据库,以减少重复工作,简化绘图过程,最终达到提高绘图效率的目的。AutoCAD是一款适用于机械、建筑、航天航空等领域的通用软件,而且AutoCAD软件具有开放的结构,能够利用AutoLISP、VisualLISP、VBA等进行二次开发,其中,利用AutoCAD软件自带的编程软件AutoLISP及VisualLISP对AutoCAD进行二次开发就可以很好的解决上述问题。1.3主要工作本文主要是利用VisualLISP编程对AutoCAD进行二次开发,为说明AutoCAD二次开发能够提高机械制图的效率及介绍二次开发的整个流程,本文主要根据如下三点进行说明:丰富AutoCAD的绘图功能(a.自动生成圆外接正多边形;b.自动绘制图框);自动生成二维及三维零件图;简单的数据库应用。
2AutoLISP与VisualLISP简介2.1AutoLISP简介AutoLISP是一种可以对AutoCAD进行二次开发,嵌入在AutoCAD内部的高级编程语言,利用AutoLISP对AutoCAD进行二次开发可实现直接增加和修改AutoCAD命令,扩大图形编辑功能,实现参数化绘图程序设计。AutoLISP是AutoCAD二次开发最常用的工具之一。2.2VisualLISP简介VisualLISP可以增强AutoLISP程序开发能力、加速AutoLISP程序开发,而且VisualLISP是AutoCAD自带软件,不用再次购买或者下载。在AutoCAD2000以后,用户可以通过VisualLISP集成开发环境(IDE)所提供的编辑器、调试器及其他工具方便地编写和修改AutoLISP源程序代码,调试、运行程序,从而使在此之前用户必须在文本编辑软件中编写程序代码才能加载运行该程序的不足得到有效的解决[5]。下面对VisualLISP的操作界面进行简单介绍:1)菜单栏:用户可以通过鼠标操作打开VisualLISP命令,打开后,VLISP会在状态栏对该命令进行简单的说明。图2-1VisualLISP开发环境菜单栏2)工具栏:工具栏包含了VisualLISP集成开发环境中大部分常用的命令,是VisualLISP中最重要的功能按钮之一。图2-2VisualLISP开发环境工具栏3)控制台:控制台是一个独立的窗口,其内容可以滚动显示。控制台可供用户进行AutoLISP程序的输入、运行及运行结果的查看,另外,控制台也能够显示AutoLISP诊断信息。图2-3VisualLISP开发环境控制台4)跟踪窗口:打开VisualLISP后,显示VisualLISP当前版本的相关信息的窗口就是跟踪窗口。图2-4VisualLISP开发环境跟踪窗口5)文本编辑窗口:在VisualLISP中,文本编辑窗口是一个空白窗口。通过文本编辑窗口用户可以方便高效地编写与修改AutoLISP源程序代码。图2-5VisualLISP开发环境文本编辑窗口2.3AutoLISP基本函数1)设置变量函数格式:(setq变量名1值1(变量名2值2变量名3值3…)) 功能:创建变量,并给变量赋特定值;说明:对于字符串类型的值,应加上“&”加以区分。2)数学函数[6]表2-1AutoLISP中数学函数运算格式功能加法运算(+(num1)(num2)…)计算括号内所有值的和乘法运算(*(num1)(num2)…)计算括号内所有值的乘积除法运算(/(num1)(num2)…)第一个数除以剩余数值的乘积三角函数(sinangle)计算正弦值(atanangle)计算反正切值注意:AutoLISP仅支持sin、atan两种三角函数。3)调用AutoCAD标准命令——command函数格式:(command“标准命令”“参数1”“参数2”…)说明:调用标准命令必须写出英文全称,不能以简称方式出现;4)定义点坐标函数(polar)格式:(polar起始点方位角距离)功能:返回值为给定“起始点”,指定“方位角”和“距离”点的坐标值;说明:polar函数中的“方位角”要用弧度表示。5)repeat函数格式:(repeat数表达式…)6)选择定点函数(getpoint)格式:(getpoint“\n操作提示”)功能:利用十字光标在屏幕上选取一点或者输入具体数值来确定一个点。7)输入整数型函数(getint)格式:(getint<提示>)功能:提示用户在相应位置输入一个整型数。8)输入实型函数(getreal)格式:(getreal<提示>)功能:提示用户在相应位置输入一个实型数。9)输入距离函数(getdist)[9]格式:(getdist<点><提示>)功能:提示用户在相应位置输入一个距离值。2.4本章小结本章着重对AutoLISP及VisualLISP进行介绍,通过以上介绍,我们了解到AutoLISP、VisualLISP都是AutoCAD自带的编程软件,用户可以很方便的在AutoCAD软件内调用。另外,本章也介绍了常用的AutoLISP函数,了解到AutoLISP函数可分为标准函数和自定义函数以及两种函数的定义方法。本章最后对Access关系数据库进行了简单的介绍。
3AutoCAD二次开发在设计中的应用在机械设计中,为了提高绘图效率,绘图工作者常常对AutoCAD进行二次开发,本文主要使用VisualLISP对AutoCAD进行二次开发,主要表现以下两方面:丰富AutoCAD的功能;自动生成二维及三维零件图。3.1使用VisualLISP丰富AutoCAD的绘图功能在机械设计过程中,我们常常会发现,虽然AutoCAD的使用让绘图变得更加高效,但是,对于某些操作,如果使用AutoCAD命令则会变的很繁琐,甚至还不如手工绘图方便。如果我们利用AutoCAD自带的编程软件——VisualLISP所提供的编辑器、调试器及其他工具对AutoCAD进行二次开发,编写相应的程序,则可以很好的解决上述问题。就像我们每个人都有身份证,在AutoCAD中绘制的每一个对象(如线段、文字、圆等)都有唯一的固定的属性列表,我们可以通过(setqa(entsel))和(setqen1_data(entget(caren1)))命令来获取每一个对象的属性列表,具体操作过程如下:在AutoCAD的命令行输入“(setqa(entsel))”命令,只要在面域内选取一个对象,系统就会自动返回一个列表,该列表包括该对象的图原名及选点坐标。若在命令行输入“(setqen1_data(entget(caren1)))”命令,则系统会自动返回该对象的所有属性。以线为例[1]:在命令行输入命令:(setqa(entsel))选择对象;返回值:(<图元名:7ef860d8>(913.415578.1970.0))在命令行输入命令:(setqen1_data(entget(caren1)))选择对象;返回值:((-1.<图元名:7ef860d8>)(0."LINE")(330.<图元名:7ef84cf8>)(5."123")(100."AcDbEntity")(67.0)(410."Model")(8."0")(100."AcDbLine")(10537.242437.0210.0)(111252.18708.9920.0)(2100.00.01.0))返回值的属性中包含了对象的各种重要信息(包括对象的类别、绘制图层的名称等),而且,根据以上信息,我们可以修改对象的属性或者使用该属性。下面我们通过几个简单的例子加以说明:3.1.1自动生成圆外接正多边形在机械制图中,绘制螺栓时,我们常常要用到外接正多边形,如果每次都通过多边形命令来完成绘图的话,在做比较复杂的零件图时就需要完成大量的重复工作,这样无形之中就加大了绘图人员的工作量,限制绘图速度。下面,我们利用VisualLISP编写简单的程序,该程序既可以满足要求,又可以重复使用。(defunc:wjzdbx()(setvar"cmdecho"0);命令执行过程不响应(setqn(getint"请输入正多边形的边数:"))(setqen(entsel"\n选取欲作外接正多边形的圆:"));选取圆并命名为en(setqI0);从0开始计数(whileen;当所选取的en对象存在时做如下操作(setqen_data(entget(caren)));取得对象的属性列表(setqen_type(cdr(assoc0en_data)));取得群代码为0的对象(if(=en_type"CIRCLE");判断所取得对象是不是圆(prong;将表达式连接为一组,与if、cond等配合使用 (setqcenpt(cdr(assoc10en_data))) (setqrad(cdr(assoc40en_data))) (command"polygon"ncenpt"c"rad) (setqI(1+I)))(alert"该对象不是圆");若所选对象不是圆,则显示“该对象不是圆”)(setqen(entsel"\n选取下一个对象:"));继续选取下一个对象)(princ(strcat"\n共绘制了"(itoai)"圆内切正多边形"))(prin1))(prompt"\n<<wjzdbx>>连续对多个圆绘制内切正多边形")(prin1)备注:此处是为了增加AutoCAD的绘图功能,需要使用VisualLISP中的自定义函数。一般地,自定义函数的格式如下所示:(defunc:mm()表达式)注意:1)c:mm()是一种特定格式,自定义函数的函数名为mm;2)表达式由AutoLISP基本函数、字符串、变量和运算符等组成,是自定义函数的核心部分;3)自定义函数可以像AutoLISP基本函数那样调用。图3-1程序运行前的图形图A图B图3-2程序运行后的图形下面我们对上面程序做一个简单的演示,首先,在AutoCAD的绘图界面完成如图3-1所示的圆及四边形,然后进入VisualLISP界面,完成程序的加载,在命令行输入“wjzdbx”命令,系统就会提示我们“定义外接正多边形的边数”,此时,我们只需在命令行输入所需多边形的边数,点击确定,系统就会提示我们“选取欲做外接正多边形的圆”,这时我们只需要点击要做外接正变形的圆就可完成外接正多边形的绘制,如图3-2中的图A所示,但是,如果我们选取的对象不是圆,此时系统就会提示“该对象不是圆”,此时,我们只要点击确定就可以结束该程序。3.1.2自动绘制图框在绘制机械图纸时,我们往往要先完成图框的绘制,虽然图框的绘制很简单,只要通过矩形命令就可以完成,但是,由于每一种图纸都有不同的尺寸要求,而且如果每次绘图都要进行这些操作,绘图速度就会受到限制,以致无法提高绘图速度,下面我们通过一段VisualLISP程序来解决此问题。机械制图过程中使用比较多的图纸有A4、A3、A2、A1、A0五种规格,下面我们就通过一段小程序来快速绘制绘图过程中所需的图框:(defunc:tk()(setvar"cmdecho"0);命令执行过程不响应(initget"A0A1A2A3A4");设定下次函数输入的字符串(setqsize(getkword"请输入纸张大小:"));输入所需图框的大小(setqsize(strcasesize));统一转化成大写(cond((=size"A0")(setqp2'(1189841)));条件语句,相当于多个if ((=size"A1")(setqp2'(841594)));定义图框的大小 ((=size"A2")(setqp2'(594420))) ((=size"A3")(setqp2'(420297))) ((=size"A4")(setqp2'(297210))))(setqp1'(00))(command"rectang"p1p2);以p1、p2为对角点画矩形(command"zoom""A");窗口缩放(prin1))在AutoCAD的绘图界面输入“tk”命令,系统就会提示我们输入纸张大小,此时,我们只需将我们所需的图纸规格输入即可完成图框的绘制。3.2使用VisualLISP生成标准零件的二维图在绘制机械零件图及装配图时,轴是最常用到的联接零件,但是,不同情况下,使用的轴的类型是不同的,有时我们只需要使用一根直轴就可以完成联接,有时我们需要台阶数为2的轴,在复杂的装配图中,所需轴的台阶数更多,若每次都通过绘图命令来完成轴的绘制,虽然不复杂,但是,其过程确实相当繁琐的,严重影响了绘图速度,但是,如果利用VisualLISP对轴进行二次开发,就能够通过函数的定义很好的解决上述问题,下面我们就来讨论利用VisualLISP对轴进行简单的二次开发,以说明二次开发可以简化绘图过程,提高绘图速度。在开始编写程序之前,我们首先要对轴的二维图进行分析,对图中各个定义点进行定义,轴中的定义点的标注如下图所示:图3-3轴定义点的标注图打开AutoCAD,完成各点的定义之后,就可以编写生成程序,具体程序的执行流程如下图所示:开始开始定义起点、阶梯数定义起点、阶梯数n>i?n>i?是结束根据提示完成轴段绘制结束根据提示完成轴段绘制i=i+1i=i+1图3-4程序流程图具体程序如下所示:(defunc:zhou()(setqpp(getpoint"请输入起点:"))(setqn(getint"\n请输入轴的阶梯数:"))(setqi1)(while(>=ni)(setqd(getreal"\n请输入轴的直径:"))(setql(getreal"\n请输入轴段长度:"))(setqp1(polarpp(/pi2)(/d2)))(setqp2(polarp10l))(setqp3(polarpp0l))(setqp4(polarp3(*1.5pi)(/d2)))(setqp5(polarp4pil))(command"pline"p1p2p3p4p5p1"")(setqppp3)(setqi(+i1)))(prin1))在绘图过程中可以发现,引入参数化绘图之后,我们在绘图过程中只需要完成主要参数的输入就可以完成绘图工作,简化了绘图过程,有效的降低了绘图人员的劳动强度。下面,利用此程序完成轴的绘制,主要参数如下表所示:表3-1轴的主参数阶梯数轴1直径轴1长度轴2直径3602040轴2长度轴3直径轴3长度302530在AutoCAD中加载上面程序,然后执行,所得轴的二维图如下所示:图3-5轴的二维生成图备注:1)在绘图时要将正交、对象捕捉关闭,以免影响绘图效果。2)如果需要轴的三维图,在图3-5二维图的基础上进行旋转命令就可以获得(操作过程为:切换到三维建模模式,点击旋转命令,选择对象,点击确定,输入旋转角180度即可完成三维图的绘制)。3.3本章小结本章主要是利用VisualLISP增加AutoCAD的绘图功能,以使绘图过程更加准确、方便、快捷。4基于AutoLISP的三维零件设计在机械中,有些工具是成套使用的,如呆头扳手、螺丝刀等,如果一一完成这些工具的设计工作,则会由于大量的重复工作而使其过程变得异常繁琐,但是,通过仔细分析,我们可以发现,整套工具中仅仅有几个主要的参数不同,而其他部分的设计过程都是一样的。此时我们可以利用VisualLISP编写简答的程序,以参数的形式严格、准确、快捷地完成绘图过程。以减少重复劳动,提高绘图效率。4.1呆头扳手程序设计思路呆头扳手是机械行业很常见的工具,而且这种扳手一般都是成套的。而且不同型号的呆头扳手差别主要集中在几个主要参数上,如果每次设计都从头开始,这样就需要完成大量的重复工作,不仅提高了设计人员的劳动强度,而且会影响绘图效率,进而使得设计人员用于创新性劳动的时间减少,影响经济效益。但是,只要使用VisualLISP编写简单的程序,就可以实现参数化设计,进而可以通过修改主要参数高效快速的完成绘图。利用VisualLISP及DCL对进行二次开发的设计思路如下所示:用户DCL对话框驱动程序 参数用户DCL对话框驱动程序绘制绘制零件二维图零件二维图图4-1程序设计流程图4.2绘制呆头扳手二维图的步骤1)分析呆头扳手的几何形状,编写呆头扳手二维图生成程序,并加载;2)编写DCL驱动程序,并搭建其与AutoLISP沟通的“桥梁”;3)绘制呆头扳手二维图;4)在三维建模模式中通过拉伸命令完成三维图的绘制。4.3编写呆头扳手二维图生成程序在开始程序编写之前,先要分析呆头扳手二维图并定义所需要定义的各点,以及确定这些点的定义方式,点的标注如下图所示:图4-2扳手二维图各定义点的标注图在完成点的标注及明确各点确定的方法时,打开VisualLISP程序编辑窗口,在文本编辑窗口编辑程序,具体程序如下所示。(defunc:bs()(setvar"cmdecho"0);命令执行过程不响应(sub1);调用子程序1(sub2);调用子程序2(sub3);调用子程序3(sub4);调用子程序4(prin1))(prompt"\n<<bs>>自动生成呆头扳手")(prin1)(defunsub1();子程序1——参数输入(setqp1(getpoint"请输入基点:"));在面域内选取一点或者输入一点的坐标(setqA(getreal"\n请输入手臂长度<80>:"));定义手臂长度A(if(nullA)(setqA80));手臂长A为定义时,取默认值200(setqB(getreal"\n请输入手臂小头宽度<20>:"))(if(nullB)(setqB20))(setqC(getreal"\n请输入手臂大头宽度<26>:"))(if(nullC)(setqC26))(setqD(getreal"\n请输入头部宽度<36>:"))(if(nullD)(setqD36))(setqE(getreal"\n请输入头部深度度<30>:"))(if(nullE)(setqE30))(setqF(getreal"\n请输入头部总深度<33>:"))(if(nullF)(setqF33))(setqG(getreal"\n请输入扳手总长度<140>:"))(if(nullG)(setqG140))(setqH(getreal"\n请输入扳手总长<280>:"))(if(nullH)(setqH280))(setqL(getreal"\n请输入右侧手臂长度<90>:"))(if(nullL)(setqL90))(setqI(getreal"\n请输入右侧头部宽度<20>:"))(if(nullI)(setqI20))(setqJ(getreal"\n请输入右侧头部深度<18>:"))(if(nullJ)(setqJ18))(setqK(getreal"\n请输入右侧头部总深度<20>:"))(if(nullK)(setqK20))(prin1))(defunsub2()子程序2——左侧点的定义(setqp2(polarp10A))(setqp3(polarp2(*1.5pi)(/(-CB)2)))(setqp4(polarp20(/B2)))(setqp5(polarp4(*1.5pi)(*0.4B)))(setqp6(polarp1(/pi2)(/B2)))(setqp7(polarp60G))(setqp8(polarp7(*1.5pi)(/D2)))(setqp9(polarp8piE))(setqp10(polarp7piF))(setqp11(polarp7(/pi2)(/D2)))(setqp12(polarp11piE))(setqp13(polarp1(/pi2)B))(setqp14(polarp130A))(setqP15(polarp14(*1.5pi)(/(-CB)2)))(setqp16(polarp140(/B2)))(setqp17(polarp16(*0.5pi)(*0.4B)))(setqp18(polarp6pi(-HG)))(setqp19(polarp18(*1.5pi)(/I2)))(setqp20(polarp190J))(setqP21(polarp180K))(setqp22(polarp18(/pi2)(/I2)))(setqp23(polarp220J))(prin1))(defunsub3();子程序3——右侧点的定义(setqq2(polarp1piL))(setqq3(polarq2(*1.5pi)(/(-CB)2)))(setqq4(polarq2pi(/B2)))(setqq5(polarq4(*1.5pi)(*0.4B)))(setqq6(polarp1(/pi2)(/B2)))(setqq7(polarq6pi(-HG)))(setqq8(polarq7(*1.5pi)(/I2)))(setqq9(polarq80J))(setqq10(polarq70K))(setqq11(polarq7(/pi2)(/I2)))(setqq12(polarq110J))(setqq13(polarp1(/pi2)B))(setqq14(polarq13piL))(setqq15(polarq14(*0.5pi)(/(-CB)2)))(setqq16(polarq14PI(/B2)))(setqq17(polarq16(*0.5pi)(*0.4B)))(prin1))(defunsub4();子程序4——绘制图形(command"pline"p1p3"");利用多段线命令连接p1、p3(command"pline"p13p15"")(command"arc"p5"e"p3"a"45)(command"arc"p15"e"p17"a"45)(command"arc"p11"e"p17"a"130)(command"arc"p5"e"p8"a"130)(command"pline"p8p9"")(command"pline"p11p12"")(command"arc"p12"e"p10"a"15)(command"arc"p10"e"p9"a"15)(command"pline"p1q3"")(command"pline"q13q15"")(command"arc"q3"e"q5"a"45)(command"arc"q17"e"q15"a"45)(command"arc"q17"e"q11"a"130)(command"arc"q8"e"q5"a"130)(command"pline"q8q9"")(command"pline"q11q12"")(command"arc"q10"e"q12"a"15)(command"arc"q9"e"q10"a"15)(prin1))备注:1)line命令与pline命令的区别:line命令所画的线是一段段的,每段是独立的;而pline命令所画的线是一个整体。此处,由于在三维建模模式中拉伸时要求二维图形是一个整体,因此此处使用pline命令。2)此程序共有4段程序组成,分别为:主程序、参数输入部分、定义点部分和绘制图形部分。使用子程序的好处是:使主程序的结构更加简单明了;将冗长的程序分段为子程序不仅有利于程序的编写,而且使得程序的检查变得方便快捷。3)此程序的检查主要是判断各点是否有定义,此工作利用“!点”即可实现,例如:检查点p2是否有定义,在命令行输入“!p2”,若返回值为“nil”则该点未定义,若该点已定义,则返回值为该点的坐标(779.117432.150.0)。程序编写完成之后,打开VisualLISP操作界面,在文本编辑窗口输入以上程序,操作界面如下图所示:图4-3程序写入操作界面点击左上角“保存”按钮,把此文件命名为“bs.lsp”并保存到文件夹。关闭如图4-3所示的窗口。完成程序的录入之后,准备加载程序。打开AutoCAD,点击工具、AutoLISP、加载命令,点击打开如图4-4所示的“加载应用程序”对话框。在该对话框中选择呆头扳手二维生成图LSP的程序,点击加载,或者直接在加载命令前的对话框输入该文件的文件名,即可完成所需程序的加载。然后关闭对话框,这样就完成了该程序的加载。图4-4“加载应用程序”对话框程序加载完成之后,可以在命令栏操作该命令,但是,此处,为了使数据的输入及检查更加方便快捷,我们通过DCL界面来完成数据输入,下面,就来讨论DCL人机互动界面的设计。4.4人机交互界面的设计——DCL界面通过使用对话框控制语言(DCL)可以实现AutoCAD的人机交互。一般来说,DCL对话框包括:按钮、标签、编辑框、列表框、图像框以及图像按钮等组件。使用时,用户可以根据自己的需要选择自己设计界面所需的组件,以满足自己的设计要求,也达到使用方便目的。在本例中,为使输入更加方便快捷,也使查错检验更加简便,设计了如下所示的对话框(如图4-5所示)。图4-5DCL人机交互界面DCL人机交互对话框的设计也是通过程序来完成的,其详细程序如下所示:bs:dialog{label="数据输入界面";:text{label="呆头扳手主参数";alignment=centered;}:row{:edit_box{label="左侧手臂长度A";key="kA";edit_width=10;}:edit_box{label="左侧头部宽度D";key="kD";edit_width=10;}}:row{:edit_box{label="头部深度E";key="kE";edit_width=10;}:edit_box{label="扳手总长H";key="kH";edit_width=10;}}:row{:edit_box{label="左侧头部总深度F";key="kF";edit_width=10;}:edit_box{label="左侧扳手总长度G";key="kG";edit_width=10;}}:row{:edit_box{label="右侧手臂长度L";key="kL";edit_width=10;}:edit_box{label="右侧头部宽度I";key="kI";edit_width=10;}}:row{:edit_box{label="右侧头部深度J";key="kJ";edit_width=10;}:edit_box{label="右侧头部总深度K";key="kK";edit_width=10;}}:edit_box{label="手臂小头宽度B";key="kB";edit_width=10;}:edit_box{label="手臂大头宽度C";key="kC";edit_width=10;}:boxed_column{label="基点";:button{label="屏幕取点<";key="pick";}}:boxed_radio_row{label="设计者";:radio_button{label="东子";}:radio_button{label="任利东";}:radio_button{label="冬瓜";}}spacer_1;ok_cancel;}注意:DCL对话框的设计是为了方便数据的输入及检查,但是,要使DCL发挥预期作用必须依靠AutoLISP的驱动,在此处并没有完成AutoLISP与DCL之间的关联,因此不能很直观的判断所设计的DCL人机互动对话框是否达到预期目的。为了检验所设计的DCL对话框是否达到预期,需要专门编写一段预览程序来实现,具体程序如下所示:(defunc:viewdc1()(if(nulldcl_pt)(setqdcl_pt'(-1-1));预设对话框出现在界面中央)(setqdcl_file(getfiled"打开DCL文件""""DCL"2))(princ"DCL文件名:")(princdcl_file)(setqdia_name(getstring"\nDialog对话框名称:"))(if(=dia_name"")(exit))(setqdcl_id(load_dialogdcl_file))(new_dialogdia_namedcl_id);加载DCL文件(action_tile"accept""(setqdcl_pt(done_dialog1))");激活新的对话框定义(action_tile"cancel""(done_dialog0)")(setqdd(start_dialog));dd值=done_dialog后的自变量值(cond((=dd1)(princ"\n确定<ok>!!!")) ((=dd0)(princ"\n取消<Cancel>!!!")))(prin1))在AutoCAD中加载上述程序之后,在命令行输入“viewdc1”就会出现DCL文件加载窗口,选择所要文件完成加载之后,命令行提示输入“dialog对话框名称”,输入“bs”即可完成该文件的预览,经检验,如上程序所设计对话框与预期一致。4.5搭建AutoLISP与DCL间沟通的桥梁本系统中,DCL对话框界面的使用使得各类参数的输入更加简洁、方便,查错也变得简便高效,可以毫不夸张的说,DCL对话框界面的广泛应用为AutoLISP的推广立下汗马功劳。但是,DCL对话框界面设计结束后,能够让DCL对话框界面中各个对象动起来的真正“幕后高手”是AutoLISP,没有AutoLISP,光有漂亮的DCL对话框界面是没有任何实际意义的,二者相辅相成,缺一不可。在DCL中,每一个参数都对应唯一的“key”,参数所对应的“key”是AutoLISP识别DCL的唯一标识。AutoLISP最终是通过LSP程序来控制驱动对话框的,对话框驱动程序如下所示:(defunc:bs()(setvar"cmdecho"0)(dcl_bs)(sub2)(sub3)(prin1))(defundcl_bs()(setqdcl_id(load_dialog"bs"));加载DCL文件(new_dialog"bs"dcl_id);启动bs对话框(set_tile"kA""200");设定起始值(set_tile"kB""20")(set_tile"kC""26")(set_tile"kD""36")(set_tile"kE""30")(set_tile"kF""33")(set_tile"kG""260")(set_tile"kH""280")(set_tile"kL""90")(set_tile"kI""20")(set_tile"kJ""18")(set_tile"kK""20")(action_tile"accept""(getdata)(done_dialog1)");调用执行子程序getdata与结束对话框(返回值为1)(action_tile"accept""(done_dialog0)");结束对话框(返回值为0)(setqstd(start_dialog));将控制权交给DCL)(defungetdata();取得对话框的值(setqA(atof(get_tile"kA")));取得对话框中A值(setqB(atof(get_tile"kB")))(setqC(atof(get_tile"kC")))(setqD(atof(get_tile"kD")))(setqE(atof(get_tile"kE")))(setqF(atof(get_tile"kF")))(setqG(atof(get_tile"kG")))(setqH(atof(get_tile"kH")))(setqL(atof(get_tile"kL")))(setqI(atof(get_tile"kI")))(setqJ(atof(get_tile"kJ")))(setqK(atof(get_tile"kK"))))注意:此处的sub2、sub3与3.2.3中的子程序sub2、sub3一样,在此不再做详细说明。在绘图程序、DCL界面设计、AutoLISP控制DCL程序完成之后,就完成了一次完整的二次开发,完成二次开发之后就可以利用程序来完成绘图,具体的操作流程如下图所示:开始开始显示对话框显示对话框加载DCL文件初始化设置 yes yes 初始化设置 nono激活对话框提示无法加载对话框的错误信息提示无法加载对话框的错误信息激活对话框提示无法加载对话框的错误信息提示无法加载对话框的错误信息结束卸载对话框用户交互操作结束卸载对话框用户交互操作图4-6对话框驱动流程图4.6绘制呆头扳手二维图在绘图之前,要先完成图层的设置并将细实线定义为当前图层,图层的设置如下表所示。表4-1图层设置图层名称线型线宽颜色粗实线Continuous0.50mm黑色细实线Continuous0.25mm黑色中心线CENTER20.25mm红色虚线HIDDEN20.25mm蓝色标注线Continuous0.25mm绿色辅助线Continuous0.25mm洋红色在命令行输入“bs”绘制绘图板并在DCL界面输入如下参数以完成一种尺寸绘图并将这组尺寸定义为默认尺寸:表4-2绘图板数据输入命令bs请输入基点在面域选取一点或者输入点坐标请输入左侧手臂长度A80请输入手臂小头宽度B20请输入手臂大头宽度C26请输入左侧头部宽度D36请输入左侧头部深度E30请输入左侧头部总深度F33请输入左侧扳手总长度G140请输入扳手总长280请输入右侧手臂长度90请输入右侧头部宽度20请输入右侧头部深度18请输入右侧头部总深度20程序执行之后即可画出所要的绘图板(如图4-7所示)。图4-7扳手二维生成图4.7绘制呆头扳手三维图要完成呆头扳手三维图的绘制,首先要将AutoCAD切换到三维建模模式。另外,要完成拉伸命令,需要先切换到面域模式,操作方法为:在命令框输入“reg”并按回车键,根据提示选取对象,若返回值为“已提取n个环;已创建n个面域”,则表示面域创建成功。面域创建成功之后点击拉伸命令,根据命令行提示选取对象,然后输入拉伸高度(此处的输入值为10),点击确定完成拉伸。再点击视图,选择“东南等轴侧”,即可完成三维图的绘制。此时,也可以通过渲染命令中的调色命令来调整颜色,最终生成的呆头扳手三维图如下所示:图4-8扳手三维生成图备注:在面域中进行拉伸的实体模型必须是一个封闭的区域。4.8修改部分主参数的扳手由于呆头扳手是成套使用的,而且上述已经完成了对呆头扳手的二次开发,因此,我们可以修改其主参数中的部分参数,来生成我们需要的其他型号的扳手。现对扳手的总长、开口宽度、手臂长度作如下修改,其他尺寸使用默认值:表4-3参数修改表总长度左侧开口宽度左侧扳手长度30045160在命令行输入bs调用以上程序,完成修改之后的参数输入,生成的二维图如下所示:图4-9修改参数后的二维生成图完成二维图的绘制之后,根据4.7中的拉伸步骤,先创建面域,再拉伸,最后在视图模式中选择“东南等轴侧”就可以完成三维图的绘制,三维图如下所示:图4-10修改参数后的三维生成图由上述过程可以发现,二次开发的过程虽然比较复杂,也比较占用时间,但是,由于二次开发完成之后可以重复调用。通过调用程序来完成绘图,大家清楚的看到,绘图时间缩短了,依次类推,当需要完成大量绘图时,二次开发的使用,不仅仅能够降低绘图的劳动强度简化绘图过程,而且能够节约绘图时间。4.9直接绘图与二次开发的比较在上述章节,介绍了利用二次开发丰富AutoCAD的绘图功能,利用VisualLISP实现参数化设计,从而简化图形绘制过程,提高绘图效率。但是,由于复杂图形的二次开发过程比较复杂,需要消耗的时间也比较多,有些人不禁就会想,既然二次开发的过程如此复杂,甚至与比直接绘图还要复杂,那我直接绘图岂不是更加方便?而这也正是二次开发的推广受到影响的一个重要原因。那么,花费时间进行二次开发真的不值得吗?答案显然是否定的。其实,二次开发是为大量绘图服务的。例如:我们每次绘制机械图纸时都要先绘制一个图框,虽然这个图框很简单,用矩形命令就可以解决,但是图纸的大小是有要求的,不同型号的图纸长、宽都是有明确规定的,此时,如果我们利用VisualLISP增加AutoCAD绘图功能,调用程序之后,输入图纸规格就可以直接生成图纸,岂不是很方便。再比如,机械图纸中经常用到的联接联接零件——轴,由于不同情况下使用的轴的阶梯数是不同的,如果每次都从头绘制,工作量很大。但是,如果利用3.3中的VisualLISP程序进行简单的参数化设计,通过调用程序,我们就可以很方便的完成我们所需要轴的绘制。二次开发的好处远不止于此,越是复杂、常用的图形,二次开发的优势越明显,所以,我们看待二次开发要用发展的眼光看,这样我们才能够发现其能够带来巨大便利。4.10Access关系数据库Office系列办公软件中有一款属于桌面关系数据库管理系统的产品——Access关系数据库,它是一种小型数据库管理系统,可以提供应用程序和数据管理工具包的开发环境使人们可以很方便的建立各种信息集合,如:电话薄、水电分配情况等,从而达到方便、有效管理的目的。由于其具有友好的操作界面、面向对象的操作理念、可靠的数据管理方式以及强大的网络支持功能,很受小型数据库应用系统开发者的欢迎,是当今世界应用最广泛的数据库软件之一。4.10.1表的创建Access关系数据库中最基本的数据对象是表,而且表是Access数据库中最基本的结构。一般地,表的创建有三种方式分别为:方法一:先点击菜单栏中的创建按钮,再点击表即可完成创建;备注:这种表的创建方式比较简便,但是,这种创建方式不能对每一个字段的属性值和数据类型进行设置,数据类型和属性需要在设计视图中加以修改。因此,这种创建方式并不常用。方法二:使用表设计进行创建;先点击菜单栏中的创建,然后点击表设计即可出现如下对话框(如图4-11所示)在上述对话框中完成必要的设置,即可完成表的创建。图4-11表设计方法三:通过系统自带的“表向导”创建表结构。4.10.2完成表结构中的数据对象输入按照上述方法二(使用表设计创建表)完成表的创建,数据设置如下所示:图4-12表数据设置注意:在常规选项对数据对象的属性进行设置。完成以上步骤即可开始在表中输入如下数据对象:表4-4文件管理数据文件名编号文件类型程序包图纸日期直角三角形1lsp见附录见附录2015-4-25环形2lsp见附录见附录2015-4-25雪花3lsp见附录见附录2015-4-26绘图板4lsp见附录见附录2015-5-1螺栓毛坯5lsp见附录见附录2015-5-4DCL预览程序6lsp见附录见附录2015-5-5绘图板输入界面7dcl见附录见附录2015-5-7注意:由于程序包、图纸过大,且在此只是利用这些文件填充Access关系数据库,所以在此不一一赘述。数据输入完毕之后,Access关系数据库如下所示:图4-13数据库输入界面以上即完成了表的设计。4.10.3查询的创建1)点击菜单栏中的创建按钮;2)点击查询设计按钮,就会出现如下所示的对话框;图4-14查询中的添加表3)点击添加按钮,完成表的添加;4)将表中各字段添加到字段表,并设置显示条件(环形)如下所示;图4-15字段添加5)转换视图模式即可查询到所要求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省泰州市姜堰区2023-2024学年四年级上学期期中英语试卷
- 消费者心理学与营销实战考核试卷
- 新能源企业文化与价值观建设考核试卷
- DB11∕T 3008.9-2018 人力资源服务规范 第9部分:人力资源管理咨询服务
- 宝鸡教研课件教学课件
- 淮阴工学院《计算机网络4》2023-2024学年期末试卷
- 淮阴工学院《机电系统建模与仿真1》2022-2023学年期末试卷
- 淮阴工学院《公共危机管理》2022-2023学年第一学期期末试卷
- 细菌类生物制品相关行业投资方案
- 光伏支架相关行业投资规划报告范本
- 2023年江苏省淮安市中考英语真题(解析版)
- 上下楼装修纠纷协议书范本
- 施工成本控制员岗位职责
- 2021-2022学年北京市房山区九年级(上)期中数学试卷【含解析】
- DB11∕1450-2017 管道燃气用户安全巡检技术规程
- 室上性心动过速-医学课件
- 《第4课 数据的安全》参考教案1
- 药品经营质量管理综合规范试题及答案
- 体育公园项目成本测算
- 人教版数学二年级上册第8单元《数学广角 搭配(一)》教学设计
- Java Web程序设计智慧树知到期末考试答案章节答案2024年青岛职业技术学院
评论
0/150
提交评论