当前位置:文档之家› 基于ProE二次开发的端盖参数化模型的实现

基于ProE二次开发的端盖参数化模型的实现

基于 Pro/E二次开发的端盖参数化模型的实现

摘 要:CAD技术在机械设计中发挥着越来越突出的作用。而三维实体模型比二 维图形能更直观、更全面地反映设计意图,并且在三维模型的基础上可以进行零件装 配、干涉检查、有限元分析、运动分析等高级的计算机辅设计工作,因此目前机械设 计中广泛采用三维设计。 而目前我国Pro/E应用日益普及,而二次开发严重滞后。 所以, 进行二次开发是非常必要的。

论文介绍了其二次开发工具 Pro/TOOLKIT,并以凸缘端盖为例,详细的论述了应 用 Pro/Toolkit 进行菜单开发、对话框开发,即 UI 对话框,以及如何在 VC++环境下 编制 C 语言程序以激活、调用对话框界面,设计出更加友好透明的用户界面,方便快 捷地实现端盖的参数化设计和修改,准确再生出新的实体模型。

关键词:Pro/ENGINEER、Visual C++、Pro/TOOLKIT、二次开发、端盖

The Realization of Cover Parametric Parts Based on the

Redevelopment of Pro/E

Abstract : CAD technology is made more and more use in mechanical design.Design idea can be expressed more visualized and more comprehensive in three-dimensional full-scale mock-up than in two-dimensional drawing ,and based on three dimensional full—scale mock up,many other advanced CAD such as component assembly,interference check,finite element analysis,motion analysis and so on can be proceed . Hence , three—dimensional design is widely used in mechanical design .However,at the present the application development severely lags behind the increasing popularization of the Pro/E application in our country .So, it is very necessary to develop the Pro/E application.

This paper introduces the customization tool Pro/TOOLKIT, and taking cover flange for example, This article provides an example to introduce the technique how to design UI Dialog Boxes By way of Pro/E's secondary development tool Pro/TOOLKIT as well as compile c programs to activate and pick up UI dialog boxes in Visual C++. Taking Pro/Toolkit as development tool, a friendly design interface of Cover is established. This paper investigates the method of establishing parametric 3 D model and programming based on 3D model in Pro/E,auto-modeling of 3D parts is realized using Pro/Toolkit.

Keywords:Pro/ENGINEER、Visual C++、 Pro/TOOLKIT 、secondary development

第一章 绪 论

1.1 三维 CAD 技术

设计和生产的方法随着计算机的迅速发展每天都在发生着显著的变化。以前许多 只能靠手工完成的作业,逐渐通过计算机实现了高效化和高精度化。这种利用计算机 来达到高效化、高精度化,实现自动化设计、生产以及解析计算的方法称为 CAD(Computer Aided Design,计算机辅助设计)。CAD是指利用计算机的硬件和软件 进行的设计活动,它从根本上改变了过去的手工绘图、发图、凭图纸组织整个生产过 程的技术管理方式,使之变为以统一的产品数据库为核心的交互式产品设计、分析、 制造和维护的过程。它的迅速发展和广泛应用,给工程设计制造业带来了蓬勃生机, 使传统的产品设计方法与生产组织模式发生了深刻的变革。

1.1.1CAD 技术的发展

CAD技术起步于50年代后期,自从计算机出现之后人们就不断地将计算机技术 引入机械设计、制造领域。因为它顺应生产力的发展,在其产生之后就得到了迅速地 发展。CAD 技术经历了四次飞跃:曲面造型系统、实体造型技术、参数化技术、变 量化技术。

(1)曲面造型系统

70年代是飞机和汽车工业的蓬勃发展时期。 期间飞机及汽车的制造中遇到了大量 的自由曲面问题,此时法国人提出了贝赛尔算法,法国的达索飞机制造公司的开发者 们借此算法在二维绘图系统的基础上,开发出以表面模型为特点的自由曲面建模方 法,推出了三维曲面造型系统CA TIA。

(2)实体造型技术

表面模型基本上解决 CAM 的问题,但是由于表面模型技术只能表达形体的表面 信息,很难准确地表达如质量、重心、惯性矩等零件的其他特性。基于对 CAD 一体 化技术发展的探索,SDRC 公司于 1979 年发布了世界上第一个完全基于实体造型技 术的大型CAD软件-I-DEAS。实体造型技术能够精确表达零件的全部属性,给设计 带来了很大的方便。

(3)参数化技术

正当实体造型技术在 CAD 系统中广泛运用时,出现了一种比无约束自由造型更 好的算法-参数化实体造型方法。它主要的特点是:基于特征、全尺寸约束、全数据 相关、尺寸驱动设计修改。参数化技术彻底克服了自由缄默的无约束状态,由尺寸决 定实体造型的几何形状。尺寸驱动已经成为当今造型系统的基本功能。如果想修改零 件形状的话,只需修改一下尺寸的数值就可以实现形状上的改变。这种新构想最先在

PTC公司(Parametric Technology Corp)的软件PRO/ENGINEER中成为现实。由于 参数化技术的成功应用,使得它很快成为CAD 业界的标准,许多软件厂商纷纷追赶。

(4) 变量化技术

变量化造型技术保留了参数化技术基于特征、全数据相关、尺寸驱动设计修改的 优点,但是在约束定义方面做了一定的改变。变量化造型技术将所需定义的尺寸“参 数”进一步区分为形状约束和尺寸约束,而不仅仅是用尺寸来约束全部几何。通常在 新产品开发的概念设计阶段,设计者首先考虑的是设计思想及概念,并将其体现在某 些几何形状之中。但是这些几何形状的严格的尺寸定位关系并不能在设计的初始阶段 完全确定,所以希望在初始阶段能够允许欠尺寸约束的存在。事实上,参数化技术和 变量化技术已经成为了当今主流 CAD 软件的两大流派。两种造型理论相互依存,共 同发展。我国 CAD 技术的引进是从 60 年代开始的,最早起步于航空工业,最近几 年发展很快,现已在机械、电子、建筑、汽车、服装等行业逐步进入实用阶段。

1.2 课题背景及意义

Pro /ENGINEER是美国PTC(Parametric Technology Corporation)公司于1988年 开发的参数化设计系统,是一套由设计至生产的机械自动化软件。参数化设计就是将 零件尺寸的设计用参数来描述,并在设计修改时通过修改参数的数值来更改零件的外 形。Pro/ENGINEER 与传统的 CAD 系统仅提供绘图工具有着极大的不同,它提供了 一套完整的机械产品解决方案,包括机械设计、板金设计、加工制造、机构分析、有 限元分析等,它使产品的设计效率大大提高,使产品在设计初期具有更多的灵活性, 保证在日后根据系统要求进行相应的更改和计算?另外在产品的设计方案阶段, 可以形 象的表现系统的组成特点,而在产品的生产阶段可以方便与加工中心数据连接。

Pro/ENGINEER 的特性如下:3D 实体模型,单一数据库,以特征作为设计的单位, 参数式设计,数据管理(Data Management),装配管理(Assemble Management),工程数 据库再利用(Engineering Data Reuse),易用性(Ease of Use),硬件独立性(Hardware Independence)。

由于Pro/ENGINEER的功能强大并且通用性非常强,然而,由于Pro/ENGINEER 软件的通用性,使得该软件在进行具体的产品设计时感到不方便。对系列化产品,可 以通过抽取关键的参数值,再依设计规范计算出各尺寸值并传递给下级零件和子装 配,自动的将模型建造出来。为了使Pro/ENGINEER软件能在特定的企业单位的特定 产品设计中最大限度的发挥潜力,创造效益,需Pro/ENGINEER进行二次开发,换句 话说,二次开发就是对 Pro/ENGINEER 进一步的充实、完善。基于上述原因,利用 Pro/TOOLKIT工具箱及VC++开发操作简单的端盖是很有必要。

1.3 应用程序的开发工具

系统程序模块的设计选择Visual C++6.0作为开发平台。Visual C++6.0是运行于 Windows上的交互式可视化集成开发环境,是美国Microsoft Visual Studio 的一部分。 像其它的可视化开发环境一样,Visual C++6.0 集程序的代码编辑编译连接调试于一 体,给编程人员提供了一个完整而又方便的开发界面和许多有效的辅助开发工具。 VC++6.0的应用程序向导 (App Wizard) 可以为很大一部分类型的程序提供框架代码, 用户不需要书写代码,只需要几个按钮就可以生成一个完整的可以运行的程序。在 Pro/TOOLKIT中,PTC向用户提供了大量的C语言函数库,函数采用面向对象的风格。 通过调用这些底层函数,用户能方便而又安全地访问 Pro/ENGINEER 的数据库及内部 应用程序,进行二次开发,扩展一些特定功能。

1.4 课题的主要研究内容

本课题的主要研究内容是端盖的开发设计,当用户选择不同的样式后,应用程序 可以在基础模型上自动生成相应的端盖。具体工作包括:

(1)Pro/TOOLKIT基本特点和基本数据结构的研究。分析Pro/TOOLKIT内部的 基本数据结构、功能函数及其使用方法;探讨 Pro/TOOLKIT 中的一些基本的自定义 对象。

(2)用户界面的设计。研究菜单信息文件,制作端盖的菜单界面;研究对话框 资源文件, 创建主对话框, 并在主对话框中弹出一个自定义对话框; 研究Pro/TOOLKIT 与Visual C++6.0的接口技术;在VC中制作Pro/TOOLKIT用户界面。

(3)参数化建模的研究。Pro/ENGINEER 软件对于每个模型都有一个主要设计 步骤和参数列表,所以要先绘制三维模型,定出参数列表;设计端盖程序,实现自动 加载菜单、选择不同的端盖、弹出对话框、修改端盖模型参数值、生成零件等功能。

第二章 Pro/TOOLKIT二次开发的基础理论

2.1 Pro/TOOLKIT 的基本知识

2.1.1 Pro/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++语言设计程序,采用Microsoft Visual C++6.0的集成环境下完成 程序的设计、调试和编译。

2.1.2 Pro/TOOLKIT 的工作模式

Pro/TOOLKIT有两种工作模式,即同步模式和异步模式。

同步模式分为两种模式,一种是标准的使用模式,即 DLL 模式。Pro/TOOLKIT 应用程序与Pro/ENGINEER的集成是通过DLL模式来实现的,在DLL模式中,通过

该目标文件在Pro/ENGINEER 编译和连接Pro/TOOLKIT的C代码生成一个目标文件,

启动时与 Pro/ENGINEER 连接在一起,就像是 Pro/ENGINEER 本身的程序一样; Pro/TOOLKIT 应用程序和 Pro/ENGINEER 之间的信息交换是直接通过函数调用来实 现的。另一种模式是多进程模式。

异步模式分为简单异步模式和全异步模式。

本课题通过菜单对话框向Pro/ENGINEER发送消息,采用同步DLL模式。

2.1.3 Pro/TOOLKIT 对象和动作

Pro/TOOLKIT 采用面向对象的程序设计方法。对象 ( Object)和动作(Action)是 Pro/TOOLKIT中最基本的概念。

Pro /T OO LKIT的对象实质上是一种类型为结构体的数据,结构体中的成员描述 了该对象的属性。所有对象的命名约定为 Pro+<对象名>,其中对象名用英文单词表 示,第一个字母大写,如ProFeature(特征对象)。

Pro/TOOLKIT 对象执行的某种特定操作称为动作,动作的执行是通过调用 Pro/TOOLKIT函数库提供的 C函数来实现了。与动作相关的Pro/TOOLKIT函数名约

定为:Pro+<对象名>+<动作>。特别要注意的是 Pro/TOOLKIT 函数的参数规则,规定 为:ProFunction(参数1、 参数2、 参数3), 其中第一个参数用来识别对象(通常为ID值), 输入参数在输出参数之前。

2.1.4 对象句柄

每个 Pro/TOOLKIT 对象都对应于一个结构体,定义该结构类型的一个具体的结 构体变量称之对象句柄。按照对象句柄的定义和使用方式分成两种类 型:Ohandle(Opaque Handle,非透明句柄)和DHandle(Database Handle,数据结构句柄)。

非透明句柄(Opaque Handle)是使用 Pro/ENGINEER 数据结构的内存地址引用 Pro/ENGINEER 对象,这种方式最简单。使用非透明句柄 Pro/TOOLKIT 应用程序只 能获得该对象的内存地址, 不能访问该结构体具体成员, 其目的是防止PIDITOOLKIT 应用程序访问结构体中的成员。其特点是使用简单高效,缺点是由于它是一个内存指 针,所以具有可变性。

数据结构句柄(DatabaseH andle)则可访问该对象结构体的具体成员。数据结构句 柄是一个十分清晰的数据结构,它包含了足够的信息— 包括类型、整型标识符和指 向所属模型的句柄,由于数据结构句柄至少包含一个整型标识,所以它具有稳定不变 的优点。 当利用Pro/TOOLKIT 在Pro/ENGINEER中创建一个包含很多信息的对象时, 非常重要的一点就是必须先建立该对象的所有相关信息,然后把这个对象添加到 Pro/ENGINEER 数据库中去。然而采用面向对象技术的 Pro/TOOLKIT 不允许直接访 问这些结构的内容。

2.1.5 Pro/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应用程序。

在Visual C++6.0环境下新建一个dll工程。

(1)进入Visual C++6.0集成开发环境,选择“File/New...”选项,启动 “New”对话 框。

在 “New” 对话框中选择 “Projects”选项卡, 选择 MFC AppWizard(dll)项。 在 “Project nam”输入工程文件名,在“Location”输入框中输入路径。单击OK按钮。

(2)在“MFC AppWizard”对话框中选择“Regular DLL using shared MFC DLL”单 选框, 使Pro/TOOLKIT应用程序使用共享的 MFC。 单击Finish按钮, 进入New Project Information窗口后,单击OK按钮,完成工程文件框架的建立。

(3)选择FileView打开VC应用程序向导自动生成程序文件.

VC 应用程序设计向导在 FileView 中自动加入了 ReadMe.txt、StdAfx.cpp 和以工 程文件名为前缀的cpp资源文件、def模块定义文件以及rc资源文件等。如下图2.1:

图2.1 VC文件图

2.3 Pro/TOOLKIT 信息文件的建立

信息文件是一种 ASCII 码文件,用来定义菜单项、菜单项提示等信息,可以用 Word 记事本和写字板等文字处理软件建立,也可在 VC 的集成开发环境中建立,但 必须以纯文本格式保存且信息文件以四行为一组。

其含义分别如下:

第一行:Pro/ENGINEER系统可以识别的关键字,该关键字必须与该信息文件函 数中的相关字符串相同。

第二行:再菜单项或菜单项提示上显示的英语文本。

第三行:另一种语言的译文或为空。

第四行:当前的Pro/ENGINEER版本为空。

其中,第二﹑第四行的语言显示取决于系统环境变量 lang的设置。同时,信息文 件必须位于\text 或\text\文件夹,为 chinese-cn 时表示信息为中文,为 usascii 表示信息为英语。由此,可以通过系统的环 境变量控制显示的语种,不必修改程序。

2.4 编译和连接设置

;设置库文件路径,加入 设置包含文件路径,加入“\PROTOOLKIT\INCLUDES”

;设置连接所需库文件,加入“mpr.lib protk_dll.lib” “\PROTOOLKIT\I486_NT\OBJ”

两库文件; 在菜单 “Project/Settings” 的 “Link” 选项页设定强制文件输出, 即选中 “Force file output”的复选项。

2.5 编制注册文件及应用程序的运行

2.5.1 编制注册文件

在 Pro/ENGINEER 中运行 Pro/TOOLKIT 应用程序,必须先进行注册。注册文件 的作用是向 Pro/ENGINEER 系统传递应用程序的信息。一般可只选择 Name EXEC_FILE TEXT_DIR STARTUP ALLOW_STOP REVISION和END项即可。 保存注 册文件时,要以.dat 为扩展名。建立端盖的注册文件如图2.2:

图2.2 端盖注册文件图

2.5.2 应用程序的运行

1 注册运行分为自动注册和手动注册。端盖采用自动注册,并将注册文件名取为 “Protk.dat”将此文件位于 Pro/ENGINEER 的起始位置设定的目录。其注册文件设置 DELA Y_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)”

。在子菜单下建立四个菜单按钮:PushButton1 嵌入 下级子菜单(SubMenu )

“端盖”

闷盖,PushButton2嵌入透盖,PushButton3凸缘闷盖,PushButton4凸缘透盖。建立的 程序清单如下:

/*=========================================================*\ FUNCTION: user_initialize()

\*=========================================================*/ extern "C" int user_initialize()

{

ProError status?

ProFileName MsgFile?

uiCmdCmdId PushButton_cmd_id1,PushButton_cmd_id2,

PushButton_cmd_id3,PushButton_cmd_id4?

ProStringToWstring(MsgFile, "Message.txt")?//设置菜单信息文件名

/*=========================================================*\ 添加菜单条

\*=========================================================*/ status=ProMenubarMenuAdd ("UserMenuBar", "UserMenu",

"Utilities", PRO_B_TRUE, MsgFile)?

/*=======================================================*\ 菜单条的下级子菜单设置

\*=========================================================*/ //添加下级子菜单项

ProMenubarmenuMenuAdd("UserMenuBar", "SubMenu", "SubMenu",

NULL, PRO_B_TRUE, MsgFile)?

//设置菜单按钮的动作函数

ProCmdActionAdd("PushButtonAct1",(uiCmdCmdActFn)Duangai1Fn, uiCmdPrioDefault,AccessAvailable,

PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id1)?

//添加菜单按钮

ProMenubarmenuPushbuttonAdd("SubMenu", "PushButton1", "PushButton1", "Adding a push button to the ProE menu bar", NULL,

PRO_B_TRUE, PushButton_cmd_id1, MsgFile)?

//设置菜单按钮的动作函数

ProCmdActionAdd("PushButtonAct2",(uiCmdCmdActFn)Duangai2Fn, uiCmdPrioDefault,AccessAvailable,

PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id2)?

//添加菜单按钮

ProMenubarmenuPushbuttonAdd("SubMenu","PushButton2","PushButton2", "Adding another push button to the ProE menu bar",NULL,

PRO_B_TRUE, PushButton_cmd_id2, MsgFile)?

//设置菜单按钮的动作函数

ProCmdActionAdd("PushButtonAct3",(uiCmdCmdActFn)Duangai3Fn, uiCmdPrioDefault,AccessAvailable,

PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id3)?

//添加菜单按钮

ProMenubarmenuPushbuttonAdd("SubMenu","PushButton3","PushButton3", "Adding the third push button to the ProE menu bar",NULL,

PRO_B_TRUE, PushButton_cmd_id3, MsgFile)?

//设置菜单按钮的动作函数

ProCmdActionAdd("PushButtonAct4",(uiCmdCmdActFn)Duangai4Fn, uiCmdPrioDefault,AccessAvailable,

PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id4)?

//添加菜单按钮

ProMenubarmenuPushbuttonAdd("SubMenu","PushButton4", "PushButton4", "Adding the forth push button to the ProE menu bar", NULL,

PRO_B_TRUE, PushButton_cmd_id4, MsgFile)?

return status?

}

/*=========================================================*\ FUNCTION: user_terminate()

\*=========================================================*/ extern "C" void user_terminate()

{

AFX_MANAGE_STA TE(AfxGetStaticModuleState())?

}

/*=========================================================*\ FUNCTION: AccessAvailable (菜单项的访问权限设置:可选)

\*=========================================================*/ static uiCmdAccessState AccessAvailable (uiCmdAccessMode access_mode)

{

return (ACCESS_A VAILABLE)?

}

建立端盖的菜单信息文件(中文版)如下:

SubMenu

SubMenu

端盖

#

PushButton1

PushButton1

嵌入闷盖

#

Adding a push button to the ProE menu bar Adding a push button to the ProE menu bar

嵌入闷盖

#

PushButton2

PushButton2

嵌入透盖

#

Adding another push button to the ProE menu bar Adding another push button to the ProE menu bar 嵌入透盖

#

PushButton3

PushButton3

凸缘闷盖

#

Adding the third push button to the ProE menu bar Adding the third push button to the ProE menu bar 凸缘闷盖

#

PushButton4

PushButton4

凸缘透盖

#

Adding the forth push button to the ProE menu bar Adding the forth push button to the ProE menu bar 凸缘透盖

#

创建端盖菜单如下图3.1:

图3.1 模型菜单图

3.2 对话框的设计

弹出式对话框是目前最先进最流行的一种人机交互方式,它能提供图形与文字共 存的可视化环境,使操作更为自然快捷。在进行 Pro/TOOLKIT 程序设计时,有两种 方法建立对话框,一种是通过 VC 提供的 MFC 可视化对话框设计技术,另一种是通 过Pro/TOOLKIT提供的用户界面对话框(User Interface Dialog Boxes,简称UI对话框)。

3.2.1 MFC 对话框

MFC 是 VC++程序的一个重要的软件资源,为开发 Windows 应用程序提供了强 大的支持,使用MFC可以实现程序界面的可视化设计。MFC对话框作为一种窗口, 具有窗口的一切功能,与UI对话框相比,使用MFC对话框界面布局更加容易,设计 ﹑调试都比较容易。但它建立的对话框与Pro/ENGINEER的风格不一样,不利于用户 的操作。

3.2.2 UI 对话框

利用 UI 对话框技术可以在 Pro/TOOLKIT 应用程序中设计出风格与 Pro/ENGINEER 系统本身具有的对话框相似的人机交互界面。控制程序用 C 或 C++

语言编写,用来在Pro/ENGINEER环境装入对话框资源、显示对话框、设置动作和退 出对话框等。UI对话框的设计主要涉及两个方面:一是按界面的布局编写资源文件; 二是针对UI对话框的功能编写相应的控制程序。

1.资源文件

资源文件是用来定义和描述UI对话框外观及属性的文本文件。主要内容包括UI 对话框的组成部分元件(component)或称控件、各元件的属性定义和元件的布局形 式。编写资源文件进应注意以下几点:(1)区分大小写;(2)括号必须成对;(3)对话框 名应与资源文件名相同;(4)“!”后面的内容为注释部分,对对话框的定义没有任何影 响;(5)资源文件可用任何一种支持纯文本格式的文字处理软件编写,如 Word、写字 板或记事本等,也可以用VC应用程序设计向导编写。无论用何种方法编写,都必须 按纯文本格式保存,且扩展名为.res。保存在工作目录下所建 VC 程序中 Release/text//resource 子目录中。其中取决于当前使用的语言 (chinese_cn或usascii)。

资源文件的结构如下:

(Dialog<对话框>

(Componens

……

)

(Resources

……

)

Dialog<对话框>为顶层语句,下面主要包含两段构成,其中原件段(Components) 声明了该对话框的所有元件,资源段(Resource)分为定义了各元件的属性及布局。

资源文件仅仅是对UI对话框的描述,必须通过Pro/TOOLKIT应用程序来装入、 显示和控制对话框。分为创建和终止两部分。

创建对话框的过程如下:

(1)调用ProUIDialogCreate()函数将资源文件装入内在;

(2)调用对话框零件的动作函数设置指定元件的动作函数;

(3)调用ProUIDialogActivate()函数显示和激活对话框;

(4)调用ProUIDialogDestroy()函数从内在清除对话框资源。

这四步是创建一个 UI 对话框的最基本步骤。其中第二步可实现数据的调用,它 的动作设置函数与元件类型有关,其主要目的是设置用户在对话框界面上对某一元素 进行操作时,调用的动作函数。在完成这四步的情况下,可以终止 UI 对话框,具体

方法是调用ProUIDialogExit()函数。

3.3 端盖对话框设计

3.3.1 构想

1.在主对话框中添加以下元件。

(1)Label1 与 Label1.1 标签,用于提示图形。Lable1 其图形显示零件图形,该图形 直接从三维模型中获取。Label1.1 显示设计参数与尺寸的对应关系,该图形直接从三 维模型中获取,在图形软件中加上尺寸线和参数名后转换为 UI 对话框支持的 GIF 格

。Lable1 其图形命名为 Duangai3.gif,Label1.1 其图形命 式(保存在 resource 子目录)

名为Duangai3_1.gif。

(2)Label2 标签,用于显示参数名,命名规则为:设计参数名_Label。

(3)Separator分隔线

(4)PushButton1按钮,用于生成模型。

(5)PushButton2按钮,用于退出对话框。

(6)PushButton3按钮,用于自定义对话框设计。

(7)InputPanel输入框,用于表示参数值,命名规则为:设计参数名_V alue。

其中两个按钮跟其他的按钮用分隔线隔开。

2.在自定义对话框中添加以下元件。

(1)Label1.1与主对话框的设置相同。

(2)Label2 标签,用于显示参数名,命名规则为:设计参数名_Label。

(3)Separator分隔线

(4)PushButton1按钮,用于生成模型。

(5)PushButton2按钮,用于退出对话框。

(6)InputPanel输入框,用于表示参数值,命名规则为:设计参数名_V alue。

3.3.2 创建方法

其创建的方法是:编写资源文件,文件扩展名为.res,用纯文本格式保存在注册文 件中 TEXT_DIR 字段指定目录下的 \\resource 子目录 。 调用 ProUIDialogCreate () 函数将资源文件装入内存; 调用ProUIPushbuttonActivateActionSet ()函数设置按钮的动作;调用 ProUIDialogActivate()函数显示和激活对话框;调 用 ProUIDialogDestroy()函数从内存清除对话框资源; 调用 ParamsList()显示模型 的设计参数; 调用ParamGetAndShow()从零件模型中获得参数值,并在相应的输入框中 显示;调用ParamUpdate()更新参数值。创建函数原型为:

ProError ProUIDialogCreate(char*dialog_name

char*resource)

ProError ProUIDialogActivate(char*dialog_name

int*status)

ProError ProUIDialogDestroy (char* dialog_name)

3端盖资源文件

以凸缘闷盖为例,其主对框资源文件如下:

!资源文件:Duangai3.res

(Dialog Duangai3

(Components !对话框元件声明

(Label Image1)

(Label Image2)

(SubLayout Layout1)

(Separator Separator1)

(PushButton Update3)

(PushButton Cancel)

)

(Resources !对话框资源(属性定义)

(Image1.Bitmap "Duangai3.1.gif")!零件尺寸与参数对应图 (Image1.TopOffset 10)

(Image1.LeftOffset 4)

(Image1.RightOffset 2)

(Image2.Bitmap "Duangai3.gif")!三位零件图

(Image2.TopOffset 4)

(Image2.BottomOffset 8)

(Image2.LeftOffset 4)

(Image2.RightOffset 4)

(https://www.doczj.com/doc/4916836222.html,bel "生成模型(&U)")!生成模型按钮 (Update3.Bitmap "cl_ok")

(Update3.TopOffset 4)

(Update3.BottomOffset 8)

(Update3.LeftOffset 4)

(Update3.RightOffset 4)

!Cancel按钮属性定义

(https://www.doczj.com/doc/4916836222.html,bel "退出(&E)")

(Cancel.Bitmap "cl_cancel")

(Cancel.TopOffset 4)

(Cancel.BottomOffset 8)

(Cancel.LeftOffset 4)

(Cancel.RightOffset 4)

(Separator1.TopOffset 4)

(Separator1.BottomOffset 4)

(.Label "端盖参数化设计") !对话框标题 (.StartLocation 5)

(.Resizeable 0)

(.Layout !对话框元件的布局

(Grid (Rows 1 1 1) (Cols 1)

(Grid (Rows 1 ) (Cols 1 1)

Image1

(Grid (Rows 1 1 ) (Cols 1)

Layout1

Image2

)

)

Separator1

(Grid (Rows 1) (Cols 1 1)

Update3

Cancel

)

)

)

)

)

(Layout Layout1

(Components

(Label D_Label)

(OptionMenu D_V alue)

(Label DA_Label) (OptionMenu DA_V alue)

(Label DB_Label) (OptionMenu DB_V alue)

(Label DC_Label) (OptionMenu DC_V alue)

(Label SD_Label) (OptionMenu SD_V alue)

(Label SB_Label) (OptionMenu SB_V alue)

(Label R_Label) (OptionMenu R_V alue)

(Label B_Label) (OptionMenu B_V alue)

(Label Userdefined3_V alue) (PushButton Userdefined3)

)

(Resources

(https://www.doczj.com/doc/4916836222.html,bel "自定义") (Userdefined3.TopOffset 4) (Userdefined3.BottomOffset 8) (Userdefined3.LeftOffset 4)

(Userdefined3.RightOffset 4)

(D_Label.AttachLeft True)

(D_Label.LeftOffset 4)

(D_https://www.doczj.com/doc/4916836222.html,bel "D")

(DA_Label.AttachLeft True)

(DA_Label.LeftOffset 4)

(DA_https://www.doczj.com/doc/4916836222.html,bel "DA")

(DB_Label.AttachLeft True)

(DB_Label.LeftOffset 4)

(DB_https://www.doczj.com/doc/4916836222.html,bel "DB")

(DC_Label.AttachLeft True)

(DC_Label.LeftOffset 4)

(DC_https://www.doczj.com/doc/4916836222.html,bel "DC")

(SD_Label.AttachLeft True)

(SD_Label.LeftOffset 4)

(SD_https://www.doczj.com/doc/4916836222.html,bel "SD")

(SB_Label.AttachLeft True)

(SB_Label.LeftOffset 4)

(SB_https://www.doczj.com/doc/4916836222.html,bel "SB")

(R_Label.AttachLeft True)

(R_Label.LeftOffset 4)

(R_https://www.doczj.com/doc/4916836222.html,bel "R")

(Userdefined3_https://www.doczj.com/doc/4916836222.html,bel "自定义参数")

(D_V alue.AttachLeft True)

(D_V alue.TopOffset 4)

(D_V alue.BottomOffset 4)

(D_V alue.LeftOffset 2)

(D_V alue.RightOffset 4)

(D_V alue.Columns 4)

(D_V https://www.doczj.com/doc/4916836222.html,s "n1"

"n2"

"n3"

"n4"

"n5"

"n6"

"n7"

"n8"

"n9"

"n10")

(D_V https://www.doczj.com/doc/4916836222.html,bels "72"!列表框的输入值 "80"

"85"

"90"

"100"

"110"

"120"

"125"

"130"

相关主题
文本预览
相关文档 最新文档