1 / 33

计算机图形学与 CAD 技术

计算机图形学与 CAD 技术. 华中科技大学 国家 CAD 支撑软件工程技术研究中心 王彦伟 Ywwang_cad@mail.hust.edu.cn. 目标. 1) 了解 CAD 系统开发的问题及其特点; 2) 了解 CAD 系统二次开发的步骤和开发模式; 3) 了解 CAD 二次开发的体系结构和对 CAD 系统自身的要求; 4) 了解 AutoCAD 二次开发的方式; 5) 掌握 AutoCAD 二次开发中 VBA 方式的基本步骤,能够用 VBA 进行简单形体的绘制; 6) 了解复杂二次 CAD 开发的大致过程和应注意的方面;

kaia
Download Presentation

计算机图形学与 CAD 技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机图形学与CAD技术 华中科技大学 国家CAD支撑软件工程技术研究中心 王彦伟 Ywwang_cad@mail.hust.edu.cn

  2. 目标 1) 了解CAD系统开发的问题及其特点; 2) 了解CAD系统二次开发的步骤和开发模式; 3) 了解CAD二次开发的体系结构和对CAD系统自身的要求; 4) 了解AutoCAD二次开发的方式; 5) 掌握AutoCAD二次开发中VBA方式的基本步骤,能够用VBA进行简单形体的绘制; 6) 了解复杂二次CAD开发的大致过程和应注意的方面; 7) 了解常用三维CAD系统二次开发的方式及其支撑模块名称和作用; 8) 了解Pro/Toolkit二次开发的基本设置过程; 9) 掌握ProE二次开发中菜单接口和参数化接口的实现。

  3. 内容 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开发关键技术

  4. 7.1 机械CAD系统的要求 7.1.1 机械CAD系统的特点 1、机械产品设计的特点 机械零件设计计算要涉及到零件材料及热处理方法的选择,设计参数确定。几何尺寸计算、结构设计、强度、刚度计算,使用寿命要求,标准件选择等多方面的问题,具有设计要求多、计算公式多、设计参数多、图表多等特点。因此机械零件设计计算程序要有合理的数学模型,具有对数表、线图的存储和自动检索能力,对标准参数的选取、圆整能力,还要具有对设计参数修改的应变能力。

  5. 7.1 机械CAD系统的要求 7.1.1 机械CAD系统的特点 (1)设计资料的处理 机械产品的设计计算中需要用到很多参数、系数,它们当中绝大多数需要从数表、线图中查取,有的参数(如齿轮传动的模数)需按国家标准圆整为标准值,有的参数需要圆整为整数,因此,机械CAD系统开发需要解决设计资料的处理问题,具体方法详见第六章。 (2)设计参数分析、判断和调整 机械产品设计应满足的条件较多,如齿轮传动设计应满足齿面接触强度要求、齿根弯曲强度要求、胶合和塑性变形条件、螺旋角合理范围要求等,因此机械CAD系统的开发应解决设计参数分析、判断及调整修改问题。 (3)计算与数据管理、造型之间的关系 完整的机械产品设计包括:设计计算、数据管理、零件造型及装配、工程图生成等几部分,相关内容都是相对独立的内容,机械CAD系统需要解决相关功能模块之间的联络连接问题。 (4)良好的用户界面 机械CAD系统用户界面的设计是一项关系全局且体现软件设计水平的工作。用户界面是人与计算机进行交互的接口,人-机交互由最早的批处理作业方式、问答方式逐步发展成为菜单交互方式,又发展成为今天的图形交互接口。机械CAD系统的用户界面应保证进行机械产品设计时,整个设计过程思路清晰、界面简洁,操作方便。

  6. 7.1 机械CAD系统的要求 7.1.2 机械CAD系统的开发模式 目前的三条思路: 1)从底层平台开始开发 2)购买几何引擎,进行通用平台和专业应用开发 3)基于成熟商用系统进行专业化二次开发

  7. Solid Edge 7.1 机械CAD系统的要求 7.1.2 机械CAD系统的开发模式 Inventor Pro/E UG NX CATIA 美、法等国的CAD技术一直走在世界的前沿,它们拥有许多世界闻名的CAD/CAM系统,这些系统具备十分强大的功能。 国内:清华大学、北航、新舟、浙大、华工

  8. 7.1 机械CAD系统的要求 7.1.3 机械CAD系统的开发步骤 (1)明确设计任务、要求、适用范围和功能; (2)确定设计计算准则、计算方法,建立数学模型; (3)列出设计计算步骤、计算公式、设计参数符号及变量对照表; (4)根据设计计算内容、方法、步骤制定程序流程图; (5)确定有关数表、线图处理方法,完成图、表数据存储和自动检索等模块的开发,以及有关数据文件或数据库的建立工作; (6)开发各功能模块,将设计计算与数据库文件、结构参数化造型、二维工程图绘制连接起来,形成机械零件CAD模块。

  9. 7.2 机械CAD系统二次开发技术基础 7.2.1 对二次开发系统的要求 进行机械CAD系统二次开发工作,应着重关注以下几点要求: (1)平台的易用性。二次开发的最终目标是使通用的CAD系统能够更好地为专业的用户服务,因此要特别重视二次开发系统的易用性。 (2)技术的先进性。二次开发技术应尽量保持与软件技术的同步,尽量以最新版的软件为技术平台进行开发。 (3)执行的高效性。确保二次开发所获得的系统具有较高的执行效率,可以在相应的CAD系统中快速创建出实体模型或工程图。 (4)平台的稳定性。保证所开发软件系统能够稳定运行,也是任何软件系统的最基本的保证。

  10. 7.2 机械CAD系统二次开发技术基础 7.2.1 对二次开发系统的要求 二次开发的内容 机械CAD系统二次开发工作主要包括以下内容: (1)交互式系统的完善。 (2)交互式系统、数据库管理系统、数值计算分析系统间的连接和相互调用,主要是各个系统与高级语言的接口设计。 (3)参数化设计模块的设计,主要包括相关零部件的参数化造型、参数化设计计算和校核计算等几个子程序。 (4)界面设计,主要包括图标菜单的设计、对话框的设计等。 (5)国家标准数据库的建立。 (6)工程符号和汉字的处理。

  11. 7.2 机械CAD系统二次开发技术基础 7.2.2 机械CAD系统的体系结构

  12. 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 两种模式 一种是借助于CAD软件自身提供的二次开发工具进行开发。 另一种是利用COM或Automation技术,用一种编程软件调用三维CAD软件的对象及属性进行开发,这种开发模式是目前最流行的一种开发模式,例如SolidWorks、CATIA和UG等均提供API函数,可利用VB、VC、Delphi等面向对象的语言调用这些函数实现二次开发。 另外,基于CAD系统二次开发模式又分为外模式和内模式两种。外模式是指二次开发的程序具有独立运行的进程和界面,如Win32执行程序,通过宿主程序API或组件实现对CAD系统的功能调用;内模式是指二次开发程序只能在宿主程序界面框架下运行,通常是一种动态链接库,供宿主程序调用。

  13. 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”,需要在生成的可执行程序目录下,或在该通用平台指定的搜索路径下。

  14. CATIA二次开发简介 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 宏命令方式:直接将过去的命令过程录制成Macro, 修改其中的参数,即可重新生成。但是,宏在执行过程中无法交互修改,智能化程度低,适合简单的重复性操作过程。优势是平台兼容性好。 两种模式: • In-Process Application(进程内) • Out-Process Application(进程外) 两类方法: • CAA • Automation

  15. 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 • CAA C++是CATIA的一整套C++函数库,该函数库在CATIA运行时加载。用户通过安装RADE (Rapid Application Development Environment)模块,用户可以在VC++编程环境下编制程序,与CATIA进行通信。 • CAA C++可以进行最有效率的应用程序开发,但入门困难。 • 利用CAA可以进行从简单到复杂的二次开发工作,而且和原系统的结合非常紧密,如果没有特别的说明,无法把客户所研发的功能从原系统中区分出来,这非常有利于用户的使用和集成。

  16. 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 几个概念: • COM:(对象组件模型):COM是微软公司提出的目的在不同程序中共享对象标准。 • Automation: Automation是一种微软公司的技术,目的是在开发环境里使用COM对象。 • ActiveX组件是一种微软标准,目的是在开发环境里共享不同程序的对象。 • OLE:(对象链接及嵌入)意味着一个文件可以被另外的一个程序的文件链接。这种链接及嵌入的对象可以被其他的程序在编辑区编辑。

  17. 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接口)

  18. 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”)

  19. 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口 取得或创建一个零件体: 当创建一个零件文件时,系统会自动创建一个默认的零件体。 可以获得并使用它: Set MyBody = MyDocument.Part.Bodies.Item("PartBody") 也可以创建一个新的零件体并使用: Set MyNewBody = MyDocument.Part.Bodies.Add()

  20. 实例:凸轮轴 7.2 机械CAD系统二次开发技术基础 7.2.3 二次开发模式及开发接口

  21. 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

  22. 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软件的定制解决方案时就不存在对象限制问题。

  23. 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语言来管理对话框。

  24. 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开发通用应用程序时,应将其保存为全局工程

  25. 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") ’ 保存图形

  26. 7.3 基于二维CAD系统的二次开发技术 7.3.3 基于VBA的二次开发 V带设计实例 将相关的资料处理、计算和基于VBA的AutoCAD工程图绘制等程序代码与V带传动CAD软件人机界面关联起来,即可生成V带传动CAD系统。

  27. 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类似):

  28. 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

  29. 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函数

  30. 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),&paramNum); //得到参数集中参数数目 char paramName[100]; ProParamvalue mValue; }

  31. 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

  32. 思考与练习 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中通过参数驱动特征的主要函数有哪些?其功能是什么?

  33. 本章结束

More Related