基于PROE二次开发的九孔柱塞泵缸体的毕业设计_第1页
基于PROE二次开发的九孔柱塞泵缸体的毕业设计_第2页
基于PROE二次开发的九孔柱塞泵缸体的毕业设计_第3页
基于PROE二次开发的九孔柱塞泵缸体的毕业设计_第4页
基于PROE二次开发的九孔柱塞泵缸体的毕业设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!第一章绪论 11.1三维CAD技术 11.1.1CAD技术的发展 11.2课题背景及意义 21.3应用程序的开发工具 31.4课题的主要研究内容 3第二章Pro/TOOLKIT二次开发的基础理论 32.1Pro/TOOLKIT的基本知识 32.1.1Pro/TOOLKIT简介 32.1.2Pro/TOOLKIT的工作模式 42.1.3Pro/TOOLKIT对象和动作 42.1.4对象句柄 42.1.5Pro/TOOLKIT函数返回值 52.2创建Pro/TOOLKIT应用程序的基本方法 52.3Pro/TOOLKIT信息文件的建立 62.4编译和连接设置 72.5编制注册文件及应用程序的运行 72.5.1编制注册文件 72.5.2应用程序的运行 7第三章用户界面设计 83.1菜单的设计 83.1.1向菜单栏添加菜单条 83.1.2向菜单条下添加下级子菜单 83.1.3端盖菜单设计 83.2对话框的设计 123.2.1MFC对话框 123.2.2UI对话框 123.3端盖对话框设计 143.3.1构想 143.3.2创建方法 14第四章端盖的开发 244.1总体方案 244.2基于三维模型的参数化程序设计分析 254.2.1端盖三维模型的建立 254.2.2端盖参数化程序设计 304.3注册并运行程序 364.4操作流程 36第五章零件图形清单 37结束语 41参考文献 42附录I程序清单 43附录Ⅱ外文文献翻译 44附录Ⅲ外文文献原文 51基于Pro/E二次开发的九孔柱塞泵缸体参数化模型的实现摘要:CAD技术在机械设计中发挥着越来越突出的作用。而三维实体模型比二维图形能更直观、更全面地反映设计意图,并且在三维模型的基础上可以进行零件装配、干涉检查、有限元分析、运动分析等高级的计算机辅设计工作,因此目前机械设计中广泛采用三维设计。而目前我国Pro/E应用日益普及,而二次开发严重滞后。所以,进行二次开发是非常必要的。论文介绍了其二次开发工具Pro/TOOLKIT,并以九孔柱塞泵缸体为例,详细的论述了应用Pro/Toolkit进行菜单开发、对话框开发,即UI对话框,以及如何在VC++环境下编制C语言程序以激活、调用对话框界面,设计出更加友好透明的用户界面,方便快捷地实现缸体的参数化设计和修改,准确再生出新的实体模型。关键词:Pro/ENGINEER、VisualC++、Pro/TOOLKIT、二次开发、九孔柱塞泵缸体缸体TheRealizationofNinecylinderpistonpumpssteepParametricPartsBasedontheRedevelopmentofPro/EAbstract:CADtechnologyismademoreandmoreuseinmechanicaldesign.Designideacanbeexpressedmorevisualizedandmorecomprehensiveinthree-dimensionalfull-scalemock-upthanintwo-dimensionaldrawing,andbasedonthreedimensionalfull—scalemockup,manyotheradvancedCADsuchascomponentassembly,interferencecheck,finiteelementanalysis,motionanalysisandsooncanbeproceed.Hence,three—dimensionaldesigniswidelyusedinmechanicaldesign.However,atthepresenttheapplicationdevelopmentseverelylagsbehindtheincreasingpopularizationofthePro/Eapplicationinourcountry.So,itisverynecessarytodevelopthePro/Eapplication.ThispaperintroducesthecustomizationtoolPro/TOOLKIT,andtakingcoverflangeforexample,ThisarticleprovidesanexampletointroducethetechniquehowtodesignUIDialogBoxesBywayofPro/E'ssecondarydevelopmenttoolPro/TOOLKITaswellascompilecprogramstoactivateandpickupUIdialogboxesinVisualC++.TakingPro/Toolkitasdevelopmenttool,afriendlydesigninterfaceofCoverisestablished.Thispaperinvestigatesthemethodofestablishingparametric3Dmodelandprogrammingbasedon3DmodelinPro/E,auto-modelingof3DpartsisrealizedusingPro/Toolkit.Keywords:Pro/ENGINEER、VisualC++、Pro/TOOLKIT、secondaryNinecylinderpistonpumpssteep第一章绪论1.1三维CAD技术设计和生产的方法随着计算机的迅速发展每天都在发生着显著的变化。以前许多只能靠手工完成的作业,逐渐通过计算机实现了高效化和高精度化。这种利用计算机来达到高效化、高精度化,实现自动化设计、生产以及解析计算的方法称为CAD(ComputerAidedDesign,计算机辅助设计)。CAD是指利用计算机的硬件和软件进行的设计活动,它从根本上改变了过去的手工绘图、发图、凭图纸组织整个生产过程的技术管理方式,使之变为以统一的产品数据库为核心的交互式产品设计、分析、制造和维护的过程。它的迅速发展和广泛应用,给工程设计制造业带来了蓬勃生机,使传统的产品设计方法与生产组织模式发生了深刻的变革。1.1.1CAD技术的发展CAD技术起步于50年代后期,自从计算机出现之后人们就不断地将计算机技术引入机械设计、制造领域。因为它顺应生产力的发展,在其产生之后就得到了迅速地发展。CAD技术经历了四次飞跃:曲面造型系统、实体造型技术、参数化技术、变量化技术。(1)曲面造型系统70年代是飞机和汽车工业的蓬勃发展时期。期间飞机及汽车的制造中遇到了大量的自由曲面问题,此时法国人提出了贝赛尔算法,法国的达索飞机制造公司的开发者们借此算法在二维绘图系统的基础上,开发出以表面模型为特点的自由曲面建模方法,推出了三维曲面造型系统CATIA。(2)实体造型技术表面模型基本上解决CAM的问题,但是由于表面模型技术只能表达形体的表面信息,很难准确地表达如质量、重心、惯性矩等零件的其他特性。基于对CAD一体化技术发展的探索,SDRC公司于1979年发布了世界上第一个完全基于实体造型技术的大型CAD软件-I-DEAS。实体造型技术能够精确表达零件的全部属性,给设计带来了很大的方便。(3)参数化技术正当实体造型技术在CAD系统中广泛运用时,出现了一种比无约束自由造型更好的算法-参数化实体造型方法。它主要的特点是:基于特征、全尺寸约束、全数据相关、尺寸驱动设计修改。参数化技术彻底克服了自由缄默的无约束状态,由尺寸决定实体造型的几何形状。尺寸驱动已经成为当今造型系统的基本功能。如果想修改零件形状的话,只需修改一下尺寸的数值就可以实现形状上的改变。这种新构想最先在PTC公司(ParametricTechnologyCorp)的软件PRO/ENGINEER中成为现实。由于参数化技术的成功应用,使得它很快成为CAD业界的标准,许多软件厂商纷纷追赶。(4)变量化技术变量化造型技术保留了参数化技术基于特征、全数据相关、尺寸驱动设计修改的优点,但是在约束定义方面做了一定的改变。变量化造型技术将所需定义的尺寸“参数”进一步区分为形状约束和尺寸约束,而不仅仅是用尺寸来约束全部几何。通常在新产品开发的概念设计阶段,设计者首先考虑的是设计思想及概念,并将其体现在某些几何形状之中。但是这些几何形状的严格的尺寸定位关系并不能在设计的初始阶段完全确定,所以希望在初始阶段能够允许欠尺寸约束的存在。事实上,参数化技术和变量化技术已经成为了当今主流CAD软件的两大流派。两种造型理论相互依存,共同发展。我国CAD技术的引进是从60年代开始的,最早起步于航空工业,最近几年发展很快,现已在机械、电子、建筑、汽车、服装等行业逐步进入实用阶段。1.2课题背景及意义Pro/ENGINEER是美国PTC(ParametricTechnologyCorporation)公司于1988年开发的参数化设计系统,是一套由设计至生产的机械自动化软件。参数化设计就是将零件尺寸的设计用参数来描述,并在设计修改时通过修改参数的数值来更改零件的外形。Pro/ENGINEER与传统的CAD系统仅提供绘图工具有着极大的不同,它提供了一套完整的机械产品解决方案,包括机械设计、板金设计、加工制造、机构分析、有限元分析等,它使产品的设计效率大大提高,使产品在设计初期具有更多的灵活性,保证在日后根据系统要求进行相应的更改和计算;另外在产品的设计方案阶段,可以形象的表现系统的组成特点,而在产品的生产阶段可以方便与加工中心数据连接。Pro/ENGINEER的特性如下:3D实体模型,单一数据库,以特征作为设计的单位,参数式设计,数据管理(DataManagement),装配管理(AssembleManagement),工程数据库再利用(EngineeringDataReuse),易用性(EaseofUse),硬件独立性(HardwareIndependence)。由于Pro/ENGINEER的功能强大并且通用性非常强,然而,由于Pro/ENGINEER软件的通用性,使得该软件在进行具体的产品设计时感到不方便。对系列化产品,可以通过抽取关键的参数值,再依设计规范计算出各尺寸值并传递给下级零件和子装配,自动的将模型建造出来。为了使Pro/ENGINEER软件能在特定的企业单位的特定产品设计中最大限度的发挥潜力,创造效益,需Pro/ENGINEER进行二次开发,换句话说,二次开发就是对Pro/ENGINEER进一步的充实、完善。基于上述原因,利用Pro/TOOLKIT工具箱及VC++开发操作简单的端盖是很有必要。1.3应用程序的开发工具系统程序模块的设计选择VisualC++6.0作为开发平台。VisualC++6.0是运行于Windows上的交互式可视化集成开发环境,是美国MicrosoftVisualStudio的一部分。像其它的可视化开发环境一样,VisualC++6.0集程序的代码编辑编译连接调试于一体,给编程人员提供了一个完整而又方便的开发界面和许多有效的辅助开发工具。VC++6.0的应用程序向导(AppWizard)可以为很大一部分类型的程序提供框架代码,用户不需要书写代码,只需要几个按钮就可以生成一个完整的可以运行的程序。在Pro/TOOLKIT中,PTC向用户提供了大量的C语言函数库,函数采用面向对象的风格。通过调用这些底层函数,用户能方便而又安全地访问Pro/ENGINEER的数据库及内部应用程序,进行二次开发,扩展一些特定功能。1.4课题的主要研究内容本课题的主要研究内容是端盖的开发设计,当用户选择不同的样式后,应用程序可以在基础模型上自动生成相应的端盖。具体工作包括:(1)Pro/TOOLKIT基本特点和基本数据结构的研究。分析Pro/TOOLKIT内部的基本数据结构、功能函数及其使用方法;探讨Pro/TOOLKIT中的一些基本的自定义对象。(2)用户界面的设计。研究菜单信息文件,制作缸体的菜单界面;研究对话框资源文件,创建主对话框,并在主对话框中弹出一个自定义对话框;研究Pro/TOOLKIT与VisualC++6.0的接口技术;在VC中制作Pro/TOOLKIT用户界面。(3)参数化建模的研究。Pro/ENGINEER软件对于每个模型都有一个主要设计步骤和参数列表,所以要先绘制三维模型,定出参数列表;设计端盖程序,实现自动加载菜单、选择不同的端盖、弹出对话框、修改端盖模型参数值、生成零件等功能。第二章Pro/TOOLKIT二次开发的基础理论2.1Pro/TOOLKIT的基本知识2.1.1Pro/TOOLKIT简介Pro/TOOLKIT是PTC公司为Pro/ENGINEER软件提供的用户化开发工具箱,该工具箱为用户程序及第三方程序提供了与Pro/ENGINEER的无缝连接。用户程序或第三方的程序是用C语言编写的。Pro/TOOLKIT提供了一个C语言的函数库,该函数库能够使用户或第三方的应用程序以一种可控的、安全的方式访问Pro/ENGINEER的数据库和应用程序。用户或第三方通过C程序代码扩充Pro/ENGINEER系统的功能,开发基于Pro/ENGINEER系统的应用程序模块,从而满足用户的特殊要求。Pro/TOOLKIT采用的是功能强大的面向对象的方式来编写的。因此,用来在Pro/ENGINEER和应用程序之间传递信息的数据结构对应用程序来讲是不可见的,而只能通过Pro/TOOLKIT中的函数来访问。Pro/Toolkit支持在windows2000NT/XP操作系统中使用C和C++语言设计程序,采用MicrosoftVisualC++6.0的集成环境下完成程序的设计、调试和编译。2.1.2Pro/TOOLKIT的工作模式Pro/TOOLKIT有两种工作模式,即同步模式和异步模式。同步模式分为两种模式,一种是标准的使用模式,即DLL模式。Pro/TOOLKIT应用程序与Pro/ENGINEER的集成是通过DLL模式来实现的,在DLL模式中,通过编译和连接Pro/TOOLKIT的C代码生成一个目标文件,该目标文件在Pro/ENGINEER启动时与Pro/ENGINEER连接在一起,就像是Pro/ENGINEER本身的程序一样;Pro/TOOLKIT应用程序和Pro/ENGINEER之间的信息交换是直接通过函数调用来实现的。另一种模式是多进程模式。异步模式分为简单异步模式和全异步模式。本课题通过菜单对话框向Pro/ENGINEER发送消息,采用同步DLL模式。2.1.3Pro/TOOLKIT对象和动作Pro/TOOLKIT采用面向对象的程序设计方法。对象(Object)和动作(Action)是Pro/TOOLKIT中最基本的概念。Pro/TOOLKIT的对象实质上是一种类型为结构体的数据,结构体中的成员描述了该对象的属性。所有对象的命名约定为Pro+<对象名>,其中对象名用英文单词表示,第一个字母大写,如ProFeature(特征对象)。Pro/TOOLKIT对象执行的某种特定操作称为动作,动作的执行是通过调用Pro/TOOLKIT函数库提供的C函数来实现了。与动作相关的Pro/TOOLKIT函数名约定为:Pro+<对象名>+<动作>。特别要注意的是Pro/TOOLKIT函数的参数规则,规定为:ProFunction(参数1、参数2、参数3),其中第一个参数用来识别对象(通常为ID值),输入参数在输出参数之前。2.1.4对象句柄每个Pro/TOOLKIT对象都对应于一个结构体,定义该结构类型的一个具体的结构体变量称之对象句柄。按照对象句柄的定义和使用方式分成两种类型:Ohandle(OpaqueHandle,非透明句柄)和DHandle(DatabaseHandle,数据结构句柄)。非透明句柄(OpaqueHandle)是使用Pro/ENGINEER数据结构的内存地址引用Pro/ENGINEER对象,这种方式最简单。使用非透明句柄Pro/TOOLKIT应用程序只能获得该对象的内存地址,不能访问该结构体具体成员,其目的是防止PIDITOOLKIT应用程序访问结构体中的成员。其特点是使用简单高效,缺点是由于它是一个内存指针,所以具有可变性。数据结构句柄(DatabaseHandle)则可访问该对象结构体的具体成员。数据结构句柄是一个十分清晰的数据结构,它包含了足够的信息—包括类型、整型标识符和指向所属模型的句柄,由于数据结构句柄至少包含一个整型标识,所以它具有稳定不变的优点。当利用Pro/TOOLKIT在Pro/ENGINEER中创建一个包含很多信息的对象时,非常重要的一点就是必须先建立该对象的所有相关信息,然后把这个对象添加到Pro/ENGINEER数据库中去。然而采用面向对象技术的Pro/TOOLKIT不允许直接访问这些结构的内容。2.1.5Pro/TOOLKIT函数返回值大多数Pro/TOOLKIT函数的返回值类型为ProError,用来表示调用函数执行状态。最常用返回值是PRO_TK_NO_ERROR,表示函数调用成功。在程序中,通过检查函数的返回值不仅便于在调试是找出错误,更重要的是可以避免在执行时出现异常情况,提高了程序的可靠性。2.2创建Pro/TOOLKIT应用程序的基本方法创建基本方法;利用Make文件创建Pro/TOOLKIT应用程序;利用VC向导创建Pro/TOOLKIT应用程序。采用Make文件的方法创建Pro/TOOLKIT应用程序必须手工修改make文件,程序的设置与调试均不方便,且不能充分利用VC的资源。所以本课题利用VC向导创建Pro/TOOLKIT应用程序。在VisualC++6.0环境下新建一个dll工程。(1)进入VisualC++6.0集成开发环境,选择“File/New...”选项,启动“New”对话框。在“New”对话框中选择“Projects”选项卡,选择MFCAppWizard(dll)项。在“Projectnam”输入工程文件名,在“Location”输入框中输入路径。单击OK按钮。(2)在“MFCAppWizard”对话框中选择“RegularDLLusingsharedMFCDLL”单选框,使Pro/TOOLKIT应用程序使用共享的MFC。单击Finish按钮,进入NewProjectInformation窗口后,单击OK按钮,完成工程文件框架的建立。(3)选择FileView打开VC应用程序向导自动生成程序文件.VC应用程序设计向导在FileView中自动加入了ReadMe.txt、StdAfx.cpp和以工程文件名为前缀的cpp资源文件、def模块定义文件以及rc资源文件等。如下图2.1:图2.1VC文件图2.3Pro/TOOLKIT信息文件的建立信息文件是一种ASCII码文件,用来定义菜单项、菜单项提示等信息,可以用Word记事本和写字板等文字处理软件建立,也可在VC的集成开发环境中建立,但必须以纯文本格式保存且信息文件以四行为一组。其含义分别如下:第一行:Pro/ENGINEER系统可以识别的关键字,该关键字必须与该信息文件函数中的相关字符串相同。第二行:再菜单项或菜单项提示上显示的英语文本。第三行:另一种语言的译文或为空。第四行:当前的Pro/ENGINEER版本为空。其中,第二﹑第四行的语言显示取决于系统环境变量lang的设置。同时,信息文件必须位于<text-path>\text或<text-path>\text\<language>文件夹,<language>为chinese-cn时表示信息为中文,为usascii表示信息为英语。由此,可以通过系统的环境变量控制显示的语种,不必修改程序。2.4编译和连接设置设置包含文件路径,加入“\PROTOOLKIT\INCLUDES”;设置库文件路径,加入“\PROTOOLKIT\I486_NT\OBJ”;设置连接所需库文件,加入“mpr.libprotk_dll.lib”两库文件;在菜单“Project/Settings”的“Link”选项页设定强制文件输出,即选中“Forcefileoutput”的复选项。2.5编制注册文件及应用程序的运行2.5.1编制注册文件在Pro/ENGINEER中运行Pro/TOOLKIT应用程序,必须先进行注册。注册文件的作用是向Pro/ENGINEER系统传递应用程序的信息。一般可只选择NameEXEC_FILETEXT_DIRSTARTUPALLOW_STOPREVISION和END项即可。保存注册文件时,要以.dat为扩展名。建立缸体的注册文件如图2.2:图2.2缸体注册文件图2.5.2应用程序的运行1注册运行分为自动注册和手动注册。缸体采用自动注册,并将注册文件名取为“Protk.dat”将此文件位于Pro/ENGINEER的起始位置设定的目录。其注册文件设置DELAY_START的值为FALSE,应用程序自动运行。2卸载应用程序。将注册文件中ALLOW_STOP设为TRUE,可以手工终止运行。如果启动应用程序失败,可以选择信息按钮来显示应用程序的有关注册信息,以便找出错的原因。第三章用户界面设计Pro/ENGINEER可以利用Pro/TOOLKIT提供的菜单UI对话框以及VC的可视化界面技术,设计出方便实用的人机交互界面,从而大大提高系统的使用效率。在设计人机交互界面时,要尽量能使操作自然简便快捷。3.1菜单的设计菜单是Pro/ENGINEER的主要用户界面,Pro/TOOLKIT提供了一系列菜单操作函数,允许应用程序创建何管理菜单。在应用Pro/TOOLKIT对Pro/ENGINEER进行开发的过程中,添加用户自定义菜单是最常用的技术。菜单在Pro/ENGINEER界面上的生成代表着动态链接库加载成功,这是进行后续工作的基础。3.1.1向菜单栏添加菜单条Pro/ENGINEER是一个不断发展不断更新的软件,某个版本下有的菜单在另外一个版本下可能没有,因此,如果用户自定义菜单依赖某个菜单条,很有可能在另外一个版本中就不能正常使用。这样只能修改应用程序来适应这种变化,其软件的通用性较差。因此,决定在Pro/ENGINEER界面上添加新的菜单条。菜单条是Pro/ENGINEER菜单体系的最顶层菜单,其创建的方法是:直接调用ProMenubarMenuAdd()函数向Pro/ENGINEER添加所需的菜单,要实现函数的功能,就必须将改按钮和命令捆绑在一起。该命令调用某个函数实现按钮功能,在Pro/TOOLKIT中,完成命令添加的函数是ProCmdAction(),函数调用成功返回PRO_TK_NO_ERROR(0),否则返回PRO_TK_GENERAL_ERROR(-1)。3.1.2向菜单条下添加下级子菜单缸体分为嵌入新建、修改、帮助,不可能每个都建立一个菜单条。因此必须添加下级菜单以达到建立一个自然便捷的界面的目的。调用ProMenubarmenuMenuAdd()函数,并在此菜单下添加菜单项。3.1.3缸体菜单设计在旁边插入一个菜单条(UserMenu)“Pro/e二次开发(&E)”,在其下添加一个下级子菜单(SubMenu)“缸体”。在子菜单下建立三个菜单按钮:"UsrPd_"新建,"UsrPd"修改,"Help"帮助。建立的程序清单如下:staticuiCmdAccessStateUsrAccessDefault(uiCmdAccessModeaccess_mode)//访问控制函数{ return(ACCESS_AVAILABLE);}staticuiCmdAccessStateUsrAccessDefault2(uiCmdAccessModeaccess_mode)//访问控制函数{ ProErrorerr; ProMdlmdl; err=ProMdlCurrentGet(&mdl); if(err!=PRO_TK_NO_ERROR) returnACCESS_UNAVAILABLE; return(ACCESS_AVAILABLE);}staticuiCmdAccessStateUsrAccessDefault3(uiCmdAccessModeaccess_mode)//访问控制函数{ ProErrorerr; ProMdlmdl; err=ProMdlCurrentGet(&mdl); if(err!=PRO_TK_NO_ERROR) returnACCESS_AVAILABLE; return(ACCESS_UNAVAILABLE);}ProErrorUsrActionTest();//该函数为按钮调用的动作函数ProErrorUsrActionRepair();ProErrorUsrActionHelp();extern"C"intuser_initialize(intargc,char*argv[]){ ProErrorerr; ProFileNameMsg; uiCmdCmdIduiCmdCmdIdUsrbom; uiCmdCmdIduiCmdCmdIdUsr2;// uiCmdCmdIduiCmdCmdIdUsr3; uiCmdCmdIduiCmdCmdIdUsr4; ProStringToWstring(Msg,"usrmenu.txt"); err=ProMenubarMenuAdd("UsrPd_","UsrPd","Help",PRO_B_TRUE,Msg);//添加菜单按钮 err=ProCmdActionAdd("usr_test_button",(uiCmdCmdActFn)UsrActionTest,uiProeImmediate,UsrAccessDefault3,PRO_B_FALSE,PRO_B_FALSE,&uiCmdCmdIdUsrbom);//定义新建按钮动作函数 err=ProMenubarmenuPushbuttonAdd("UsrPd_","UsrCreate_","UsrCreate","UsedtoCreate",NULL,PRO_B_TRUE,uiCmdCmdIdUsrbom,Msg);//添加新建按钮 err=ProCmdActionAdd("usr_UsrRepair_button",(uiCmdCmdActFn)UsrActionRepair,uiProeImmediate,UsrAccessDefault2,PRO_B_FALSE,PRO_B_FALSE,&uiCmdCmdIdUsr2);//添加修改动作函数 err=ProMenubarmenuPushbuttonAdd("UsrPd_","UsrRepair_","UsrRepair","UsedtoRepair",NULL,PRO_B_TRUE,uiCmdCmdIdUsr2,Msg);//添加修改按钮 err=ProCmdActionAdd("usr_UsrHelp_button",(uiCmdCmdActFn)UsrActionHelp,uiProeImmediate,UsrAccessDefault,PRO_B_FALSE,PRO_B_FALSE,&uiCmdCmdIdUsr4);//添加帮助动作函数 err=ProMenubarmenuPushbuttonAdd("UsrPd_","UsrHelp_","UsrHelp","Usedtohelp",NULL,PRO_B_TRUE,uiCmdCmdIdUsr4,Msg);//添加帮助按钮 return0;}extern"C"voiduser_terminate(){}#include"UsrDlgTest.h"CUsrDlgTest*dlg;ProErrorUsrActionTest(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); if(dlg!=NULL) delete(dlg); dlg=newCUsrDlgTest(); dlg->Create(IDD_DIALOG_TEST); dlg->ShowWindow(SW_SHOW); returnPRO_TK_NO_ERROR;}ProErrorUsrActionRepair(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); if(dlg!=NULL) delete(dlg); dlg=newCUsrDlgTest(); dlg->Create(IDD_DIALOG_TEST); dlg->ShowWindow(SW_SHOW); returnPRO_TK_NO_ERROR;}ProErrorUsrActionHelp(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); ProErrorerr; //获取text父路径 ProPathtext_path; err=ProToolkitApplTextPathGet(text_path); if(err!=PRO_TK_NO_ERROR) returnerr; CStringCmdLine=_T("explorer.exefile://")+(CString)text_path+_T("\\help\\html\\index.htm");//网页的路径 LPTSTRCmd=(LPTSTR)(LPCTSTR)CmdLine;//类型转换,详见MSDN STARTUPINFOsi={sizeof(si)};//保存进程的启动信息 PROCESS_INFORMATIONpi;//保存进程的相关信息 si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=1;//1窗口显示,0表示后台运行 BOOLbRet=::CreateProcess//调用创建进程函数 ( NULL, Cmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ); if(bRet) { ::CloseHandle(pi.hProcess);//关闭进程句柄 ::CloseHandle(pi.hThread);//关闭主线程句柄 } returnPRO_TK_NO_ERROR;}建立缸体的菜单信息文件如下:UsrPd设计缸体(&D)##UsrCreate新建(&U)##UsedtoCreate建立新的缸体##UsrRepair修改(&R)##UsedtoRepair修改当前缸体##UsrHelp帮助(&H)##Usedtohelp帮助文件##菜单创建后效果图图3.1:图3.1模型菜单图3.2对话框的设计弹出式对话框是目前最先进最流行的一种人机交互方式,它能提供图形与文字共存的可视化环境,使操作更为自然快捷。在进行Pro/TOOLKIT程序设计时,有两种方法建立对话框,一种是通过VC提供的MFC可视化对话框设计技术,另一种是通过Pro/TOOLKIT提供的用户界面对话框(UserInterfaceDialogBoxes,简称UI对话框)。3.2.1MFC对话框MFC是VC++程序的一个重要的软件资源,为开发Windows应用程序提供了强大的支持,使用MFC可以实现程序界面的可视化设计。MFC对话框作为一种窗口,具有窗口的一切功能,与UI对话框相比,使用MFC对话框界面布局更加容易,设计﹑调试都比较容易。但它建立的对话框与Pro/ENGINEER的风格不一样,不利于用户的操作。资源文件的结构如下:(Dialog<对话框>(Componens……)(Resources……))Dialog<对话框>为顶层语句,下面主要包含两段构成,其中原件段(Components)声明了该对话框的所有元件,资源段(Resource)分为定义了各元件的属性及布局。资源文件仅仅是对UI对话框的描述,必须通过Pro/TOOLKIT应用程序来装入、显示和控制对话框。分为创建和终止两部分。本程序采用MFC来设计对话框,界面设计如图3.2:图3.2对话框图这里变包含主要控件有:用于输入模型名称的EditBox,对应变量为CStringm_edit_mdlname用于输入大圆半径的ComboBox对应变量为CComboBoxm_combo_d用于输入小圆半径的EditBox对应变量为doublem_edit_d2用于输入高度的EditBox对应变量为doublem_edit_h启动后效果如图3.3:对话框效果图3.3这四步是创建一个UI对话框的最基本步骤。其中第二步可实现数据的调用,它的动作设置函数与元件类型有关,其主要目的是设置用户在对话框界面上对某一元素进行操作时,调用的动作函数。在完成这四步的情况下,可以终止UI对话框,具体方法是调用ProUIDialogExit()函数。第四章缸体的开发4.1总体方案为了方便用户的使用,拟采用在Pro/ENGINEER主菜单上添加菜单条,再按照零件的形式添加下级子菜单,分别在子菜单中添加菜单按钮。点击菜单按钮弹出相应的用户界面,输入主要参数,生成所需的零件,具体结构如图所示采用三维模型与程序控制相结合的方式。三维模型不是由程序创建,而是利用交互方式生成。在已创建的零件三维模型基础上,进一步根据零件的设计要求建了一组可以完全控制三维模型形状和大小的设计参数。参数化程序针对该零件的设计参数进行编程,实现设计参数的检索、修改和根据新的参数值生成新的三维模型的功能,其过程如图4.1:图4.1基于三维模型的参数化设计实现过程4.2基于三维模型的参数化程序设计分析对缸体的二次开发,只需对同类产品的三维模型进行参数化修改,派生出新的三维模型。基本原理是采用三维模型与程序控制相结合的方式。三维模型不是由程序创建,而是利用交互方式生成。在已创建的零件三维模型基础上,进一步根据零件的设计要求建立以足可以完全控制三维模型形状和大小的设计参数。参数化程序针对该零件的设计参数进行编程,实现设计参数的检索﹑修改和根据新的参数值生成新的模型的功能。也就是说,先建立参数化模型,再通过调整其参数来改变几何形状,从而实现产品的精确造型。基于三维模型的参数化程序设计方法,主要内容包括三维模型的创建﹑设计参数的确定及参数化程序设计等。为了与一般三维模型相区别,下面将参数化模型设计成需要使用的模型称为三维模型样板,实现过程如图4.2所示图4.2基于三维模型的参数化设计实现过程4.2.1缸体三维模型的建立在Pro/ENGINEER环境用人机交互方式建立端盖三维模型样板。在对缸体样板进行特征造型时,利用尺寸标注和施加对称等关系实现对几何图形的全约束。在创建或修改特征需要输入数值时,直接输入参数名。如在草图中标注或修改尺寸值时用参数名代替具体数值。选取主菜单中的【工具】→【参数】命令,弹出“参数”对话框,如图4.3图4.3缸体模型参数图4.3模型开发模型如图4.4模型图4.4本程序需要驱动的尺寸有:d3,d1,d2,d0其中d1为大圆直径,d2为小圆半径,d0为高度,d3为小圆参考基准圆的半径,与d1成一定比例关系本程序是通过参数来驱动尺寸,特建立如下关系式如图4.5:关系图4.54.4创建模型原理:复制模板到当前工作路径,通过程序界面输入相关值到参数中.来驱动尺寸代码:对话框初始化,在OnInitDialog函数中添加如下代码: UsrDlgInit();//初始化创建模型初始话UsrCreateInit内添加代码:m_combo_d.SetCurSel(0); m_creat.SetWindowText(_T("创建")); m_edit_mdlname=_T("prt_0"); m_edit_d2=6; m_edit_h=40;UpdateData(FALSE);创建模型,UsrPartCreate中添加:ProErrorerr; UpdateData(TRUE); if(m_edit_mdlname.IsEmpty()) { AfxMessageBox(_T("模型名称不能为空")); return; } //获取模板#if1 ProPathp_textpath; err=ProToolkitApplTextPathGet(p_textpath); if(err!=PRO_TK_NO_ERROR) return; CStringpart_temp_path=(CString)p_textpath+_T("\\template\\temp"); charc_part_temp_path[PRO_PATH_SIZE]=""; wsprintfA(c_part_temp_path,"%S",part_temp_path); ProPathp_temp_path; ProStringToWstring(p_temp_path,c_part_temp_path); ProMdltemp_mdl; err=ProMdlLoad(p_temp_path,PRO_MDL_PART,PRO_B_FALSE,&temp_mdl); if(err!=PRO_TK_NO_ERROR) return; ProPathcur_dir; err=ProDirectoryCurrentGet(cur_dir);//获取当前工作路径 if(err!=PRO_TK_NO_ERROR) return; charc_mdl_name[PRO_NAME_SIZE]=""; wsprintfA(c_mdl_name,"%S",m_edit_mdlname); ProNamep_mdl_name; ProStringToWstring(p_mdl_name,c_mdl_name); ProMdlnew_mdl; err=ProMdlCopy(temp_mdl,p_mdl_name,&new_mdl); if(err!=PRO_TK_NO_ERROR) return;#endif //用参数驱动 UsrParamDriv(new_mdl); //显示 intw_id; err=ProWindowCurrentGet(&w_id); if(err!=PRO_TK_NO_ERROR) return; err=ProWindowActivate(w_id); ProMdlDisplay(new_mdl); OnOK();创建图形如图4.6:创建图4.64.5修改模型原理:程序启动起初获取当前模型,通过程序界面输入参数响应值,驱动尺寸.初始化,在UsrRepairInit中添加CUsrParamcparam; ProErrorerr; m_creat.SetWindowText(_T("修改")); ProMdlmdl; err=ProMdlCurrentGet(&mdl); if(err!=PRO_TK_NO_ERROR) return; ProNamemdl_name; err=ProMdlNameGet(mdl,mdl_name); if(err!=PRO_TK_NO_ERROR) return; m_edit_mdlname=(CString)mdl_name; //获取参数 CUsrInicini; ProPathp_textpath; err=ProToolkitApplTextPathGet(p_textpath); if(err!=PRO_TK_NO_ERROR) return; CStringcs_ini_full_path=(CString)p_textpath+_T("\\text\\usrconfig.ini"); CStringArraycsa_keys; CStringArraycsa_values; inti_err; CStringcs_d1_param; i_err=cini.UsrKeyValueGet(cs_ini_full_path,_T("param"),_T("d1"),&cs_d1_param); doubled_d1=0; err=cparam.UsrParamRead(mdl,cs_d1_param,PRO_PARAM_DOUBLE,&d_d1); CStringcs_d1; cs_d1.Format(_T("%.2lf"),d_d1); m_combo_d.SetWindowText(cs_d1); CStringcs_d2_param; i_err=cini.UsrKeyValueGet(cs_ini_full_path,_T("param"),_T("d2"),&cs_d2_param); err=cparam.UsrParamRead(mdl,cs_d2_param,PRO_PARAM_DOUBLE,&m_edit_d2); CStringcs_h_param; i_err=cini.UsrKeyValueGet(cs_ini_full_path,_T("param"),_T("h"),&cs_h_param); err=cparam.UsrParamRead(mdl,cs_h_param,PRO_PARAM_DOUBLE,&m_edit_h); UpdateData(FALSE);修改模型,UsrPartRepair函数中添加:ProErrorerr; ProMdlmdl; err=ProMdlCurrentGet(&mdl); if(err!=PRO_TK_NO_ERROR) return; UsrParamDriv(mdl);图4.7为修改后的图:修改图4.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论