资源描述
目录前言0基于Pro/E Wildfire 建立常用件参数化模型库1第一章绪论31.1引言31.2 课题的提出及意义41.3本章小节4第二章二次开发总体方案的确定42.1 二次开发语言(Pro/TOOLKIT)42.2 开发工具的确定52.3 开发环境72.3.1硬件开发环境72.3.2软件开发环境72.4总体设计框架10第三章菜单的设计开发123.1 菜单的设计123.1.1 编写菜单信息资源文件133.1.2 编写菜单操作源程序193.1.3 注册运行22第四章建立参数化模型库244.1国家标准244.2参数化建模264.3对话框的设计284.4参数值的传递464.5编写注册文件714.6编译程序并执行71第五章总结与展望775.1论文总结775.2后续发展方向77致谢78参考文献79前言毕业设计是我们综合运用所学的理论知识和实践相结合的重要环节。是对我们大学四年所学知识的一次全面检验和应用;首先,毕业设计能培养我们分析实际问题的能力,运用所学知识动手解决实际问题的能力,从而巩固深化所学的理论知识,为即将走向工作岗位打下坚实的基础。其次,毕业设计培养我们深入实际,调查研究,解决在现实问题中可能出现各种问题,所以我们在设计中必须学会分析问题和解决问题的方法,要抓住主要问题,按安全可靠,经济实用的原则设计。再次,毕业设计培养了我们熟悉有关技术政策,运用国家标准规范,手册,图册等工具书,独立进行设计计算,数据处理,编写技术文件的工作能力。在毕业设计中,我们必须培养认真、负责、细致、踏实的工作作风,养成保质保量、按时按量完成任务的习惯,要达到这一目的,我们在设计中必须应做到:(1)随时准备各种资料,为毕业设计做好充分的准备。(2)认真计算和检验,保证计算结果的准确性。(3)仿真建模和CAD制图要认真、仔细和不断反复检查,以保证图纸的质量。(4)劳逸结合,提高工作效率,按时完成自己的设计任务。这次毕业设计不仅关系着每个人的学业成绩,更重要的是它体现了每个人对待设计的认真程度和实际能力。固然每个人的能力不同,设计有好有劣,但我们还是力求向好的方面努力,使设计既符合实际,更加完善完美。我想这与指导老师和领导的要求也是一致的。不过由于对一些实践性知识了解甚少,加上本次设计时间紧、任务重、图纸多,很难百分之百的达到毕业设计的要求。所以这次毕业设计也只能是一个尝试,但对我将来的工作必将是一个很大的帮助,相信通过这次毕业设计能达到预期目的,各方面都有所提高。由于经验不足、水平有限加之时间仓促,本次毕业设计一定存在不少错误,欢迎各位老师和同学批评指正。基于Pro/E Wildfire 建立常用件参数化模型库摘要:本课题针对多种类型通用零件,提出基于Pro/E平台进行二次开发的一种可行方案。并且成功开发设计出能满足用户要求的零件模型库。本文首先简单介绍了与本课题相关的Pro/E二次开发功能,包括自定义菜单的生成、对话框的制作、Pro/TOOLKIT应用程序的执行。其次根据本课题的要求,分析了零件二次开发的整体设计思路。然后以标准件为例,较详细地说明了利用Pro/TOOLKIT及Visual Studio2005在Pro/E二次开发中的应用,并给出了测试实例。最后对开发的三维建模程序进行测试。结果表明:开发程序正确无误,建模迅速,大大提高了这类通用件在Pro/E平台上的设计效率。关键词:Pro/E、二次开发、Pro/TOOLKIT、Visual Studio2005The Secondary Development of common parts Based on Pro/EAbstract:This article introduces a feasible method of secondary development based on Pro/E against some kinds of parts. And the spring parts library is successfully designed meet to the user requirements.Firstly, this articlesimply introduces the secondary development functions of Pro/E referring to this task which includes the creation of menu, the creation of the dialogue,the Pro/TOOLKIT procedure execution. Then the precept to the overall design way of parts secondary development is analyzed.With an example of aStandard partsin detail,it particularly describes the application of Pro/TOOLKIT and Visual Studio2005 in the secondary development base on Pro/E, andtest examples. At last, the test of all process of three-dimension-part-model driven by database is performed indicates that the program is right,and the mold can be set up quickly. The efficiency for the design of interchangeable part based on Pro/E can be increased.Keywords: Pro/E、Secondary Development、Pro/TOOLKIT、Visual Studio2005第一章 绪论1.1引言(1)参数化技术正当实体造型技术在CAD系统中广泛运用时,出现了一种比无约束自由造型更好的算法参数化实体造型方法。它主要的特点是:基于特征、全尺寸约束、全数据相关、尺寸驱动设计修改。参数化技术彻底克服了自由缄默的无约束状态,由尺寸决定实体造型的几何形状。尺寸驱动已经成为当今造型系统的基本功能。如果想修改零件形状的话,只需修改一下尺寸的数值就可以实现形状上的改变。这种新构想最先在PTC公司(Parametric Technology Corp)的软件PRO/ENGINEER中成为现实。由于参数化技术的成功应用,使得它很快成为CAD业界的标准,许多软件厂商纷纷追赶。(2)变量化技术变量化造型技术保留了参数化技术基于特征、全数据相关、尺寸驱动设计修改的优点,但是在约束定义方面做了一定的改变。变量化造型技术将所需定义的尺寸“参数”进一步区分为形状约束和尺寸约束,而不仅仅是用尺寸来约束全部几何。通常在新产品开发的概念设计阶段,设计者首先考虑的是设计思想及概念,并将其体现在某些几何形状之中。但是这些几何形状的严格的尺寸定位关系并不能在设计的初始阶段完全确定,所以希望在初始阶段能够允许欠尺寸约束的存在。(3)二次开发研究Pro/ENGIEER 提供了强大的三位几何造型功能,使我们能够创建各种复杂的几何零件模型,但有时这些功能并不能满足我们的要求。例如标准零件系列,它们的结构都是相同的,区别只在与尺寸,如果标准零件系列通过三维建模的方式来实现,那么工作量将是非常巨大的。最有效的方法使利用标准零件的相似性,发挥Pro/ENGEER参数化建模的特长,使用二次开发工具,如族表工具、用户定义特征(UDF)、Pro/Program、J-link、Pro/Toolkit等来实现。1.2 课题的提出及意义产品的三维设计离不开CAD/CAM系统的支持,具有技术成熟、功能强大的Pro/ENGINEER参数化造型系统在设计和制造业中引起了人们的重视,并得到了日益广泛的应用。Pro/ENGINEER提供了强大的三维几何造型功能,使我们能够创建出各种复杂的几何模型,作为通用的三维CAD/CAM系统在功能上基本能够满足产品三维设计要求,但有时这些功能并不能满足我们的需求。例如标准零件系列,它们的结构都是相同的,区别只在于尺寸,如果标准零件系列都通过三维建模的方式来实现,那么工作量将非常巨大。虽然Pro/ENGINEER自身也有一些模型库,但是这远远满足不了用户的要求。因此,也就有了本课题研究开发的必要。机械产品的开发过程中会用到大量的通用零件、标准件、相似件。如何建立这些常用零部件的库,利用已有的资源,花费较少的时间完成产品设计是用户非常关心的问题。建立这些通用件、标准件、相似件零件库作为一项可行方案,一方面可以避免不同设计者的重复劳动,提高设计效率,提高设计的标准化程度,减少错误发生率,缩短产品开发周期;另一方面还可以基于该软件的三维实体模型进行更深层次的分析(如有限元分析等),以确保机械设计结果安全可靠。综上,对某些特殊零件进行二次开发是非常有必要的。因此也就有了本课题的提出。1.3本章小节本章介绍了现代CAD技术中的发展及其需求,并分析了参数和变量化技术的应用前景,确定了Pro/ENGINEER二次开发的必要性和方便性,确定了课题的主要研究内容和方向:利用Pro/E TOOLKIT进行零件的参数化建模,以及需要用到的相关技术。第二章二次开发总体方案的确定2.1 二次开发语言(Pro/TOOLKIT)Pro/TOOLKIT是美国Parametric Technology Corporation(PTC)公司为Pro/ENGINEER软件提供的开发工具包,其主要目的是让用户或第三方通过C程序代码扩充Pro/ENGINEER系统的功能,开发基于Pro/ENGINEER系统的应用程序模块,不仅如此,还可以利用Pro/TOOLKIT提供的UI对话框、菜单以及VC的可视化界面技术,设计出方便实用的人机交互界面,从而大大提高系统的使用效率。Pro/TOOLKIT是Pro/ENGINEER的一个应用程序接口(API),它的编程语言是C语言,可以对Pro/ENGINEER进行功能扩展,满足PTC客户的特定需求。而且,Pro/TOOLKIT提供了定制标准Pro/ENGINEER用户界面的能力,自动执行重复性的程序,通过Pro/ENGINEER集成的内部程序(Dll)或外部应用程序(Exe)可以为造型用户提供自定义的应用程序、设计规划和绘图自动化。Pro/TOOLKIT工具包提供了开发Pro/ENGINEER所需的函数库文件和头文件,使用户编写的应用程序能够安全地控制和访问Pro/ENGINEER,并可以实现应用程序模块与Pro/ENGINEER系统的无缝集成。Pro/TOOLKIT工具包是随Pro/ENGINEER安装盘一起提供的,安装时在“元件”列表框中选中“API Toolkits”复选框,并在“子元件”列表框中选中“Pro/TOOLKIT”复选框,这样将在Pro/ENGINEER系统的默认目录下自动创建两个下级目录:protoolkit和prodevelop。Pro/TOOLKIT采用面向对象的程序设计方法(Object_Oriented Programming)。在Pro/ENGINEER和应用程序之间主要是通过特定的数据结构来传递信息,以应用程序来说这种数据结构并不是直接访问的,而只能通过Pro/TOOLKIT提供的函数来访问。2.2 开发工具的确定Pro/ENGINEER软件本身自带了一些二次开发工具,如族表工具、用户定义特征(UDF)、Pro/Program、J-link、Pro/Toolkit等。以下简单介绍上述几种二次开发工具:族表(Family Table)通过族表可以方便地管理具有相同或相近结构的零件,特别适用于标准零件的管理。族表工具是通过建立一个通用零件作为父零件,然后在其基础上对各参数加以控制生成派生零件。整个族表是通过电子表格来实现的,因此可以称其为表格驱动。用户定义特征(UDF)用户定义特征是将若干个系统特征整合为一个自定义特征,使用时作为一个整体出现。UDF适用特定产品的特定结构,有利于设计者根据产品特征快速生成几何模型。 Pro/ProgramPro/ENGINEER软件对于每个模型都有一个主要设计步骤和参数列表Pro/Program,它是由类似BASIC的高级语言构成,用户可以根据设计需要来编辑该模型的Program,使其以一个程序来工作。通过运行该程序,系统通过人机交互的方法来控制系统参数、特征出现与否以及特征的具体尺寸等。 J-linkJ-link是Pro/ENGINEER中自带的基于JAVA语言的二次开发工具,是一种面向对象、独立于操作系统平台的开发工具。用户通过JAVA编程实现向Pro/ENGINEER软件添加功能。 Pro/TOOLKITPro/TOOLKIT同J-link一样也是Pro/ENGINEER自带的二次开发工具。在Pro/TOOLKIT中,PTC向用户提供了大量的C语言函数库,函数采用面向对象的风格。通过调用这些底层函数,用户能方便而又安全地访问Pro/ENGINEER的数据库及内部应用程序,进行二次开发,扩展一些特定功能。上述各种二次开发工具集中在Pro/ENGINEER的“工具”菜单中,如图2-1所示。其中“辅助应用程序”主要用来调用Pro/TOOLKIT程序。图2-1由于Pro/TOOLKIT具有函数简单,应用方便等优点,本课题将使用Pro/TOOLKIT进行二次开发研究。2.3 开发环境开发环境包括两部分:即硬件开发环境和软件开发环境。2.3.1硬件开发环境本课题是基于Pro/Engineer Wildfire4.0的二次开发,因此只要能够安装支持Pro/E Wildfire4.0版本即可。建议配置如表2-1所示。表2-1 计算机配置项目推荐配置CPU2.53GHz内存2GB显卡显存256MB以上,推荐使用ATIHD3470以上的显卡网卡必须安装网卡(或使用虚拟网卡)2.3.2软件开发环境操作平台:Windows2000/XP/NT;开发平台:Pro/ENGINEER Wildfire4.0;开发语言:Visual Studio2005.对于PROE4.0 来讲,其文件结构与2.0 是一致的,读者可参照前面的描述来回顾相关内容,下面请随我一起来配置这套组合下的二次开发环境。首先打开VS2005 中的VC 开发环境。依次选择文件新建项目,系统弹出项目对话框(图1-8)图2-2选择如图所示的MFC DLL 项目,输入项目名称并设置项目路径,点击确定。在接下来的对话框中选择“使用共享MFC DLL 的规则DLL”(默认的也是这个选项),点击完成后,与VC+6.0 一样,系统自动为我们搭建了一个DLL的开发环境,现在,我们要在这个环境下配置TOOLKIT 开发所需要的头文件和库文件路径。依次在菜单中选择:工具选项,系统弹出选项对话框。在该对话中选择“项目和解决方案”一栏中的“VC+目录”选项,并参照图1-9 的方法设置头文件路径图2-3我的设置为:D:Program FilesproeWildfire 4.0 protoolkitincludeD:Program FilesproeWildfire 4.0 protoolkitprotk_applsincludesD:Program FilesproeWildfire 4.0 prodevelopincludesD:Program FilesproeWildfire 4.0 prodevelopprodev_applsincludes仍旧在该对话框下,设置库文件路径,如图1-10:图2-4设置好头文件和库文件路径后,就还差最后一步了,现在我们要来指定使用中的具体库文件。图2-5点击“项目”“属性”,系统弹出该项目的属性对话框。按照图1-11 的方法设置工程的连接属性。我的“附加依赖关系”中为:protk_dll.lib prodev_dll.lib mpr.lib psapi.lib(笔者这里一共用到了四个库,当然,读者可以根据自己需要,添加其他额外的库文件)在Release 版本下忽略的库文件为:msvcrtd.lib(与VC+6.0 中是不一样的)。设置完毕后,在Release 版本下编译连接完全没有问题,至此,环境设置便讲完了。2.4总体设计框架本二次开发是基于Pro/ENGINEER的关于标准件、正齿轮、锥齿轮、蜗轮、标准件的参数化设计。设计的对象是标准件。本任务将设计多种类型的标准件,要求用户只需选择或输入相关参数,就能自动生成所需的通用零件。标准件的类型非常多,这里将以螺栓与正齿轮为例进行二次开发设计过程说明。本开发的总体设计流程如图2-2所示,调用响应图如图2-3所示。打开VS2005建立开发目录新建工程设计菜单设计对话框Pro/toolkit编程连接调试通过图2-6启动Pro/E手动加载菜单选择自定义菜单选择所需零件调用对话框输入设计参数生成实体模型退出程序第三章菜单的设计开发3.1 菜单的设计菜单是Pro/ENGINEER的主要用户界面。Pro/TOOLKIT提供了一系列菜单操作函数,允许应用程序创建和管理菜单。Pro/ENGINEER菜单包括菜单栏、菜单、菜单项(按钮)、筛选按钮、单选按钮等等,如图4-1示。图3-1Pro/TOOLKIT可以向Pro/ENGINEER菜单中添加上述类型的菜单。添加菜单的大致过程如下:编写信息资源文件(信息资源文件用于提供菜单的标签文本和帮助信息);使用Pro/TOOLKIT的函数编写源程序,给菜单按钮设置调用函数(动作函数);注册运行程序。下面介绍菜单的相关术语:l 菜单条(Menu bar)Pro/ENGINEER界面顶部菜单栏中的菜单,如File、Edit和View等均称为菜单条;l 菜单条菜单(Menu bar menu)菜单条的下级子菜单。即多层菜单的次级菜单;l 菜单的按钮(Push button)下拉菜单中用来启动一组指令的菜单项,如File菜单条中的Edit按钮;l 菜单的复选按钮(Check button)下拉菜单中用来执行开关动作的菜单项,如View菜单条中的Model Tree(模型树)显示或关闭菜单项;l 菜单的单选按钮组(Radio group)下拉菜单的一组选项中只能设置其中一项的菜单项;l 命令(Command)从菜单条或工具栏图标激活的一个执行过程;l 命令标识号(Command id)指向某一命令的指针。一般作为Pro/TOOLKIT函数的输入参数;l 动作命令(Action command)启动菜单按钮执行的一组指令;l 选项命令(Option command)基于界面元素的状态执行的一组指令。该命令由菜单筛选按钮和菜单单选按钮组启动本设计要求所设计的菜单风格与Pro/ENGINEER一致,即将菜单添加到Pro/ENGINEER的菜单栏,在其下拉菜单项菜单中要求有各种类型的标准件,如标准件库,包括螺钉,螺栓,垫片,键等。3.1.1 编写菜单信息资源文件信息资源文件用于提供菜单的标签文本(包括其他语言版本的标签)和帮助信息,如果要向Pro/ENGINEER中添加菜单,就必须使用信息资源文本,否则所添加的菜单不会在Pro/ENGINEER菜单栏中出现。信息资源文件是一种ASCII码文件,用来定义菜单项、菜单项提示等信息,可以用记事本和写字板等文字处理软件建立,也可在VC的集成开发环境中建立,但必须与纯文本格式保存。在信息文件中以4行为一组,其含义为:第1行:Pro/ENGINEER系统可以识别的关键字。该关键字必须与使用该信息文件函数中的相关字符串相同。第2行:在菜单项或菜单项提示上显示的英语文本。第3行:另一种语言的译文或为空。这里为中文。第4行:当前的Pro/ENGINEER版本为空,“#”号。按第2行或第3行的语言取决于系统环境变量lang的设置。本设计中将向Pro/ENGINEER界面的顶部菜单栏中添加一个名为“通用件库”的Menu bar类型的菜单,下属两个菜单项标准件库和齿轮库。名为“涡轮蜗杆”的下级子菜单又包含了:涡轮参数化设计、蜗杆参数化设计两个菜单项最终结果如图3-2(a)、3-2 (b)所示。图4-2(a) “通用件库”菜单图4-2(b) “标准件库”菜单图4-2所示菜单的资源文件如下:StandardPartLibDesign通用件库#FirstButton双头螺柱参数化设计#this button will generate a doublescrew_boltthis button will generate a doublescrew_bolt#SecondButton垫片参数化设计#this button will generate a shimthis button will generate a shim#ThirdButton螺栓参数化设计#this button will generate a boltthis button will generate a bolt#FourthButton螺母参数化设计#this button will generate nutthis button will generate nut#FifthButton键参数化设计#this button will generate a keythis button will generate a key#SixthButton螺钉参数化设计#this button will generate a nut_boltthis button will generate a nut_bolt#seventhButton人字型齿轮参数化设计#this button will generate a Herringbone_gearthis button will generate a Herringbone_gear#eigthButton轴参数化设计#this button will generate a shaftthis button will generate a shaft#SubMenu1齿轮参数化设计#SubMenu2标准件库#SubMenu3蜗轮蜗杆参数化设计#ninthButton锥齿轮参数化设计#this button will generate a bevel_gearthis button will generate a bevel_gear#tenthButton蜗轮参数化设计#this button will generate a worm_gearthis button will generate a worm_gear#eleventhButton蜗杆参数化设计#this button will generate a wormthis button will generate a worm#twelthButton正齿轮参数化设计#this button will generate a spur_gearthis button will generate a spur_gear#在记事本编辑完以上资源后,保存为纯文本格式(.txt),并且命名为Message。将Message.txt文件存放在TextReleasetextchinese_cn目录下3.1.2 编写菜单操作源程序图3-3新建项目,名称standard编写完菜单信息资源文本后,还须使用Pro/TOOLKIT提供的菜单操作函数来实现每个菜单的功能,即编写菜单项菜单的动作函数。首先,必须列出VC程序将用到的相关头文件,如#includeProMenu.h#includeProUtil.h#includeProMenubar.h#include 其次,必须对用到的函数进行声明,否则将会出错,如void drawdoublescrew_bolt()void drawshaft() void drawHerringbone_gear()void drawshim()void drawbolt()void drawnut()void drawkey()void drawworm_gear()void drawworm()void drawnut_bolt()void drawbevel_gear()void drawspur_gear()CstandardApp:CstandardApp()CstandardApp theApp;BOOL CstandardApp:InitInstance()CWinApp:InitInstance();return TRUE;static uiCmdAccessState AccessDefault(uiCmdAccessMode access_mode)return (ACCESS_AVAILABLE);最后才编写程序主体部分。下面介绍说明菜单程序中用到的Pro/TOOLKIT函数。user_initializ()函数是Pro/TOOLKIT应用程序的初始化函数,主要用来对同步模式的Pro/TOOLKIT应用程序进行初始化,任何同步模式的应用程序要在Pro/ENGINEER系统中加载都必须包含该函数。其格式如程序所示。user_terminate()函数在Pro/ENGINEER终止同步模式的Pro/TOOLKIT应用程序时调用(如退出Pro/ENGINEER将终止应用程序的运行),该函数由用户定义,其中可以不执行任何动作。ProMenubarMenuAdd()函数的作用是向Pro/ENGINEER添加所需的菜单,包含头文件为:#include。函数的返回值类型为ProError,调用成功返回PRO_TK_NO_ERROR(0),否则返回PRO_TK_GENERAL_ERROR(-1)。函数如下:ProMenubarMenuAdd (UserMenuBar, UserMenu, Utilities, PRO_B_TRUE, MsgFile)其中UserMenuBar为菜单项名,作为调用其他菜单函数的输入参数;UserMenu为菜单标签名,即该菜单条的关键字。必须与信息文件该段的标识关键字相同。Utilities, PRO_B_TRUE表示该菜单加在“工具”菜单的右侧。MsgFile为菜单信息文件名,这里定为Message。ProMenubarmenuMenuAdd()函数的作用是向菜单添加下级子菜单。注意,在生成的下级子菜单中必须至少包含一项菜单项,否则将不显示下级子菜单。该函数可以创建多层下级子菜单,只需用不同层次的菜单名标识作为们菜单名即可。其函数如下:ProMenubarmenuMenuAdd(UserMenuBar,SubMenu1,SubMenu1,NULL,PRO_B_TRUE, MsgFile)UserMenuBar表示这个下级菜单是挂接在此菜单项名下。SubMenu1为菜单标签名,必须与信息文件中对应标识关键字相同。ProMenubarmenuPushbuttonAdd()函数的作用是添加菜单按钮。其函数如下:ProMenubarmenuPushbuttonAdd(SubMenu1,PushButton1,PushButton1,Addinga push button to the ProE menu bar, NULL, PRO_B_TRUE, PushButton_cmd_id1, MsgFile)SubMenu1表示此菜单是菜单名为“SubMenu1”的下级子菜单,PushButton1是菜单标签名,与信息文件中对应一致。Adding a push button to the ProE menu bar是提示信息,必须与信息文件中一致。程序中用到了菜单条、菜单条菜单、下级子菜单、菜单按钮等。将上面编辑的资源信息文件放入“TextReleasetextchinese_cn”文件夹内。3.1.3 注册运行编写调试完应用程序后,将整个VC工程文件拷贝到工作目录下,用记事本编写注册文件,并保存为“Protk.dat”。注册文件内容如图4-9所示。图3-4注册文件这里的“.”代表相对路径方式,即起始目录为Pro/ENGINEER的工作目录。用相对路径方式的优点在于具有可移植性。即此二次开发程序只要存放在Pro/ENGINEER设置的工作目录下,便能自动运行,而不要求用户更改设置,大大地方便了用户的使用。图4-9中各字段及其意义如表4-1所示。表4-1注册表字段及意义字段名意义Name外部程序标识名,该标识名不一定要与可执行程序名相同Exec_file可执行程序名(包括路径)Text_dir指定外部程序的text目录树的全路径Startup这里取dll(动态连接库)Allow_stop如设为TRUE,在Pro/ENGINEER工作时可以终止应用程序,如设为FALSE则不能终止应用程序Delay_start若设为TRUE, Pro/ENGINEER在启动时不调用Pro/TOOLKIT应用程序,但可以手工启动,若设为FALSE,则系统将自动启动。Revision指定Pro/TOOLKIT版本号End段结束标志注意,将DELAY_START字段内容设为FALSE,这样打开Pro/ENGINEER时使自动注册运行该应用程序。即启动Pro/ENGINEER后,自定义菜单使自动挂接到Pro/ENGINEER菜单条上。不必再手动注册和运行。这样,所创建的“通用件库”菜单便如同Pro/ENGINEER菜单栏中的一项菜单,即当运行Pro/ENGINEER,“通用件库”菜单项将自动连接上去。第四章建立参数化模型库在使用CAD产品进行产品建模时,设计人员经常要选用标准件或者选择通用件。若每次设计人员都需要重新对这些零件进行造型,设计人员必然要做许多重复性的劳动。本课题所建模型库包括螺栓,螺钉,螺母,螺柱,键,垫片,正齿轮,涡轮,蜗杆,等下面以六角螺栓为例详细说明,其他源程序见附录4.1国家标准六角螺栓GB5782-86M5M6M8M10M12M14M16M18M20M24螺栓长度125时的螺纹长度L16+2.0018+2.5022+3.0026+3.5030+4.0034+4.5038+4.5042+5.0046+5.0054+5.00螺栓长度125 - 200时 L22+2.0024+2.5028+3.0032+3.5036+4.0040+4.5044+4.5048+5.0052+5.0060+5.00螺栓长度200时 L45+3.5049+4.0053+4.5057+4.5061+5.0065+5.0073+5.00此项长度允许全螺纹制造L25.0030.0035.0040.0045.0050.0055.0065.0065.0070.00搓丝坯 (6g级) DMAX4.425.307.108.9010.7012.5514.5516.2018.20MIN4.385.257.058.8510.6512.5014.5016.1518.15粗杆直径 D3MAX5.006.008.0010.0012.0014.0016.0018.0020.0024.00MIN4.825.827.789.7811.7313.7315.7317.7319.6723.67六角对边 SMAX8.0010.0013.0016.0018.0021.0024.0027.0030.0036.00MIN7.789.7812.7315.7317.7320.6723.6726.6729.6735.38头部直径 HMAX3.654.155.456.587.688.9810.1811.7212.7215.22MIN3.353.855.156.227.328.629.8211.2812.2814.78垫圈直径 D2MIN6.908.9011.6014.6016.6019.6022.5025.3028.2033.604.2参数化建模拉伸,如下图图4-1图4-2螺栓如上关系如上图4-3设置参数图4-44.3对话框的设计下面以六角螺栓为例介绍说明螺栓对话框的创建全过程。1. 新建对话框如图4-1图4-5点击新建按钮出现下图4-2图4-6右键单击属性弹出如图对话框弹出4-7图4-7更改对话框名称为“螺栓参数化设计”如下图4-4图4-8向对话框中拖入控件在dialog上右键,添加资源出现如下对话框4-9图4-9点击导入图片,整理对话框如下4-10图4-10选中对话框单击右键选择“添加类”4-11图4-11对话框添加完毕2. 插入图片在资源视图中右键,添加资源,导入图片如下图所示图4-12导入后的图片都有唯一的图片ID如下图4-13图4-133. 完成对话框的设计如图4-8至4-12螺钉参数化设计对话框4-8螺栓参数化设计对话框4-9键参数化设计4-10双头螺柱参数化设计4-11螺母参数化设计4-12垫片参数化设计4-134. 对话框的调用先定义一个函数当点击菜单时会触发这个函数这个函数的内容是调用对应的对话框具体实现过程如下名称Cboltdlg,在standard.cpp中添加如下程序段/ standard.cpp : 定义DLL 的初始化例程。#include stdafx.h#include standard.h#include Beardlg.h#include shimdlg.h#include Protoolkit.h#include user_tk_error.h#include pro_wchar_t.h#include ProMdl.h#include ProMenu.h#include ProMenuBar.h#include ProMessage.h#include ProNotify.h#include ProObjects.h#include ProUtil.h#include ProUiCmd.h#include TestError.h#include boltdlg.h#include keydlg.h#include Herringbone_geardlg.h#include shaftdlg.h#include bevel_geardlg.h#include nutdlg.h#include nut_boltdlg.h#include wormdlg.h#include worm_geardlg.h#include spur_gear.h#include doublescrew_boltdlg.h/spur_gear.h忘了dlg后缀了注意!#ifdef _DEBUG#define new DEBUG_NEW#endif/TODO: 如果此DLL 相对于MFC DLL 是动态链接的,/则从此DLL 导出的任何调入/MFC 的函数必须将AFX_MANAGE_STATE 宏添加到/该函数的最前面。/例如:/extern C BOOL PASCAL EXPORT ExportedFunction()/AFX_MANAGE_STATE(AfxGetStaticModuleState();/ 此处为普通函数体/此宏先于任何MFC 调用/出现在每个函数中十分重要。这意味着/它必须作为函数中的第一个语句/出现,甚至先于所有对象变量声明,/这是因为它们的构造函数可能生成MFC/DLL 调用。/有关其他详细信息,/请参阅MFC 技术说明33 和58。/ CstandardAppBEGIN_MESSAGE_MAP(CstandardApp, CWinApp)END_MESSAGE_MAP()void drawdoublescrew_bolt()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cdoublescrew_boltdlg dlg; dlg.DoModal();void drawshaft()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cshaftdlg dlg; dlg.DoModal();void drawHerringbone_gear()AFX_MANAGE_STATE(AfxGetStaticModuleState(); CHerringbone_geardlg dlg; dlg.DoModal();void drawshim()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cshimdlg dlg; dlg.DoModal();void drawbolt()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cboltdlg dlg; dlg.DoModal();void drawnut()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cnutdlg dlg; dlg.DoModal();void drawkey()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Ckeydlg dlg; dlg.DoModal();void drawworm_gear()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cworm_geardlg dlg; dlg.DoModal();void drawworm()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cwormdlg dlg; dlg.DoModal();void drawnut_bolt()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cnut_boltdlg dlg; dlg.DoModal();void drawbevel_gear()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cbevel_geardlg dlg; dlg.DoModal();void drawspur_gear()AFX_MANAGE_STATE(AfxGetStaticModuleState(); Cspur_gear dlg; dlg.DoModal();/ CstandardApp 构造CstandardApp:CstandardApp()/ TODO: 在此处添加构造代码,/ 将所有重要的初始化放置在InitInstance 中/ 唯一的一个CstandardApp 对象CstandardApp theApp;/ CstandardApp 初始化BOOL CstandardApp:InitInstance()CWinApp:InitInstance();return TRUE;/定义菜单的可访问性static uiCmdAccessState AccessDefault(uiCmdAccessMode access_mode) return (ACCESS_AVAILABLE);/=/函数:user_initialize()/功能:用户初始化函数/=extern C int user_initialize()ProError status;ProName msgfile;uiCmdCmdId cmd_id1, cmd_id2,cmd_id3,cmd_id4,cmd_id5,cmd_id6,cmd_id7,cmd_id8,cmd_id9,cmd_id10,cmd_id11,cmd_id12;/在Help菜单的左边添加“标准件库”/设置信息文件名称ProStringToWstring(msgfile,standard.txt);/在菜单栏上help左侧添加新菜单GearMenustatus = ProMenubarMenuAdd(标准件库菜单, StandardPartLibDesign,Help, PRO_B_FALSE, msgfile); /主菜单 /在菜单栏 ProMenubarmenuMenuAdd(标准件库菜单,SubMenu1,SubMenu1,NULL,PRO_B_TRUE,msgfile); ProMenubarmenuMenuAdd(标准件库菜单,SubMenu2,SubMenu2,NULL,PRO_B_TRUE,msgfile);ProMenubarmenuMenuAdd(SubMenu1,SubMenu3,SubMenu3,NULL,PRO_B_TRUE,msgfile);/设置按钮命令ProCmdActionAdd(命令一,(uiCmdCmdActFn)drawdoublescrew_bolt,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id1);ProCmdActionAdd(命令二,(uiCmdCmdActFn)drawshim,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id2);ProCmdActionAdd(命令三,(uiCmdCmdActFn)drawbolt,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id3);ProCmdActionAdd(命令四,(uiCmdCmdActFn)drawnut,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id4);ProCmdActionAdd(命令五,(uiCmdCmdActFn)drawkey,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id5);ProCmdActionAdd(命令六,(uiCmdCmdActFn)drawnut_bolt,uiCmdPrioDefault,AccessDefault,PRO_B
展开阅读全文