第1讲CAD二次开发概述一、为什么要开发CAD专用软件随着计算机在工程领域的广泛应用,CAD软件的需求量与日俱增,尤其是适合于生产实际的CAD专用软件。市场上有许多商品化的CAD软件,在这些软件中,除少数是由专业单位针对本行业的使用条件开发的应用软件外,绝大多数软件都是由软件公司开发的通用性CAD支撑软件,如AutoCAD、UG等。在应用这些软件的过程中,我们仍然会感到不方便,譬如:特定曲线、常用机械零件的绘制,设计数据的查询,设计公式的应用等。因此,设计人员应根据本单位的实际情况,在已有CAD软件的基础上进行二次开发,以扩充其实用的功能。上一页下一页结束首先根据本单位的产品开发与设计要求,列出总体设计,零部件设计,结构分析,参数化绘图,设计资料数据库与标准件图形库等内容。然后依照所选通用CAD软件能否满足要求的情况,确定软件二次开发的内容。这些内容也可以抽象地归纳为:数据查询与输入,设计计算、图形处理三部分。包含上述要求的CAD专用软件,通常都具有以下特点:1)集数据查询、计算、绘图于一身2)用户界面友好,具有较好的人机交互功能3)简便、实用。。上一页下一页结束(1)根据设计任务和功能要求编写各种用户自定义函数、设计人机交互界面、建立所需的幻灯片、图块和数据文件,并形成若干LISP、DCL、SLD、DWG、DAT或FAS文件。(2)建立符合自己要求的管理菜单文件MNU,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD200x版本还可增加部分菜单文件,然后经交互方式加入到系统中。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作等。上一页下一页结束(1)正确性:满足功能要求,结果正确;(2)可靠性:运行正常,容错性好;(3)完整性:程序和文档资料齐全;(4)实用性:界面友好,操作简便,实用;(5)可维护性:便于修改、扩充。。上一页下一页结束当前AutoCAD的二次开发工具主要有:VisualLisp、VBA、ObjectARX和.NETAPI等。其中,VisualLisp与VBA较为简单,特别是VisualLisp,使用方便且开发速度较快,但其功能相比ObjectARX有所不足,尤其是对面向对象的功能支持不好。而ObjectARX基于VC平台,在C++的支持下,其功能非常强大,可以很好地运用各种面向对象技术,但其缺点是开发速度比较慢,同时对开发人员的能力要求较高。下面对此作简单介绍:上一页下一页结束AutoLISP的全名是LISTProcessingLanguage,它出现于1985年推出的AutoCADR2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。上一页下一页结束ADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的源文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。上一页下一页结束ObjectARX是一种崭新的开发AutoCAD应用程序的工具,它以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最初版本是ObjectARXforAutoCAD2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。上一页下一页结束VisualLISP已经被完整地集成到AutoCAD2000以上版本中,它为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。过去AutoLISP最大的不足是不能编译,现在已经被VLISP圆满解决了,用VisualLISP将其编译成VLX程序包或者FAS程序,这样处理之后的AutoLISP程序,将具有与ARX程序相同的高保密性,也将具有比解释运行明显提高的运行效率。而且,AutoLISP程序设计的复杂程度和运行风险大大低与ARX,绝少在程序崩溃后连带AutoCAD崩溃。上一页下一页结束VBA即Mcrosoftoffice中的VisualBasicforApplications,它被集成到AutoCAD中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD中丰富的技术框架打开一条新的通道。VBA和AutoCAD2000以上版本中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。上一页下一页结束AutoCAD的强大生命力在于它的通用性、多种工业标准和开放的体系结构。其通用性使得它在机械、电子、航空、船舶、建筑、服装等领域得到了极为广泛的应用。但是,不同的行业标准使得各领域在使用AutoCAD的过程中均需根据自身特点进行定制或开发。AutoCAD的各种开发工具可满足广大用户的需求。目前,AutoLISP已被VisualLISP完全替代,ADS在AutoCAD2000以上版本中已不再支持,基于对象的ARX、VBA对开发者的能力有较高的要求,且程序运行容易受版本或错误影响而崩溃。所以,VisualLISP将成为今后AutoCAD二次开发的基本选择。而具体选择哪一种作为开发工具,主要还应根据用户应用程序的需要和开发人员的能力和编程经验决定。在机械设计过程中,常常需要引用有关的数据资料,如经验数表、实验曲线、各种标准和规范等。在传统的设计中,这些数据资料通常是以设计手册或工具书的形式提供的。而在计算机辅助设计时,就必须将这些数据资料作相应的处理,以便程序运行时计算机能按照设计要求自动检索和调用,这就是所谓的数据资料程序化的问题。上一页下一页结束四.工程数据的计算机处理数据就是对客观世界、实体对象的性质和关系的描述。例如一个机械产品,它可能包括性能数据、几何尺寸数据、工艺过程数据等,这些数据联系在一起就组成了对一个机械产品信息的描述。机械设计中的数据形式是多种多样的,既有公式表达的数据,又有线图或数据表等形式表达的数据,公式表达的数据信息可直接编入程序中,而线图和数表则需经过处理才能使之程序化,供计算机识别。上一页下一页结束对数表和线图数据的处理方法有如下几种:1)公式化利用设计资料的原始公式,或将线图和数表通过一定方法处理拟合成计算公式,直接编在程序中。这种方法编程简单,占用内存小,缺点是线图或数表有所改变时则需重新进行数据处理、重新编程。例如:已知运动构件的力F和速度V,其传递的功率可用公式表达为P=FV/1000.编程代码可写为:(setqP(/(*FV)1000.0))对于线图和数表,如果也能用公式表达,显然很简单。上一页下一页结束2)将线图或数表建成一维或二维数组,直接编入程序中,运行时自动检索;编程难度大3)将数表和线图做成图片或幻灯片,需要时打开直接查取。简单、直观,但速度慢4)文件化,将数表和线图数据编制成一个个独立的数据文件,供程序运行时自动调用;这种数据形式独立、可靠、易于修改。5)将数表和线图数据建成数据库,以便于检索和管理。适合于大型数据系统的管理上一页下一页结束数表有一维数表、二维数表。在机械设计中的数表多属于二维数表,如带传动工作情况系数表:上一页下一页结束§4-1数表的程序化处理这类数据可采用数组,如K(I,J)。最为简单的是找出其规律,用一个公式来描述。如:KA=1+0.1(K1+K2),其中原动机工况K1取值为0、1、2,工作机工况K2取值为0、1、2、3。例1、带传动工作情况系数KA的确定:上一页下一页结束(defunKAtest()(initget5012)(setqK1(getkword“\n原动机工况:0--10h,1--10~16h,2--10h0,1,2:))(initget50123)(setqK2(getkword“\n工作机工况:0--载荷变动微小,1--变动小,2--变动较大,3--变动很大))(setqk1(readk1)k2(readk2))(setqKA(+1(*0.1(+k1k2))))(princ\nKA=)(princKA)(princ));end上一页下一页结束将前式(setqKA(+1(*0.1(+k1k2))))变为:(setqKA(cond((=k10)(nthk2'(11.11.21.3)))((=k11)(nthk2'(1.11.21.31.4)))((=k12)(nthk2'(1.21.31.41.5)))))其效果是一样的,不同的是没有采用公式,而是直接用的数组,且用条件函数通过K1、K2来检索数据。上一页下一页结束若利用BASIC语言编程检索,则程序如下:DIMK(4,3)FORI=1TO4FORJ=1TO3READK(I,J)NEXTJ,IDATA1,1.1,1.2,1.1,1.2,1.3,1.2,1.3,1.4,1.3,1.4,1.5INPUTI,JPRINT“KA=“;K(I,J)END这里采用了二维数组,如K(2,3)=1.3上一页下一页结束例2:V带的基准长度系列及长度系数KL的确定上一页下一页结束编程检索如下:先建立基准长度和长度系数的数组关系。上一页下一页结束检索时根据初算的基准长度Ld1在数表Ldb中确定出最接近的Ld,再定出相应的长度系数KL。上一页下一页结束在机械设计手册中,经常要用到表示各参数间关系的线图。编制程序时必须将线图程序化。程序化的方法有两种:其一是将线图公式化,其二是将线图数组化。例如:V带传动中,带型号的选择就是通过线图来实现的。上一页下一页结束§4-2线图的程序化上一页下一页结束根据计算功率Pca及小带轮转速n1由下图选定带型根据计算功率Pca和主动轮转速n1,选择V带型号的线图有如下关系:一、直线图的公式化上一页下一页结束cKABAKABAKAKAKABABncPPPPnnnnnnPPnnPP10lglg)lg)(lglg(lglglglglglglglglglglg所以有:故:(defundxh(pn)(setqpaa'(11111.738.12250)naa'(780480200100100100100100100)pbb'(3.85810142040100170)nbb'(31502500200012501100950640600500))(setqdd1'(506371809010080859095100112118125132140125132140160170180200200212224236250265280315”355375400500))于是,根据已知的P和n,可以编写选择V带型号的程序如下:上一页下一页结束续前(setqi-1nk5000);循环搜索区域(while(=nnk)(setqi(1+i))(setqpa(nthipaa)na(nthinaa)pb(nthipbb)nb(nthinbb))(setqnba(-(lognb)(logna))pka(-(logp)(l