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

上传人:仙*** 文档编号:125416969 上传时间:2022-07-26 格式:DOC 页数:47 大小:799KB
收藏 版权申诉 举报 下载
基于Proe建立齿轮参数化模型库黄志勇_第1页
第1页 / 共47页
基于Proe建立齿轮参数化模型库黄志勇_第2页
第2页 / 共47页
基于Proe建立齿轮参数化模型库黄志勇_第3页
第3页 / 共47页
资源描述:

《基于Proe建立齿轮参数化模型库黄志勇》由会员分享,可在线阅读,更多相关《基于Proe建立齿轮参数化模型库黄志勇(47页珍藏版)》请在装配图网上搜索。

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

2、lkit模块提供了大量的C语言函数库,让用户可以直接访问模型的底层数据。而对于齿轮来说,无论使直齿轮、斜齿轮、锥齿轮、弧齿轮等,都具有相似的尺寸系列:齿数Z、模数M、压力角ALPHA、齿轮宽度B、变位系数X等。这些参数都是上述齿轮的共有特性,而不同的是个别参数的变动,而如果要单独来建立这些模型,无疑是增加自己的工作量。所以利用Pro/E 来进行二次开发建立参数化的模型是非常有必要的。关键词:PRO/E 二次开发 参数化目录第一章 绪论 第一章 绪论 (1)参数化技术正当实体造型技术在CAD系统中广泛运用时,出现了一种比无约束自由造型更好的算法参数化实体造型方法。它主要的特点是:基于特征、全尺寸

3、约束、全数据相关、尺寸驱动设计修改。参数化技术彻底克服了自由缄默的无约束状态,由尺寸决定实体造型的几何形状。尺寸驱动已经成为当今造型系统的根本功能。如果想修改零件形状的话,只需修改一下尺寸的数值就可以实现形状上的改变。这种新设想最先在PTC公司Parametric Technology Corp的软件PRO/ENGINEER中成为现实。由于参数化技术的成功应用,使得它很快成为CAD业界的标准,许多软件厂商纷纷追赶。(2)变量化技术变量化造型技术保存了参数化技术基于特征、全数据相关、尺寸驱动设计修改的优点,但是在约束定义方面做了一定的改变。变量化造型技术将所需定义的尺寸“参数进一步区分为形状约束

4、和尺寸约束,而不仅仅是用尺寸来约束全部几何。通常在新产品开发的概念设计阶段,设计者首先考虑的是设计思想及概念,并将其表达在某些几何形状之中。但是这些几何形状的严格的尺寸定位关系并不能在设计的初始阶段完全确定,所以希望在初始阶段能够允许欠尺寸约束的存在。(3)二次开发研究Pro/ENGIEER 提供了强大的三位几何造型功能,使我们能够创立各种复杂的几何零件模型,但有时这些功能并不能满足我们的要求。例如标准零件系列,它们的结构都是相同的,区别只在与尺寸,如果标准零件系列通过三维建模的方式来实现,那么工作量将是非常巨大的。最有效的方法使利用标准零件的相似性,发挥Pro/ENGEER参数化建模的特长,

5、使用二次开发工具,如族表工具、用户定义特征UDF、Pro/Program、J-link、Pro/Toolkit等来实现。本论文的主要研究内容是齿轮参数化模型库的开发设计,当用户选择不同的齿轮后,应用程序可以在根底模型上自动生成相应类型的齿轮,并且可以通过应用程序添加新的齿轮和删除、修改正的齿轮数据系列,并且保存到数据库中。具体工作包括:1Pro/TOOLKIT根本特点和根本数据结构的研究。分析Pro/TOOLKIT内部的根本数据结构、功能函数及其使用方法;探讨Pro/TOOLKIT中的一些根本的自定义对象及其封装方法,根本数据的对象表示。2用户界面的设计。研究Pro/TOOLKIT与Visua

6、l C+的接口技术;在VC中制作Pro/TOOLKIT难以完成的各种复杂的用户界面选择界面菜单、齿轮特征参数调用界面和齿轮新建、删除等齿轮系统管理界面;由于VC是以C+为编程语言,而Pro/TOOLKIT以C编程,所以必须解决它们之间的通信问题特别是和MFC的接口问题。3特征建模和三维标准零件参数库研究。研究Pro/ENGINEER中自动建模的几种方法,如用户自定义特征(UDF),特征元素树等等;解决VC和Pro/ENGINEER之间通信的技术问题,实现各种标准件的自动建模;研究Access数据库数据的存储及参数数据库和Visual C+之间的数据传输。本章介绍了现代CAD技术中的开展及其需求

7、,并分析了参数和变量化技术的应用前景,确定了Pro/ENGINEER二次开发的必要性和方便性,确定了课题的主要研究内容和方向:利用Pro/E TOOLKIT进行齿轮的参数化建模,以及需要用到的相关技术。第二章 系统开发技术及方案设计2.1 Pro/ENGINEER的二次开发方法简介现在PTC公司提供的几种二次开发的工具有如下几种:1族表Family Table通过族表可以方便的管理具有相同或相近结构的零件,特别适用于零件的管理。族表工具是通过建立一个通用零件为父零件,然后在其根底上对各个参数加以控制生成派生零件。整个族表是通过电子表格来实现的。2用户定义特征UDF 用户定义特征是将假设干个系统

8、特征融合为一个自定义特征,使用时作为一个整体出现。UDF适用特定产品中的特定结构,有利于设计者根据产品特征快速生成几何模型。3Pro/ProgramPro/ENGINEER软件对于每个模型都有一个主要设计步骤和参数列表Pro/Program,它是由类似BASIC的高级语言组成,用户可以根据设计需要来编辑该模型的Pragram,使其以一个程序来工作。系统通过人机交互的方法来控制系统参数、特征出现与否以及特征的具体尺寸等。4J-Linkj-link是Pro/ENGINEER中自带的基于JAVA语言的二次开发工具,是一种面向对象、独立于操作系统平台的开发工具。用户通过JAVA变成实现向Pro/ENG

9、INEER软件添加功能。5Pro/ENGINEER同J-link一样也是Pro/ENGINEER自带的二次开发工具。在Pro/TOOLKIT中,PTC向用户提供了大量的C语言函数库,函数采用面向对象的风格。通过调用这些底层函数,用户能方便而又平安地访问Pro/ENGINEER的数据库及内部应用程序,进行二次开发,扩展一些特定的功能。上述二次开发工具在Pro/ENGINEER的“工具菜单中,如图1.1所示。其中“辅助应用程序主要用来调用Pro/TOOLKIT程序。在本文中,使用的是Pro/TOOLKIT来进行二次开发。图2-12.2 Pro/ENGINEER的二次开发环境简介在利用Pro/TOO

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

11、,可以同时满足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按照下面步骤

12、设置选项:在Project下拉菜单里,点击Setting,在弹出的Project Setting对话框里单击Link选项卡,再在Object/library modules编辑框中输入这些库文件和头文件名即可参加。再点击Tools下拉菜单里的Options菜单项,在出现的对话框中,选择Directories TAB下的Directories输入框,在其中参加头文件路径和库文件的路径。图2-2 VC+.net 开发界面2.3.1 Access桌面关系型数据库Microsoft Access是Windows数据库应用,它提供灵活的Windows用户界面和方便的程序设计方法,具有处理多媒体数据的能力

13、。通过图形化的用户界面,你能很容易地使用Microsoft Access设置和管理数据库。用户可以根据自己定义的结构存储信息,可以用各种形式来存储数据。它使用了一种先进的方法,可将文档、声音和图形、图像均合并到具有对象连接和嵌入的数据类型的数据库中。为了在处理数据时尽可能地精确、省时,Access一般把数据类型分为三类:字段的数据类型、Access Basic语言的数据类型和数据库查询参数的数据类型。表1.Access数据类型的分类类别数据类型字段数据类型文本、数值、计数器、货币、备注、日期/时间、是/否、连接和嵌入对象Access Basic的数据库类型整数、长整数、单精度、双精度、货币、字

14、符串、变量、用户自定义类型、对象数据类型数据库查询参数的类型1)表的字段类型:文本、货币、备注、日期/时间、是/否、连接和嵌入对象2)数值类型:字节、整数、长整数、单精度、双精度3)通用类型:接受任何数据类型4)二进制:在参数查询中可用它来指向成认它的连接表在Access中,用户可以通过建立应用程序来对数据进行分类和存储,可以使用多种方法来对数据进行筛选、查询和维护。可以通过设计窗体来查看Access中的数据,也可生成报表将数据打印成正式的文书报表。作为数据库管理系统,Access包括:数据库表生成器、窗体设计器、查询管理器、报表书写器、宏编辑器、数据访问页设计器和模块编辑器等工具。如图(2-

15、3)所示,为Access界面:图2-3 Access 数据库界面(1) Access中的表关系数据库是以二维表的形式来组织数据的,表也就是关系。Access与其他常用的数据库系统如FoxPro、Oracle和SyBase等一样,都属于关系数据库管理系统RDBMS,是在许多相关的表格中存储数据。在FoxPro中一个数据库就是一个单独的表,而在Access中一个数据库那么由多个表组成,通过表之间的特定“关系关键字,将各个表中相关的数据联系起来。用户通过数据管理工具或应用程序对数据库所做的各种操作实际上就是对表进行地操作。表被看成是一些特定主题的数据的集合,可以比喻为一个存放原始数据的容器。如果要存

16、储数据,首先应对数据进行分类确定主题,并为每一种类型的信息创立一个表结构确定数据库中包含的字段、字段名称、字段类型等信息。在向表中添加数据时,录入的数据受表结构的约束和组织。个Access库中允许有多个表,表与表之间的关联,由各个表中相同的字段来决定。Access数据库管理系统就是通过表之间的关联来减少数据冗余和实现多表操作。(2) 记录和字段象Excel工作表一样,Access数据库的表也是按照行和列组织的,用网格线隔开各单元格,单元格中填入存储的数据;不同的是在Access中,表中的每一列代表一个字段,即一个信息的类别,表中的每一行就是一个记录,它存放的是表中一个工程的所有的信息。在Acc

17、ess表中的每个字段(即每一列)只能是一种类型的数据(文本型、数字型或货币型等)。如图2.4所示,在表中的同一列就是字段数据具有相似的信息,每个字段通过明确的数据类型来识别,字段具有特定的长度,每个字段在顶行有一个说明其具体信息类别的名字。图2-4 Access数据表由上面可以看出Micorsoft Access数据库软件的功能及适用性都十分强大,它实现了计算机“易于使用的特点,用户只需进行简单操作就可以设计出一个根本的数据库系统。2.3.2 DAO数据访问对象Visual C+提供了多种数据库访问方式,包括DAO、ODBC和ADO等。DAO是数据库访问技术中访问Access数据库即*.mdb

18、文件性能最好的一个。DAO是“数据访问对象集Data Access Objects的英文字母缩写,是Microsoft提供的基于一个数据库对象集合的访问技术。它提供了一种通过程序代码创立和操纵数据库的机制。当访问数据库时,DAO不需要访问数据库制造商提供的驱动程序,直接使用Microsoft提供的数据库引擎Microsoft Jet Engine所提供的数据库访问对象集进行工作,所以用它来操作MICROSOFT JET数据库很方便,而且是操作JET数据库的技术接口中性能最好的一个。一般来说,MFC的DAO类提供了比ODBC更广泛的支持,只要系统有ODBC驱动程序,DAO就可以访ODBC数据源。

19、DAO的特性之一就是它的一组COM接口,DAO数据访问对象就是一组Microsoft Access/Jet数据库引擎的(COM)自治接口。与其他所有的COM接口一样,都只是给出了一组纯虚函数的声明。接口的名字有DAOWorkspace、DAODatabase和DAORecordset等这些接口名不象其他接口名那样以字母I开头。DAO的基于COM的自治接口提供了比基于函数的API更多的功能,它提供了一种数据库编程的对象模型。所以与一般的API相比,它更适合于面向对象的程序开发。除了提供组函数之外,DAO还提供一组用于连接数据库并对数据库进行操作的对象。这些DAO对象很容易集成到面向对象应用程序的

20、源程序代码中。除了提供连接数据库和操作数据的类之外,DAO对象模型还封装了Access数据库的结构单元,例如表、查询、索引等。这意味着DAO还使我们可以直接修改Access数据库的结构,也就是模式,而不必使用SQL DDL语句。甚至它还提供了一种数据库编程的很有用的对象模型,但是这涉及到多层软件。如果我们使用DAO与ORACLE或SQL server这样的数据库效劳器进行通信,那么对数据库的所有调用以及数据库输出的数据都必须经过Access/Jet数据库引擎。这对于使用数据库效劳器的应用程序来说是一个严重的瓶颈。DAO与ODBC API相比更容易使用,但不能提供ODBCAPI所提供的低层控制。

21、因此,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二次开发的几种常用的开发工具及技术。介绍了二次开发的各种工具的优缺点,确定了本课题采用的

22、开发工具Pro/E toolkit。确定了采用Vc+作为二次开发的主要工具,并分析了其开发环境。还介绍了现在流行的小型、功能齐全、易于使用的桌面数据库Access,同时在介绍了数据库和程序连接的接口DAO对象技术等。第三章 应用程序接口在前面,我们介绍了进行Pro/ENGINEER开发的几种工具,最终确定了采用Pro/E TOOLKIT来作为我们的开发应用程序的接口。Pro/E TOOLKIT不但提供了大量的C语言函数库,让我们能够很好的访问Pro/ENGINEER的底层资源,而且还可以很好的与Pro/E进行无缝连接。所以我们很有必要先来了解Pro/E TOOLKIT的一些根底知识。3.1 P

23、ro/TOOLKIT的工作原理用Pro/TOOLKIT进行开发有两种模式:同步模式和异步模式。选择开发模式的一般规那么是:如果没有特殊原因,尽量使用同步模式,因为异步模式较同步模式更加复杂。3.1.1 异步模式无需启动Pro/ENGINEER,就能够单独运行Pro/TOOLKIT应用程序的方式叫做异步模式。异步模式实现了两个程序的并行运行两个程序使独立可运行的,可以只在程序需要调用Pro/ENGINEER功能时,才启动Pro/ENGINEER。单由于异步模式具有代码复杂、执行速度慢等缺点,因此,一般不采用异步模式。3.1.2 同步模式同步模式下,Pro/TOOLKIT应用程序必须与Pro/EN

24、GINEER系统同步运行。同步运行并非并行运行,同步的意思使Pro/TOOLKIT应用集成到Pro/ENGINEER系统中,假设Pro/ENGINEER没有启动,Pro/TOOLKIT应用程序将无法运行。还需要注意的是Pro/TOOLKIT应用程序执行时,Pro/ENGINEER系统处于停止状态的。同步模式又分为两种模式:即:动态链接模式DLL模式和多进程模式Multiprocess Mode。动态连接模式是将用户编写的C程序编译成一个DLL文件,这样Pro/TOOLKIT应用程序和Pro/ENGINEER运行在同一个进程中,它们之间的信息交换是直接通过函数调用实现的。多进程模式是将用户的C程

25、序编译成一个可执行文件,Pro/TOOLKIT应用程序和Pro/ENGINEER运行在各自的进程中,它们之间的信息交换是通过消息系统来完成的。异步和同步方式的另一个重要的不同在于应用程序的启动方式。同步方式中应用程序必须由Pro/ENGINEER根据注册文件的信息来启动;而异步模式中应用程序那么可以脱离Pro/ENGINEER启动,它可以有自己的main()函数,应用程序启动后会自动连接到Pro/ENGINEER上。启动的异步应用程序并不会出现在辅助应用程序对话框中。可以根据需要选择DLL模式或者多进程模式。一般来说,多进程模式主要用于程序开发阶段以便程序的调试,单由于DLL模式的运行速度比拟

26、快,所以程序开发完成成之后,最好转成DLL模式。多进程模式每次运行的时候都会出现命令提示窗口,这是因为多进程模式与Pro/ENGINEER是独立运行的。在VC开发环境中,如果要使用DLL模式,创立程序时选择MFC DLL工程类型,如果要使用多进程模式,那么创立程序时选择MFC EXE工程类型。本文中采用的时DLL模式来创立Pro/TOOLKIT应用程序。3.2 Pro/TOOLKIT应用程序根底由于Pro/TOOLKIT使用面向对象object-oriented的编程风格,在进行二次开发前必须深入了解Pro/TOOLKIT工具包。对象句柄、选择对象、访问函数、可扩展数组、宽字符串等是开发Pro

27、/TOOLKIT应用程序的根底。3.2.1 对象句柄Pro/TOOLKIT中,每个对象都由一个标识符来标识,利用这个标识符就可以调用所对应的对象,这个标识符就是对象句柄。句柄是一种指向对象变量和参数的数据类型,通常是在对象前加“Pro。根据它们的定义和使用方式,主要分为以下两种类型:(1) OHandleOpaque Handle:不透明句柄、模糊句柄使用模糊句柄,在Pro/TOOLKIT程序中只能获得对象的地址,而不能访问该对象结构体的具体成员。Pro/TOOLKIT中只给出了模糊句柄的声明,而没有给出结构体的定义,如图3-1中,ProMdl定义为无类型的指针对象;ProSolid、ProA

28、ssembly、ProPart都定义为sld_part结构体类型的指针对象,但结构体sld_part的定义在Pro/toolkit是被封装起来的,只能通过指针来访问对象而不能访问该对象结构体的内部成员,因此ProMdl、ProSold、ProAssembly、ProPart都是模糊句柄。图3-1 用模糊句柄可以提高访问速度和效率,而且无法进入对象的数据结构可以保护内部的数据信息,但同时也限制Pro/TOOLKIT开发的能力。例如在Pro/TOOLKIT二次开发中,往往需要修改尺寸的值来驱动模型,但如果以模糊句柄来访问尺寸对象,就不能修改该尺寸的值。为解决这一问题,Pro/TOOLKIT提供了另

29、一种句柄:数据结构句柄。(2) DHandleDatabase Handle:数据库句柄、数据结构句柄Pro/TOOLKIT不仅给出了数据结构句柄的声明,而且给出了结构体的定义结构体的定义可以从帮助文档里查得,结构体内含有足够的信息类型、整型标识符和指向所属模型的句柄。因此使用数据结构句柄不但可以获得该对象的地址,而且访问该对象的结构体的具体成员。如ProDimension对象与其他的一些对象都被定义为结构pro_model_item:图 3-2 在结构体pro_model_item中,type变量代表具体的某个结构数据的类型,id代表这个结构数据杂模型中的标识号在同种类型的对象中来唯一标识某

30、个具体对象。Owner变量是一个ProMdl对象,标识这个数据结构属于哪个模型。3.2.2 选择对象ProSelection选择对象是O型句柄。它能识别Pro/ENGINEER数据库中的模型工程,是应用程序中应用最广泛的对象之一。在不确定使用哪个对象时,它可以取代ProModelitem。其最重要的应用是作为交互选择函数ProSelect()的输出对象,指明用户交互式选择的一个特征工程。由于ProSelection对象识别Pro/ENGINEER数据库中的模型工程,代表着不同的特征工程,它就包含着不同的工程信息,对应着它所包含的每个工程信息,都有相应的Pro/TOOLKIT函数可以提取该信息。

31、如表列出的局部函数和工程信息:表 3.1 ProSelection含有的工程信息Pro/TOOLKIT函数代表的对象含义ProSelectionModelitemGet()ProModelitem模型工程ProSelectionPoint3dGet()ProPoint3d模型工程上的3-D点ProSelectionViewGet()ProView选择绘图视图因为大多数函数需要创立一个ProSelection选择对象来完成它们的交互功能,每当新创立一个ProSelections数据结构时,就需要用ProSelectionAlloc()函数分配给选择对象分配内存并在其中设定相应数据信息。在ProS

32、election选择对象使用完后也应该要释放系统给其分配的内存,我们用ProSelectionFree()函数释放由ProSelectionAlloc()创立的或其它的函数输出的ProSelection对象的内存。3.2.3 访问函数访问函数visit function是为对其它对象的所有属性如零件的所有特征或一个特征的所有外表等进行操作提供方便的,它是一种后台调用callback函数。callback函数是那些由用户设计却由系统调用的函数,这些函数都有固定的类型和参数形式,用户只需定义与该函数对应的接口。访问函数可以以数组的形式传递数据。对每个要访问的工程写一动作函数,将指向它的指针传给访问

33、函数。这样,在访问该工程时,系统会自动调用访问函数,执行访问函数中的动作定义。例如,访问实体特征尺寸的访问函数如下:ProError ProFeatureDimensionVisit(ProFeature*featureProDimensionVisitAction visitProAppData data);第一个参数是被访问实体的句柄,第二是访问动作函数。最后一个参数的类型是ProAppData,用来把用户自定义的参数传递到访问动作函数中,它的数据类型为void*。虽然访问动作函数由用户自己编写,但是由于它是在Pro/TOOLKIT的访问函数内调用,所以它的参数还是由Pro/TOOLKIT

34、来定义,Pro/TOOLKIT为每个这样的函数提供了类型定义,这样就能确保C编译器检查访问动作函数的参数。访问动作函数返回的状态值有:PRO_TK_NO_ERROR继续访问对象列表中的其它对象;其它值包括PRO_TK_CONTINUE终止访问。访问动作函数一般都应该返回上面所列出的两个状态值之一。3.2.4 可扩展数组Pro/ENGINEER中有许多数组工具,该工具也具有C和Pascal程序中普通数组工具的功能,但是它有数组存贮的优点但无其缺点。数组是内存连续的链表,便于按索引查询数组元素。但是由于在Pro/ENGINEER需要频繁的增删元素,每次增删元素都要重复给数组重新分配内存,这使得数组

35、工作效率低下,这个时候常用的数组就无法满足Pro/ENGINEER的要求。Pro/TOOLKIT函数在下述情况下使用可扩展数组:函数需要一个已填充的可扩展数组作为它的输出或输入;函数需要一个已存在、但没有填充的可扩展数组作为它的输入和输出。Pro/TOOLKIT中的可扩展数组吸取了常用数组的优点摒弃了常用数组的缺点。它采用每次分配内存时都以块(block)为单位,一个块大到足以容纳几个数组成员,在块满了后才重新分配内存这种方案。而且可扩展数组expandable array工具提供了一函数集,可适用于任意多的工程。其原理是在数组内存起始前参加一私有头,在头地址中写入书签信息成员数和成员大小,块

36、数和块的大小。应用程序中的指针并不是私有头的地址,而是第一个块的地址。指针也只在块之间移动,私有头地址的信息有专门的函数提取和设定。可扩展数组函数工具不仅可以对用户自己的数组操作,而且用户必须用它在应用程序和Pro/ENGINEER之间传递数据。因为可扩展数组指针数组首地址并不是用数组工具分配的连续地址的开头,而是参加的一个私有头,操作系统并不认为它为动态内存的有效地址。因此,不能用内存管理函数如realloc()和free()对该扩展数组进行操作。可扩展数组是一空指针,可以指向任何数据。它的根本类型为ProArray,定义为void*。函数ProArrayAlloc()用来分配内存给一个新的

37、可扩展数组,该函数输出一个指向含有数组成员的连续内存区的指针,可以用一般的内存操作函数如memcpy()和memset()来对该内存读写。每次分配的最大内存是2Mb。在使用完后,用ProArrayFree()函数释放之前给数组指定的ProArray内存。3.2.3 宽字符在Pro/TOOLKIT进行二次开发时,常常会遇到:单击某个按钮来调用某段程序却导致Pro/ENGINEER崩溃的现象。很多情况是因为进行内存操作,却没有释放内存或者内存越界使用而造成的,宽字符和动态内存分配是引起这类问题的主要原因。何为宽字符?在Pro/ENGINEER中,所看到的以及输入的字符都看做宽字符。宽字符用wcha

38、r_t来定义,它不同于char类型。Char类型的字长是一个字节,它不能把世界上所有的文字符号都表达出来,所以出现了宽字符。宽字符用两个或者多个字节来表达一个文字符号,不同系统,宽字符的字节数是不一定相同的。Pro/ENGINEER有其自身的宽字符定义,因此在Pro/TOOLKIT程序中宽字符必须基于Pro/ENGINEER的宽字符的定义,为此,在程序的头文件中必须包含头文件pro_wchar_t.h,而这个文件又包含在protoolkit.h中,因此在编写程序时,只需要包含protoolkit.h头文件即可。但是包含了这个文件后,使用VC.NET来编译程序,会出现以下提示错误:D:ptc3p

39、rotoolkitincludesProWchar.h34:error C2632:“short后面的“wchar_t非法D:ptc3protoolkitincludesProWchar.h34:warning:C4091:“typedef:没有声明变量时忽略“unsigned short的左边这是因为由VC.NET向导生成的默认工程使用的宽字符定义是VC.NET内置的wchar_t定义,与pro_wchar_t.h中定义的发生了冲突。因此以VC.NET作为Pro/TOOLKIT程序开发工具时,都需要对工程属性进行设置,使之不在使用内置的wchar_t定义,详细设置见后面章节。3.2.4 动态

40、内存分配动态内存分配是在使用访问函数以及其他一些函数经常会用到的,它主要用来获得一组数据对象.为什么要使用动态内存分配呢?举个例子,当要获得模型所有的特征或者制定类型的特征时,事先并不知道由多少个这样的特征,所以不能事先分配一个存储容量,而应该在程序中根据实际的数量来分配.C+中使用new关键字来操作动态内存的分配,使用delete语句来释放分配的内存.delete只能释放由new方法生成的动态内存空间,否那么程序会产生运行期间错误,这种错误常常会导致程序立即关闭。在Pro/TOOLKIT函数库中专门定义了几个用来动态分配数组的函数。翻开帮助文档,在左边的对象类表中,找到ProArray对象,

41、展开后可以看到这些函数,如下列图3-3所示。这些函数声明的头文件都是ProArray.h。具体的使用方法及其函数调用可以查看手册。图 3-3 Pro/TOOLKIT 动态分配内存函数3.2.5 常见函数形式在前面指出,Pro/TOOLKIT函数命名约定为:+,动作是指对特定的Pro/TOOLKIT对象执行的某种擦偶偶。常用的动作有以下几种:(1)Get 获得:用来获取对象的某个数据。这类函数的输入是根本数据对象,输出是根本数据对象的某一信息。常用的函数有:ProMdlCurrent(ProMdl *p_handle);ProDirectoryCurrentGet(ProPath path);P

42、roMdlTypeGet(ProMdl model,ProMdlType *p_type);等。(2)Set设置:用来设置对象的数据值。它也是以根本数据对象作为输入,并输入需要设置的变量的值。常用的函数有:ProDimensionValueSet();ProDimensionSymbolSet();ProParameterValueSet();ProMenubuttonVisiblitySet();等。(3)Visit 访问Visit函数用来访问数据对象内的一组数据集合,如访问Pro/ENGINEER零件模型的特征。这类函数的输入参数通常是要被访问的数据对象以及访问的数据对象以及访问的函数和过

43、滤函数。所谓的访问过滤函数就是在访问的过程中对数据进行过滤,把不满足条件的对象去除掉;访问动作函数经过过滤的对象进行处理。这类函数常用的有:ProSolidFeatVisit();ProFeatureDimensionVisit();ProParameterVisit()等。以上函数都可以在Pro/TOOLKIT的帮助文档中查到的。3.2.6 函数返回值每一个函数都有返回值。在C/C+中的返回值有很多类型如void,int,bool。与C/C+不同的是,Pro/TOOLKIT的返回值根本上是ProError。ProError是一个枚举类型数据,它定义了所有可能返回的值。如下所示:typedef

44、 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= -1

45、1, /* 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= -

46、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= -3

47、4, 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 = -4

48、5, 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_UNATTACH

49、ED_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_VERS

50、ION= -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_

51、MSG_NOT_FOUND:表示文本信息没有找到3.3 本章小节在本章中首先介绍了Pro/TOOLKIT的工作原理,讲述了toolkit是如何和Pro/ENGINEER联系起来工作的。然后介绍了Pro/TOOLKIT的根底知识,讲述了最根底的对象、宽字符、内存分配、函数形式、函数返回值等,这对于后面正确使用Por/TOOLKIT进行二次开发是很有帮助的。第四章 应用程序开发4.1 应用程序开发根本过程除了编辑源程序外,应用程序的开发还应该经历编译、注册等根本过程。用Pro/TOOLKIT开发的程序一般包括资源和程序两个局部。资源包括注册文件和菜单资源文件。注册文件用于在Pro/ENGINEER

52、启动时动态加载Pro/TOOLKIT程序。菜单资源存储了用户定制的Pro/ENGINEER菜单信息,每个菜单项对应Pro/TOOLKIT程序中的一个功能函数。Pro/TOOLKIT应用程序有两种工作模式。在前面已经介绍了Pro/TOOLKIT的两种工作模式异步模式和同步模式的工作方式,以及它们之间的优缺点等。最后,确定在本课题中采用同步模式的MFC DLL模式来开发应用程序。 设计菜单程序运行模式确定从而也确定了VC开发时的工程类型后,就可以进行程序框架设计。对Pro/TOOLKIT应用程序来说,所谓程序框架设计,时指根据功能要求设计菜单,然后给每个菜单设计动作函数。例如,一个零件模型建模系统

53、,其功能要求通过定义零件主驱动参数、零件内部关系式来完成零件建模,定义主驱动参数和关系式集之后,要保存这些信息以及模型,供以后使用。这就要求能把主驱动参数、关系式、模型的存放位置参加到数据库中,要使数据库记录这些信息,就需要一个提交模型的菜单。功能分析完后,就可以设计出如图5-1所示的菜单。 图5-14.1.3 编写信息文本菜单设计完后就应该编写菜单的信息资源文本。信息资源文件用于提供菜单的标签文本包括其他语言版本的标签和帮助信息,如过要向Pro/ENGINEER中添加菜单,就必学使用信息资源文本,否那么所添加的菜单不会在Pro/ENGINEER菜单栏显示。信息资源文本有固定的格式,例如本课题

54、中使用的资源文件就应当是如图5-2所示:第一行是引文版本下显示的菜单文本标签,第二行是在其他语言下显示的菜单文本标签。第三、第四航都写成“#号,是系统为将来的功能扩展预留空间。菜单栏菜单只有菜单标签,没有帮助信息,所以只有一条信息。而一般的菜单项,都含有一行的帮助信息。如右所示的“用户登陆界面就是对“用户登陆的解释。 图5-24.1.4 新建工程和设置开发环境程序开发的第一步是根据运行模式确定的工程类型新建一个工程,然后设置开发环境。使用VC开发环境来开发程序对初学者来说常常遇到的问题是VC开发环境的设置。为什么要设置?VC开发环境的设置适用于指定Pro/TOOLKIT函数库的目录位置,以便V

55、C开发环境可以在程序的编译连接过程中,找到相应的二次开发函数所在的函数库。4.1.5 定义初始化函数和结束函数完成工程的创立和开发环境的设置后,就开始定义初始化函数和结束函数。初始化函数和终止函数是每个同步模式程序都必须添加的。初始化函数主要用来设置需要添加的菜单,以及其他一些初始值设置,这个函数相当C+类的构造函数或者C语言中的main()函数。终止函数是处理程序结束时需要处理的工作,如释放程序中动态分配给全局变量的内存,这个函数相当于C+中析构函数。初始化函数和终止函数的形式如下:extern C int user_initialize(int argc,char* argv,char*

56、version,char* build ,wchar_t errbuf80)return 0;extern C void user_terninate(void)到时候只要在其中添加相应的操作就可。4.1.6 编写源代码在工程设置以及初始化函数和终止函数添加完毕后,就可以使用VC提供的所有类和函数来开发程序。在编写程序的过程中如果要使用Pro/TOOLKIT函数,添加相应的头文件即可调用。4.1.7 编写注册文件在程序编写好后就可以编写注册文件了。注册文件也可以在编写程序之前就写好。推荐先写好注册文件,以便在Pro/ENGINEER系统中调试。(1) 注册文本格式同步模式的程序必须先把注册文件

57、注册到Pro/ENGINEER的辅助程序中才能在Pro/ENGINEER系统中运行,程序存放的位置、资源信息文件存放的位置、程序启动的类型是DLL模式还是多进程模式、程序何时启动是翻开Pro/ENGINEER的时候自动运行还是手工方式、是否可以手工停止程序如果不能手工停止运行,那么程序的状态不会出现在注册窗口中等。注册文件的文件名必须是以.dat作为扩展名。(2) 自动注册除可以手工的方式在辅助程序中注册Pro/TOOLKIT程序,Pro/TOOLKIT还支持自动注册,也就是Pro/ENGINEER启动的时候就自动把程序注册到辅助应用程序中。要让Pro/ENGINEER能自动注册程序,需要遵循

58、两个条件。首先是注册文件的名称。注册文件的文件名使用protk.dat或者prodv.dat。一个文件里面可以记录多条注册记录。其次是文件的存放位置。Pro/ENGINEER启动的时候会自动查找一些目录,判断是否有文件protk.dat或prodv.dat,如果有那么进行注册。这些木主要是以下几个:l Pro/ENGINEER的启动目录;l Pro/ENGINEER配置文件中,指定以“PROTKDAT、“PRODEVDAT或者“TOOLKIT_REGISTRY_FILE变量所存储的位置;l $LOADDIR/$MACHINE_TYPE/text/目录;l $LOADDIR/text目录一般在开

59、发阶段入股哦要自动注册可以把文件放到启动目录下,当程序最终完成之后,可以放在后三个目录中任意一个目录下。4编译连接Pro/TOOLKIT函数库和VC类库,最终生成解决方案。由于DLL模式是将Pro/TOOLKIT应用程序集成到Pro/ENGINEER中的标准方法。一般开发应用程序都选择这种方法。所以我们这里着重介绍的是DLL模式下的应用程序的结构。所有的DLL模式下的Pro/TOOLKIT应用程序第一个包含的头文件是ProToolkit.h,而且该文件必须为第一个包含头文件,因为它定义了宽字符串wchar_t的值,而在其它头文件中都需要引用该值。由于在ProToolkit.h头文件中还包括了s

60、tdio.h,string.h,stddef.h,stdlib.h四个标准库文件,这几个库文件包含了最常用的C函数的定义。故没有必要在文件中包含这些库文件。当你在应用程序中使用了某个Pro/TOOLKIT函数,都必须把含有该函数原型的库文件包含进来,否那么在编译的时候,编译器将不能检查函数的参数类型。我们不必显式包含ProObjects.h头文件,因为在含有函数原型的头文件中均间接包含了这个头文件。如果在应用程序中使用了Pro/DEVELOP的函数,那么必须参加头文件Prodevelop.h。4.2.2 Pro/TOOLKIT的核心user_initialize()和user_terninat

61、e()这两个函数是所有的Pro/TOOLKIT应用程序都必须含有的,这两个函数由用户自己编写,但是要由Pro/ENGINEER在启动和终止应用程序时调用它们。user_initialize()函数用来初始化一个同步模式的应用程序,任何同步模式的应用程序都必须有该函数才能为Pro/ENGINEER所调用,在Pro/ENGINEER启动、图形界面产生后系统就会自动调用user_initialize(),所以用户应该在user_initialize()函数中对Pro/TOOLKIT应用程序进行初始化,包括对Pro/ENGINEER原有菜单的修改如增加新按钮。当user_initialize()函数调用时它提供了许多参数,当Pro/ENGINEER激活时,这些参数提供了命令行参数信息,版本号和进程序列号。user_initialize()函数的所有输入和输出参数都是可选的,可根据需要选用。初始化函数必须返回0以说明Pro/TOOLKIT函数初始化成功。其它返回值那么视为失败,系统会提示用户Pro/TOOLKIT应用程序失败。使用user_initialize()的可选参数以指明失败信息。4.3 本章小节本章介绍了Pro/TOOLKIT应用程序开发

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!