当前位置:文档之家› 基于Proe建立齿轮参数化模型库

基于Proe建立齿轮参数化模型库

基于Proe建立齿轮参数化模型库
基于Proe建立齿轮参数化模型库

本科毕业设计(论文)是本科生在校期间最后一个教学环节,必须反映学生较好地掌握本学科的基础理论、专业知识和基本技能,并具有从事科学研究工作和担负专门技术工作的初步能力,要求教师和学生均应对该教学环节高度重视。现结合我系实际,对毕业设计(论文)及答辩中的有关问题作如下规定:

一、开题及中期检查

每位学生必须有开题报告和中期检查报告,否则不能答辩。

二、对毕业设计(论文)的要求

1、毕业设计(论文)必须由学生本人在教师指导下完成。

2、毕业设计(论文)的选题应结合教师科研课题或现场实际。

3、毕业设计(论文)说明书格式:中英文摘要、前言、目录、主要内容、结束语、参考文献和外文资料翻译。

毕业设计(论文)摘要应概述本文的要点和主要结论。

毕业设计(论文)前言必须清楚的阐述本文的目的、意义和要解决的问题。

毕业设计(论文)主要内容和结果应着重叙述本人的研究工作和获得的结果,包括理论分析、实验、计算、结果和讨论。叙述要简明(必要的详细推导、详细数据列入附录),结论要明确并要有根据。

毕业设计说明书字数:1.5—2万字;论文字数:2—2.5万字。必须计算机打印。

毕业设计(论文)外文资料翻译3000汉字以上,原文不能为书上内容,必须是英文论文。必须计算机打印。

4、毕业设计(论文)图纸除一张一号零件图手绘外,其余全部用计算机绘图,毕业设计总图量折合0号图纸3张以上,研究类、计算机与控制类设计题目可报请系主管领导批准后可酌减。对论文性质的毕业设计,要求实验曲线及涉及图表必须用计算机绘制,实验数据用计算机处理。论文必须全部计算机打印。

5、毕业设计(论文)对所研究的课题应有新的见解。

6、学生在毕业设计(论文)期间,应态度端正,积极主动,刻苦认真,并按时保质保量完成设计任务。

对毕业设计(论文)答辩的要求

1、对学生进行答辩资格审查

答辩资格审查由指导教师或答辩组对毕业设计(论文)进行审查,内容包括:格式,工作量,图纸(注意计算机绘图),设计过程中的态度、表现等,并写出评语。提交不少于30页的实习报告。

2、实行优秀成绩答辩申报

实行优秀成绩答辩申报制度,申报优秀的学生参加专业大组的答辩,未申报的学生则参加小组答辩。

申报优秀的条件:

a.平时成绩平均70分以上且不及格课程两门以下者;

b.英语成绩符合学院要求者。

3、毕业设计(论文)成绩满分为100分,其中,答辩成绩不得少于30%。毕业设计(论文)平时成绩不及格者不能参加答辩,答辩不及格者,毕业设计(论文)以不及格计。

4、毕业设计(论文)答辩成绩由各系答辩委员会负责进行最后评定,评定成绩时,指导教师只作情况介绍不发表评分意见。优良成绩要从严掌握,宁缺无滥(一般35~45%),评分工作要严肃认真,防止偏松现象,更要防止平均分配优良名额,各级成绩必须符合教学规律。

5、评分的主要依据

a.学生独立工作的能力,包括实际工作能力,独立思考能力,调研能力,综合运用所学知识分析和解决问题能力,计算与实验能力,绘图能力等。

b.毕业设计(论文)的质量,包括毕业设计(论文)大纲的要求,设计思想、方案和经济技术措施,毕业设计(论文)基本理论、概念、理论及依据和标准等。

c.毕业设计(论文)创新性和意义,包括科学技术发展的新成果、新观点、新内容以及理论和实际意义。

d.毕业设计(论文)图纸符合国家标准。

6、评分等级及标准

a.毕业设计(论文)的成绩评定采取评语和评分相结合的办法,评分采用五级制,即优秀,良好,中等,及格,不及格。

b.毕业设计(论文)各级成绩参考标准

优秀:(15%以下)

能独立完成设计(论文)任务,基础理论扎实,具有较强的的独立分析和解决实际工程技术问题的能力,有运用新知识、新技术的能力,并有独特见解。毕业设计(论文)条理清晰,文字及图纸工整无误,图纸符合国家标准,计算及论证正确,方案切实可行,结论观点明确,论据充分可靠,答辩时能正确回答提出的主要问题。

良好:(30%以下)

能独立完成设计(论文)任务,基础理论扎实,具有一定的独立分析和解决实际工程技术问题的能力,有一定运用新知识、新技术的能力。毕业设计(论文)条理清晰,文字及图纸工整无误,图纸符合国家标准,计算及论证基本正确,方案可行,结论观点明确,论据可靠,答辩时能正确回答提出的主要问题。

中等:

一般能独立完成设计(论文)任务,在教师的指导下能解决设计中的实际问题,基本上掌握所学理论知识。毕业设计(论文)书写清楚,图纸基本符合国家标准,计算及论证无大错误,方案基本可行,结论观点明确,论据基本可靠,答辩时能正确回答提出的多数问题。

及格:

在教师的指导下基本能独立完成设计(论文)任务和解决设计中的实际问题,基本上掌握所学理论知识。毕业设计(论文)书写清楚,图纸及计算无严重错误,方案结论无原则错误,答辩时基本能正确回答提出的多数问题。

不及格:

有下列情形之一者,应给予不及格

总体方案不可行或出现重大错误者;

答辩时不能正确回答大纲范围内所提出的基本问题,对设计缺乏基本理解者;

毕业设计(论文)有严重错误,文字叙述有明显的观点错误,图纸及计算有严重错误;

在毕业设计(论文)、图纸和答辩中有严重违反规定和纪律者;

毕业设计(论文)是抄袭者;

无故不参加答辩者;

毕业设计过程中累计有四分之一(含四分之一)以上时间缺席者;

根据其他学院有关规定不得参加毕业设计(论文)答辩的学生。

6、毕业设计(论文)及答辩的组织领导

毕业设计(论文)及答辩的组织领导是毕业设计(论文)指导委员会和毕业设计(论文)答辩委员会。

毕业设计(论文)指导委员会主任由责任心强,教学经验丰富的教师担任,成员由参加毕业设计(论文)的教师组成,也可请未参加毕业设计(论文)指导工作的教师参加。

毕业设计(论文)答辩委员会主任由系学位评定委员会主任或经验丰富的老教授担任,成员由系学位委员会委员为主体。

毕业设计成绩评定过程中的有关争议问题,由答辩委员会裁决。

本规定的解释权归机械工程系。

机械系毕业设计说明书排版要求

纸型:16开排版,单面打印

字体:宋体

字号:一级标题:三号二极标题:四号

三级标题:小四正文:五号

行距: 1.5倍

页边距:上2.5cm 下2.5cm 左2.7cm 右2.5cm

页眉: 1.5 cm

页脚: 1.75 cm

基于Pro/E Wildfire 建立齿轮参数化模型库

摘要

Pro/ENGIEER 提供了强大的三位几何造型功能,使我们能够创建各种复杂的几何零件模型,但有时这些功能并不能满足我们的要求。例如标准零件系列,它们的结构都是相同的,区别只在与尺寸,如果标准零件系列通过三维建模的方式来实现,那么工作量将是非常巨大的。最有效的方法使利用标准零件的相似性,发挥Pro/ENGEER参数化建模的特长,使用二次开发工具,如族表工具、用户定义特征(UDF)、Pro/Program、J-link、Pro/Toolkit等来实现。

本文中,主要利用Pro/E Toolkit模块来进行齿轮的二次开发设计。Pro/E Toolkit模块提供了大量的C语言函数库,让用户可以直接访问模型的底层数据。而对于齿轮来说,无论使直齿轮、斜齿轮、锥齿轮、弧齿轮等,都具有相似的尺寸系列:齿数(Z)、模数(M)、压力角(ALPHA)、齿轮宽度(B)、变位系数(X)等。这些参数都是上述齿轮的共有特性,而不同的是个别参数的变动,而如果要单独来建立这些模型,无疑是增加自己的工作量。所以利用Pro/E 来进行二次开发建立参数化的模型是非常有必要的。

关键词:PRO/E 二次开发参数化

目录

第一章绪论···············································1.1

第一章绪论

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课题主要研究内容

本论文的主要研究内容是齿轮参数化模型库的开发设计,当用户选择不同的齿轮后,应用程序可以在基础模型上自动生成相应类型的齿轮,并且可以通过应用程序添加新的齿轮和删除、修改过的齿轮数据系列,并且保存到数据库中。具体工作包括:

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

(2)用户界面的设计。研究Pro/TOOLKIT与Visual C++的接口技术;在VC 中制作Pro/TOOLKIT难以完成的各种复杂的用户界面——选择界面菜单、齿轮特征参数调用界面和齿轮新建、删除等齿轮系统管理界面;由于VC是以C++为编程语言,而Pro/TOOLKIT以C编程,所以必须解决它们之间的通信问题(特别是和MFC的接口问题)。

(3)特征建模和三维标准零件参数库研究。研究Pro/ENGINEER中自动建模的几种方法,如用户自定义特征(UDF),特征元素树等等;解决VC和Pro/ENGINEER 之间通信的技术问题,实现各种标准件的自动建模;研究Access数据库数据的存储及参数数据库和Visual C++之间的数据传输。

1.3本章小节

本章介绍了现代CAD技术中的发展及其需求,并分析了参数和变量化技术的

应用前景,确定了Pro/ENGINEER二次开发的必要性和方便性,确定了课题的主要研究内容和方向:利用Pro/E TOOLKIT进行齿轮的参数化建模,以及需要用到的相关技术。

第二章系统开发技术及方案设计

2.1 Pro/ENGINEER的二次开发方法简介

现在PTC公司提供的几种二次开发的工具有如下几种:

(1)族表(Family Table)

通过族表可以方便的管理具有相同或相近结构的零件,特别适用于零件的管理。族表工具是通过建立一个通用零件为父零件,然后在其基础上对各个参数加以控制生成派生零件。整个族表是通过电子表格来实现的。

(2)用户定义特征(UDF)

用户定义特征是将若干个系统特征融合为一个自定义特征,使用时作为一个整体出现。UDF适用特定产品中的特定结构,有利于设计者根据产品特征快速生成几何模型。

(3)Pro/Program

Pro/ENGINEER软件对于每个模型都有一个主要设计步骤和参数列表Pro/Program,它是由类似BASIC的高级语言组成,用户可以根据设计需要来编辑该模型的Pragram,使其以一个程序来工作。系统通过人机交互的方法来控制系统参数、特征出现与否以及特征的具体尺寸等。

(4)J-Link

j-link是Pro/ENGINEER中自带的基于JA V A语言的二次开发工具,是一种面

向对象、独立于操作系统平台的开发

工具。用户通过JA V A变成实现向

Pro/ENGINEER软件添加功能。

(5)Pro/ENGINEER同J-link一

样也是Pro/ENGINEER自带的二次

开发工具。在Pro/TOOLKIT中,PTC

向用户提供了大量的C语言函数库,

函数采用面向对象的风格。通过调用

这些底层函数,用户能方便而又安全

地访问Pro/ENGINEER的数据库及

内部应用程序,进行二次开发,扩展

一些特定的功能。

上述二次开发工具在

Pro/ENGINEER的“工具”菜单中,

如图1.1所示。其中“辅助应用程序”

主要用来调用Pro/TOOLKIT程序。

在本文中,使用的是Pro/TOOLKIT来进行二次开发。

图2-1

2.2 Pro/ENGINEER的二次开发环境简介

在利用Pro/TOOLKIT进行Pro/ENGINEER的二次开发时,由于PTC公司只提供了MS-DOS命令行来编译生成应用程序,而并没有提供任何其它的相关资料。源程序需要在不同的环境中进行编辑、编译。这是一个相当繁琐的工作,开发效率极其低下,并且相对比较困难,特别是初学者在开发应用程序的过程中会感到很吃力,所以目前国内利用Pro/TOOLKIT来开发Pro/ENGINEER的应用程序并不多。必须寻求其它的解决方法。我们可先编辑makefile模板文件,再以Microsoft 公司的软件开发平台VC作为Pro/TOOLKIT应用程序的集成开发和编译环境,就可以圆满地解决这个问题。

采用VC作为应用程序的开发和编译环境,可以同时满足DLL模式和多进程模式(Multi-Process Mode)两者的开发需求。我们可以用VC的MFC动态连接库编程向导(MFCAppWizard(dll))来编写DLL模式的应用程序,利用VC的Win32控制台程序模块(Win32 ConsoleApplication)来编写多进程模式的应用程序。但是无论采用哪种开发模式,都需要在VC中引入Pro/TOOLKIT内的一些专门的库文件和头文件,如Prodev_dll.lib、Protk_dll.lib、libc.lib、wsock32.lib、mpr.lib等。并且需要指定它们的存放路径。否则,应用程序的编译不会成功。打开VC按照下面步骤设置选项:在Project下拉菜单里,点击Setting,在弹出的Project Setting对话框里单击Link选项卡,再在Object/library modules 编辑框中输入这些库文件和头文件名即可加入。再点击Tools下拉菜单里的Options菜单项,在出现的对话框中,选择Directories TAB下的Directories 输入框,在其中加入头文件路径和库文件的路径。

图2-2 VC++.net 开发界面

2.3数据库技术

2.3.1 Access——桌面关系型数据库

Microsoft Access是Windows数据库应用,它提供灵活的Windows用户界面和方便的程序设计方法,具有处理多媒体数据的能力。通过图形化的用户界面,你能很容易地使用Microsoft Access设置和管理数据库。用户可以根据自己定义的结构存储信息,可以用各种形式来存储数据。它使用了一种先进的方法,可将文档、声音和图形、图像均合并到具有对象连接和嵌入的数据类型的数据库中。为了在处理数据时尽可能地精确、省时,Access一般把数据类型分为三类:字

段的数据类型、Access Basic语言的数据类型和数据库查询参数的数据类型。

使用多种方法来对数据进行筛选、查询和维护。可以通过设计窗体来查看Access 中的数据,也可生成报表将数据打印成正式的文书报表。作为数据库管理系统,

Access包括:数据库表生成器、窗体设计器、查询管理器、报表书写器、宏编

辑器、数据访问页设计器和模块编辑器等工具。如图(2-3)所示,为Access界面:

图2-3 Access 数据库界面

(1)Access中的表

关系数据库是以二维表的形式来组织数据的,表也就是关系。Access与其他常用的数据库系统(如FoxPro、Oracle和SyBase等)一样,都属于关系数据库管理系统(RDBMS),是在许多相关的表格中存储数据。在FoxPro中一个数据库就是一个单独的表,而在Access中一个数据库则由多个表组成,通过表之间的特定“关系”——关键字,将各个表中相关的数据联系起来。用户通过数据管理工具或应用程序对数据库所做的各种操作实际上就是对表进行地操作。表被看成是一些特定主题的数据的集合,可以比喻为一个存放原始数据的容器。如果要存储数据,首先应对数据进行分类——确定主题,并为每一种类型的信息创建一个表结构——确定数据库中包含的字段、字段名称、字段类型等信息。在向表中添加数据时,录入的数据受表结构的约束和组织。—个Access库中允许有多个表,表与表之间的关联,由各个表中相同的字段来决定。Access数据库管理系统就是通过表之间的关联来减少数据冗余和实现多表操作。

(2)记录和字段

象Excel工作表一样,Access数据库的表也是按照行和列组织的,用网格线隔开各单元格,单元格中填入存储的数据;不同的是在Access中,表中的每一列代表一个字段,即一个信息的类别,表中的每一行就是一个记录,它存放的是表中一个项目的所有的信息。在Access表中的每个字段(即每一列)只能是一种类型的数据(文本型、数字型或货币型等)。如图2.4所示,在表中的同一列(就是字段)数据具有相似的信息,每个字段通过明确的数据类型来识别,字段具有特定的长度,每个字段在顶行有一个表明其具体信息类别的名字。

图2-4 Access数据表

由上面可以看出Micorsoft Access数据库软件的功能及适用性都十分强大,它实现了计算机“易于使用”的特点,用户只需进行简单操作就可以设计出一个基本的数据库系统。

2.3.2 DAO——数据访问对象

Visual C++提供了多种数据库访问方式,包括DAO、ODBC和ADO等。DAO是数据库访问技术中访问Access数据库(即*.mdb文件)性能最好的一个。DAO 是“数据访问对象集(Data Access Objects)”的英文字母缩写,是Microsoft 提供的基于一个数据库对象集合的访问技术。它提供了一种通过程序代码创建和操纵数据库的机制。当访问数据库时,DAO不需要访问数据库制造商提供的驱动程序,直接使用Microsoft提供的数据库引擎(Microsoft Jet Engine)所提供的数据库访问对象集进行工作,所以用它来操作MICROSOFT JET数据库很方便,而且是操作JET数据库的技术接口中性能最好的一个。一般来说,MFC的DAO类提供了比ODBC更广泛的支持,只要系统有ODBC驱动程序,DAO就可以访ODBC 数据源。DAO的特性之一就是它的一组COM接口,DAO(数据访问对象)就是一组Microsoft Access/Jet数据库引擎的(COM)自治接口。与其他所有的COM接口一样,都只是给出了一组纯虚函数的声明。接口的名字有DAOWorkspace、DAODatabase和DAORecordset等(这些接口名不象其他接口名那样以字母I开头)。DAO的基于COM的自治接口提供了比基于函数的API更多的功能,它提供了一种数据库编程的对象模型。所以与一般的API相比,它更适合于面向对象的程序开发。除了提供—组函数之外,DAO还提供一组用于连接数据库并对数据库进行操作的对象。这些DAO对象很容易集成到面向对象应用程序的源程序代码中。除了提供连接数据库和操作数据的类之外,DAO对象模型还封装了Access 数据库的结构单元,例如表、查询、索引等。这意味着DAO还使我们可以直接修

改Access数据库的结构,也就是模式,而不必使用SQL DDL语句。甚至它还提

供了一种数据库编程的很有用的对象模型,但是这涉及到多层软件。如果我们使用DAO与ORACLE或SQL server这样的数据库服务器进行通信,则对数据库的所有调用以及数据库输出的数据都必须经过Access/Jet数据库引擎。这对于使用数据库服务器的应用程序来说是一个严重的瓶颈。DAO与ODBC API相比更容易使用,但不能提供ODBCAPI所提供的低层控制。因此,DAO属于高层数据库接口。MFC封装了DAO的大部分API函数,DAO类都采用前缀CDAO。

DAO的另一个特性就是这些接口的实现。Microsoft提供了COM模块DAO350.DLL,该模块连接到与Microsoft Access数据库相同的Jet数据库引擎DLL上。作为Visual C++的开发者,读者有权利再发布这些DLL。同时,DAO350.DLL 只是提供了Jet数据库引擎的DAO实现,但这并不排斥其他的数据库软件公司提供他们的DAO实现。

2.4 本章小节

在本章中,介绍了Pro/ENGINEER二次开发的几种常用的开发工具及技术。介绍了二次开发的各种工具的优缺点,确定了本课题采用的开发工具(Pro/E toolkit)。确定了采用Vc++作为二次开发的主要工具,并分析了其开发环境。还介绍了现在流行的小型、功能齐全、易于使用的桌面数据库Access,同时在介绍了数据库和程序连接的接口DAO对象技术等。

第三章应用程序接口

在前面,我们介绍了进行Pro/ENGINEER开发的几种工具,最终确定了采用Pro/E TOOLKIT来作为我们的开发应用程序的接口。Pro/E TOOLKIT不但提供了大量的C语言函数库,让我们能够很好的访问Pro/ENGINEER的底层资源,而且还可以很好的与Pro/E进行无缝连接。所以我们很有必要先来了解Pro/E TOOLKIT的一些基础知识。

3.1 Pro/TOOLKIT的工作原理

用Pro/TOOLKIT进行开发有两种模式:同步模式和异步模式。选择开发模式的一般规则是:如果没有特殊原因,尽量使用同步模式,因为异步模式较同步模式更加复杂。

3.1.1 异步模式

无需启动Pro/ENGINEER,就能够单独运行Pro/TOOLKIT应用程序的方式叫做异步模式。异步模式实现了两个程序的并行运行(两个程序使独立可运行的),可以只在程序需要调用Pro/ENGINEER功能时,才启动Pro/ENGINEER。单由于异步模式具有代码复杂、执行速度慢等缺点,因此,一般不采用异步模式。

3.1.2 同步模式

同步模式下,Pro/TOOLKIT应用程序必须与Pro/ENGINEER系统同步运行。

同步运行并非并行运行,同步的意思使Pro/TOOLKIT应用集成到Pro/ENGINEER 系统中,若Pro/ENGINEER没有启动,Pro/TOOLKIT应用程序将无法运行。还需要注意的是Pro/TOOLKIT应用程序执行时,Pro/ENGINEER系统处于停止状态的。

同步模式又分为两种模式:即:动态链接模式(DLL模式)和多进程模式(Multiprocess Mode)。

动态连接模式是将用户编写的C程序编译成一个DLL文件,这样Pro/TOOLKIT应用程序和Pro/ENGINEER运行在同一个进程中,它们之间的信息交换是直接通过函数调用实现的。

多进程模式是将用户的C程序编译成一个可执行文件,Pro/TOOLKIT应用程序和Pro/ENGINEER运行在各自的进程中,它们之间的信息交换是通过消息系统来完成的。

异步和同步方式的另一个重要的不同在于应用程序的启动方式。同步方式中应用程序必须由Pro/ENGINEER根据注册文件的信息来启动;而异步模式中应用程序则可以脱离Pro/ENGINEER启动,它可以有自己的main()函数,应用程序启动后会自动连接到Pro/ENGINEER上。启动的异步应用程序并不会出现在辅助应用程序对话框中。

可以根据需要选择DLL模式或者多进程模式。一般来说,多进程模式主要用于程序开发阶段以便程序的调试,单由于DLL模式的运行速度比较快,所以程序开发完成成之后,最好转成DLL模式。多进程模式每次运行的时候都会出现命令提示窗口,这是因为多进程模式与Pro/ENGINEER是独立运行的。

在VC开发环境中,如果要使用DLL模式,创建程序时选择MFC DLL项目类型,如果要使用多进程模式,则创建程序时选择MFC EXE项目类型。本文中采用的时DLL模式来创建Pro/TOOLKIT应用程序。

3.2 Pro/TOOLKIT应用程序基础

由于Pro/TOOLKIT使用面向对象(object-oriented)的编程风格,在进行二次开发前必须深入了解Pro/TOOLKIT工具包。对象句柄、选择对象、访问函数、可扩展数组、宽字符串等是开发Pro/TOOLKIT应用程序的基础。

3.2.1 对象句柄

Pro/TOOLKIT中,每个对象都由一个标识符来标识,利用这个标识符就可以调用所对应的对象,这个标识符就是对象句柄。句柄是一种指向对象变量和参数的数据类型,通常是在对象前加“Pro”。根据它们的定义和使用方式,主要分为以下两种类型:

(1) OHandle(Opaque Handle):不透明句柄、模糊句柄

使用模糊句柄,在Pro/TOOLKIT程序中只能获得对象的地址,而不能访问该对象结构体的具体成员。

Pro/TOOLKIT中只给出了模糊句柄的声明,而没有给出结构体的定义,如图3-1中,ProMdl定义为无类型的指针对象;ProSolid、ProAssembly、ProPart 都定义为sld_part结构体类型的指针对象,但结构体sld_part的定义在Pro/toolkit是被封装起来的,只能通过指针来访问对象而不能访问该对象结构体的内部成员,因此ProMdl、ProSold、ProAssembly、ProPart都是模糊句柄。

图3-1

用模糊句柄可以提高访问速度和效率,而且无法进入对象的数据结构(可以保护内部的数据信息),但同时也限制Pro/TOOLKIT开发的能力。例如在Pro/TOOLKIT 二次开发中,往往需要修改尺寸的值来驱动模型,但如果以模糊句柄来访问尺寸对象,就不能修改该尺寸的值。为解决这一问题,Pro/TOOLKIT提供了另一种句柄:数据结构句柄。

(2) DHandle(Database Handle):数据库句柄、数据结构句柄

Pro/TOOLKIT不仅给出了数据结构句柄的声明,而且给出了结构体的定义(结构体的定义可以从帮助文档里查得),结构体内含有足够的信息—类型、整型标识符和指向所属模型的句柄。因此使用数据结构句柄不但可以获得该对象的地址,而且访问该对象的结构体的具体成员。如ProDimension对象与其他的一些对象都被定义为结构pro_model_item:

图 3-2

在结构体pro_model_item中,type变量代表具体的某个结构数据的类型,id代表这个结构数据杂模型中的标识号(在同种类型的对象中来唯一标识某个具体对象)。Owner变量是一个ProMdl对象,标识这个数据结构属于哪个模型。

3.2.2 选择对象

ProSelection选择对象是O型句柄。它能识别Pro/ENGINEER数据库中的模型项目,是应用程序中应用最广泛的对象之一。在不确定使用哪个对象时,它可以取代ProModelitem。其最重要的应用是作为交互选择函数ProSelect()的输出对象,指明用户交互式选择的一个特征项目。

由于ProSelection对象识别Pro/ENGINEER数据库中的模型项目,代表着不同的特征项目,它就包含着不同的项目信息,对应着它所包含的每个项目信息,

都有相应的Pro/TOOLKIT函数可以提取该信息。如表3.1列出的部分函数和项目信息:

能,每当新创建一个ProSelections数据结构时,就需要用ProSelectionAlloc()函数分配给选择对象分配内存并在其中设定相应数据信息。在ProSelection选择对象使用完后也应该要释放系统给其分配的内存,我们用ProSelectionFree()函数释放由ProSelectionAlloc()创建的或其它的函数输出的ProSelection对象的内存。

3.2.3 访问函数

访问函数(visit function)是为对其它对象的所有属性如零件的所有特征或一个特征的所有表面等进行操作提供方便的,它是一种后台调用(callback)函数。callback函数是那些由用户设计却由系统调用的函数,这些函数都有固定的类型和参数形式,用户只需定义与该函数对应的接口。访问函数可以以数组的形式传递数据。对每个要访问的项目写一动作函数,将指向它的指针传给访问函数。这样,在访问该项目时,系统会自动调用访问函数,执行访问函数中的动作定义。例如,访问实体特征尺寸的访问函数如下:

ProError ProFeatureDimensionVisit(

ProFeature*feature

ProDimensionVisitAction visit

ProAppData data);

第一个参数是被访问实体的句柄,第二是访问动作函数。

最后一个参数的类型是ProAppData,用来把用户自定义的参数传递到访问动作函数中,它的数据类型为void*。虽然访问动作函数由用户自己编写,但是由于它是在Pro/TOOLKIT的访问函数内调用,所以它的参数还是由Pro/TOOLKIT 来定义,Pro/TOOLKIT为每个这样的函数提供了类型定义,这样就能确保C编译器检查访问动作函数的参数。访问动作函数返回的状态值有:PRO_TK_NO_ERROR ——继续访问对象列表中的其它对象;其它值(包括PRO_TK_CONTINUE)——终止访问。访问动作函数一般都应该返回上面所列出的两个状态值之一。

3.2.4 可扩展数组

Pro/ENGINEER中有许多数组工具,该工具也具有C和Pascal程序中普通数组工具的功能,但是它有数组存贮的优点但无其缺点。数组是内存连续的链表,便于按索引查询数组元素。但是由于在Pro/ENGINEER需要频繁的增删元素,每次增删元素都要重复给数组重新分配内存,这使得数组工作效率低下,这个时候常用的数组就无法满足Pro/ENGINEER的要求。Pro/TOOLKIT函数在下述情况下使用可扩展数组:函数需要一个已填充的可扩展数组作为它的输出或输入;函数需要一个已存在、但没有填充的可扩展数组作为它的输入和输出。

Pro/TOOLKIT中的可扩展数组吸取了常用数组的优点摒弃了常用数组的缺点。它采用每次分配内存时都以块(block)为单位,一个块大到足以容纳几个数组成员,在块满了后才重新分配内存这种方案。而且可扩展数组(expandable array)工具提供了一函数集,可适用于任意多的项目。其原理是在数组内存起始前加入一私有头,在头地址中写入书签信息(成员数和成员大小,块数和块的大小)。应用程序中的指针并不是私有头的地址,而是第一个块的地址。指针也只在块之间移动,私有头地址的信息有专门的函数提取和设定。

可扩展数组函数工具不仅可以对用户自己的数组操作,而且用户必须用它在应用程序和Pro/ENGINEER之间传递数据。因为可扩展数组指针(数组首地址)并不是用数组工具分配的连续地址的开头,而是加入的一个私有头,操作系统并不认为它为动态内存的有效地址。因此,不能用内存管理函数如realloc()和free()对该扩展数组进行操作。可扩展数组是一空指针,可以指向任何数据。它的基本类型为ProArray,定义为void*。函数ProArrayAlloc()用来分配内存给一个新的可扩展数组,该函数输出一个指向含有数组成员的连续内存区的指针,可以用一般的内存操作函数(如memcpy()和memset())来对该内存读写。每次分配的最大内存是2Mb。在使用完后,用ProArrayFree()函数释放之前给数组指定的ProArray内存。

3.2.3 宽字符

在Pro/TOOLKIT进行二次开发时,常常会遇到:单击某个按钮来调用某段程序却导致Pro/ENGINEER崩溃的现象。很多情况是因为进行内存操作,却没有释放内存或者内存越界使用而造成的,宽字符和动态内存分配是引起这类问题的主要原因。

何为宽字符?在Pro/ENGINEER中,所看到的以及输入的字符都看做宽字符。宽字符用wchar_t来定义,它不同于char类型。Char类型的字长是一个字节,它不能把世界上所有的文字符号都表达出来,所以出现了宽字符。宽字符用两个或者多个字节来表达一个文字符号,不同系统,宽字符的字节数是不一定相同的。Pro/ENGINEER有其自身的宽字符定义,因此在Pro/TOOLKIT程序中宽字符必须基于Pro/ENGINEER的宽字符的定义,为此,在程序的头文件中必须包含头文件pro_wchar_t.h,而这个文件又包含在protoolkit.h中,因此在编写程序时,只需要包含protoolkit.h头文件即可。但是包含了这个文件后,使用https://www.doczj.com/doc/8e2631481.html,来编

wchar_t定义,与pro_wchar_t.h中定义的发生了冲突。因此以https://www.doczj.com/doc/8e2631481.html,作为

Pro/TOOLKIT程序开发工具时,都需要对项目属性进行设置,使之不在使用内置的wchar_t定义,详细设置见后面章节。

3.2.4 动态内存分配

动态内存分配是在使用访问函数以及其他一些函数经常会用到的,它主要用来获得一组数据对象.为什么要使用动态内存分配呢?举个例子,当要获得模型所有的特征或者制定类型的特征时,事先并不知道由多少个这样的特征,所以不能事先分配一个存储容量,而应该在程序中根据实际的数量来分配.

C++中使用new关键字来操作动态内存的分配,使用delete语句来释放分配的内存.delete只能释放由new方法生成的动态内存空间,否则程序会产生运行期间错误,这种错误常常会导致程序立即关闭。

在Pro/TOOLKIT函数库中专门定义了几个用来动态分配数组的函数。打开帮助文档,在左边的对象类表中,找到ProArray对象,展开后可以看到这些函数,如下图3-3所示。这些函数声明的头文件都是ProArray.h。具体的使用方法及其函数调用可以查看手册。

图 3-3 Pro/TOOLKIT 动态分配内存函数

3.2.5 常见函数形式

在前面指出,Pro/TOOLKIT函数命名约定为:<基本对象>+<操作对象>+<动作>,动作是指对特定的Pro/TOOLKIT对象执行的某种擦偶偶。常用的动作有以下几种:

(1)Get 获得:用来获取对象的某个数据。这类函数的输入是基本数据对象,输出是基本数据对象的某一信息。常用的函数有:ProMdlCurrent(ProMdl *p_handle);ProDirectoryCurrentGet(ProPath path);ProMdlTypeGet(ProMdl model,ProMdlType *p_type);等。

(2)Set设置:用来设置对象的数据值。它也是以基本数据对象作为输入,并输入需要设置的变量的值。常用的函数有:ProDimensionValueSet();ProDimensionSymbolSet();ProParameterValueSet() ;ProMenubuttonVisiblitySet();等。

(3)Visit 访问

Visit函数用来访问数据对象内的一组数据集合,如访问Pro/ENGINEER零件模型的特征。这类函数的输入参数通常是要被访问的数据对象以及访问的数据对象以及访问的函数和过滤函数。所谓的访问过滤函数就是在访问的过程中对数据进行过滤,把不满足条件的对象去除掉;访问动作函数经过过滤的对象进行处

理。这类函数常用的有:ProSolidFeatVisit();ProFeatureDimensionVisit();ProParameterVisit()等。

以上函数都可以在Pro/TOOLKIT的帮助文档中查到的。

3.2.6 函数返回值

每一个函数都有返回值。在C/C++中的返回值有很多类型如void,int,bool。与C/C++不同的是,Pro/TOOLKIT的返回值基本上是ProError。ProError是一个枚举类型数据,它定义了所有可能返回的值。如下所示:

typedef enum ProErrors

{

PRO_TK_NO_ERROR = 0,

PRO_TK_GENERAL_ERROR = -1,

PRO_TK_BAD_INPUTS = -2,

PRO_TK_USER_ABORT = -3,

PRO_TK_E_NOT_FOUND = -4,

PRO_TK_E_FOUND = -5,

PRO_TK_LINE_TOO_LONG = -6,

PRO_TK_CONTINUE = -7,

PRO_TK_BAD_CONTEXT = -8,

PRO_TK_NOT_IMPLEMENTED = -9,

PRO_TK_OUT_OF_MEMORY = -10,

PRO_TK_COMM_ERROR = -11, /* communication error */

PRO_TK_NO_CHANGE = -12,

PRO_TK_SUPP_PARENTS = -13,

PRO_TK_PICK_ABOVE = -14,

PRO_TK_INVALID_DIR = -15,

PRO_TK_INVALID_FILE = -16,

PRO_TK_CANT_WRITE = -17,

PRO_TK_INVALID_TYPE = -18,

PRO_TK_INVALID_PTR = -19,

PRO_TK_UNAV_SEC = -20,

PRO_TK_INVALID_MATRIX = -21,

PRO_TK_INVALID_NAME = -22,

PRO_TK_NOT_EXIST = -23,

PRO_TK_CANT_OPEN = -24,

PRO_TK_ABORT = -25,

PRO_TK_NOT_VALID = -26,

PRO_TK_INVALID_ITEM = -27,

PRO_TK_MSG_NOT_FOUND = -28,

PRO_TK_MSG_NO_TRANS = -29,

PRO_TK_MSG_FMT_ERROR = -30,

PRO_TK_MSG_USER_QUIT = -31,

PRO_TK_MSG_TOO_LONG = -32,

PRO_TK_CANT_ACCESS = -33,

PRO_TK_OBSOLETE_FUNC = -34,

PRO_TK_NO_COORD_SYSTEM = -35,

PRO_TK_E_AMBIGUOUS = -36,

PRO_TK_E_DEADLOCK = -37,

PRO_TK_E_BUSY = -38,

PRO_TK_E_IN_USE = -39,

PRO_TK_NO_LICENSE = -40,

PRO_TK_BSPL_UNSUITABLE_DEGREE = -41,

PRO_TK_BSPL_NON_STD_END_KNOTS = -42,

PRO_TK_BSPL_MULTI_INNER_KNOTS = -43,

PRO_TK_BAD_SRF_CRV = -44,

PRO_TK_EMPTY = -45,

PRO_TK_BAD_DIM_ATTACH = -46,

PRO_TK_NOT_DISPLAYED = -47,

PRO_TK_CANT_MODIFY = -48,

PRO_TK_CHECKOUT_CONFLICT = -49,

PRO_TK_CRE_VIEW_BAD_SHEET = -50,

PRO_TK_CRE_VIEW_BAD_MODEL = -51,

PRO_TK_CRE_VIEW_BAD_PARENT = -52,

PRO_TK_CRE_VIEW_BAD_TYPE = -53,

PRO_TK_CRE_VIEW_BAD_EXPLODE = -54,

PRO_TK_UNATTACHED_FEATS = -55,

PRO_TK_REGEN_AGAIN = -56,

PRO_TK_DWGCREATE_ERRORS = -57,

PRO_TK_UNSUPPORTED = -58,

PRO_TK_APP_NO_LICENSE = -92,

PRO_TK_APP_XS_CALLBACKS = -93,

PRO_TK_APP_STARTUP_FAIL = -94,

PRO_TK_APP_INIT_FAIL = -95,

PRO_TK_APP_VERSION_MISMATCH = -96,

PRO_TK_APP_COMM_FAILURE = -97,

PRO_TK_APP_NEW_VERSION = -98,

PRO_TK_APP_UNLOCK = -99

} ProError, ProErr;

掌握函数的返回值对于以后的Pro/TOOLKIT函数使用是非常有帮助的。经常遇到的返回值有以下几个:

(1)PRO_TK_NO_ERROR:表示函数执行成功;

(2)PRO_TK_GENERAL_ERROR:一般错误;

(3)PRO_TK_BAD_INPUTS:输入错误;

(4)PRO_TK_E_NOT_FOUND:表示所要查找的对象不存在;

(5)PRO_TK_CONTINUE:这个返回值常在访问动作函数和过滤函数中使用,意思是跳过当前访问到的对象,继续访问下一个对象。

(6)PRO_TK_MSG_NOT_FOUND:表示文本信息没有找到

3.3 本章小节

在本章中首先介绍了Pro/TOOLKIT的工作原理,讲述了toolkit是如何和Pro/ENGINEER联系起来工作的。然后介绍了Pro/TOOLKIT的基础知识,讲述了最基础的对象、宽字符、内存分配、函数形式、函数返回值等,这对于后面正确使用Por/TOOLKIT进行二次开发是很有帮助的。

第四章应用程序开发

4.1 应用程序开发基本过程

除了编辑源程序外,应用程序的开发还应该经历编译、注册等基本过程。用Pro/TOOLKIT开发的程序一般包括资源和程序两个部分。资源包括注册文件和菜单资源文件。注册文件用于在Pro/ENGINEER启动时动态加载Pro/TOOLKIT程序。菜单资源存储了用户定制的Pro/ENGINEER菜单信息,每个菜单项对应Pro/TOOLKIT程序中的一个功能函数。

4.1.1确定运行模式

Pro/TOOLKIT应用程序有两种工作模式。在前面已经介绍了Pro/TOOLKIT的两种工作模式(异步模式和同步模式)的工作方式,以及它们之间的优缺点等。最后,确定在本课题中采用同步模式的MFC DLL模式来开发应用程序。

4.1.2 设计菜单

程序运行模式确定(从而也确定了VC开发时的项目类型)后,就可以进行程序框架设计。对Pro/TOOLKIT应用程序来说,所谓程序框架设计,时指根据功能要求设计菜单,然后给每个菜单设计动作函数。

例如,一个零件模型建模系统,其功能要求通过定义零件主驱动参数、零件

内部关系式来完成零件建模,定义主

驱动参数和关系式集之后,要保存这

些信息以及模型,供以后使用。这就

要求能把主驱动参数、关系式、模型

的存放位置加入到数据库中,要使数

据库记录这些信息,就需要一个提交

模型的菜单。

功能分析完后,就可以设计出如

图5-1所示的菜单。图5-1

4.1.3 编写信息文本

菜单设计完后就应该编写菜单的信息资源文本。

信息资源文件用于提供菜单的标签文本(包括其他语言版本的标签)和帮助信息,如过要向Pro/ENGINEER中添加菜单,就必学使用信息资源文本,否则所添加的菜单不会在Pro/ENGINEER菜单栏显示。信息资源文本有固定的格式,例如本课题中使用的资源文件就应当是如图5-2所示:

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