当前位置:首页 >> 机械/仪表 >>

proe二次开发 标准件库 齿轮参数化设计 毕业设计


前言........................................................................................................................................... 0 基于 Pro/E Wildfire 建立常用件参数化模型库 ................

..................................................... 1 第一章 绪论....................................................................................................................... 3

1.1 引言............................................................................................................................. 3 1.2 课题的提出及意义.................................................................................................... 4 1.3 本章小节..................................................................................................................... 4 第二章二次开发总体方案的确定 ........................................................................................... 4 2.1 二次开发语言(Pro/TOOLKIT) .................................................................................... 4 2.2 开发工具的确定........................................................................................................ 5 2.3 开发环境.................................................................................................................... 7 2.3.1 硬件开发环境.................................................................................................. 7 2.3.2 软件开发环境................................................................................................. 7 2.4 总体设计框架........................................................................................................... 10 第三章菜单的设计开发 ......................................................................................................... 12 3.1 菜单的设计.............................................................................................................. 12 3.1.1 编写菜单信息资源文件 ............................................................................... 13 3.1.2 编写菜单操作源程序 ................................................................................... 19 3.1.3 注册运行....................................................................................................... 22 第四章建立参数化模型库 ..................................................................................................... 24 4.1 国家标准................................................................................................................... 24 4.2 参数化建模............................................................................................................... 26 4.3 对话框的设计........................................................................................................... 28 4.4 参数值的传递........................................................................................................... 46 4.5 编写注册文件........................................................................................................... 71 4.6 编译程序并执行....................................................................................................... 71 第五章总结与展望................................................................................................................. 77 5.1 论文总结................................................................................................................... 77 5.2 后续发展方向........................................................................................................... 77 致谢......................................................................................................................................... 78
2

参考文献................................................................................................................................. 79

3

前言
毕业设计是我们综合运用所学的理论知识和实践相结合的重要环节。 是对我们大学四年 所学知识的一次全面检验和应用; 首先, 毕业设计能培养我们分析实际问题的能力, 运用所学知识动手解决实际问题的能 力,从而巩固深化所学的理论知识,为即将走向工作岗位打下坚实的基础。 其次,毕业设计培养我们深入实际,调查研究,解决在现实问题中可能出现各种问题, 所以我们在设计中必须学会分析问题和解决问题的方法,要抓住主要问题,按安全可靠,经 济实用的原则设计。 再次,毕业设计培养了我们熟悉有关技术政策,运用国家标准规范,手册,图册等工具 书,独立进行设计计算,数据处理,编写技术文件的工作能力。 在毕业设计中,我们必须培养认真、负责、细致、踏实的工作作风,养成保质保量、按 时按量完成任务的习惯,要达到这一目的,我们在设计中必须应做到: (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 Studio2005

The Secondary Development of common parts Based on Pro/E
Abstract: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.
1

Keywords: Pro/E、Secondary Development、Pro/TOOLKIT、Visual Studio2005

2

第一章 绪论
1.1 引言
(1)参数化技术 正当实体造型技术在 CAD 系统中广泛运用时,出现了一种比无约束自由造型更好的算 法-参数化实体造型方法。它主要的特点是:基于特征、全尺寸约束、全数据相关、尺寸驱 动设计修改。 参数化技术彻底克服了自由缄默的无约束状态, 由尺寸决定实体造型的几何形 状。尺寸驱动已经成为当今造型系统的基本功能。如果想修改零件形状的话,只需修改一下 尺寸的数值就可以实现形状上的改变。这种新构想最先在 PTC 公司(Parametric Technology Corp) 的软件 PRO/ENGINEER 中成为现实。 由于参数化技术的成功应用, 使得它很快成为 CAD 业界的标准,许多软件厂商纷纷追赶。 (2)变量化技术 变量化造型技术保留了参数化技术基于特征、全数据相关、尺寸驱动设计修改的优点, 但是在约束定义方面做了一定的改变。变量化造型技术将所需定义的尺寸“参数”进一步区 分为形状约束和尺寸约束, 而不仅仅是用尺寸来约束全部几何。 通常在新产品开发的概念设 计阶段,设计者首先考虑的是设计思想及概念,并将其体现在某些几何形状之中。但是这些 几何形状的严格的尺寸定位关系并不能在设计的初始阶段完全确定, 所以希望在初始阶段能 够允许欠尺寸约束的存在。 (3)二次开发研究 Pro/ENGIEER 提供了强大的三位几何造型功能, 使我们能够创建各种复杂的几何零件模 型,但有时这些功能并不能满足我们的要求。例如标准零件系列,它们的结构都是相同的, 区别只在与尺寸, 如果标准零件系列通过三维建模的方式来实现, 那么工作量将是非常巨大 的。最有效的方法使利用标准零件的相似性,发挥 Pro/ENGEER 参数化建模的特长,使用二 次开发工具,如族表工具、用户定义特征(UDF) 、Pro/Program、J-link、Pro/Toolkit 等来实 现。

3

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
4

提供的 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 等。 以下简单介绍上述几种二次开发工具: 1 ○ 族表(Family Table)

通过族表可以方便地管理具有相同或相近结构的零件, 特别适用于标准零件的管理。 族 表工具是通过建立一个通用零件作为父零件, 然后在其基础上对各参数加以控制生成派生零 件。整个族表是通过电子表格来实现的,因此可以称其为表格驱动。 2 ○ 用户定义特征(UDF)

用户定义特征是将若干个系统特征整合为一个自定义特征,使用时作为一个整体出现。 UDF 适用特定产品的特定结构,有利于设计者根据产品特征快速生成几何模型。 ○ Pro/Program 3 Pro/ENGINEER 软件对于每个模型都有一个主要设计步骤和参数列表 Pro/Program,它是
5

由类似 BASIC 的高级语言构成, 用户可以根据设计需要来编辑该模型的 Program,使其以一个 程序来工作。通过运行该程序,系统通过人机交互的方法来控制系统参数、特征出现与否以 及特征的具体尺寸等。 ○ J-link 4 J-link 是 Pro/ENGINEER 中自带的基于 JAVA 语言的二次开发工具,是一种面向对象、独 立于操作系统平台的开发工具。用户通过 JAVA 编程实现向 Pro/ENGINEER 软件添加功能。 ○ Pro/TOOLKIT 5 Pro/TOOLKIT 同 J-link 一样也是 Pro/ENGINEER 自带的二次开发工具。 Pro/TOOLKIT 中, 在 PTC 向用户提供了大量的 C 语言函数库, 函数采用面向对象的风格。 通过调用这些底层函数, 用户能方便而又安全地访问 Pro/ENGINEER 的数据库及内部应用程序,进行二次开发,扩展 一些特定功能。 上述各种二次开发工具集中在 Pro/ENGINEER 的“工具”菜单中,如图 2-1 所示。其中 “辅助应用程序”主要用来调用 Pro/TOOLKIT 程序。

图 2-1 由于 Pro/TOOLKIT 具有函数简单,应用方便等优点,本课题将使用 Pro/TOOLKIT 进行二次开 发研究。
6

2.3 开发环境
开发环境包括两部分:即硬件开发环境和软件开发环境。

2.3.1 硬件开发环境
本课题是基于 Pro/Engineer Wildfire4.0 的二次开发,因此只要能够安装支持 Pro/E Wildfire4.0 版本即可。建议配置如表 2-1 所示。 表 2-1 计算机配置

项目 CPU 内存 显卡 网卡 2.53GHz 2GB

推荐配置

显存 256MB 以上, 推荐使用 ATIHD3470 以上的显卡 必须安装网卡(或使用虚拟网卡)

2.3.2 软件开发环境
操作平台:Windows2000/XP/NT; 开发平台:Pro/ENGINEER Wildfire4.0; 开发语言:Visual Studio2005.

对于 PROE4.0 来讲,其文件结构与 2.0 是一致的,读者可参照前面的描述来回顾相关 内容,下面请随我一起来配置这套组合下的二次开发环境。首先打开 VS2005 中的 VC 开 发环境。依次选择文件—>新建—>项目,系统弹出项目对话框(图 1-8)

7

图 2-2 选择如图所示的 MFC DLL 项目,输入项目名称并设置项目路径,点击确定。在接下来 的对话框中选择 “使用共享 MFC DLL 的规则 DLL” (默认的也是这个选项) 点击完成后, , 与 VC++6.0 一样,系统自动为我们搭建了一个 DLL 的开发环境,现在,我们要在这个环 境下配置 TOOLKIT 开发所需要的头文件和库文件路径。 依次在菜单中选择:工具—>选项,系统弹出选项对话框。在该对话中选择“项目和解 决方案”一栏中的“VC++目录”选项,并参照图 1-9 的方法设置头文件路径

8

图2-3 我的设置为: D:\Program Files\proeWildfire 4.0 \protoolkit\include D:\Program Files\proeWildfire 4.0 \protoolkit\protk_appls\includes D:\Program Files\proeWildfire 4.0 \prodevelop\includes D:\Program Files\proeWildfire 4.0 \prodevelop\prodev_appls\includes 仍旧在该对话框下,设置库文件路径,如图 1-10:

图 2-4 设置好头文件和库文件路径后, 就还差最后一步了, 现在我们要来指定使用中的具体库 文件。

9

图 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 所示。

10

打开 VS2005

设计对话框

建立开发目录

Pro/toolkit 编程

新建工程

连接

设计菜单

调试通过

图 2-6

启动 Pro/E

调用对话框

手动加载菜单

输入设计参数

选择自定义菜单

生成实体模型

选择所需零件

退出程序

11

第三章菜单的设计开发
3.1 菜单的设计
菜单是 Pro/ENGINEER 的主要用户界面。Pro/TOOLKIT 提供了一系列菜单操作函数,允许 应用程序创建和管理菜单。Pro/ENGINEER 菜单包括菜单栏、菜单、菜单项(按钮) 、筛选按 钮、单选按钮等等,如图 4-1 示。

图 3-1 Pro/TOOLKIT 可以向 Pro/ENGINEER 菜单中添加上述类型的菜单。 添加菜单的大致过程如 下: 1 ○ 2 ○ 3 ○ 编写信息资源文件(信息资源文件用于提供菜单的标签文本和帮助信息) ; 使用 Pro/TOOLKIT 的函数编写源程序,给菜单按钮设置调用函数(动作函数) ; 注册运行程序。

下面介绍菜单的相关术语: ? 菜单条(Menu bar)Pro/ENGINEER 界面顶部菜单栏中的菜单,如 File、Edit 和 View 等均称为菜单条; ? ? 菜单条菜单(Menu bar menu)菜单条的下级子菜单。即多层菜单的次级菜单; 菜单的按钮(Push button)下拉菜单中用来启动一组指令的菜单项,如 File 菜单条 中的 Edit 按钮; ? 菜单的复选按钮(Check button)下拉菜单中用来执行开关动作的菜单项,如 View
12

菜单条中的 Model Tree(模型树)显示或关闭菜单项; ? 菜单的单选按钮组(Radio group)下拉菜单的一组选项中只能设置其中一项的菜单 项; ? ? 命令(Command)从菜单条或工具栏图标激活的一个执行过程; 命令标识号(Command id)指向某一命令的指针。一般作为 Pro/TOOLKIT 函数的输 入参数; ? ? 动作命令(Action command)启动菜单按钮执行的一组指令; 选项命令(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)所示。
13

图 4-2(a) “通用件库”菜单

图 4-2(b) “标准件库”菜单
14

图 4-2 所示菜单的资源文件如下: StandardPartLibDesign 通用件库 # # FirstButton 双头螺柱参数化设计 # # this button will generate a doublescrew_bolt this button will generate a doublescrew_bolt # # SecondButton 垫片参数化设计 # # this button will generate a shim this button will generate a shim # # ThirdButton 螺栓参数化设计 # # this button will generate a bolt this button will generate a bolt
15

# # FourthButton 螺母参数化设计 # # this button will generate nut this button will generate nut # # FifthButton 键参数化设计 # # this button will generate a key this button will generate a key # # SixthButton 螺钉参数化设计 # # this button will generate a nut_bolt this button will generate a nut_bolt # # seventhButton 人字型齿轮参数化设计 #
16

# this button will generate a Herringbone_gear this button will generate a Herringbone_gear # # eigthButton 轴参数化设计 # # this button will generate a shaft this button will generate a shaft # # SubMenu1 齿轮参数化设计 # # SubMenu2 标准件库 # # SubMenu3 蜗轮蜗杆参数化设计 # # ninthButton 锥齿轮参数化设计 # #
17

this button will generate a bevel_gear this button will generate a bevel_gear # # tenthButton 蜗轮参数化设计 # # this button will generate a worm_gear this button will generate a worm_gear # # eleventhButton 蜗杆参数化设计 # # this button will generate a worm this button will generate a worm # # twelthButton 正齿轮参数化设计 # # this button will generate a spur_gear this button will generate a spur_gear # # 在记事本编辑完以上资源后,保存为纯文本格式(.txt),并且命名为 Message。将
18

Message.txt 文件存放在 Text\Release\text\chinese_cn 目录下

3.1.2 编写菜单操作源程序

图 3-3 新建项目,名称 standard

编写完菜单信息资源文本后,还须使用 Pro/TOOLKIT 提供的菜单操作函数来实现每个菜 单的功能,即编写菜单项菜单的动作函数。 首先,必须列出 VC 程序将用到的相关头文件,如 #include"ProMenu.h" #include"ProUtil.h" #include"ProMenubar.h" #include <ProMessage.h> 其次,必须对用到的函数进行声明,否则将会出错,如 void drawdoublescrew_bolt() { } void drawshaft()
19

{ } void drawHerringbone_gear() { } void drawshim() { } void drawbolt() { } void drawnut() { } void drawkey() { } void drawworm_gear() { } void drawworm() { } void drawnut_bolt() { } void drawbevel_gear() { }
20

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<ProMenuBar.h>。 函数的返回值类型为 ProError,调用成功返回 PRO_TK_NO_ERROR(0), 否则返回 PRO_TK_GENERAL_ERROR(-1)。函数如下:
21

ProMenubarMenuAdd ("UserMenuBar", "UserMenu", "Utilities", PRO_B_TRUE, MsgFile) 其中"UserMenuBar"为菜单项名,作为调用其他菜单函数的输入参数;"UserMenu"为菜 单标签名,即该菜单条的关键字。必须与信息文件该段的标识关键字相同。"Utilities", PRO_B_TRUE 表示该菜单加在“工具”菜单的右侧。MsgFile 为菜单信息文件名,这里定为 "Message"。

ProMenubarmenuMenuAdd()函数的作用是向菜单添加下级子菜单。注意,在生成的下 级子菜单中必须至少包含一项菜单项, 否则将不显示下级子菜单。 该函数可以创建多层下级 子菜单,只需用不同层次的菜单名标识作为们菜单名即可。其函数如下:

ProMenubarmenuMenuAdd("UserMenuBar","SubMenu1","SubMenu1",NULL,PRO_B_TR UE, 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"是提示信息, 必须与信息文件中一致。 程序中用到了菜单条、菜单条菜单、下级子菜单、菜单按钮等。 将上面编辑的资源信息文件放入“Text\Release\text\chinese_cn”文件夹内。

3.1.3 注册运行
编写调试完应用程序后,将整个 VC 工程文件拷贝到工作目录下,用记事本编写注册文 件,并保存为“Protk.dat” 。注册文件内容如图 4-9 所示。

22

图 3-4 注册文件

这里的“.\”代表相对路径方式,即起始目录为 Pro/ENGINEER 的工作目录。用相对路 径方式的优点在于具有可移植性。即此二次开发程序只要存放在 Pro/ENGINEER 设置的工作 目录下,便能自动运行,而不要求用户更改设置,大大地方便了用户的使用。图 4-9 中各字 段及其意义如表 4-1 所示。

表 4-1 注册表字段及意义

字段名 Name Exec_fi le Text_di r Startup Allow_s top Delay_s tart Revisio n
23

意义 外部程序标识名,该标识名不一定要与可执行程序名相同 可执行程序名(包括路径)

指定外部程序的 text 目录树的全路径

这里取 dll(动态连接库) 如设为 TRUE,在 Pro/ENGINEER 工作时可以终止应用程序, 如设为 FALSE 则不能终止应用程序 若设为 TRUE, Pro/ENGINEER 在启动时不调用 Pro/TOOLKIT 应 用程序,但可以手工启动,若设为 FALSE,则系统将自动启动。 指定 Pro/TOOLKIT 版本号

End

段结束标志

注意, DELAY_START 字段内容设为 FALSE, 将 这样打开 Pro/ENGINEER 时使自动注册运行 该应用程序。即启动 Pro/ENGINEER 后,自定义菜单使自动挂接到 Pro/ENGINEER 菜单条上。 不必再手动注册和运行。这样,所创建的“通用件库”菜单便如同 Pro/ENGINEER 菜单栏中 的一项菜单,即当运行 Pro/ENGINEER, “通用件库”菜单项将自动连接上去。

第四章建立参数化模型库
在使用 CAD 产品进行产品建模时,设计人员经常要选用标准件或者选择通用件。若每 次设计人员都需要重新对这些零件进行造型, 设计人员必然要做许多重复性的劳动。 本课题 所建模型库包括螺栓,螺钉,螺母,螺柱,键,垫片,正齿轮,涡轮,蜗杆,等下面以六角 螺栓为例详细说明,其他源程序见附录

4.1 国家标准

六角螺栓

M5 GB5782-86 螺栓 长度≤125 16+ 2.00

M6

M8

M10

M12

M14

M16

M18

M20

M24

18+ 2.50

22+ 3.00

26+ 3.50

30+ 4.00
24

34+ 4.50

38+ 4.50

42+ 5.00

46+ 5.00

54+ 5.00

时的螺纹 长度 L 螺栓 长度≥125 - ≤200 时 L 螺栓 45+ 长度>200 3.50 时 L <此项 长度允许 全螺纹制 造L 搓 丝坯 AX (6g M 级) IN D 粗 杆直 AX 径 D3 IN M 六 AX 角对 M 边 S IN 头 部直 AX M 5 8 3.6 5 8 4.1 5 73 5.4 8 73 6.5 8 73 7.6 8 67 8.9 67 10. 18 67 11. 72 67 12. 72 38 15. 22 0 7.7 M 2 8.0 M 0 4.8 2 10. 00 9.7 5.0 0 5.8 8 13. 00 12. 6.0 0 7.7 8 16. 00 15. 8.0 10. 00 9.7 12. 00 11. 73 18. 00 17. 14. 00 13. 73 21. 00 20. 16. 00 15. 73 24. 00 23. 18. 00 17. 73 27. 00 26. 20. 00 19. 67 30. 00 29. 24. 00 23. 67 36. 00 35. 8 5 5 5 65 50 50 15 15 4.3 5.2 7.0 8.8 10. 12. 14. 16. 18. M 2 4.4 0 5.3 0 7.1 0 8.9 10. 70 12. 55 14. 55 16. 20 18. 20 25. 00 30. 00 35. 00 40. 00 45. 00 50. 00 55. 00 65. 00 65. 00 70. 00 4.00 4.50 4.50 5.00 5.00 5.00 49+ 53+ 57+ 61+ 65+ 73+ 22+ 2.00 24+ 2.50 28+ 3.00 32+ 3.50 36+ 4.00 40+ 4.50 44+ 4.50 48+ 5.00 52+ 5.00 60+ 5.00

25

径 H IN 垫 圈直 径 D2 IN

M 5

3.3 5

3.8 5

5.1 2

6.2 2

7.3 2

8.6 2

9.8

11. 28

12. 28

14. 78

M 0

6.9 0

8.9

11. 60

14. 60

16. 60

19. 60

22. 50

25. 30

28. 20

33. 60

4.2 参数化建模
拉伸,如下图

图 4-1

26

图 4-2 螺栓如上

关系如上图 4-3 设置参数

27

图 4-4

4.3 对话框的设计
下面以六角螺栓为例介绍说明螺栓对话框的创建全过程。

1.

新建对话框 如图 4-1

图 4-5

点击新建按钮出现下图 4-2

28

图 4-6

右键单击属性弹出如图对话框弹出 4-7

29

图 4-7 更改对话框名称为“螺栓参数化设计” 如下图 4-4

图 4-8 向对话框中拖入控件

在 dialog 上右键,添加资源出现如下对话框 4-9

图 4-9

点击导入图片,整理对话框如下 4-10

30

图 4-10

选中对话框单击右键选择“添加类”4-11

31

图 4-11

对话框添加完毕

2.

插入图片

在资源视图中右键,添加资源,导入图片

如下图所示

32

图 4-12

导入后的图片都有唯一的图片 ID 如下图 4-13

33

图 4-13

3.

完成对话框的设计 如图 4-8 至 4-12

螺钉参数化设计对话框 4-8

34

螺栓参数化设计对话框 4-9

键参数化设计 4-10

35

双头螺柱参数化设计 4-11

螺母参数化设计 4-12
36

垫片参数化设计 4-13

4.

对话框的调用

先定义一个函数 当点击菜单时会触发这个函数 这个函数的内容是调用对应的对话框

具体实现过程如下

名称 Cboltdlg,在 standard.cpp 中添加如下程序段 // standard.cpp : 定义 DLL 的初始化例程。
37

#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
38

#define new DEBUG_NEW #endif // //TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的, // // // // // // // // // // // // // // // // // // // // // 有关其他详细信息, 请参阅 MFC 技术说明 33 和 58。 此宏先于任何 MFC 调用 出现在每个函数中十分重要。这意味着 它必须作为函数中的第一个语句 出现,甚至先于所有对象变量声明, 这是因为它们的构造函数可能生成 MFC DLL 调用。 } extern "C" BOOL PASCAL EXPORT ExportedFunction() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 此处为普通函数体 例如: 则从此 DLL 导出的任何调入 MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到 该函数的最前面。

// CstandardApp BEGIN_MESSAGE_MAP(CstandardApp, CWinApp) END_MESSAGE_MAP() void drawdoublescrew_bolt()
39

{ 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(); }
40

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();
41

} 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; } //定义菜单的可访问性
42

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,c md_id12;

//在 Help 菜单的左边添加“标准件库” //设置信息文件名称 ProStringToWstring(msgfile,"standard.txt");

//在菜单栏上 help 左侧添加新菜单 GearMenu status = 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_TRU
43

E,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_i d5); ProCmdActionAdd(" 命 令 六

",(uiCmdCmdActFn)drawnut_bolt,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,& cmd_id6); ProCmdActionAdd(" 命 令 七

",(uiCmdCmdActFn)drawHerringbone_gear,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B _TRUE,&cmd_id7); ProCmdActionAdd(" 命 令 八

",(uiCmdCmdActFn)drawshaft,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd _id8);
44

ProCmdActionAdd("







",(uiCmdCmdActFn)drawbevel_gear,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE, &cmd_id9); ProCmdActionAdd(" 命 令 十

",(uiCmdCmdActFn)drawworm_gear,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE ,&cmd_id10); ProCmdActionAdd(" 命 令 十 一

",(uiCmdCmdActFn)drawworm,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cm d_id11); ProCmdActionAdd(" 命 令 十 二

",(uiCmdCmdActFn)drawspur_gear,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE, &cmd_id12);

//在新菜单上添加按钮 ProMenubarmenuPushbuttonAdd("SubMenu2","PushButton1","FirstButton","this button will generate a doublescrew_bolt", NULL, PRO_B_TRUE, cmd_id1, msgfile); ProMenubarmenuPushbuttonAdd("SubMenu2","PushButton2","SecondButton","this button will generate a shim",NULL,PRO_B_TRUE,cmd_id2,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu2","PushButton3","ThirdButton","this button will generate a bolt",NULL,PRO_B_TRUE,cmd_id3,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu2","PushButton4","FourthButton","this button will generate nut",NULL,PRO_B_TRUE,cmd_id4,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu2","PushButton5","FifthButton","this button will generate a key",NULL,PRO_B_TRUE,cmd_id5,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu2","PushButton6","SixthButton","this button will generate a nut_bolt",NULL,PRO_B_TRUE,cmd_id6,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu1","PushButton7","seventhButton","this button will generate a Herringbone_gear",NULL,PRO_B_TRUE,cmd_id7,msgfile);
45

ProMenubarmenuPushbuttonAdd("标准件库菜单","PushButton8","eigthButton","this button will generate a shaft",NULL,PRO_B_TRUE,cmd_id8,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu1","PushButton9","ninthButton","this button will generate a bevel_gear",NULL,PRO_B_TRUE,cmd_id9,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu3","PushButton10","tenthButton","this button will generate a worm_gear",NULL,PRO_B_TRUE,cmd_id10,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu3","PushButton11","eleventhButton","thi s button will generate a worm",NULL,PRO_B_TRUE,cmd_id11,msgfile); ProMenubarmenuPushbuttonAdd("SubMenu1","PushButton12","twelthButton","this button will generate a spur_gear",NULL,PRO_B_FALSE,cmd_id12,msgfile);

return status;

}

//========================================= //函数:user_terminate() //功能:用户中断函数 //========================================= extern "C" void user_terminate() { return; }

4.4 参数值的传递
由于螺栓为标准件有严格的国家标准故查阅相关标准知:螺杆长度 L 为一范围值,其他 均为定值,因此采用了从 vs2005 中的 CmboBox 控件以及 Edit Control 控件 如下图零件规格处下拉菜单为 ComboBox 控件,输入参数 L 处为 Edit Control 控件
46

图 4-14

图 4-15 单击 Combobox 控件选中,右键弹出上图

47

图 4-15 单击添加变量弹出上图,输入变量名 m-combo 完成

48

图 4-16 再次选中 combobox 控件右键点击属性,在数据处键入 M5;M6 等用;分开

49

选中 edit control 控件右键单击添加变量

图 4-17 在类别中选择 value 型,在变量名中键入 m_L 完成
50

图 4-18 选中确认按钮右键单击属性更改名称为生成模型如图 4-18 双击生成模型按钮,加入如下程序即完成了参数值的传递 根据国标与参数化建模中的参数,源程序如下

// boltdlg.cpp : 实现文件 #include"stdafx.h" #include"standard.h" #include"boltdlg.h" #include"ProToolkitErrors.h" #include"ProObjects.h"
51

#include"ProUtil.h" #include<ProWindows.h> #include<ProSolid.h> #include<ProModelitem.h> #include<ProParameter.h> // Cboltdlg 对话框 IMPLEMENT_DYNAMIC(Cboltdlg, CDialog)

Cboltdlg::Cboltdlg(CWnd* pParent /*=NULL*/) : CDialog(Cboltdlg::IDD, pParent) , m_L(0) { } Cboltdlg::~Cboltdlg() { } void Cboltdlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_L); DDX_Control(pDX, IDC_COMBO2, m_combo); } BEGIN_MESSAGE_MAP(Cboltdlg, CDialog) ON_BN_CLICKED(IDOK, &Cboltdlg::OnBnClickedOk) ON_EN_CHANGE(IDC_EDIT1, &Cboltdlg::OnEnChangeEdit1) ON_CBN_SELCHANGE(IDC_COMBO2, &Cboltdlg::OnCbnSelchangeCombo2) END_MESSAGE_MAP() // Cboltdlg 消息处理程序

52

void Cboltdlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); ProMdl part; ProParameter param1,param2,param3,param4,param5,param6,param7,param8,param9; ProParamvalue value1,value2,value3,value4,value5,value6,value7,value8,value9; ProModelitem feature; int p_id; // lxh 注:使用 ProMdlRetrieve 将模型导入内存 ProMdlRetrieve(L"D:\\LZX\\ 标 准 件 库 \\ 螺 栓

\\liujiaoluoshuan.prt",PRO_MDL_PART,&part); ProMdlIdGet(part,&p_id); //获得当前模型标识 ID ProModelitemInit(part,p_id,PRO_PART,&feature); //初始化模型 ProParameterInit(&feature,L"B",&param1); ProParameterInit(&feature,L"H",&param2); ProParameterInit(&feature,L"D",&param3); ProParameterInit(&feature,L"S",&param4); ProParameterInit(&feature,L"K",&param5); ProParameterInit(&feature,L"ML_PITCH",&param6); ProParameterInit(&feature,L"ML_D1",&param7); ProParameterInit(&feature,L"R",&param8); ProParameterInit(&feature,L"L",&param9); if (m_L==0) { AfxMessageBox(TEXT("请输入螺栓长度 L"));
53

} elseif (m_L<16) { AfxMessageBox(TEXT("螺栓长度 L 太小")); } elseif (m_L<125) { int nIndex = m_combo.GetCurSel(); if(nIndex==0) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=8; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=3.5; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=7.8; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=16; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=0.9; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=0.8; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=5; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.3; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; }
54

elseif(nIndex==1) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=10; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=4; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=9.8; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=18; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=1; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=6; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.5; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==2) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=13; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=5.5; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=12.6;
55

value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=22; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=1.2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1.25; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=8; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.5; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==3) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=17; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=7; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=16.5; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=26; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=1.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=10;
56

value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.8; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==4) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=19; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=8; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=18; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=30; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1.75; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=12; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.8; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==5) { value1.type=PRO_PARAM_DOUBLE;
57

value1.value.d_val=22; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=9; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=21; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=34; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=14; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.8; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==6) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=24; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=10; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=23; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=38; value5.type=PRO_PARAM_DOUBLE;
58

value5.value.d_val=2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=16; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==7) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=27; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=12; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=26; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=42; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=18; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE;
59

value9.value.d_val=m_L; } elseif(nIndex==8) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=30; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=13; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=29; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=46; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=20; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==9) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=30; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=13;
60

value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=29; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=46; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=20; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==10) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=36; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=15; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=34; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=54; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=3; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=3;
61

value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=24; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.6; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } //设置模型参数 ProParameterValueSet(&param1,&value1); ProParameterValueSet(&param2,&value2); ProParameterValueSet(&param3,&value3); ProParameterValueSet(&param4,&value4); ProParameterValueSet(&param5,&value5); ProParameterValueSet(&param6,&value6); ProParameterValueSet(&param7,&value7); ProParameterValueSet(&param8,&value8); ProParameterValueSet(&param9,&value9); //再生模型 ProSolidRegenerate((ProSolid)part,PRO_REGEN_NO_FLAGS); ProMdlDisplay(part); OnOK(); } elseif(m_L<200) { int nIndex = m_combo.GetCurSel(); if(nIndex==0) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=8;
62

value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=3.5; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=7.8; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=22; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=0.9; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=0.8; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=5; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.3; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==1) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=10; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=4; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=9.8; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=24; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=1;
63

value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=6; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.5; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==2) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=13; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=5.5; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=12.6; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=28; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=1.2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1.25; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=8; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.5; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L;
64

} elseif(nIndex==3) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=17; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=7; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=16.5; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=32; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=1.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=10; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.8; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==4) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=19; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=8; value3.type=PRO_PARAM_DOUBLE;
65

value3.value.d_val=18; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=36; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=1.75; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=12; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.8; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==5) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=22; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=9; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=21; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=40; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2; value7.type=PRO_PARAM_DOUBLE;
66

value7.value.d_val=14; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=0.8; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==6) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=24; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=10; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=23; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=44; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=16; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==7) {
67

value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=27; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=12; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=26; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=48; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=18; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==8) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=30; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=13; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=29; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=52;
68

value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=2.5; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=2.5; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=20; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.2; value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } elseif(nIndex==9) { value1.type=PRO_PARAM_DOUBLE; value1.value.d_val=36; value2.type=PRO_PARAM_DOUBLE; value2.value.d_val=15; value3.type=PRO_PARAM_DOUBLE; value3.value.d_val=34; value4.type=PRO_PARAM_DOUBLE; value4.value.d_val=60; value5.type=PRO_PARAM_DOUBLE; value5.value.d_val=3; value6.type=PRO_PARAM_DOUBLE; value6.value.d_val=3; value7.type=PRO_PARAM_DOUBLE; value7.value.d_val=24; value8.type=PRO_PARAM_DOUBLE; value8.value.d_val=1.6;
69

value9.type=PRO_PARAM_DOUBLE; value9.value.d_val=m_L; } //设置模型参数 ProParameterValueSet(&param1,&value1); ProParameterValueSet(&param2,&value2); ProParameterValueSet(&param3,&value3); ProParameterValueSet(&param4,&value4); ProParameterValueSet(&param5,&value5); ProParameterValueSet(&param6,&value6); ProParameterValueSet(&param7,&value7); ProParameterValueSet(&param8,&value8); ProParameterValueSet(&param9,&value9); //再生模型 ProSolidRegenerate((ProSolid)part,PRO_REGEN_NO_FLAGS); ProMdlDisplay(part); OnOK(); } }

void Cboltdlg::OnEnChangeEdit1() { // TODO: 如果该控件是 RICHEDIT 控件,则它将不会 // 发送该通知,除非重写 CDialog::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码
70

}

void Cboltdlg::OnCbnSelchangeCombo2() { // TODO: 在此添加控件通知处理程序代码 }

4.5 编写注册文件
到此为止,整个应用程序的开发都已经完成了,现在就需要将此程序发布成 DLL 文件, 以提供给 Pro/ENGINEER 调用。 在这之前, 需要编写注册文件, 这是 Dll 文件和 Pro/ENGINEER 进行连接的接口。见如下注册文件内容: NAME standard EXEC_FILE D:\lzx\debug\standard.dll TEXT_DIR D:\lzx\text STARTUP dll FAIL_TOL TRUE ALLOW_STOP TRUE DELAY_START TRUE REVISION 26 END

4.6 编译程序并执行
最后,在 Pro/ENGINEER 中的【工具】->【辅助应用程序】中注册我们刚刚 写的 dat 文件,如下图所示。

71

72

帮助左面出现通用件库按钮

73

74

75

76

第五章总结与展望
5.1 论文总结
论文对基于 Pro/ENGINEER 二次开发中的通用件参数化模型库的开发进行了较为深入的 研究。依据 Pro/ENGINEER 的二次开发包 Pro/TOOLKIT,结合 VC 技术,开发出了零件参数化 模型设计系统。具体完成的工作如下: (1)深入研究了 Pro/ENGINEER 二次开发工具即 Pro/TOOLKIT 应用程序接口,弄清它的特 点、编程风格、应用程序的运行模式,深入了解了应用程序中常用的对象句柄、选择对象、 访问函数和数据类型等的使用方法。研究了制作应用程序的 makefile 文件和注册文件,编译 生成目标文件以及发布应用程序的解锁方法,为开发应用程序打下基础。 (2)根据 Pro/ENGINEER 的 UDF 技术,建立了各种类别的标准件常用件参数化模型;依据 Pro/TOOLKIT 中制 作并 激活 用 户菜 单的 方法 ,定制 了 简单 的开 发界 面;结 合 MFC 和 Pro/TOOLKIT 中技术,制作了一些用户需求的、而单凭 Pro/TOOLKIT 难以完成的复杂对话框 界面,完成了系统的界面设计;解决了 Pro/ENGINEER 和 VC 的通信问题;实现了各零件特征 的参数化自动建模,大大提高了建模的效率。

5.2 后续发展方向
在此次设计中, 成功的完成了基本的功能要求, 实现了用户交互式的建立参数化零件模 型,极大简化了设计人员的工作量。但是,在开发过程中还遇到了一些问题,比如:VC.NET 和 Pro/TOOLKIT 以及 Pro/ENGINEER 中的内存使用问题,如果没有处理好这个问题,将会导 致 Pro/ENGINEER 立即关闭的可能;系统还不能很好对用户输入的参数进行判断,没有对一 些参数进行过滤检查等,这有可能导致数据类型不符合而与 Pro/ENGINEER 冲突导致这个应 用程序瘫痪等;还有本设计未涉足 Access 数据库数据的存储结构及参数数据库和 MFC 之间 的数据传输。所以此系统还存在一些缺陷,希望在后续工作中能继续完善。

77

致谢
从开学到现在, 已经过去两个多月了。 在这几个月里, 我得到了李新华老师的极大帮助。 由于目前市面上关于 Pro/E 二次开发的书籍很少,李老师不仅帮我们找到相关书籍资料,还 在周末牺牲休息时间指导我们的学习。这两个月里,我学到了不少东西,不仅有与毕业设计 相关的,还有一些其他专业知识。在此,我要衷心地说一声: “李老师您辛苦了,谢谢您! ” 在此之前,我对 Pro/ENGINEER Wildfire 这个软件并不是很了解,通过这次学习,我初步 了解了三维建模的知识,初步掌握了 Pro/ENGINEER 的相关功能及各种模型的建模方法。由 于本设计还要用到 Pro/TOOLKIT 和 Visual Studio2005,我还查阅学习了相关书籍。以前对 C 语言总是一知半解的,现在已经能够初步运用 Visual Studio2005 进行一些设计开发。 在设计期间,我还通过互联网了解了 Pro/E 二次开发目前的市场前景。目前 Pro/E 在中 国应用广泛,许多公司均采用 Pro/E 进行三维绘图。但是,从事 Pro/E 二次开发工作的相关 专业人士却并不多。因此,Pro/E 二次开发在目前市场上还是有很大发展潜力的。 最后,再次感谢李老师给予我的帮助。

78

参考文献
[1]张继春.Pro/E 二次开发使用教程.北京:北京大学出版社,2003 [2]李世国.Pro/Toolkit 程序设计.北京:机械工业出版社,2003 [3]王文波.ProE4.0 二次开发实例解析.北京;清华大学出版社 2010 [4]黄凯.PRO/E 参数化设计高级用用教程.北京;北京工业出版社 2008 [5]代震方.VisualC#2005 程序设计从入门到精通.北京;人民邮电出版社 2007 [6]贾宗璞许合利.C 语言程序设计.徐州;中国矿业大学出版社 [7]230009 张红旗曹文铜.开发 PRO/E 用户化菜单的技术与实践.合肥工业大学学报(自然 科学版)2001 第 24 卷第 2 期,240-244 页 [8]机械设计手册(新编软件版)2008.化学工业出版社

79


相关文章:
proe二次开发 标准件库 齿轮参数化设计 毕业设计
基​于​p​e​o​/​E​的​标​准​件​​ ​​业​设​计​ ​通​用​件​ ​齿​轮​ ​二​次...
基于ProE二次开发齿轮参数化模型库
基于Pro/E 二次开发齿轮参数化模型库 作者:吴卓-来源:icad 本文介绍了 Pro/Engineer 参数化设计的基本原理和基于 Pro/Program 二次开发实现参数化建库的 方法,...
基于ProE的齿轮模型库二次开发(毕业论文设计)
基于ProE齿轮模型库二次开发(毕业论文设计)_机械/仪表_工程科技_专业资料。长江...本课题将通过参数化建模, 解决这一问题。 用户只需正确选择或输入零件相关参数,...
毕业论文-基于ProE的标准件参数化设计CAD系统的研究与开发
基于ProE的行星齿轮减速器... 3页 免费 proe二次开发 标准件库 齿... 83页...毕业论文-基于ProE的标准件参数化设计CAD系统的研究与开发 隐藏>> 分类号: 单位...
毕业设计-Proe参数化齿轮
1/2 相关文档推荐 proe二次开发 标准件库 齿... 83页 20财富值 基于ProE...毕业设计-Proe参数化齿轮 齿轮传动的建模与仿真的意义,我们要说的是,在以往不管...
基于ProE二次开发齿轮参数化模型库
基于Proe建立齿轮参数化模... 48页 5财富值 proe二次开发 标准件库 齿......基于ProE二次开发齿轮参数化模型库基于ProE二次开发齿轮参数化模型库隐藏>> 分享...
PROE齿轮的参数化设计
人字形齿轮齿轮齿轮 柱形直齿轮 柱形直齿轮参数化设计: 1.进入 PROE5.0 界面 2.新建零件实体 3.在工具栏中参数菜单中添加参数: 4.添加关系 5.草绘...
基于ProE的齿轮参数化设计系统开发
10页 免费 基于Proe的斜齿轮参数化设... 5页 10财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
基于ProE齿轮参数化造型设计
毕业设计 (论文)( 2014 届) 题 目 基于 Pro /...24 2 基于 Pro/E 齿轮参数化造型设计 引言 1 ...[4]周宇峰,基于 UG 的三维参数化标准件库开发方法...
更多相关标签:
proe齿轮参数化设计 | proe齿轮标准件 | proe参数化设计教程 | proe参数化设计 | catia齿轮参数化设计 | proe5.0参数化设计 | proe参数化设计高级 | 齿轮标准件 |