330 likes | 665 Views
计算机图形学与 CAD 技术. 华中科技大学 国家 CAD 支撑软件工程技术研究中心 王彦伟 Ywwang_cad@mail.hust.edu.cn. 目标. 1) 了解 CAD 系统开发的问题及其特点; 2) 了解 CAD 系统二次开发的步骤和开发模式; 3) 了解 CAD 二次开发的体系结构和对 CAD 系统自身的要求; 4) 了解 AutoCAD 二次开发的方式; 5) 掌握 AutoCAD 二次开发中 VBA 方式的基本步骤,能够用 VBA 进行简单形体的绘制; 6) 了解复杂二次 CAD 开发的大致过程和应注意的方面;
E N D
计算机图形学与CAD技术 华中科技大学 国家CAD支撑软件工程技术研究中心 王彦伟 Ywwang_cad@mail.hust.edu.cn
目标 1) 了解CAD系统开发的问题及其特点; 2) 了解CAD系统二次开发的步骤和开发模式; 3) 了解CAD二次开发的体系结构和对CAD系统自身的要求; 4) 了解AutoCAD二次开发的方式; 5) 掌握AutoCAD二次开发中VBA方式的基本步骤,能够用VBA进行简单形体的绘制; 6) 了解复杂二次CAD开发的大致过程和应注意的方面; 7) 了解常用三维CAD系统二次开发的方式及其支撑模块名称和作用; 8) 了解Pro/Toolkit二次开发的基本设置过程; 9) 掌握ProE二次开发中菜单接口和参数化接口的实现。
内容 7.1、机械CAD系统的要求 7.1.1 机械CAD系统的特点 7.1.2 机械CAD系统的开发模式 7.1.3 机械CAD系统的开发步骤 7.2、机械CAD系统二次开发技术基础 7.2.1 对二次开发系统的要求 7.2.2 机械CAD系统的体系结构 7.2.3 二次开发模式及开发接口 7.3、基于二维CAD系统的二次开发 7.3.1 AutoCAD二次开发工具 7.3.2 基于Auto Lisp的二次开发 7.3.3 基于VBA的二次开发 7.4、基于三维CAD系统的二次开发 7.4.1 Pro/Toolkit和Pro/develop 7.4.2 Pro/E二次开发步骤 7.4.3 Pro/E开发关键技术
7.1 机械CAD系统的要求 7.1.1 机械CAD系统的特点 1、机械产品设计的特点 机械零件设计计算要涉及到零件材料及热处理方法的选择,设计参数确定。几何尺寸计算、结构设计、强度、刚度计算,使用寿命要求,标准件选择等多方面的问题,具有设计要求多、计算公式多、设计参数多、图表多等特点。因此机械零件设计计算程序要有合理的数学模型,具有对数表、线图的存储和自动检索能力,对标准参数的选取、圆整能力,还要具有对设计参数修改的应变能力。
7.1 机械CAD系统的要求 7.1.1 机械CAD系统的特点 (1)设计资料的处理 机械产品的设计计算中需要用到很多参数、系数,它们当中绝大多数需要从数表、线图中查取,有的参数(如齿轮传动的模数)需按国家标准圆整为标准值,有的参数需要圆整为整数,因此,机械CAD系统开发需要解决设计资料的处理问题,具体方法详见第六章。 (2)设计参数分析、判断和调整 机械产品设计应满足的条件较多,如齿轮传动设计应满足齿面接触强度要求、齿根弯曲强度要求、胶合和塑性变形条件、螺旋角合理范围要求等,因此机械CAD系统的开发应解决设计参数分析、判断及调整修改问题。 (3)计算与数据管理、造型之间的关系 完整的机械产品设计包括:设计计算、数据管理、零件造型及装配、工程图生成等几部分,相关内容都是相对独立的内容,机械CAD系统需要解决相关功能模块之间的联络连接问题。 (4)良好的用户界面 机械CAD系统用户界面的设计是一项关系全局且体现软件设计水平的工作。用户界面是人与计算机进行交互的接口,人-机交互由最早的批处理作业方式、问答方式逐步发展成为菜单交互方式,又发展成为今天的图形交互接口。机械CAD系统的用户界面应保证进行机械产品设计时,整个设计过程思路清晰、界面简洁,操作方便。
7.1 机械CAD系统的要求 7.1.2 机械CAD系统的开发模式 目前的三条思路: 1)从底层平台开始开发 2)购买几何引擎,进行通用平台和专业应用开发 3)基于成熟商用系统进行专业化二次开发
Solid Edge 7.1 机械CAD系统的要求 7.1.2 机械CAD系统的开发模式 Inventor Pro/E UG NX CATIA 美、法等国的CAD技术一直走在世界的前沿,它们拥有许多世界闻名的CAD/CAM系统,这些系统具备十分强大的功能。 国内:清华大学、北航、新舟、浙大、华工
7.1 机械CAD系统的要求 7.1.3 机械CAD系统的开发步骤 (1)明确设计任务、要求、适用范围和功能; (2)确定设计计算准则、计算方法,建立数学模型; (3)列出设计计算步骤、计算公式、设计参数符号及变量对照表; (4)根据设计计算内容、方法、步骤制定程序流程图; (5)确定有关数表、线图处理方法,完成图、表数据存储和自动检索等模块的开发,以及有关数据文件或数据库的建立工作; (6)开发各功能模块,将设计计算与数据库文件、结构参数化造型、二维工程图绘制连接起来,形成机械零件CAD模块。
7.2 机械CAD系统二次开发技术基础 7.2.1 对二次开发系统的要求 进行机械CAD系统二次开发工作,应着重关注以下几点要求: (1)平台的易用性。二次开发的最终目标是使通用的CAD系统能够更好地为专业的用户服务,因此要特别重视二次开发系统的易用性。 (2)技术的先进性。二次开发技术应尽量保持与软件技术的同步,尽量以最新版的软件为技术平台进行开发。 (3)执行的高效性。确保二次开发所获得的系统具有较高的执行效率,可以在相应的CAD系统中快速创建出实体模型或工程图。 (4)平台的稳定性。保证所开发软件系统能够稳定运行,也是任何软件系统的最基本的保证。
7.2 机械CAD系统二次开发技术基础 7.2.1 对二次开发系统的要求 二次开发的内容 机械CAD系统二次开发工作主要包括以下内容: (1)交互式系统的完善。 (2)交互式系统、数据库管理系统、数值计算分析系统间的连接和相互调用,主要是各个系统与高级语言的接口设计。 (3)参数化设计模块的设计,主要包括相关零部件的参数化造型、参数化设计计算和校核计算等几个子程序。 (4)界面设计,主要包括图标菜单的设计、对话框的设计等。 (5)国家标准数据库的建立。 (6)工程符号和汉字的处理。
7.2 机械CAD系统二次开发技术基础 7.2.2 机械CAD系统的体系结构
7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 两种模式 一种是借助于CAD软件自身提供的二次开发工具进行开发。 另一种是利用COM或Automation技术,用一种编程软件调用三维CAD软件的对象及属性进行开发,这种开发模式是目前最流行的一种开发模式,例如SolidWorks、CATIA和UG等均提供API函数,可利用VB、VC、Delphi等面向对象的语言调用这些函数实现二次开发。 另外,基于CAD系统二次开发模式又分为外模式和内模式两种。外模式是指二次开发的程序具有独立运行的进程和界面,如Win32执行程序,通过宿主程序API或组件实现对CAD系统的功能调用;内模式是指二次开发程序只能在宿主程序界面框架下运行,通常是一种动态链接库,供宿主程序调用。
7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 要进行二次开发,前提是宿主程序(即平台CAD软件系统)要提供二次开发接口。 C/C++语言二次开发的步骤: (1)编辑C/C++源程序,使用该平台提供的二次开发接口API函数或类。 (2)编译、链接,生成可在该通用平台下运行的可执行程序.EXE或.DLL。编译时使用API函数支持“#include”相关的头文件。链接时支持在C/C++工程中导入该API函数的库索引文件“LIB”。 (3)在通用平台下载入可执行程序,执行得到相关的结果。运行时支持提供该API函数所在的库执行文件“DLL”,需要在生成的可执行程序目录下,或在该通用平台指定的搜索路径下。
CATIA二次开发简介 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 宏命令方式:直接将过去的命令过程录制成Macro, 修改其中的参数,即可重新生成。但是,宏在执行过程中无法交互修改,智能化程度低,适合简单的重复性操作过程。优势是平台兼容性好。 两种模式: • In-Process Application(进程内) • Out-Process Application(进程外) 两类方法: • CAA • Automation
7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 • CAA C++是CATIA的一整套C++函数库,该函数库在CATIA运行时加载。用户通过安装RADE (Rapid Application Development Environment)模块,用户可以在VC++编程环境下编制程序,与CATIA进行通信。 • CAA C++可以进行最有效率的应用程序开发,但入门困难。 • 利用CAA可以进行从简单到复杂的二次开发工作,而且和原系统的结合非常紧密,如果没有特别的说明,无法把客户所研发的功能从原系统中区分出来,这非常有利于用户的使用和集成。
7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 几个概念: • COM:(对象组件模型):COM是微软公司提出的目的在不同程序中共享对象标准。 • Automation: Automation是一种微软公司的技术,目的是在开发环境里使用COM对象。 • ActiveX组件是一种微软标准,目的是在开发环境里共享不同程序的对象。 • OLE:(对象链接及嵌入)意味着一个文件可以被另外的一个程序的文件链接。这种链接及嵌入的对象可以被其他的程序在编辑区编辑。
Visual Basic, VBA, VBScript之间的区别 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 • Visual Basic(Visual Basic专业版):VB是个完全的版本。 • 可以编制独立的程序。 • 也可以创建ActiveX和程序服务器。 • 可以被编译。 • VB提供了自己的文档——《在线帮助》 • VBA(Visual Basic for Application):VBA是VB的一个子集。 • VBA是程序中的主机,就象Word,Excel。 • 它提供了一个带有编辑器、除错器、帮助、对象浏览器、完成器的完整的开发环境。 • 利用它的Tools-Reference菜单可以声明使用的对象库。这在完成和对象浏览器之间建立了一个通道。 • VBScript(Visual Basic Script):VBScript是VB的一个子集。 • 更简单的VB解释语言。 • 可以调运CATIA对象。 • 没有数据类型的区别。系统总是动态的调用函数和对象属性。(迟绑定调用对象通过他们的Idispatch接口)
VB应用与CATIA通讯 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 Dim Doc as Document Set Doc = CATIA.Documents.Add(“Part”) Dim Doc as Document Set Doc=CATIA.Documents.Open(“E:\Parts\DocumentToOpen.CATPart”)
7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 取得或创建一个零件体: 当创建一个零件文件时,系统会自动创建一个默认的零件体。 可以获得并使用它: Set MyBody = MyDocument.Part.Bodies.Item("PartBody") 也可以创建一个新的零件体并使用: Set MyNewBody = MyDocument.Part.Bodies.Add()
实例:凸轮轴 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口
7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 ‘创建凸轮组 Sub CreateCamSet(dAngle As Double, dRefDis As Double) CreateBearing dCamSetDis, dRefDis CreateCam dAngle, dCamSetDis - 3 * dCamThickness + dRefDis CreateCam dAngle, dCamSetDis - dCamThickness + dRefDis End Sub ‘ 创建驱动轮 Sub CreateDriveWheel(dRefDis As Double) CreateBearing dCamSetDis, dRefDis … End Sub
7.3 基于二维CAD系统的二次开发技术 7.3.1 AutoCAD二次开发模式 1、Auto Lisp技术 Lisp语言是一种表处理语言,是广泛应用于人工智能的语言。Auto Lisp语言完全嵌套在AutoCAD内部,同AutoCAD有机结合成一体,它继承了Lisp语言的语法、传统约定和基本函数与数据类型,并扩充了强大的图形处理功能,语法简洁、表达能力强、函数种类多、程序控制结构灵活,既能完成常用的科学计算和数据分析,又能直接调用绝大多数AutoCAD的命令,具备一般高级语言所没有的图形处理能力,进行AutoCAD的二次开发。 2、ARX(C++)技术 ObjectARX编程环境为编程人员提供了以对象为导向的C++、C#和VB.NET应用编程接口,支持其使用、定制和扩展AutoCAD软件和基于AutoCAD的产品。ObjectARX类库提供了丰富的工具,能够帮助用户充分利用AutoCAD软件的开放式体系结构,支持直接访问AutoCAD数据库结构、图形系统和本地命令定义。 3、VBA技术 AutoCAD中的ActiveX Automation对象模型和VBA集成后构成建立了一个定制AutoCAD软件程序的框架。有了使用VBA开发的ActiveX控件和其他应用(如Microsoft Office),在开发面向AutoCAD软件的定制解决方案时就不存在对象限制问题。
7.3 基于二维CAD系统的二次开发技术 7.3.2 基于AutoLisp的二次开发 1 Lisp特点 Auto Lisp成为许多用户首选的AutoCAD二次开发工具,与它易学易用、善于贴切地描述设计者思路的特点分不开。许多用户在开始接触Auto Lisp语言时就可以编写出实现特定功能的程序,但开发完善的机械CAD系统也不是一件容易的事情,其开发涉及较多的具体内容,限于篇幅,这里只能简要介绍基于Auto Lisp的AutoCAD的二次开发相关技术与方法,有兴趣的读者可以进一步参阅相关文献。 2、AutoCAD对话框的定制 AutoCAD对话框新颖直观,在很大程度上简化了程序与用户的交互操作,提高软件的使用效率。AutoCAD对话框功能由定义各对话框控制语言DCL(Dialog Control Language)与对话框驱动程序实现,可以通过AutoLisp语言来管理对话框。
7.3 基于二维CAD系统的二次开发技术 7.3.3 基于VBA的二次开发 在AutoCAD中实现VBA有四大优点: (1) Visual Basic编程环境易于学习和使用。 (2) VBA可与AutoCAD在同一进程空间中运行,这使程序执行得非常快。 (3) 对话框的构造快速而有效。这使开发人员可以构造原型应用程序并迅速收到设计的反馈。 (4) 工程可以是独立的,也可以嵌入到图形中。这样就为开发人员提供了非常灵活的方式来发布他们的应用程序。 AutoCAD VBA工程是由许多程序模块、类模块和窗体组成的集合,他们同时运行即可完成指定的功能。VBA工程可以保存于AutoCAD图形文件内部,称为内嵌VBA工程;亦可保存为独立的工程,称为全局VBA工程,以*.dvb文件格式保存。 对于内嵌VBA工程,当打开包含该工程的AutoCAD图形文件时,它将被自动加载。因此,在运行内嵌VBA工程程序之前,其用户不须在文件夹中去寻找工程文件并加载该工程,使得工程管理更加方便。 全局VBA工程的功能较多。全局工程可在任何AutoCAD图形中运行,亦可在工程中打开或关闭AutoCAD图形。全局工程容易与其他用户共享,且可制作成共享的宏 资源库,因此应用VBA开发通用应用程序时,应将其保存为全局工程
7.3 基于二维CAD系统的二次开发技术 7.3.3 基于VBA的二次开发 VBA绘制直线实例 ThisDrawing.Application.Documents.Add ’ 打开新图形 Dim StartPoint(0 To 2) As Double ’ 定义起点坐标 Dim EndPoint(0 To 2) As Double ’ 定义终点坐标 StartPoint(0) = txtXS ’ 提取起点x坐标 StartPoint(1) = txtYS ’ 提取起点y坐标 StartPoint(2) = txtZS ’ 提取起点z坐标 EndPoint(0) = txtXE ’ 提取终点x坐标 EndPoint(1) = txtYE ’ 提取终点y坐标 EndPoint(2) = txtZE ’ 提取终点z坐标 Dim LineObj As AcadLine ’ 定义Line对象 ’ 设置Line对象 Set LineObj = ThisDrawing.ModelSpace.AddLine (StartPoint, EndPoint) ThisDrawing.SaveAs("D:\Line_Ex.dwg") ’ 保存图形
7.3 基于二维CAD系统的二次开发技术 7.3.3 基于VBA的二次开发 V带设计实例 将相关的资料处理、计算和基于VBA的AutoCAD工程图绘制等程序代码与V带传动CAD软件人机界面关联起来,即可生成V带传动CAD系统。
7.4 基于三维CAD系统的二次开发 7.4.1 Pro/Toolkit和Pro/Develop Pro/Toolkit和Pro/Develop是PTC公司的Pro/Engineer软件的开发工具包,用C库函数的头文件的方式提供。 Pro/E17版本以前,以Pro/Develop提供;V18以后,两者混用,逐步抛弃Pro/Develop。Pro/develop函数或对象以“pro”开头;Pro/Toolkit函数或对象以“Pro”开头,函数的返回值大都以ProErrors枚举类型数据中,正确返回PRO_TK_NO_ERROR,即0。 Pro/TOOLkit的安装与Pro/E一起,选择API Toolkits的Pro/TOOLkit即可。安装的Pro/Toolkit的目录结构(pro/develop类似):
7.4 基于三维CAD系统的二次开发 7.4.2 Pro/E二次开发步骤 1、VC下环境的设置 可以用Make文件创建Pro/TK应用,也可以在网上下载protoolkit.awx的Pro/Toolkit工程向导。 可以直接利用MFC Appwizard(dll)建立Pro/Toolkit应用。以Pro/E2001为例,其工程设置如下: (1)包含头文件; (2)库文件搜索; (3)连接库文件:protk_dll.lib prodev_dll.lib prodevelop.lib protoolkit.lib 2、应用的加载方式 (1)手工加载DAT:在Pro/E菜单命令“辅助应用程序”中加载指定的DAT文件,如3DLib.DAT,其格式为: NAME StdPartLib ALLOW_STOP True EXEC_FILE C:\HUSTCAD\Inte3DLIB for ProE\Proe3dLibFace.dll TEXT_DIR C:\HUSTCAD\Inte3DLIB for ProE startup dll REVISION 23 END
7.4 基于三维CAD系统的二次开发 7.4.3 Pro/E开发关键技术 • Pro/E原有菜单增加菜单及其命令 • 1 ProMenubarMenuAdd ("StdParts","StdParts Design","Utilities",PRO_B_TRUE,MSGFIL); • /在Utilities菜单前增加一个下拉菜单条StdParts,其显示标题为StdParts Design在菜单文件(存放在应用程序的\text\usascii目录下)对应的文本,如下面的“典型零部件设计” • 2= ProMenubarmenuMenuAdd (“StdParts”,“Gear”,“Gear Design Menu”,NULL,PRO_B_TRUE,MSGFIL); • 在菜单条StdParts下增加一个菜单项Gear(为第一个),其显示标题为Gear Design Menu在菜单文件中对应的下行文本,如这里是“齿轮类零件” • ProCmdActionAdd(“CyGear Command”,(uiCmdCmdActFn)CGearDesign,uiProe2ndImmediate,TestAccessDefault,PRO_B_TRUE,PRO_B_TRUE,&gear_cmdid); • 定义一个命令映射,CyGear Command的执行代码为CGearDesign函数。 • ProMenubarmenuPushbuttonAdd(“Gear”,“Gear1”,“CyGear Design”,“Installation test3”,NULL,PRO_B_TRUE,gear_cmdid,MSGFIL); • 在Gear菜单下添加一个子菜单项Gear1,其显示标题为CyGear Design对应的文本(“圆柱齿轮设计”),其命令为gear_cmdid,即对应CGearDesign函数
7.4 基于三维CAD系统的二次开发 7.4.3 Pro/E开发关键技术 参数化设计 int ParamDesign(ProMdl model,CString sVarName,double dValue) { status = ProArrayAlloc (0,sizeof (ProFeature),1,(ProArray *)&fList);//内存分配 eStatus = UserFeatureCollect (model,&fList); //获得模型model的全部特征. //查找参数 //获取属性名和属性值,属性数目 ProParameter *pParams; ProModelitem modelItem; ProMdlToModelitem(model,&modelItem); //将ProMdl类型提取ProModelitem ProUtilCollectParameters(&modelItem,&pParams); //得到模型的全部参数集 int paramNum=0; ProArraySizeGet((ProArray)(pParams),¶mNum); //得到参数集中参数数目 char paramName[100]; ProParamvalue mValue; }
7.4 基于三维CAD系统的二次开发 7.4.3 Pro/E开发关键技术 参数化设计 for(i=0; i<paramNum; i++){ ProParameterValueGet(&pParams[i],&mValue);//得到第i个参数值 if(mValue.type == PRO_PARAM_DOUBLE || mValue.type == RO_PARAM_INTEGER) { ProWstringToString(paramName,pParams[i].id); //参数名字 CString dim_text=CString(paramName); //参数名字字符串转换 if(sVarName == dim_text) { //找到要修改的参数 ProParamvalueSet(&mValue,(void*)&dValue,PRO_PARAM_DOUBLE); ProParameterValueSet(&pParams[i],&mValue); //重新将参数值赋给参数. } } //end of if } //end of for
思考与练习 1. 机械CAD系统开发需解决的问题有哪些? 2. CAD系统开发模式有哪些? 3. 阐述CAD系统开发的大概步骤。 4. 机械CAD软件进行二次开发都包含哪些内容? 5. 基于通用CAD平台的二次开发主要有哪些方式,其区别是什么? 6. AutoCAD二次开发有几种方式?各自特点是什么? 7. 基于VBA对AutoCAD进行二次开发有哪些优点? 8. 基于VBA在AutoCAD中画从(0,0,0)到(0,0,1)的直线。 9. 简介ProE二次开发中添加菜单的简要过程及所涉及的函数。 10. Pro/Toolkit中通过参数驱动特征的主要函数有哪些?其功能是什么?