基于proe的紧固件的二次开发[含CAD高清图纸和说明书]
收藏
资源目录
压缩包内文档预览:
编号:22779117
类型:共享资源
大小:17.53MB
格式:ZIP
上传时间:2019-10-31
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
45
积分
- 关 键 词:
-
含CAD高清图纸和说明书
基于
proe
紧固
二次开发
CAD
图纸
说明书
- 资源描述:
-
基于proe的紧固件的二次开发[含CAD高清图纸和说明书],含CAD高清图纸和说明书,基于,proe,紧固,二次开发,CAD,图纸,说明书
- 内容简介:
-
湘潭大学兴湘学院 毕业论文(设计)任务书(填写模版及要求)论文(设计)题目: 学号:2006008012 姓名:张山 专业: 物理学 指导教师:签名 系主任:签名 一、主要内容及基本要求 是对学生论文(设计)的要求,包括主要技术指标要求、图表数量及质量要求、论文内容及形式的要求、字数要求等。 (指导教师填写,在毕业论文或设计开始前,下发给相应学生 ) 二、重点研究的问题 明确本选题(论文)重点要研究的问题。 (指导教师填写) 三、进度安排序号各阶段完成的内容 举例:完成时间1查阅资料、调研(指导教师填写)2开题报告、制订设计方案3实验(设计)4分析、调试等5写出初稿6修改,写出第二稿7写出正式稿8答辩2010年6月四、应收集的资料及主要参考文献 介绍一些与课题相关的资料及主要参考文献 (指导教师填写) 1图书 著者书名M出版地:出版者,出版年:页码 2期刊 作者篇名J刊名,出版年份,卷号(期号):页码 3报纸 作者篇名N报纸名称,日期,版次. 湘潭大学兴湘学院毕业论文题 目: 基于Pro/E的紧固件二次开发 专 业:机械设计制造及其自动化 学 号: 2006183801 姓 名: 曹峰 指导教师: 毛美姣 完成日期: 2010年 6月 湘潭大学兴湘学院毕业设计说明书题 目: 专 业: 学 号: 姓 名: 指导教师: 完成日期: 湘潭大学兴湘学院毕业论文(设计)任务书论文(设计)题目: 基于Pro/E的紧固件二次开发设计 学号: 2006183801 姓名: 曹峰 专业: 机械设计制造及其自动化 指导教师: 毛美姣 系主任: 一、主要内容及基本要求 要求使用Visual studio 2005软件,基于Pro/E的开发工具包Pro/TOOLKIT,对紧固件模型库进行二次开发。具体设计内容: 1、利用Pro/ENGINEER创建销、键、螺栓、螺钉等常用紧固件的参数化模型; 2、运用Visual studio 2005及Pro/TOOLKIT函数编制自定义菜单、紧固件参数对话框; 3、运用Visual studio 2005及Pro/TOOLKIT函数编写紧固件参数化程序; 4、完成所建自定义菜单和对话框与Pro/ENGINEER的连接; 5、撰写毕业设计说明书一份,字数要求在8000字以上; 6、翻译3000字以上的外文文献。 二、重点研究的问题 1、在Pro/ENGINEER平台上建立各种紧固件的参数化模型; 2、运用Visual studio 2005及Pro/TOOLKIT编制自定义菜单及对话框; 3、在软件设计过程中,实现开发程序菜单及对话框与Pro/ENGINEER的连接。 三、进度安排序号各阶段完成的内容完成时间1查阅相关资料2010年2月20日 3月5日2总体方案设计2010年3月6日 3月20日3利用Pro/ENGINEER进行紧固件参数化建模2010年3月21日 4月10日4Pro/TOOLKIT菜单及对话框的设计2010年4月11日 4月25日5运用Visual studio 2005及Pro/TOOLKIT函数编译紧固件参数化程序 2010年4月26日 5月15日6撰写毕业设计说明书(包括外文文献翻译)2010年5月16日 5月25日7整理资料,答辩2010年5月26日 6月7日四、应收集的资料及主要参考文献 1 李世国.Pro/TOOLKIT程序设计M.北京:机械工业出版社,2003.6:1299. 2源清,肖文.CAD技术发展历程概览.计算机辅助设计与制造,2000(3):34-36. 3 刘文剑.CAD/CAM集成技术.哈尔滨:哈尔滨工业大学出版社,2000.51-58. 4 廖敏.基于图形元素特征参数的参数化设计方法.四川工业学院学报, 2001(3);5-7. 5姚英学,蔡颖.计算机辅助设计与制造.北京:机械工业教育出版社,2002.231-237. I毕业论文毕业论文题题 目:目: 基于基于 Pro/EPro/E 的紧固件二次开发的紧固件二次开发 II目目 录录第一章第一章 绪论绪论.1 11.1 国内外参数化技术研究现状.11.1.1 国外发展现状.11.1.2 国内发展现状.21.2 Pro/Engineer 二次开发现状 .21.3 设计的目的、意义及内容.31.3.1 设计目的、意义.31.3.2 设计内容.31.4 系统开发工具介绍.51.4.1 Pro/Engineer 的简介 .51.4.2 应用程序开发工具.61.5 所采用的关键技术.61.5.1 参数化设计的概念和优点及优势.61.5.2 Pro/Engineer 的二次开发工具 .71.6 本章小结.8第二章第二章 系统的总体设计方案系统的总体设计方案.9 92.1 开发环境.92.1.1 Pro/ENGINEER 中自动建模的方法.92.1.2 Pro/TOOLKIT 应用简介.92.1.3 DLL 基本理论.112.2 系统总体设计.122.3 本章小结.12第三章第三章应用程序接口应用程序接口.14143.1 Pro/TOOLKIT 的工作原理.143.1.1 同步模式.143.1.2 异步模式.143.2 Pro/TOOLKIT 应用程序基础.153.2.1 对象和动作.153.2.2 对象句柄.153.2.3 选择对象.163.2.4 访问函数.173.3 宽字符串.173.4 本章小结.18第四章第四章应用程序的开发应用程序的开发.19194.1 应用程序开发的基本过程.194.1.1 编译和连接应用程序.194.1.2 应用程序注册.194.1.3 应用程序的解锁.20III4.2 应用程序的结构.204.2.1 应用程序包含的头文件.204.2.2 Pro/TOOLKIT 的核心.215.2.3 菜单技术的添加和信息文件.214.3 本章小结.23第五章第五章 紧固件的参数化建模紧固件的参数化建模.24245.1 紧固件的参数化建模.245.1.1 Program 中参数和关系的确定.245.1.2 紧固件的参数模型建立.255.2 销的参数化建模.265.3 螺钉的参数化建模.355.4 螺栓的参数化建模.415.5 键的参数化建模.465.6 挡圈的参数化建模.505.7 垫片的参数化建模.555.8 本章小结.59第六章第六章 利用利用 ProtoolkitProtoolkit 开发紧固件的参数化系统开发紧固件的参数化系统.60606.1 创建参数化的实体模型.606.2 对话框设计.606.3 系统运行界面.606.4 本章小结.62结论结论.6363致谢致谢.6464参考文献参考文献.6565附录附录 I I 外文翻译外文翻译 .6666附录附录 IIII 外文文献原文外文文献原文 .7171I基于基于 pro/epro/e 的紧固件的二次开发的紧固件的二次开发摘要:摘要:当前, Pro/ENGINEER 软件在我国日益普及和推广,但是在同类产品的设计中,往往一两个性能参数值发生变化时,会引起整个产品图纸联动修改。其中,标准件和通用件的重复使用更为频繁。基于这些,本文利用 Pro/ENGINEER 提供的二次开发工具Pro/Toolkit 和 VS2005 对 Pro/ENGINEER 进行二次开发,开发出符合我国标准的销、螺钉、螺栓、键、弹性挡圈、垫片等紧固件系统。关键词:关键词:参数化设计,紧固件,Pro/Toolkit,二次开发Based on pro/e of the secondary development of fastenersAbstract:At present, Pro/ENGINEER software is popularized day by day in our country, but in the design of such product, the change of few parameter values can cause whole product drawing to be changed. Especially the use of standard and common components are more frequent. Because of these reasons, this paper utilizes Pro/Toolkit that Pro/ENGINEER offers and VS2005 to carry on the development for Pro/ENGINEER. The purpose is to develop the storehouse system according with our countrys standard,such as the pin, screws, bolts, key, elastic gaskets and other fasteners system.KeyWords: Parametric design, fasteners, Pro/Toolkit, Secondary development1第一章第一章 绪论绪论1.1 国内外参数化技术研究现状国内外参数化技术研究现状 自从 PTC 公司于 1985 年推出参数化 CAD 系统 Pro /Engineer 以来,参数化设计技术才真正受到工程技术界和学术界的重视,各大计算机软件公司相继推出自己的参数化 CAD 系统或在原有系统上增加参数化功能,展开激烈的竞争。目前,我国 CAD 市场上有两大类参数化 CAD 系统:国外开发的大型全参数化 CAD系统;国内的二维参数化 CAD 系统。1.1.1 国外发展现状国外发展现状 国外开发的具备参数化功能的 CAD 系统:(1) Pro/Engineer 是美国参数技术公司的机械设计自动化软件产品。它是第一个具有参数化功能的 CAD 系统。它通过记录设计历史来捕捉设计意图,设计历史的操作顺序可以修改,同时引入全局设计参数来实现整体的设计修改。 Pro/Enginee 具有在系统中作动态修改的能力,是一个以功能为主的参数化实体造型系统,它提供双向数据关联,设计的修改能自动更新到出图、分析、制造以及其它 CAD/CAM 领域,并具有强大的装配功能。但其中的几何体都必须是完全约束,进行设计要求预先考虑好整个产品的控制参数以及操作顺序,对一个没参加创建的设计者来说,不太容易搞清如何对该项设计进行修改。(2) CADS5 CV 公司的 CADS5 通过一个草图生成工具 Design View 来实现参数化绘图。Design View 提供了广泛的基于约束的造型功能,包括支持零件之间的约束、曲面参数约束、代数约束的逻辑分支以及欠约束模型。采用变量几何技术,约束的顺序不会影响到它的求解结果。界面友好,采用一个灵巧光标动态捕捉图中约束,能够很方便地显示、增加和删除约束。用户可直观地控制图形当前状态。工程约束与几何约束融合起来联立求解,是一个优秀的参数化绘图工具。(3) DPD (Design Post Drafting)是美国 CV 公司采用 Pelotas 平台技术开发的最新产品,运行于 windows 环境中,具有强大的参数化设计及绘图功能。其参数化功能的主要特点是:参数化设计与绘图功能;设计变量的方程式管理;同时支持参数化与非参数化的混合建模能力;较强的草图设计能力。(4) SIGRAPH-DESIG 是德国 SIMENS NIXDORIF 公司的一个智能 2D-CAD 系统。它与其它的 CAD 系统的主要区别在于数据结构。它不仅可以定义和处理数据元素,而且可以定义和处理数据元素之间的关系,支持从最初的概念设计到详细工程图绘制的全过程,真正实现变量设计。(5) VGX 技术是美国 SDRC 公司新近推出一种叫做 VGX(变量几何技术)的新型核心技术。VGX 的最大好处在于,对基于构造过程的参数化方法进行改进,使原有的参数化基于特征的实体模型在可编辑性及易编辑性方面得到了极大的改善和提高。当用户打算做预期的模型修改时,再也不用费心去理解和查询设计历程。基于 VGX 的变量化特征允许 CAD 用户通过相同零件的特征在 3D 中动态捕捉各种关系,历程树顺序不影响关系的有效性。VGX 功能扩展了检验产品的约束推理能力,构图器在已有几何体的某作图面上构图时,自动推断画出的线与己有几何体的相对位置关系,检测并动态地以预增亮方式显示出所有可能产生2的约束,这项新技术可能成为今后参数化发展的新方向。1.1.2 国内发展现状国内发展现状国内开发的具备参数化功能的 CAD 系统:(1) GH-InteCAD 是高华计算机公司的集成智能化微机机械 CAD 系统,基本上代表了目前国内微机版具有自主版权的 CAD 系统的最高水平。其参数化功能主要体现在自动参数化设计和参数化图素拼装上。它采用基于人工智能的几何推理参数化设计方法。系统具有草图规整功能,并可识别多视图联动,对于标准件、常用件可通过参数化图库中的图素进行拼装。(2) PICAD-2D 是中科院北京软件工程研制中心开发的微机参数化集成工程设计系统。其参数化功能的主要特点是提供了交互式参量图符设计功能,能进行固定图符和可变图符的嵌套。(3)开目 CAD 是华中理工大学开发的。它采用局部求解的参数化设计方法实现参数化设计,在用户绘图过程中自动记录约束关系,可以通过约束管理器显示、增加和删除约束,支持达 20 余种约束。其驱动过程明了,速度快,能驱动较为复杂的图形,同时可以方便地指示出过约束、欠约束情形,给用户明确的指示,且在此情况下仍能正确驱动。 另外还有西湖电子信息工程公司的 ZDDS,浙江大学的基于结构化变分几何的 HvCAD 变参设计系统等。这些国内的参数化 CAD 系统硬件要求低,适合我国国情,但其参数化功能尚有不足: 参数化速度慢,效率低,复杂图形难以有效处理。 参数化系统的柔性和灵活性有待提高。 无法利用现有的非参数化系统的图形。 无参数化建库和参数化图形管理功能。1.2 Pro/Engineer 二次开发现状二次开发现状 由于 Pro/Engineer 在 CAD/CAM 领域的优秀表现,它在各个大中型企业中的使用率越来越高。但是这同时也带来了另外一个问题,那就是怎样对通用软件进行本地化的问题。因为通用的 CAD 软件在设计的时候不可能考虑到每个企业的特殊情况,要想充分发挥 CAD 软件的功能,为企业创造更大的效益,企业必须跟据自身的特点,对软件进行本地化的工作,即二次开发。这也是所有 CAD 软件都留有开发接口的原因。Pro/Engineer 的开发从实现方法上大致可以分为两类:一类主要是对 Pro/Engineer 中使用的标准(如:公差符号、尺寸标注样式等)进行符合企业标准的改造。这类开发只需要根据 Pro/Engineer 的开发工具Pro/Toolkit 文档进行相应配置的设置就可以了;另一类是需要开发出人性化的界面以方便用户的使用,以及进行数据库的连接。这一类一般是在比较大型的系统中出现,因为操作复杂必须要有友好界面。由于 Pro/Toolkit 开发界面的功能很弱,而且根本没有连接数据库的功能,所以必须借助于其它的开发工具来实现。而这就涉及了开发工具和 Pro/Toolkit 的兼容性问题。这个问题长期以来一直困扰着开发人员,没有得到很好的解决。这也是使得人们认为Pro/Engineer 难于开发的原因之一。31.3 设计的目的、意义及内容设计的目的、意义及内容1.3.1 设计目的、意义设计目的、意义本论文是在紧固件的基础上,针对设计过程中所遇到的问题而做的部分工作。机械设计领域里传统的二维设计最终将被三维设计所取代。而如何更好地利用三维软件进行产品设计存在着以下值得研究的问题。因此,本论文在于解决以下关键问题:(1)参数化建模 参数化技术是当前 CAD 技术重要的研究领域之一。参数化设计一般是指设计对象的结构比较定型,可以用一组参数来约定尺寸关系。参数的求解较简单,参数与设计对象的控制尺寸有显式的对应,设计结果的修改受到尺寸驱动。参数化设计技术以其强有力的草图设计、尺寸驱动修改图形功能,成为初始设计、产品建模及修改系列设计、多方案比较和动态设计的有效手段。因此,如何充分地运用参数化技术进行零件的参数化建模来提高各种零件的建模效率是本文研究的重点。运用参数化建模可以完全零件的自动化建模,而所要提供的只是一些基本的设计参数。从而减少设计过程中的大量重复性的工作,大大提高工作效率。(2)模板的开发定制 采用 Pro/Engineer 进行三维建模中,模板是建模的基础,它能将相关的信息传递给根据模板创建的文件。通过模板创建的文件具有统一的界面、格式,符合相同的标准,如系统单位、零件精度、模型文件的参数及参数值等。在一定程度上可以提高设计效率。(3)通用零件库的创建 在机械设计中标准件的数量日益增多,这主要是因为采用标准件给产品的设计、制造、装配带来了很大的方便。设计人员如果能从 CAD 系统的标准件库中获得满足设计要求的标准件,则可大大减少重复劳动,提高设计效率,从而缩短新产品的研制周期,所以,提供标准件库或者提供开发标准件库的工具是CAD 系统的一个重要组成部分,也是评价 CAD 系统的一个重要指标。在设计过程中,如果缺少标准件库,在调用每一个标准件时,就需要像别的非标零件一样,重新建模。而标准件的频繁调用,大大降低了装配效率,造成了时间和精力上的浪费。 本论文通过充分利用三维建模软件 Pro/Engineer 及其所提供的二次开发工具 Pro/Program, Pro/Toolkit 进行三维参数化设计及通用零件库的建库工作。参数化设计的方法大提高了建模效率,给各种产品的自动化、快速设计提供了一定的参考依据。通过对模板的开发定制,建立统一的模板来提高设计效率。通过在 Pro/Engineer 中创建三维标准零件库,并实现标准件库与Pro/Engineer 的集成。专门应用领域的用户可用文中所提到的方法来扩充自己所需的标准件和通用件,既可减少开发费用,又可提高开发效率和质量。41.3.2 设计内容设计内容 本论文的主要工作有: (1)利用 Pro/Engineer 的二次开发工具 Pro/Program 实现各种销、螺钉、螺栓、键、弹性挡圈、垫片等通用件的自动化建模。 (2)解决 Pro/Engineer 与 VS2005 的接口问题。 (3)利用 Pro/Enginee:的二次开发工具 Pro/Toolkit 及 VC+2005 进行二次开发,设计出人机交互式的界面,开发出参数化的销、螺钉、螺栓、键、弹性挡圈、垫片系统。 (4)利用 Pro/Engineer 的二次开发工具 Pro/Toolkit 创建三维的标准零件库并实现零件库与 Pro/Engineer 的集成。 (5)调试、运行程序。51.4 系统开发工具介绍系统开发工具介绍1.4.1 Pro/Engineer 的简介的简介 Pro/Engineer 软件系统是美国参数化技术公司 PTC (Parametric TechnologyCorporation)的优秀产品,提供了集成产品的三维造型设计、加工、分析及绘图等功能的完整的 CAD/CAE/CAM 解决方案。该软件以使用方便、参数化造型和系统的全相关性而著称。目前 Pro/Engineer 软件在我国的机械、电子、家电、塑料模具、工业设计、汽车、自行车、航天、家电、玩具等行业取得了广泛的应用,该软件在国内的应用数量大大超过了同类型的其它国外产品。Pro/Engineer 可谓是个全方位的 3D 产品开发软件,集合了零件设计、产品组合、模具开发、NC 加工、饭金件设计、铸造件设计、造型设计、逆向工程、自动测量、机构仿真、应力分析、产品数据管理于一体,其模块众多。主要由以下六大主模块组成:工业设计(CAID)模块、机械设计(CAD)模块、功能仿真(CAE)模块、制造(CAM)模块、数据管理(PDM)模块和数据交换(Geometry Translator)模块。这里将介绍一下 Pro/Engineer 的主要特性:(1)相关性(Full Associativity) 相关性是指所有的 Pro/Engineer 的功能都相互关联。这就意味着在产品开发过程中,用户任何时候所作的变更,都会扩展到整个设计中,同时自动更新所有工程文档如部件、加工以及产品信息管理等。全相关性鼓励在开发周期的任一点进行修改却没有任何损失一并使并行工程成为可能,所以能够使开发后期的一些功能提前发挥作用。 Pro/Engineer 系统开发环境最突出的特点就在于它能够支持并行工程,通过一系列足以表现外形、装配性能的全相关性的解决方案,可以让用户同时在几个技术领域处理一个产品模型。这些能力包括造型设计、机械设计、功能设计、加工以及产品信息管理等。 Pro/Engineer 提供的参数化设计的最大的特点就是单一数据库(SingleDatabase)。 Pro/Engineer 配合单一数据库,所有设计过程所使用的尺寸(参数)都存在数据库中,修改 CAD 模型及工程图不再是一件难事,设计者只需更改3D零件的尺寸,则 2D 工程图就会依照尺寸的修改做几何形状的变化,同样修改2D工程图的尺寸其相关的 3D 实体模型也会自动修改,同时装配、制造等相关设计也会自动修改,这样可确保数据的正确性,达到设计修改工作的一致性,避免发生人为改图的疏漏情形,且减少许多人为改图的时间和精力的消耗。也正因为有参数式设计,用户才可以运用强大的数学运算方式,建立各尺寸参数间的关系式使得模型可自动计算出应有的外型,减少尺寸逐一修改的繁琐费时,并减少错误发生。(2)基于特征的参数化建模(Feature-based Parametric Modeling) 参数式设计就是将零件尺寸的设计用参数来描述,并在设计修改时通过修6改参数的数值来更改零件的外形。参数化设计的思想在工业界传播了许多年,1988年,Pro/Engineer 以参数式设计的思想问世以后,业内人士即对参数式设计CAD/CAM 的思想翘首以待。Pro/Engineer 对于传统机械设计工作来说,有相当大的帮助作用,因为 Pro/Engineer 中参数不只代表设计对象的外观相关尺寸,并且具有实质上的物理意义。例如我们可以运用系统参数(System parameters,如体积、表面积、重心、三维坐标等),或用户依设计流程所定义的用户定义参数(User defined parameters,如密度、厚度等具有设计意义的物理量或字符串)加入设计构思中来表达设计思想。这项参数化设计的功能不但改变了设计的概念,并且将设计的便捷性推进了一大步。(3)数据管理(Data Management) 为了在最短的时间内完成最多的开发工作,必须允许多个学科的工程师同时对同一产品进行开发。Pro/Engineer 数据管理功能可以管理并行工程所要求的并行作业程序,并通过全相关性达到并行工程的目的。(4)装配管理(拟 sembly Management) Pro/Engineer 能够让用户使用贴合(Mate)、插入(Insert)、对齐(Align)等直觉式指令,轻松装配零部件,保持设计意图,达到设计目的。而高级的功能则支持大型复杂装配体的创建与管理,并且零件数目不受限制。(5)工程数据库重用(Engineering Date Reuse, EDR) 工程数据库重用就是为了达到大幅提高生产力、降低成本的目的,而以标准、公认的设计作为新产品设计的基础,它能够让用户快速开发整个产品系列。Pro/Engineer 的基本结构使 EDR 易于实现。随着将来几代产品的创建,会发现从 Pro/Engineer 中获得的益处将大大超过最初的投资。(6)易用性(Ease of Use) Pro/Engineer 独有的自动导引菜单为用户提供了使用方便的选项,也可以预先选定最常用的功能。此外,系统还提供了简短的功能菜单说明和完整的在线帮助。这些都使得 Pro/Engineer 具有非常好的易用性。(7)硬件独立性(Hardware Independence) Pro/Engineer 可以在 UNIX 和 Windows98/2000NT/XP 平台下运行,并在每个系统中都维持相同的界面,使用的感觉也一样。用户可以根据自己的需求,选购最经济的硬件配置,再混用或搭配任何一种平台组合。由于 Pro/Engineer 可以运行在不同环境中,具有独特的数据结构模式,因此可以方便地让信息在不同平台的机器之间相互转换。1.4.2 应用程序开发工具应用程序开发工具 系统程序模块的设计选择 Visual studio 2005 作为开发平台。Visual studio 2005 是运行于 Windows 上的交互式可视化集成开发环境,是美国Microsoft Visual Studio 的一部分。像其它的可视化开发环境(如 Visual 7Basic, Delphi, C+ Builder)一样,VC+2005 集程序的代码编辑、编译、连接调试等于一体,给编程人员提供了一个完整而又方便的开发界面和许多有效的辅助开发工具。VC+2005 的应用程序向导(App Wizard)可以为很大一部分类型的程序提供框架代码,用户不需要书写代码,只需要几个按钮就可以生成一个完整的可以运行的程序。1.5 所采用的关键技术所采用的关键技术1.5.1 参数化设计的概念和优点及优势参数化设计的概念和优点及优势 参数化设计模型是以约束来表达产品模型的形状特征,以一组参数来控制设计结果,从而能通过变换一组参数值方便地创建一系列形状相似的零件。参数化设计的基本手段有程序驱动与尺寸驱动。程序驱动法是通过分析图形几何模型的特点,确定模型的主参数以及各尺寸间的数学关系,将这种关系输入程序中,进而在零件设计时只要输入几个参始值就可生成所要求的模型。尺寸驱动是对程序驱动的扩展,它的基本思想是由应用程序生成所涉及的基图,该图的尺寸有一系列的标识,这些尺寸由用户在编程时输入或交互式输入,从而生成用户的模型。 传统的 CAD 绘图技术都用固定的尺寸值定义几何元素,输入的每一条线都有确定的位置,要想修改图面内容,只有删除原有的线条后重画。而新产品的开发设计需要多次反复修改,进行零件形状和尺寸的综合协调和优化。对于定型产品的设计,需要形成系列化,以便针对用户的生产特点提供不同功率、规格的产品型号,参数化设计可使产品的设计随着某些结构尺寸修改和使用环境的变化而自动修改图形。 参数化的实现大致如下:利用草图技术生成二维轮廓(Profile),这个轮廓的准确位置和尺寸都不必在草图输入时给出,可以在以后的参数设计过程中得到。再利用系统的拉伸和旋转等手段来生成三维特征。有了这个基础,再加上一个记录造型过程的 CSG 树,就可以完成模型的参数设计。需要强调的是这里的参数并不是最后模型的设计参数,而是完成造型过程的造型参数。 参数化设计技术以其强有力的尺寸驱动,修改图形功能,为初始产品设计、产品建模、修改系列产品设计提供了有效的手段,能够充分满足设计具有相同或相近几何拓扑结构的工程系列产品及相关工艺装备的需要。 参数化技术以约束为核心,是一种比约束自由造型技术更新颖、更好的造型技术。该技术将复杂的设计过程分解为三个子过程,即草图设计、对草图施加约束以及约束求解。参数化技术具有以下三方面的优点: (1)设计人员的初始设计要求低。无须精确绘图,只须勾绘草图即可,然后可通过适当的约束得到所需精确图形。 (2)便于系列化设计。一次设计成型后,可通过尺寸的修改得到同种规格零8件的不同尺寸系列。 (3)便于编辑、修改,能满足反复设计需要。当在设计中发现有不适当的部分时,设计者可通过修改约束而方便地得到新的设计。 这些优点使得参数化技术非常适合于对整个设计过程的支持。因为设计的目的是为了满足一定的功能需求,而这些功能需求往往可以转化为适当的设计约束。设计者通过对一设计约束的控制可以方便灵活地实现产品的功能。 Pro/Engineer 系统最典型的特点是参数化。体现参数化除使用尺寸参数控制模型外,还在尺寸之间建立数学关系式,使它们始终保持相对的大小、位置或约束条件。在零件模式下,系统允许建立特征之间的关系式,使得零件中的不同特征产生关联,此时创建的参数关系式成为零件关系式。同时在零件与装配模式中,系统还允许在阵列特征或阵列元件间建立参数关系式。1.5.2 Pro/Engineer 的二次开发工具的二次开发工具 Pro/Engineer 是一个功能强大的三维产品设计软件。它融入了单一数据库、参数化、基于特征、全相关的设计概念河以将设计至生产全过程集成到一起,让所有的用户能够同时进行同一产品的设计制造工作,即实现所谓的并行工程。Pro/Engineer 在提供强大的设计、分析、制造功能的同时,也为用户提供了多种二次开发工具。常用的二次开发工具有:族表(Family Table)、用户定义特征(UDF),Pro/Program, J-link, Pro/toolkit 等。(1)族表(Family Table)族表是一个用表格来驱动模型的工具,通过族表可以方便地管理具有相同或相近结构的零件,特别适用于标准零件的管理。族表可以将事先定义好的模型(称为“GENERIC”的零件)中可供驱动的尺寸参数、特征、模型参数等放入表格中,通在表格中输入参数值就可创建一个新的零件(称为“INSTANCE”的零件)。族表的产生过程是,首先建立一个具有代表性的零件,此零件称为通用零件或原始零件(GENERIC PART)。然后,根据可变情况编辑族表项目,可变项目可以是:尺寸(Dimension)、参数(Parameter)、特征(Feature)、与组件(Component)等。完成族表内容后,需进行校验,然后系统会自动一一再生,从而生成若干子零件(Instance Part)。(2)用户定义特征(UDF)用户定义特征是将若干个系统特征融合为一个自定义特征,使用时作为一个整体出现。系统将 UDF 特征以 gph 文件保存。UDF 适用特定产品中的特定结构,有利于设计者根据产品特征快速生成几何模型。(3) Pro/Program在零件的设计过程中,如果零件的外形具有高度的重复性,那么经常重复同样的步骤便显得不具效率。为了提高工作效率,Pro/Engineer 提供了一个可程序化的工具Pro/Program。在 Pro/Engineer 系统中,每建立一个模型,都会有一个宏文件记录模型的产生过程,如果能够对这个宏文件进行修改,则可以控制模型的建立过程,从而控制所生成的模型。这个宏文件是由类似 Basic的高级语言构成的,用户可以根据设计需要来编辑模型的 Program,使其作为9一个程序来工作。通过运行该程序,系统通过人机交互的方法来控制系统参数、特征出现与否和特征的具体尺寸。利用此工具可以将某些经常要更改的步骤或尺寸,事先以语句的方式写入,使得每个使用这些零件的普通人员也能明白如何操作,在使用当中只需输入关键的参数。便可直接生成零件,从而大大地提高了零件设计效率。(4) J-MinkJ-Mink 是 Pro/Engineer 中自带的基于 JAVA 语言的二次开发工具。用户通过 JAVA 编程实现在软件 Pro/Engineer 中添加功能。(5) Pro/toolkit Pro/toolkit 同 Mink 一样也是 Pro/Engineer 中自带的二次开发工具。不过它是基于 C 语言的。Pro/toolkit 能实现与 Pro/Engineer 的无缝集成,是 Pro/Engineer 自带的功能最强大的二次开发工具。1.6 本章小结本章小结介绍了系统的开发工具,重点阐述了 Pro/E 软件、参数化设计以及二次开发的关键技术。同时分析了 Pro/ENGINEER 三维软件的二次开发方法,为论文的进一步展开奠定了基础。10第二章第二章 系统的总体设计方案系统的总体设计方案2.1 开发环境开发环境在利用 Pro/TOOLKIT 进行 Pro/ENGINEER 的二次开发时,由于 PTC 公司只提供了 MS-DOS 命令行来编译生成应用程序,而并没有提供任何其它的相关资料。源程序需要在不同的环境中进行编辑、编译。这是一个相当繁琐的工作,开发效率极其低下,并且相对比较困难,特别是初学者在开发应用程序的过程中会感到很吃力,所以目前国内利用 Pro/TOOLKIT 来开发 Pro/ENGINEER 的应用程序并不多。必须寻求其它的解决方法。我们可先编辑 makefile 模板文件,再以Microsoft 公司的软件开发平台 VS2005 作为 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.1.1 Pro/ENGINEER 中自动建模的方法中自动建模的方法程序自动建模即是指系统根据用户输入的参数或根据运用 CAD 系统进行设计产生的数据结果,可以动态地、自动地生成所需产品的模型。对于几何特征的自动建模,Pro/ENGINEER 为用户提供了下述 5 种二次开发方法,即第二章已经介绍:族表(Family Table) 、用户自定义特征用户自定义特征(User Define Feature UDF) 、Pro/Program、关系式(Relations)以及特征元素树(Feature Element Tree) 。上述的 5 种二次开发方法,前 4 种均可在交互模式下操作,特征元素树则只能通过 Pro/TOOLKIT 包编程实现;可以将上述 5 种方法结合,开发出用户需要的应用程序。在 5 种二次开发方法中,用户自定义特征法(UDF)比其他方法编程更为容易,且工作量及存储量都相对较少,本系统将用户自定义特征法和关系式结合使用来实现各标准件的自动建摸。2.1.2 Pro/TOOLKIT 应用简介应用简介Pro/TOOLKIT 是参数技术公司(PTC)为用户定制的二次开发工具,该工具箱帮助用户程序或第三方程序实现和 Pro/ENGINEER 的无缝连接,以扩展Pro/ENGINEER 的功能。Pro/TOOLKIT 提供了大型的具有自身特色的 C 函数库供外部应用程序调用,它们可以使用 Pro/ENGINEER 的数据库和应用程序。在11Pro/TOOLKIT 中的数据都经过封装和隐藏,所以它和系统之间传递信息的数据结构对应用程序而言是不可见的,这些数据结构只有 Pro/TOOLKIT 的函数可以访问。因此,Pro/TOOLKIT 可以说是 PTC 应用程序开发者的用户接口。Pro/TOOLKIT 有属于自身的编程风格、基本概念和函数命名。Pro/TOOLKIT 使用面向对象(object-oriented)的编程风格,其最基本的概念是对象和动作(Object andAction) 。Pro/TOOLKIT 库函数针对每个具体的对象(Objects)执行一个动作(Actions) ,从而完成相应的功能。在 Pro/TOOLKIT 的函数命名中,首先定义对象类型,其次是动作,Pro/TOOLKIT 中函数命名规则为:Pro对象名针对对象的动作如:ProSelectionLocationGet()一个 Pro/TOOLKIT 对象是一个明确定义和独立的、可以完成对象相关动作的 C 数据结构。大部分对象都是 Pro/ENGINEER 数据库中的项目,如特征,表面等;其它对象类型要么是抽象的,要么是临时的,如一个选择动作选择的临时项目。 在 Pro/TOOLKIT 中,每种对象都有一个包含“Pro” 、加上一个以大写字母开头的描叙对象的词的名字,均对应数据库中的一个项目,如 ProFeature-特征、ProSolid-描叙零件和装配件。Pro/TOOLKIT 为引用对象的变量和参数提供了对象的 C 类型定义。对象的等级反应了数据库的层次,如一个ProFeature 对象可以包含一个 ProSurface 类型的对象,如图 3.1 所示。图 3.1 对象之间等级和关系每个 Pro/TOOLKIT 函数都有一个 ANSI 函数原型(Pro/TOOLKIT 提供了至少一种函数原型检索) 。某个特定的 Pro/TOOLKIT 对象的所有函数原型都存于针对该对象命名的头文件中。如函数 ProEdgeLengthEval()的函数原型在 ProEdge.h中。为了确保在应用程序中包含对应的头文件,我们最好使用函数原型。大多数 Pro/TOOLKIT 函数的返回值类型是 ProError。ProError 是一枚举型对象,无论 Pro/TOOLKIT 函数调用是成功或失败,都会返回一个该类型的对象,指明函数调用的结果。ProError 定义如下:Typedef enum ProErrorsPRO_TK_NO_ERROR=0,PRO_TK_GENERAL_ERROR=-1,PRO_TK_BAD_INPUTS=2,ProError,ProErr;12函数调用成功时返回 PRO_TK_NO_ERROR。失败时根据不同的失败原因,返回值不同。如 PRO_TK_BAD_INPUTS 指输入错误,PRO_TK_OUT_OF_MEMORY 或PRO_TK_COMM_ERROR 指系统错误。应用程序中必须注意对函数返回的错误状态进行处理,不同的错误有不同的处理方法,以确保程序的顺利执行和获取正确的结果。通常在相应的头文件里函数原型的注释中包含了可能的错误类型,应用程序可参考它对该类型错误做处理就可以了。2.1.3 DLL 基本理论基本理论DLL 是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个 DLL(服务器)上并由一个或多个客户导入而使用,这些客户可以是应用程序或者是其它的 DLL。动态链接库不同于静态库,在静态库情况下,函数和数据被编译成一个二进制文件(通常扩展名为*.LIB), Visual C+的编译器在处理程序代码时将从静态库中恢复这些函数和数据并把它们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为”静态链接” ,此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是 DLL文件,引入库文件包含被 DLL 导出的函数的名称和位置,DLL 包含实际的函数和数据,应用程序使用 LIB 文件链接到所需要使用的 DLL 文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是 DLL 中所要调用的函数的内存地址,这样当一个或多个应用程序运行时再程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL 和.LIB 文件必须随应用程序一起发行,否则应用程序将会产生错误。微软的 Visual C+支持三种 DLL,它们分别是 Non-MFC D11(非 MFC 动态库)、Regular Dll(常规 DLL), Extension Dll(扩展 DLL). Non-MFC DLL 指的是不用MFC 的类库结构,直接用 C 语言写的 DLL,其导出的函数是标准的 C 接口,能被非 MFC 或 MFC 编写的应用程序所调用。Regular DLL:和下述的 Extension Dlls一样,是用 MFC 类库编写的,它的一个明显的特点是在源文件里有一个继承CWinApp 的类(注意:此类 DLL 虽然从 C WinApp 派生,但没有消息循环),被导出的函数是 C 函数、C 什类或者 C+成员函数(注意不要把术语 C 十十类与 MFC的微软基础 C 十十类相混淆),调用常规 DLL 的应用程序不必是 MFC 应用程序,只要是能调用类 C 函数的应用程序就可以,它们可以是在 Visual C+, Dephi, Visual Basic, Borland C 等编译环境下利用 DLL 开发应用程序。与常规 DLL 相比,使用扩展 DLL 用于导出增强 MFC 基础类的函数或子类,用这种类型的动态链接库,可以用来输出一个从 MFC 所继承下来的类,比较方便。扩展 DLL 是使用 MFC 的动态链接版本所创建的,并且它只被用 MFC 类库所编写的应用程序所调用。例如你己经创建了一个从 MFC 的 CtoolBar 类的派生类用于创建一个新的工具栏,为了导出这个类,你必须把它放到一个 MFC 扩展的DLL 中。扩展 DLL 和常规 DLL 不一样,它没有一个从 C WinApp 继承而来的类的13对象,所以,开发人员必须在 DLL 中的 D11Main 函数添加初始化代码和结束代码。应用程序使用 DLL 可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用 DLL 之前首先要知道 DLL 中函数的结构信息。用它可以查看 DLL 文件中的程序。另外,Windows 系统将遵循下面的搜索顺序来定位 DLL: 1.包含 EXE 文件的目录,2.进程的当前工作目录,3. Windows 系统目录,4. Windows 目录,5.列在 Path 环境变量中的一系列目录。显式链接是应用程序在执行过程中随时可以加载 DLL 文件,也可以随时卸载DLL 文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary 或 MFC 提供的 AfxLoadLibrary 显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddressU 获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary 或 MFC 提供的 AfxFreeLibrary 释放动态链接库。隐式链接就是在程序开始执行时就将 DLL 文件加载到应用程序当中。在DLL代码中明确声明导出函数:declspec(dllexport)等函数名。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。2.2 系统总体设计系统总体设计三维标准零件库的开发是基于 Pro/ENGINEER 内部的二次开发语言Pro/TOOLKIT 进行的,通过调用其内部函数,在原来的零件菜单(PART)的尾部挂上一个两级菜单,第一级是标准件(Standard)菜单,说明用户将要对标准件库进行操作;第二级菜单则是具体的操作,其中包括调用(Create)标准件,对标准库进行添加(Add) 、删除(Delete)等几项菜单。如果选择了调用(Create)菜单项,则会弹出用 Visual C+设计的标准件选择对话框,根据用户的需要进行选择,最后进入零件模块完成自动生成;如果选择的是添加(Add)菜单,则弹出一个添加对话框,利用该对话框可以实现对标准件库的补充;如果标准件的系列淘汰了,则可以选择删除(Delete)菜单,删除这个系列的标准件。利用这些功能使用者可以根据实际需要及时地更新标准件库,这样就满足了不同的设计者的需要。系统总体设计结构如图 3.2 所示。14图 3.2 系统总体结构2.3 本章小结本章小结本章探讨了在 Pro/ENGINEER 中自动建模的方法、DLL 基本原理和Pro/ENGINEER 的二次开发接口 Pro/TOOLKIT 工具包的特点及编程风格,设计了系统的总体设计结构。15第三章第三章应用程序接口应用程序接口本系统是基于 Pro/TOOLKIT 进行二次开发的,Pro/TOOLKIT 是 PTC 应用程序开发者的用户接口。所以我们必须对 Pro/TOOLKIT 有更深层次的了解。3.1 Pro/TOOLKIT 的工作原理的工作原理用 Pro/TOOLKIT 进行开发有两种模式:同步模式和异步模式。3.1.1 同步模式同步模式由于在 DLL 模式和多线程模式(multiProcess mode)下,Pro/TOOLKIT 和Pro/ENGINEER 并不同时操作,所以它们统称为“同步模式(synchronous mode) ” 。Pro/TOOLKIT 应用程序集成到 Pro/ENGINEER 中的标准方法是使用动态连接库(DLLs) 。当编译 C 源代码并将其和 Pro/TOOLKIT 库连接时,就会创建一个在 Pro/ENGINEER 启动时连接到 Pro/ENGINEER 中的目标库文件,就象是Pro/ENGINEER 本身的程序一样。这种方法称为“DLL 模式” 。而在多线程模式下,应用程序代码被编写并连接为一个单独的可执行文件(EXE 文件) ,该文件由Pro/ENGINEER 派生,并作为 Pro/ENGINEER 进程的子线程。在 DLL 模式,Pro/TOOLKIT 应用程序和 Pro/ENGINEER 的信息交换是通过直接的函数调用实现;在多线程模式,是通过进程内信息系统在两个线程间模拟函数调用,在两个进程间传递函数的识别信息及其参数。由于多线程模式中的交换过程比 DLL 模式多,相比较而言,多线程模式通信负担比 DLL 模式重,尤其是 Pro/TOOLKIT 应用程序频繁调用 Pro/TOOLKIT 库函数时,通信更复杂。但是,它无需运行Pro/ENGINEER 调试器就可以运行 Pro/TOOLKIT 应用程序源代码调试器,易于调试和发现程序错误。尽管多线程模式同时有多个线程在并行运行,其实这些线程并没有真的并行处理,每个进程都需要等待其它进程操作完成才能进行自己的操作。控制总在两个线程之间转换,总是有一个线程在等待。我们可以无需改变源代码任选两种模式中的一种,也可以同时使用多个应用程序和多种模式。但是不管使用哪种开发模式都应该切换到 DLL 模式,因为在 DLL 模式下程序执行的更好一些,而且不同的模式有不同的并发症,故应该以 DLL 模式测试成功才可行。3.1.2 异步模式异步模式异步模式(asynchronous mode)和多线程模式一样也采用多线程,但在异步模式中实现了真正的并行处理,即 Pro/TOOLKIT 和 Pro/ENGINEER 可以同时执行一个操作。在异步模式中使用远程过程调用(Remote Procedure Calls(RPC))作为 Pro/ENGINEER 与应用程序的通信方式。由于使用了远程过程调用通信方式,使得该模式执行操作速度比较慢。因此,在没有特殊情况时,尽量选用同步模式。 异步和同步方式的另一个重要的不同在于应用程序的启动方式。同步方式中应用程序必须由 Pro/ENGINEER 根据注册文件的信息来启动;而异步模式中应用程序则可以脱离 Pro/ENGINEER 启动,它可以有自己的 main()函数,应用程序启动后会自动连接到 Pro/ENGINEER 上。启动的异步应用程序并不会出现在辅助应用程序对话框中。16由于异步模式较同步模式更为复杂,运行速度慢,而且异步模式也并不是唯一可以显式控制 Pro/ENGINEER 的方式。所以没有不可避免的原因,一般最好选择同步模式。本项目就采用同步模式。3.2 Pro/TOOLKIT 应用程序基础应用程序基础由于 Pro/TOOLKIT 使用面向对象(object-oriented)的编程风格,在进行二次开发前必须深入了解 Pro/TOOLKIT 工具包。在 Pro/ENGINEER 和应用程序之间主要是特定的数据结构来传递信息,对应用程序来说这种数据结构并不是直接访问的,它们之间传递和交换信息的数据对用户来说是不可见的,而只能通过 Pro/TOOLKIT 提供的函数来访问。在设计 Pro/TOOLKIT 程序时,要涉及到大量的由 Pro/TOOLKIT 函数库提供的 C 函数。正确使用这些函数是非常重要的。对象和动作、对象句柄、选择对象、访问函数、可扩展数组、宽字符串等是开发 Pro/TOOLKIT 应用程序的基础。3.2.1 对象和动作对象和动作对象(Object)和动作(Action)是 Pro/TOOLKIT 中最基本的概念。1.对象及对象名Pro/TOOLKIT 的对象实质上是一种类型为结构体的数据,结构体中的成员描述了该对象的属性。如:名为 ProFeature 的特征对象的结构体定义为: Typedef struct pro_modle item ProType type; int id; ProMdl owner; ProFeature;结构体中的 type, id 和。wner 成员分别描述了该对象的类型、标识号和上级对象。为了便于区别,在 Pro/TOOLKIT 中所有对象的命名约定为 Pro+,其中对象名用英文单词表示,第一个字母大写,如 ProFeature(特征对象)、ProSurface(曲面对象)和 ProSolid(实体对象)等。Pro/TOOLKIT 定义的对象分成两类:第一类对象本身是 Pro/ENGINEER 数据库中的一个项;另一类对象是抽象或临时对象。对象访问的关键是如何获得对象的句柄,取得句柄后就可以对对象中包含的信息(如尺寸参数、公差、粗糙度等各种参数)进行操作。2.动作及 Pro/TOOLKIT 函数对特定的 Pro/TOOLKIT 对象执行的某种操作称为动作,动作的执行是通过调用 Pro/TOOLKIT 函数库提供的 C 函数来实现了。与动作相关的 Pro/TOOLKIT函数名约定为:Pro+。特别要注意的是 Pro/TOOLKIT 函数的参数规则,规定为:Profuction(参数 1、参数 2、参数 3,;二),其中第一个参数用来识别对象(通常为一 ID 值),输入参数在输出参数之前。每个 Pro/TOOLKIT函数都有一个 ANSI 函数原型,特定的对象函数在头文件中都有原型,而且头文件与对象名相同。173.2.2 对象句柄对象句柄在 Pro/TOOLKIT 中,每个对象都有其对应的 C 类型定义,称为句柄(Handles) ,句柄是一种指向对象变量和参数的数据类型。通常是对象名加上前缀“Pro” 。句柄根据它们定义和使用的方式主要分为两类,模糊句柄(opaque handle,简称 O 型句柄(OHandle) )和数据型句柄(database handle,简称 D 型句柄(D handle)。 O 型句柄(Ohandle)在 Pro/ENGINEER 中为了防止应用程序直接使用该对象的数据结构中的内容,一般都不提供该数据结构的显式定义。例如,ProSurface 对象句柄定义如下:typedef sturct geom*ProSurface;结构体 struct geom 用来描述曲面(surface),但在 Pro/TOOLKIT 中该结构体没有显式的定义(即看不到其内部的变量定义) 。正因为如此该类型句柄被称为模糊句柄,模糊句柄是使用 Pro/ENGINEER 中描述对象的数据结构的内存地址来引用对象即内存指针。其优点在于其简洁和效率在 Pro/TOOLKIT 函数中不需搜寻就可以引用它们,也可以引用临时的和根本不存在于 Pro/ENGINEER数据库中的项目,如计算干涉容积时产生的表面和边。由于模糊句柄是内存指针,如所有指针一样,它们不稳定,一旦它们所指向的数据对象的内存地址改变,它们就会失效。如 ProSurface 句柄(指向Pro/ENGINEER 中的曲面的指针)在该曲面所属的实体重新再生后就有可能会失效(因为其内存地址已被重新分派) 。O 型句柄的另一个缺点是对对象分的过细,我们在引用 O 型指针之前,必须要知道对象的类型。但有时函数应该是可以通用的,针对这种情况 Pro/TOOLKIT 定义了一种新的、通用的对象类型即数据句柄 Dhandle。D 型句柄(Dhandle)Dhandle 句柄是显式数据结构,其内部数据可以直接访问。ProGeomitem是 D 型句柄,它是几何项目的通用类型,可以代表实体模型的任何几何项目,如 ProSurface,ProEdge,ProCurve 和 ProCsys 等。ProSurface,ProEdge,ProCurve 和 ProCsys 等是 ProGeomitem 的实例,也就是子对象。如果有指向子对象的 O 型句柄,例如 ProSurface,想调用一个通用的函数,这时就需要将 O 型句柄转换为 D 型句柄,系统提供了相应的函数完成这类转换。Dhandle 句柄含有足够标识该数据结构的信息和拥有它的模型句柄。由于 Dhandle 必须含有整型标识,所以也有持续的优点。当动作的对象是所有更细分的对象时,可以用通用对象类型作为 Pro/TOOLKIT 函数的输入。3.2.3 选择对象选择对象ProSelection 选择对象是 O 型句柄。它能识别 Pro/ENGINEER 数据库中的模型项目,是应用程序中应用最广泛的对象之一。在不确定使用哪个对象时,它可以取代 ProModelitem。其最重要的应用是作为交互选择函数 ProSelect()的输出对象,指明用户交互式选择的一个特征项目。由于 ProSelection 对象识别 Pro/ENGINEER 数据库中的模型项目,代表着不同的特征项目,它就包含着不同的项目信息,对应着它所包含的每个项目信息,都有相应的 Pro/TOOLKIT 函数可以提取该信息。如表 4.1 列出的部分函数和项目信息:18表 4.1 ProSelection 含有的项目信息Pro/TOOLKIT 函数代表的对象含意ProSelectionModelitemGet()ProModelitem模型项目ProSelectionPoint3dGet()ProPoint3d模型项目上的 3-D 点ProSelectionViewGet()ProView选择绘图视图因为大多数函数需要创建一个 ProSelection 选择对象来完成它们的交互功能,每当新创建一个 ProSelections 数据结构时,就需要用ProSelectionAlloc()函数分配给选择对象分配内存并在其中设定相应数据信息。在 ProSelection 选择对象使用完后也应该要释放系统给其分配的内存,我们用ProSelectionFree()函数释放由 ProSelectionAlloc()创建的或其它的函数输出的 ProSelection 对象的内存。3.2.4 访问函数访问函数访问函数(visit function)是为对其它对象的所有属性如零件的所有特征或一个特征的所有表面等进行操作提供方便的,它是一种后台调用(callback)函数。callback 函数是那些由用户设计却由系统调用的函数,这些函数都有固定的类型和参数形式,用户只需定义与该函数对应的接口。访问函数可以以数组的形式传递数据。对每个要访问的项目写一动作函数,将指向它的指针传给访问函数。这样,在访问该项目时,系统会自动调用访问函数,执行访问函数中的动作定义。例如,访问实体特征尺寸的访问函数如下:ProErrorProFeatureDimensionVisit(ProFeature*featureProDimensionVisitAction visitProAppData data);第一个参数是被访问实体的句柄,第二是访问动作函数。最后一个参数的类型是 ProAppData,用来把用户自定义的参数传递到访问动作函数中,它的数据类型为 void*。虽然访问动作函数由用户自己编写,但是由于它是在 Pro/TOOLKIT 的访问函数内调用,所以它的参数还是由Pro/TOOLKIT 来定义,Pro/TOOLKIT 为每个这样的函数提供了类型定义,这样就能确保 C 编译器检查访问动作函数的参数。访问动作函数返回的状态值有:PRO_TK_NO_ERROR继续访问对象列表中的其它对象;其它值(包括PRO_TK_CONTINUE)终止访问。访问动作函数一般都应该返回上面所列出的两个状态值之一。3.3 宽字符串宽字符串Pro/TOOLKIT 的一大特点是使用宽字符串(wide strings)代替常用的普通字符串。在 Pro/TOOLKIT 和 Pro/ENGINEER 中,使用的字符串是代码形式而不是 ASCII 形式,这就会使得字符串编译后成为超过一个字节的大字符集。日本的 KANJI 字符集也是如此。为此,对 Pro/ENGINEER 用户可见的字符和字符串,包括文本信息,键盘输入,文件名,尺寸名,和对象的参数,Pro/TOOLKIT 使用宽字符集 wchar_t 代替 char 类型。尽管 Pro/TOOLKIT 支持的大多数平台都提供了 wchar_t 的定义,但并不是19所有的都对其进行了定义。而且定义的宽字符的长度可能不同,有些定义的宽字符又可能不适合 Pro/ENGINEER 支持的字符集。保证用户的 Pro/TOOLKIT 应用程序使用的 wchar_t 定义和 Pro/ENGINEER 支持的平台上的 wchar_t 定义一样是很重要的。因此,Pro/Engineer 必须将 Pro/TOOLKIT 提供的库文件Pro_wchar_t.h 包含在源程序中来确保在每个它支持的平台上都使用合适定义的 wchar_t。Pro_wchar_t.h 库文件可以确保 wchar_t 定义的连续性。一般在ProToolkit.h 头文件中就包含了 Pro_wchar_t.h 这个库文件,所以我们只需要将 ProToolkit.h 文件作为源程序文件的第一个包含文件。函数ProWcharSizeVerify()是用来检查 wchar_t 的定义是否正确,应该在初始化函数 user_initialize()(在异步模式中是 main())的开始处调用ProWcharSizeVerify()函数。宽字符串不象普通的 C 字符串那样容易操作。也就是说没有和标准 C 语言的 str*()函数相对应的宽字符串函数。如 printf()没有针对宽字符串的格式,也不能通过简单的赋值语句直接为宽字符串赋值。为此,为了方便,系统提供了专门的函数来将宽字符串转换为普通字符串,反之亦然。函数ProStringToWstring()和 ProWstringTostring()就是用来完成宽字符串和普通字符串之间的转化功能的。3.4 本章小结本章小结Pro/TOOLKIT 是 Pro/ENGINEER 系统的个性化开发工具包,也可以称为应用程序接口(API) 。本章主要介绍应用程序常用的同步和异步两种运行模式,研究了应用程序的基础即对象和动作、对象句柄、选择对象、访问函数和宽字符串等的基本情况。这些都是开发应用程序的基础。20第四章第四章应用程序的开发应用程序的开发4.1 应用程序开发的基本过程应用程序开发的基本过程除了编辑源程序外,应用程序的开发还应该经历编译、注册等基本过程。用 Pro/TOOLKIT 开发的程序一般包括资源和程序两个部分。资源包括注册文件和菜单资源文件。注册文件用于在 Pro/ENGINEER 启动时动态加 Pro/TOOLKIT 程序。菜单资源存储了用户定制的 Pro/ENGINEER 菜单信息,每个菜单项对应Pro/TOOLKIT 程序中的一个功能函数。4.1.1 编译和连接应用程序编译和连接应用程序用 Pro/TOOLKIT 中的函数编出的应用程序需要编译以生成动态连接库或可执行文件。用来编译和连接 Pro/TOOLKIT 应用程序的系统库函数和 C 语言的编译选项在不同的平台一般不同,为了确保编译应用程序的 makefile 文件使用正确的选项,用户应参考 Pro/ENGINEER 安装目录下的 makefile 文件(在/obj/下)来编写自己的 makefile 文件。使用该文件作为你的摸板文件,复制到含有你所编辑的 Pro/TOOLKIT 源代码文件的目录下,作如下修改:改变 MAKEFILENAME 宏的值为自定义的新名字。改变 EXE 和 EXE_DLL 宏的值,确定适合自己应用程序的文件输出模式。改变 PROTOOL_SRC 宏,使其指向 Pro/TOOLKIT 的装载点。改变 OBJS 宏以指定 Pro/TOOLKIT 源文件编译后生成的对象文件。为这些对象文件增加目标文件,这些包含编译 C 源文件的指令。目标定义的格式可从源文件中复制,一般是如下格式::$(CC)$(CFLAGS)如下例:Standard_main.obj:$(PROTK_APPLS)/Standard_main/Standard_main.c$(CC)$(CFLAGS)$(PROTK_APPLS)/Standard_main/Standard_main.c完成这些修改后,以mak 为后缀存储,然后在 VS C+中编译执行,就可以正确编译出应用程序。4.1.2 应用程序注册应用程序注册为了向 Pro/ENGINEER 提供应用程序的相关信息,我们必须注册Pro/TOOLKIT 应用程序。这就需要创建一个 Pro/ENGINEER 可以找到和识别的文本注册文件。注册文件一般有自己的命令语句,其格式如下所示:name pearlstartup dllallow_stop TRUE exec_file F:jingujianexample1debugexample1.dlltext_dir F:jingujianexample1textrevision 1151 end21其中各语句的含义如下:name:应用程序的识别名称。每个应用程序为了区别于其它应用程序,它的识别名称由用户自己命名。识别名称的最大长度为 PRO_NAME_SIZE(在“ProSizeConst.h”文件中指定)。startup:用来指定应用程序与 Pro/ENGINEER 进行通信的方式,有 DLL 和EXE 两种模式。exec_file:指定应用程序经过编译连接后所生成的文件名称。有动态连接库文件和可执行文件两种。text_dir:指定应用程序所使用的菜单、对话框资源文件和窗口消息文件所在的目录。allow_stop:这个语句用来指定应用程序是否允许启停。revision:用来指定 Pro/TOOLKIT 的版本号。添加此语句能够加快程序的启动速度。注册文件一般在下列几个目录下:当前目录下扩展名为.dat 的文件;配置文件中或“TOOLKIT_REGISTRY_FILE”语句所含的文件中;在目录/text下;在目录/下。一般 Pro/ENGINEER 可以按照先后顺序在上述目录中查找。如果在搜索的目录中含有多个注册文件,则系统会找到全部注册文件,并运行所有的应用程序。如果在这些目录下并没有找到注册文件,就需要我们自己手工注册,在Utilities 菜单下选择 AuxiliaryApplication 选项,在对话框中选取注册,在出现的对话框中选择用户想要的 dat 文件进行注册。4.1.3 应用程序的解锁应用程序的解锁由于应用程序是基于 PRO/TOOLKIT 的二次开发,在将 PRO/TOOLKIT 应用程序发布到终端用户使用之前,我们必须对其解锁,即允许没有安装Pro/TOOLKIT 工具包的用户使用。一旦解锁了应用程序,就可以将其发布任意的地方。对于 NT 系统,应该在文件中包含.bat 扩展名。键入下述命令解锁应用程序:/bin/Protk_unlock filename 其中 filename 是Pro/TOOLKIT 应用程序的全路径。4.2 应用程序的结构应用程序的结构由于 DLL 模式是将 Pro/TOOLKIT 应用程序集成到 Pro/ENGINEER 中的标准方法。一般开发应用程序都选择这种方法。所以我们这里着重介绍的是 DLL 模式下的应用程序的结构。4.2.1 应用程序包含的头文件应用程序包含的头文件所有的 DLL 模式下的 Pro/TOOLKIT 应用程序第一个包含的头文件是ProToolkit.h,而且该文件必须为第一个包含头文件,因为它定义了宽字符串wchar_t 的值,而在其它头文件中都需要引用该值。由于在 ProToolkit.h 头文件中还包括了 stdio.h,string.h,stddef.h,stdlib.h 四个标准库文件,这几个库文件包含了最常用的 C 函数的定义。故没有必要在文件中包含这些库文件。当你在应用程序中使用了某个 Pro/TOOLKIT 函数,都必须把含有该函数原型的库文件包含进来,否则在编译的时候,编译器将不能检查函数的参数类型。22我们不必显式包含 ProObjects.h 头文件,因为在含有函数原型的头文件中均间接包含了这个头文件。如果在应用程序中使用了 Pro/DEVELOP 的函数,则必须加入头文件 Prodevelop.h。4.2.2 Pro/TOOLKIT 的核心的核心user_initialize()和 user_terninate()这两个函数是所有的 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 函数初始化成功,出现如图5.1 所示界面。其它返回值则视为失败,系统会提示用户 Pro/TOOLKIT 应用程序失败。使用 user_initialize()的可选参数以指明失败信息。如图 5.2 所示,当在退出确认对话框上点击 yes 或 No 后,user_terminate()函数则被调用,它的返回值是 void。 图 5.1 辅助应用程序对话框图 5.2 退出确认对话框user_initialize()函数中必须调用 Pro/TOOLKIT 函数。它是每个应用程序开发的起始点,而 user_terminate()中则可以不调用 Pro/TOOLKIT 任何函数。下面就是一个不执行任何操作的 Pro/TOOLKIT 应用程序。#include “ProToolkit.h”int user_initialize()return(0);void user_terminate()235.2.3 菜单技术的添加和信息文件菜单技术的添加和信息文件菜单是 Pro/ENGINEER 的主要用户界面,Pro/fOOLKIT 提供了一系列操作函数,允许应用程序创建和管理菜单。菜单栏位于 Pro/ENGINEER 系统窗口的顶部,如图 5.3 所示。菜单栏中所有的类别都列成一行,用户选中某个类别,它的下面就拉出一个菜单,菜单中一系列菜单项用以激活各种功能。菜单条是 Pro/ENGINEER 菜单体系的最顶层菜单,创建的方法是:直接调用ProMenubarAdd()函数向 Pro/ENGINEER 添加所需的菜单。根据需要也可通过函数ProMenubarmenuAdd()在已经存在的菜单栏菜单上添加子菜单,如果在下级子菜单中不添加菜单项,则不会显示下级子菜单。菜单按钮通过调用函数ProMenubarmenuPushbuttonA,dd()来实现,要实现按钮的功能,就必须将该按钮和命令捆绑在一起,该命令调用某个函数实现按钮功能,在 Pro/TOOLKIT 中,完成命令添加的函数是 ProCmdAction()。图 5.3 菜单栏示意图信息文件是一种 ASCII 码文件,用来定义菜单项、菜单项提示等信息,可以用记事本和写字板等文字处理软件建立,但必须以纯文本格式保存。在信息文件中以 4 行为一组,其含义如下:第一行:Pro/ENGINEER 系统可以识别的关键字。该关键字必须与该信息文件函数中的相关字符串相同。第二行:在菜单项或菜单项提示上显示的英语文本。第三行:另一种语言的译文或为空。第四行:当前的 Pro/ENGINEER 版本为空。其中,第二、四行的语言显示取决于系统环境变量 lang 的设置。同时,信息文件必须位于text 或text文件夹,24不能存放在textmenus 菜单定义文件夹。其中为后面将要介绍的注册文件规定的路径,为 chinese cn 时表示信息为中文,为 usascii 表示信息为英语。由此,可以通过系统的环境变量控制显示的语种,不必修改程序。4.3 本章小结本章小结本章首先介绍了开发应用程序时使用的编译文件的修改方法和注册文件的制作过程以及发布应用程序的解锁方法,接着指明了 DLL 模式下每个应用程序都应该含有的库文件与核心函数以及菜单技术,了解了 Pro/TOOLKIT 接口技术基础后我们就可以进行应用程序的开发了。25第五章第五章 紧固件的参数化建模紧固件的参数化建模5.1 紧固件的参数化建模紧固件的参数化建模利用 Pro/Engineer 的二次开发工具 Pro/Program 实现各种销、螺钉、螺栓、键、弹性挡圈、垫片等通用件的自动化建模。5.1.1 Program 中参数和关系的确定中参数和关系的确定利用 Pro/Engineer 提供的 Program 和关系式工具,首先建立销、螺钉、螺栓、键、弹性挡圈、垫片等通用件的基本参数,给这些参数赋初值。在程序(Program)工具中输入以下语句:(1)销INPUT L NUMBER enter 圆柱销长度: D NUMBER enter 圆柱销直径: C NUMBER enter 圆柱销倒角半径:END INPUT(2)螺钉 INPUT N NUMBER enter 开槽盘头螺钉槽宽: DK NUMBER enter 开槽盘头螺钉大头直径: L NUMBER enter 开槽盘头螺钉长度: D NUMBER enter 开槽盘头螺钉公称直径: K NUMBER enter 开槽盘头螺钉大头厚度:END INPUT(3)螺栓INPUT S NUMBER enter 六角螺栓头长度: K NUMBER enter 六角螺栓头厚度: L NUMBER enter 六角螺栓长度: D NUMBER enter 六角螺栓公称直径:26END INPUT(4)键 INPUT B NUMBER enter 平头键宽度: L NUMBER enter 平头键长度 H NUMBER enter 平头键高度:END INPUT(5)挡圈 INPUT DA NUMBER enter 锥销锁紧挡圈内径: DB NUMBER enter 锥销锁紧挡圈外径: H NUMBER enter 锥销锁紧挡圈厚度:DC NUMBERenter 锥销锁紧挡圈销孔END INPUT(6)垫片INPUT DA NUMBER enter 平垫片内径: DB NUMBER enter 平垫片外径: H NUMBER enter 平垫片厚度:R NUMBERenter 平垫片倒角:END INPUT由于紧固件不存在关系尺寸,所以不用编写 RELATION。5.1.2 紧固件的参数模型建立紧固件的参数模型建立按照上述程序参数化自动建模,得紧固件通用件部分模型如图 3.1 所示。27 锥销锁紧挡圈 平垫片 平头键 六角螺栓 圆柱销 开槽盘头螺钉51 紧固件部分模型示例5.2 销的参数化建模销的参数化建模编写程序: #include stdafx.h#include example1.h#include ProToolkit.h#include ProMenu.h#include ProParameter.h#include ProUtil.h#include ProMdl.h28#include ProNote.h#include ProArray.h#include ProModelItem.h#include ProMessage.h#include #include #include #include #include #include #include #include ProUICheckbutton.h#include ProFaminstance.h#include ProFamtable.h#include #include #include #include #include #include #include #include /#include proarraysupport.h#include ProMenu.h#include ProMenubar.h#include#include TestError.h#include ProUITextarea.h#include #include #include #include #include #include #ifdef _DEBUG#define new DEBUG_NEW#endif/29/TODO: 如果此DLL 相对于MFC DLL 是动态链接的,/则从此DLL 导出的任何调入/MFC 的函数必须将AFX_MANAGE_STATE 宏添加到/该函数的最前面。/例如:/extern C BOOL PASCAL EXPORT ExportedFunction()/AFX_MANAGE_STATE(AfxGetStaticModuleState();/ 此处为普通函数体/此宏先于任何MFC 调用/出现在每个函数中十分重要。这意味着/它必须作为函数中的第一个语句/出现,甚至先于所有对象变量声明,/这是因为它们的构造函数可能生成MFC/DLL 调用。/有关其他详细信息,/请参阅MFC 技术说明33 和58。/ Cexample1AppBEGIN_MESSAGE_MAP(Cexample1App, CWinApp)END_MESSAGE_MAP()/ Cexample1App 构造Cexample1App:Cexample1App()/ TODO: 在此处添加构造代码,/ 将所有重要的初始化放置在InitInstance 中/ 唯一的一个Cexample1App 对象Cexample1App theApp;30/ Cexample1App 初始化BOOL Cexample1App:InitInstance()CWinApp:InitInstance();return TRUE;void part();void spur1(char *,char *,ProAppData);void spur1OK(char *,char *,ProAppData);void spur2(char *,char *,ProAppData);void spur2OK(char *,char *,ProAppData);void spur3(char *,char *,ProAppData);void spur3OK(char *,char *,ProAppData);void spur4(char *,char *,ProAppData);void spur4OK(char *,char *,ProAppData);void spur5(char *,char *,ProAppData);void spur5OK(char *,char *,ProAppData);void spur6(char *,char *,ProAppData);void spur6OK(char *,char *,ProAppData);void UsrOkAction(char *,char *,ProAppData);void UsrCancelAction(char *,char *,ProAppData);extern Cint user_initialize(int argc,char *argv,char *version,char *build,wchar_t errbuf) part(); return (0);31extern Cvoid user_terminate(void)return; void part() / ProLine wline; / ProBoolean *state; int status;/*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(jingujian, jingujian);ProUIPushbuttonActivateActionSet(jingujian,Cancel, UsrCancelAction, NULL);ProUIPushbuttonActivateActionSet(jingujian,verticalgearbmp, spur1, NULL);ProUIPushbuttonActivateActionSet(jingujian,inclinegearbmp, spur2, NULL);ProUIPushbuttonActivateActionSet(jingujian,bevel1bmp, spur3, NULL);ProUIPushbuttonActivateActionSet(jingujian,wormbmp, spur4, NULL);ProUIPushbuttonActivateActionSet(jingujian,bevel2bmp, spur5, NULL);ProUIPushbuttonActivateActionSet(jingujian,ingearbmp, spur6, NULL);/*-* Display and activate the dialog *-*/ ProUIDialogActivate(jingujian, &status);/*-* Remove the dialog from memory 32*-*/ ProUIDialogDestroy(jingujian); void UsrOkAction(char *dialog,char *component,ProAppData data)ProUIDialogExit(dialog, 1);void UsrCancelAction(char *dialog,char *component,ProAppData data)ProUIDialogExit(dialog, 1);void spur1(char *dialog,char *component,ProAppData data) int status1; /int status2;/ProUIDialogExit(gear,status);/ ProBoolean *state; /*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(xiao, xiao);ProUIPushbuttonActivateActionSet(xiao,Ok,spur1OK, NULL);ProUIPushbuttonActivateActionSet(xiao,Cancel,UsrCancelAction, NULL);/*-* Display and activate the dialog 33*-*/ ProUIDialogActivate(xiao, &status1);/*-* Remove the dialog from memory *-*/ ProUIDialogDestroy(xiao);void spur1OK(char *dialog,char *component,ProAppData data)/ProUIDialogExit(dialog, 1);ProMdl part;ProParameter param1;ProParameter param2;ProParameter param3;/ProParameter param4;ProParamvalue value1;ProParamvalue value2;ProParamvalue value3;/ProParamvalue value4;ProModelitem feature;int i;double l1,d1,c1;ProMdlRetrieve(LF:jingujianexample1partsxiao.prt.1, PRO_MDL_PART, &part);ProMdlDisplay(part);ProMdlIdGet(part,&i);ProModelitemInit(part,i,PRO_PART,&feature);ProParameterInit(&feature, Ll, ¶m1);ProParameterInit(&feature, Ld, ¶m2);ProParameterInit(&feature, Lc, ¶m3);/ProParameterInit(&feature, LWIDTH, ¶m4);ProUIInputpanelDoubleGet(xiao,teethnum,&l1);ProUIInputpanelDoubleGet(xiao,pitch,&d1);ProUIInputpanelDoubleGet(xiao,angle,&c1);/ProUIInputpanelDoubleGet(spur,width,&width1);value1.type=PRO_PARAM_DOUBLE;value1.value.d_val=l1;34value2.type=PRO_PARAM_DOUBLE;value2.value.d_val=d1;value3.type=PRO_PARAM_DOUBLE;value3.value.d_val=c1;/value4.type=PRO_PARAM_DOUBLE;/value4.value.d_val=width1;ProParameterValueSet(¶m1, &value1);ProParameterValueSet(¶m2, &value2);ProParameterValueSet(¶m3, &value3);/ProParameterValueSet(¶m4, &value4);ProSolidRegenerate(ProSolid)part, PRO_B_TRUE);ProUIDialogExit(dialog, 1);销对话框程序:(Dialog xiao (Components (PushButton Ok) (PushButton Cancel) (SubLayout GearLayout) ) (Resources (Ok.Label 确定) (Ok.TopOffset 4) (Ok.BottomOffset 4) (Ok.LeftOffset 4) (Ok.RightOffset 4) (Cancel.Label 取消) (Cancel.TopOffset 4) (Cancel.BottomOffset 4) (Cancel.LeftOffset 4) (Cancel.RightOffset 4) (.Label 圆柱销参数化设计) (.StartLocation 5) (.Layout (Grid (Rows 1 1 ) (Cols 1) GearLayout (Grid (Rows 1 ) (Cols 1 1) Ok Cancel )35 ) ) ) )(Layout GearLayout (Components (Label teethnumlabel) (InputPanel teethnum) (Label pitchlabel) (InputPanel pitch) (Label anglelabel) (InputPanel angle) ) (Resources (teethnumlabel.Label 圆柱销长度) (teethnumlabel.TopOffset 4) (teethnumlabel.BottomOffset 4) (teethnumlabel.LeftOffset 4) (teethnumlabel.RightOffset 4) (teethnum.InputType 3) (teethnum.TopOffset 4) (teethnum.BottomOffset 4) (teethnum.LeftOffset 4) (teethnum.RightOffset 4) (teethnum.Columns 6) (pitchlabel.Label 圆柱销直径) (pitchlabel.TopOffset 4) (pitchlabel.BottomOffset 4) (pitchlabel.LeftOffset 4) (pitchlabel.RightOffset 4) (pitch.InputType 3) (pitch.TopOffset 4) (pitch.BottomOffset 4) (pitch.LeftOffset 4) (pitch.RightOffset 4) (pitch.Columns 6) (anglelabel.Label 圆柱销倒角半径) (anglelabel.TopOffset 4) (anglelabel.BottomOffset 4) (anglelabel.LeftOffset 4)36 (anglelabel.RightOffset 4) (angle.InputType 3) (angle.TopOffset 4) (angle.BottomOffset 4) (angle.LeftOffset 4) (angle.RightOffset 4) (angle.Columns 6) (.Label 输入参数) (.Decorated True) (.Layout (Grid (Rows 1 1 1 ) (Cols 1 1) teethnumlabel teethnum pitchlabel pitch anglelabel angle ) ) ) )销生成界面和模型(图 5.1):图 5.1 销对话框及模型5.3 螺钉的参数化建模螺钉的参数化建模编写程序:void spur2(char *dialog,37char *component,ProAppData data) int status1; /int status2;/ProUIDialogExit(gear,status);/ ProBoolean *state; /*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(luoding, luoding);ProUIPushbuttonActivateActionSet(luoding,bevel1Ok,spur2OK, NULL);ProUIPushbuttonActivateActionSet(luoding,bevel1Cancel,UsrCancelAction, NULL);/*-* Display and activate the dialog *-*/ ProUIDialogActivate(luoding, &status1);/*-* Remove the dialog from memory *-*/ ProUIDialogDestroy(luoding);void spur2OK(char *dialog,char *component,ProAppData data)/ProUIDialogExit(dialog, 1);ProMdl part;ProParameter param1;ProParameter param2;ProParameter param3;ProParameter param4;ProParameter param5;ProParamvalue value1;ProParamvalue value2;ProParamvalue value3;38ProParamvalue value4;ProParamvalue value5;ProModelitem feature;int i;double n1,dk1,l1,d1,k1;ProMdlRetrieve(LF:jingujianexample1partsluoding.prt.1, PRO_MDL_PART, &part);ProMdlDisplay(part);ProMdlIdGet(part,&i);ProModelitemInit(part,i,PRO_PART,&feature);ProParameterInit(&feature, Ln, ¶m1);ProParameterInit(&feature, Ldk, ¶m2);ProParameterInit(&feature, Ll, ¶m3);ProParameterInit(&feature, Ld, ¶m4);ProParameterInit(&feature, Lk, ¶m5);ProUIInputpanelDoubleGet(luoding,bevel1_teethnum,&n1);ProUIInputpanelDoubleGet(luoding,bevel1_pitch,&dk1);ProUIInputpanelDoubleGet(luoding,bevel1_angle,&l1);ProUIInputpanelDoubleGet(luoding,bevel1_bevel1,&d1);ProUIInputpanelDoubleGet(luoding,bevel1_width,&k1);value1.type=PRO_PARAM_DOUBLE;value1.value.d_val=n1;value2.type=PRO_PARAM_DOUBLE;value2.value.d_val=dk1;value3.type=PRO_PARAM_DOUBLE;value3.value.d_val=l1;value4.type=PRO_PARAM_DOUBLE;value4.value.d_val=d1;value5.type=PRO_PARAM_DOUBLE;value5.value.d_val=k1;ProParameterValueSet(¶m1, &value1);ProParameterValueSet(¶m2, &value2);ProParameterValueSet(¶m3, &value3);ProParameterValueSet(¶m4, &value4);ProParameterValueSet(¶m5, &value5);ProSolidRegenerate(ProSolid)part, PRO_B_TRUE);ProUIDialogExit(dialog, 1);螺钉对话框程序:(Dialog luoding (Components39 (PushButton bevel1Ok) (PushButton bevel1Cancel) (SubLayout bevel1Layout) ) (Resources (bevel1Ok.Label 确定) (bevel1Ok.TopOffset 4) (bevel1Ok.BottomOffset 4) (bevel1Ok.LeftOffset 4) (bevel1Ok.RightOffset 4) (bevel1Cancel.Label 取消) (bevel1Cancel.TopOffset 4) (bevel1Cancel.BottomOffset 4) (bevel1Cancel.LeftOffset 4) (bevel1Cancel.RightOffset 4) (.Label 开槽盘头螺钉参数化设计) (.StartLocation 5) (.Layout (Grid (Rows 1 1 ) (Cols 1) bevel1Layout (Grid (Rows 1 ) (Cols 1 1) bevel1Ok bevel1Cancel ) ) ) ) )(Layout bevel1Layout (Components (Label bevel1_teethnumlabel) (InputPanel bevel1_teethnum) (Label bevel1_pitchlabel) (InputPanel bevel1_pitch) (Label bevel1_anglelabel) (InputPanel bevel1_angle) (Label bevel1_bevel1label) (InputPanel bevel1_bevel1) (Label bevel1_widthlabel) (InputPanel bevel1_width) 40 ) (Resources (bevel1_teethnumlabel.Label 开槽盘头螺钉槽宽) (bevel1_teethnumlabel.TopOffset 4) (bevel1_teethnumlabel.BottomOffset 4) (bevel1_teethnumlabel.LeftOffset 4) (bevel1_teethnumlabel.RightOffset 4) (bevel1_teethnum.InputType 3) (bevel1_teethnum.TopOffset 4) (bevel1_teethnum.BottomOffset 4) (bevel1_teethnum.LeftOffset 4) (bevel1_teethnum.RightOffset 4) (bevel1_teethnum.Columns 6) (bevel1_pitchlabel.Label 开槽盘头螺钉大头直径) (bevel1_pitchlabel.TopOffset 4) (bevel1_pitchlabel.BottomOffset 4) (bevel1_pitchlabel.LeftOffset 4) (bevel1_pitchlabel.RightOffset 4) (bevel1_pitch.InputType 3) (bevel1_pitch.TopOffset 4) (bevel1_pitch.BottomOffset 4) (bevel1_pitch.LeftOffset 4) (bevel1_pitch.RightOffset 4) (bevel1_pitch.Columns 6) (bevel1_anglelabel.Label 开槽盘头螺钉长度) (bevel1_anglelabel.TopOffset 4) (bevel1_anglelabel.BottomOffset 4) (bevel1_anglelabel.LeftOffset 4) (bevel1_anglelabel.RightOffset 4) (bevel1_angle.InputType 3) (bevel1_angle.TopOffset 4) (bevel1_angle.BottomOffset 4) (bevel1_angle.LeftOffset 4) (bevel1_angle.RightOffset 4) (bevel1_angle.Columns 6) (bevel1_bevel1label.Label 开槽盘头螺钉公称直径) (bevel1_bevel1label.TopOffset 4) (bevel1_bevel1label.BottomOffset 4) (bevel1_bevel1label.LeftOffset 4) (bevel1_bevel1label.RightOffset 4) (bevel1_bevel1.InputType 3) (bevel1_bevel1.TopOffset 4) (bevel1_bevel1.BottomOffset 4) (bevel1_bevel1.LeftOffset 4)41 (bevel1_bevel1.RightOffset 4) (bevel1_bevel1.Columns 6) (bevel1_widthlabel.Label 开槽盘头螺钉大头厚度) (bevel1_widthlabel.TopOffset 4) (bevel1_widthlabel.BottomOffset 4) (bevel1_widthlabel.LeftOffset 4) (bevel1_widthlabel.RightOffset 4) (bevel1_width.InputType 3) (bevel1_width.TopOffset 4) (bevel1_width.BottomOffset 4) (bevel1_width.LeftOffset 4) (bevel1_width.RightOffset 4) (bevel1_width.Columns 6) (.Label 输入参数) (.Decorated True) (.Layout (Grid (Rows 1 1 1 1 1) (Cols 1 1) bevel1_teethnumlabel bevel1_teethnum bevel1_pitchlabel bevel1_pitch bevel1_anglelabel bevel1_angle bevel1_bevel1label bevel1_bevel1 bevel1_widthlabel bevel1_width) ) ) )42螺钉生成界面和模型(图5.2):图 5.2 螺钉对话框及模型5.4 螺栓的参数化建模螺栓的参数化建模编写程序:编写程序:void spur3(char *dialog,char *component,ProAppData data) int status1; /int status2;/ProUIDialogExit(gear,status);/ ProBoolean *state; /*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(luoshuan, luoshuan);ProUIPushbuttonActivateActionSet(luoshuan,Ok,spur3OK, NULL);ProUIPushbuttonActivateActionSet(luoshuan,Cancel,UsrCancelAction, NULL);/*-* Display and activate the dialog *-*/ ProUIDialogActivate(luoshuan, &status1);/*-* Remove the dialog from memory 43*-*/ ProUIDialogDestroy(luoshuan);void spur3OK(char *dialog,char *component,ProAppData data)/ProUIDialogExit(dialog, 1);ProMdl part;ProParameter param1;ProParameter param2;ProParameter param3;ProParameter param4;ProParamvalue value1;ProParamvalue value2;ProParamvalue value3;ProParamvalue value4;ProModelitem feature;int i;double s1,k1,l1,d1;ProMdlRetrieve(LF:jingujianexample1partsluoshuan.prt.1, PRO_MDL_PART, &part);ProMdlDisplay(part);ProMdlIdGet(part,&i);ProModelitemInit(part,i,PRO_PART,&feature);ProParameterInit(&feature, Ls, ¶m1);ProParameterInit(&feature, Lk, ¶m2);ProParameterInit(&feature, Ll, ¶m3);ProParameterInit(&feature, Ld, ¶m4);ProUIInputpanelDoubleGet(luoshuan,teethnum,&s1);ProUIInputpanelDoubleGet(luoshuan,pitch,&k1);ProUIInputpanelDoubleGet(luoshuan,angle,&l1);ProUIInputpanelDoubleGet(luoshuan,width,&d1);value1.type=PRO_PARAM_DOUBLE;value1.value.d_val=s1;value2.type=PRO_PARAM_DOUBLE;value2.value.d_val=k1;value3.type=PRO_PARAM_DOUBLE;value3.value.d_val=l1;value4.type=PRO_PARAM_DOUBLE;44value4.value.d_val=d1;ProParameterValueSet(¶m1, &value1);ProParameterValueSet(¶m2, &value2);ProParameterValueSet(¶m3, &value3);ProParameterValueSet(¶m4, &value4);ProSolidRegenerate(ProSolid)part, PRO_B_TRUE);ProUIDialogExit(dialog, 1);螺栓对话框设计:(Dialog luoshuan (Components (PushButton Ok) (PushButton Cancel) (SubLayout GearLayout) ) (Resources (Ok.Label 确定) (Ok.TopOffset 4) (Ok.BottomOffset 4) (Ok.LeftOffset 4) (Ok.RightOffset 4) (Cancel.Label 取消) (Cancel.TopOffset 4) (Cancel.BottomOffset 4) (Cancel.LeftOffset 4) (Cancel.RightOffset 4) (.Label 六角螺栓参数化设计) (.StartLocation 5) (.Layout (Grid (Rows 1 1 ) (Cols 1) GearLayout (Grid (Rows 1 ) (Cols 1 1) Ok Cancel ) ) ) ) )(Layout GearLayout45 (Components (Label teethnumlabel) (InputPanel teethnum) (Label pitchlabel) (InputPanel pitch) (Label anglelabel) (InputPanel angle) (Label widthlabel) (InputPanel width) ) (Resources (teethnumlabel.Label 六角螺栓头长度) (teethnumlabel.TopOffset 4) (teethnumlabel.BottomOffset 4) (teethnumlabel.LeftOffset 4) (teethnumlabel.RightOffset 4) (teethnum.InputType 3) (teethnum.TopOffset 4) (teethnum.BottomOffset 4) (teethnum.LeftOffset 4) (teethnum.RightOffset 4) (teethnum.Columns 6) (pitchlabel.Label 六角螺栓头厚度) (pitchlabel.TopOffset 4) (pitchlabel.BottomOffset 4) (pitchlabel.LeftOffset 4) (pitchlabel.RightOffset 4) (pitch.InputType 3) (pitch.TopOffset 4) (pitch.BottomOffset 4) (pitch.LeftOffset 4) (pitch.RightOffset 4) (pitch.Columns 6) (anglelabel.Label 六角螺栓长度) (anglelabel.TopOffset 4) (anglelabel.BottomOffset 4) (anglelabel.LeftOffset 4) (anglelabel.RightOffset 4) (angle.InputType 3) (angle.TopOffset 4) (angle.BottomOffset 4)46 (angle.LeftOffset 4) (angle.RightOffset 4) (angle.Columns 6) (widthlabel.Label 六角螺栓公称直径) (widthlabel.TopOffset 4) (widthlabel.BottomOffset 4) (widthlabel.LeftOffset 4) (widthlabel.RightOffset 4) (width.InputType 3) (width.TopOffset 4) (width.BottomOffset 4) (width.LeftOffset 4) (width.RightOffset 4) (width.Columns 6) (.Label 输入参数) (.Decorated True) (.Layout (Grid (Rows 1 1 1 1) (Cols 1 1) teethnumlabel teethnum pitchlabel pitch anglelabel angle widthlabel width) ) ) )螺栓生成界面和模型(图 5.3):47图 5.3 螺栓对话框及模型5.5 键的参数化建模键的参数化建模编写程序:void spur4(char *dialog,char *component,ProAppData data) int status1; /int status2;/ProUIDialogExit(gear,status);/ ProBoolean *state; /*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(jian, jian);ProUIPushbuttonActivateActionSet(jian,Ok,spur4OK, NULL);ProUIPushbuttonActivateActionSet(jian,Cancel,UsrCancelAction, NULL);/*-* Display and activate the dialog *-*/ ProUIDialogActivate(jian, &status1);/*-* Remove the dialog from memory *-*/ ProUIDialogDestroy(jian);void spur4OK(char *dialog,char *component,ProAppData data)/ProUIDialogExit(dialog, 1);ProMdl part;48ProParameter param1;ProParameter param2;ProParameter param3;/ProParameter param4;ProParamvalue value1;ProParamvalue value2;ProParamvalue value3;/ProParamvalue value4;ProModelitem feature;int i;double b1,l1,h1;ProMdlRetrieve(LF:jingujianexample1partsjian.prt.1, PRO_MDL_PART, &part);ProMdlDisplay(part);ProMdlIdGet(part,&i);ProModelitemInit(part,i,PRO_PART,&feature);ProParameterInit(&feature, Lb, ¶m1);ProParameterInit(&feature, Ll, ¶m2);ProParameterInit(&feature, Lh, ¶m3);/ProParameterInit(&feature, LWIDTH, ¶m4);ProUIInputpanelDoubleGet(jian,teethnum,&b1);ProUIInputpanelDoubleGet(jian,pitch,&l1);ProUIInputpanelDoubleGet(jian,angle,&h1);/ProUIInputpanelDoubleGet(spur,width,&width1);value1.type=PRO_PARAM_DOUBLE;value1.value.d_val=b1;value2.type=PRO_PARAM_DOUBLE;value2.value.d_val=l1;value3.type=PRO_PARAM_DOUBLE;value3.value.d_val=h1;/value4.type=PRO_PARAM_DOUBLE;/value4.value.d_val=width1;ProParameterValueSet(¶m1, &value1);ProParameterValueSet(¶m2, &value2);ProParameterValueSet(¶m3, &value3);/ProParameterValueSet(¶m4, &value4);ProSolidRegenerate(ProSolid)part, PRO_B_TRUE);ProUIDialogExit(dialog, 1);键的对话框程序:(Dialog jian49 (Components (PushButton Ok) (PushButton Cancel) (SubLayout GearLayout) ) (Resources (Ok.Label 确定) (Ok.TopOffset 4) (Ok.BottomOffset 4) (Ok.LeftOffset 4) (Ok.RightOffset 4) (Cancel.Label 取消) (Cancel.TopOffset 4) (Cancel.BottomOffset 4) (Cancel.LeftOffset 4) (Cancel.RightOffset 4) (.Label 平头键参数化设计) (.StartLocation 5) (.Layout (Grid (Rows 1 1 ) (Cols 1) GearLayout (Grid (Rows 1 ) (Cols 1 1) Ok Cancel ) ) ) ) )(Layout GearLayout (Components (Label teethnumlabel) (InputPanel teethnum) (Label pitchlabel) (InputPanel pitch) (Label anglelabel) (InputPanel angle) ) (Resources50 (teethnumlabel.Label 平头键宽度) (teethnumlabel.TopOffset 4) (teethnumlabel.BottomOffset 4) (teethnumlabel.LeftOffset 4) (teethnumlabel.RightOffset 4) (teethnum.InputType 3) (teethnum.TopOffset 4) (teethnum.BottomOffset 4) (teethnum.LeftOffset 4) (teethnum.RightOffset 4) (teethnum.Columns 6) (pitchlabel.Label 平头键长度) (pitchlabel.TopOffset 4) (pitchlabel.BottomOffset 4) (pitchlabel.LeftOffset 4) (pitchlabel.RightOffset 4) (pitch.InputType 3) (pitch.TopOffset 4) (pitch.BottomOffset 4) (pitch.LeftOffset 4) (pitch.RightOffset 4) (pitch.Columns 6) (anglelabel.Label 平头键高度) (anglelabel.TopOffset 4) (anglelabel.BottomOffset 4) (anglelabel.LeftOffset 4) (anglelabel.RightOffset 4) (angle.InputType 3) (angle.TopOffset 4) (angle.BottomOffset 4) (angle.LeftOffset 4) (angle.RightOffset 4) (angle.Columns 6) (.Label 输入参数) (.Decorated True) (.Layout (Grid (Rows 1 1 1 ) (Cols 1 1)51 teethnumlabel teethnum pitchlabel pitch anglelabel angle ) ) ) )键生成界面和模型(图 5.4): 图 5.4 键的对话框及模型5.6 挡圈的参数化建模挡圈的参数化建模编写程序:void spur5(char *dialog,char *component,ProAppData data) int status1; /int status2;/ProUIDialogExit(gear,status);/ ProBoolean *state; /*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(dangquan, dangquan);ProUIPushbuttonActivateActionSet(dangquan,Ok,spur5OK, NULL);52ProUIPushbuttonActivateActionSet(dangquan,Cancel,UsrCancelAction, NULL);/*-* Display and activate the dialog *-*/ ProUIDialogActivate(dangquan, &status1);/*-* Remove the dialog from memory *-*/ ProUIDialogDestroy(dangquan);void spur5OK(char *dialog,char *component,ProAppData data)/ProUIDialogExit(dialog, 1);ProMdl part;ProParameter param1;ProParameter param2;ProParameter param3;ProParameter param4;ProParamvalue value1;ProParamvalue value2;ProParamvalue value3;ProParamvalue value4;ProModelitem feature;int i;double da1,db1,h1,dc1;ProMdlRetrieve(LF:jingujianexample1partsdangquan.prt.1, PRO_MDL_PART, &part);ProMdlDisplay(part);ProMdlIdGet(part,&i);ProModelitemInit(part,i,PRO_PART,&feature);ProParameterInit(&feature, Lda, ¶m1);ProParameterInit(&feature, Ldb, ¶m2);ProParameterInit(&feature, Lh, ¶m3);ProParameterInit(&feature, Ldc, ¶m4);ProUIInputpanelDoubleGet(dangquan,teethnum,&da1);ProUIInputpanelDoubleGet(dangquan,pitch,&db1);ProUIInputpanelDoubleGet(dangquan,angle,&h1);53ProUIInputpanelDoubleGet(dangquan,width,&dc1);value1.type=PRO_PARAM_DOUBLE;value1.value.d_val=da1;value2.type=PRO_PARAM_DOUBLE;value2.value.d_val=db1;value3.type=PRO_PARAM_DOUBLE;value3.value.d_val=h1;value4.type=PRO_PARAM_DOUBLE;value4.value.d_val=dc1;ProParameterValueSet(¶m1, &value1);ProParameterValueSet(¶m2, &value2);ProParameterValueSet(¶m3, &value3);ProParameterValueSet(¶m4, &value4);ProSolidRegenerate(ProSolid)part, PRO_B_TRUE);ProUIDialogExit(dialog, 1);挡圈对话框程设计:(Dialog dangquan (Components (PushButton Ok) (PushButton Cancel) (SubLayout GearLayout) ) (Resources (Ok.Label 确定) (Ok.TopOffset 4) (Ok.BottomOffset 4) (Ok.LeftOffset 4) (Ok.RightOffset 4) (Cancel.Label 取消) (Cancel.TopOffset 4) (Cancel.BottomOffset 4) (Cancel.LeftOffset 4) (Cancel.RightOffset 4) (.Label 锥销锁紧挡圈参数化设计) (.StartLocation 5) (.Layout (Grid (Rows 1 1 ) (Cols 1) GearLayout (Grid (Rows 1 ) (Cols 1 1)54 Ok Cancel ) ) ) ) )(Layout GearLayout (Components (Label teethnumlabel) (InputPanel teethnum) (Label pitchlabel) (InputPanel pitch) (Label anglelabel) (InputPanel angle) (Label widthlabel) (InputPanel width) ) (Resources (teethnumlabel.Label 锥销锁紧挡圈内径) (teethnumlabel.TopOffset 4) (teethnumlabel.BottomOffset 4) (teethnumlabel.LeftOffset 4) (teethnumlabel.RightOffset 4) (teethnum.InputType 3) (teethnum.TopOffset 4) (teethnum.BottomOffset 4) (teethnum.LeftOffset 4) (teethnum.RightOffset 4) (teethnum.Columns 6) (pitchlabel.Label 锥销锁紧挡圈外径) (pitchlabel.TopOffset 4) (pitchlabel.BottomOffset 4) (pitchlabel.LeftOffset 4) (pitchlabel.RightOffset 4) (pitch.InputType 3) (pitch.TopOffset 4) (pitch.BottomOffset 4) (pitch.LeftOffset 4) (pitch.RightOffset 4) (pitch.Columns 6) 55 (anglelabel.Label 锥销锁紧挡圈厚度) (anglelabel.TopOffset 4) (anglelabel.BottomOffset 4) (anglelabel.LeftOffset 4) (anglelabel.RightOffset 4) (angle.InputType 3) (angle.TopOffset 4) (angle.BottomOffset 4) (angle.LeftOffset 4) (angle.RightOffset 4) (angle.Columns 6) (widthlabel.Label 锥销锁紧挡圈销孔) (widthlabel.TopOffset 4) (widthlabel.BottomOffset 4) (widthlabel.LeftOffset 4) (widthlabel.RightOffset 4) (width.InputType 3) (width.TopOffset 4) (width.BottomOffset 4) (width.LeftOffset 4) (width.RightOffset 4) (width.Columns 6) (.Label 输入参数) (.Decorated True) (.Layout (Grid (Rows 1 1 1 1) (Cols 1 1) teethnumlabel teethnum pitchlabel pitch anglelabel angle widthlabel width) ) ) )56挡圈生成界面和模型(图 5.5):图 5.5 挡圈对话框及模型5.7 垫片的参数化建模垫片的参数化建模编写程序:void spur6(char *dialog,char *component,ProAppData data) int status1; /int status2;/ProUIDialogExit(gear,status);/ ProBoolean *state; /*-* Load the dialog from the resource file *-*/ ProUIDialogCreate(dianpian, dianpian);ProUIPushbuttonActivateActionSet(dianpian,Ok,spur6OK, NULL);ProUIPushbuttonActivateActionSet(dianpian,Cancel,UsrCancelAction, NULL);/*-* Display and activate the dialog *-*/ ProUIDialogActivate(dianpian, &status1);57/*-* Remove the dialog from memory *-*/ ProUIDialogDestroy(dianpian);void spur6OK(char *dialog,char *component,ProAppData data)/ProUIDialogExit(dialog, 1);ProMdl part;ProParameter param1;ProParameter param2;ProParameter param3;/ProParameter param4;ProParamvalue value1;ProParamvalue value2;ProParamvalue value3;/ProParamvalue value4;ProModelitem feature;int i;double da1,db1,h1;ProMdlRetrieve(LF:jingujianexample1partsdianquan.prt.1, PRO_MDL_PART, &part);ProMdlDisplay(part);ProMdlIdGet(part,&i);ProModelitemInit(part,i,PRO_PART,&feature);ProParameterInit(&feature, Lda, ¶m1);ProParameterInit(&feature, Ldb, ¶m2);ProParameterInit(&feature, Lh, ¶m3);/ProParameterInit(&feature, LWIDTH, ¶m4);ProUIInputpanelDoubleGet(dianpian,teethnum,&da1);ProUIInputpanelDoubleGet(dianpian,pitch,&db1);ProUIInputpanelDoubleGet(dianpian,angle,&h1);/ProUIInputpanelDoubleGet(spur,width,&width1);value1.type=PRO_PARAM_DOUBLE;value1.value.d_val=da1;value2.type=PRO_PARAM_DOUBLE;value2.value.d_val=db1;value3.type=PRO_PARAM_DOUBLE;58value3.value.d_val=h1;/value4.type=PRO_PARAM_DOUBLE;/value4.value.d_val=width1;ProParameterValueSet(¶m1, &value1);ProParameterValueSet(¶m2, &value2);ProParameterValueSet(¶m3, &value3);/ProParameterValueSet(¶m4, &value4);ProSolidRegenerate(ProSolid)part, PRO_B_TRUE);ProUIDialogExit(dialog, 1);垫片对话框设计:(Dialog dianpian (Components (PushButton Ok) (PushButton Cancel) (SubLayout GearLayout) ) (Resources (Ok.Label 确定) (Ok.TopOffset 4) (Ok.BottomOffset 4) (Ok.LeftOffset 4) (Ok.RightOffset 4) (Cancel.Label 取消) (Cancel.TopOffset 4) (Cancel.BottomOffset 4) (Cancel.LeftOffset 4) (Cancel.RightOffset 4) (.Label 平垫片参数化设计) (.StartLocation 5) (.Layout (Grid (Rows 1 1 ) (Cols 1) GearLayout (Grid (Rows 1 ) (Cols 1 1) Ok Cancel ) ) ) )59 )(Layout GearLayout (Components (Label teethnumlabel) (InputPanel teethnum) (Label pitchlabel) (InputPanel pitch) (Label anglelabel) (InputPanel angle) (Label widthlabel) (InputPanel width) ) (Resources (teethnumlabel.Label 平垫片内径) (teethnumlabel.TopOffset 4) (teethnumlabel.BottomOffset 4) (teethnumlabel.LeftOffset 4) (teethnumlabel.RightOffset 4) (teethnum.InputType 3) (teethnum.TopOffset 4) (teethnum.BottomOffset 4) (teethnum.LeftOffset 4) (teethnum.RightOffset 4) (teethnum.Columns 6) (pitchlabel.Label 平垫片外径) (pitchlabel.TopOffset 4) (pitchlabel.BottomOffset 4) (pitchlabel.LeftOffset 4) (pitchlabel.RightOffset 4) (pitch.InputType 3) (pitch.TopOffset 4) (pitch.BottomOffset 4) (pitch.LeftOffset 4) (pitch.RightOffset 4) (pitch.Columns 6) (anglelabel.Label 平垫片厚度) (anglelabel.TopOffset 4) (anglelabel.BottomOffset 4) (anglelabel.LeftOffset 4) (anglelabel.RightOffset 4) (angle.InputType 3)60 (angle.TopOffset 4) (angle.BottomOffset 4) (angle.LeftOffset 4) (angle.RightOffset 4) (angle.Columns 6) (.Label 输入参数) (.Decorated True) (.Layout (Grid (Rows 1 1 1 ) (Cols 1 1) teethnumlabel teethnum pitchlabel pitch anglelabel angle ) ) ) )垫片生成界面和模型(图 5.6):图 5.6 垫片对话框及模型5.8 本章小结本章小结采用以上的程序建模方法,解决了以往在 Pro/Engineer 中建模的局限性。并利用高级的程序语言实现人机交互地输入设计参数值来完成零件的设计,具有较大的灵活性和实用性。大大地减少了今后零件三维建模工作过程中工作量,提高了效率,也给各种复杂零件的自动化设计提供一定的参考依据。61第六章第六章 利用利用 PROTOOLKITPROTOOLKIT 开发紧固件的参数化系统开发紧固件的参数化系统 文中所创建的销、螺钉、螺栓、键、弹性挡圈、垫片参数化设计系统,程序的结果是弹出参数化设计的对话框,从该对话框选择要创建的模型类型,然后会弹出对应的参数输入对话框,由用户在在对话框中输入相应的参数就可以生成对应的三维模型。6.1 创建参数化的实体模型创建参数化的实体模型利用前面所提到的由 Pro/Program 所创建的参数化的模型,根据基本参数的改变就可以生成具有相应参数尺寸的模型。6.2 对话框设计对话框设计 在计算机辅助设计中,原手工设计中需人工完成的大量工作己由系统预先完成,所以要求设计人员完成的只是一些关键参数的选择和输入。对话框就成了最为有效方便的人机交互方式。 用户界面对话框(User Interface Dialog Boxes,简称 UI 对话框)是Pro/Toolkit 提供的一种交互界面。可以利用 UI 对话框技术,在Pro/Toolkit 应用程序中设计出风格与 Pro/Engineer 系统本身具有的对话框相似的人机交互界面。UI 对话框的设计思路和方法与 AutoCAD 的 DCL 对话框类似,主要由对话框资源文件和相应的控制程序两大部分构成。对话框资源文件的功能相当于 AutoCAD 的对话框控制语句(DCL),用 AS CII 码文本格式编写,其内容定义了对话框的组成、外观和属性。控制程序相当与 DCL 驱动程序,用 C 或 C+语言编写,用来在 Pro/Engineer 环境装入对话框资源、显示对话框、设置动作和退出对话框等。 Ul 对话框的设计主要涉及两个方面:一是按界面的布局编写资源文件;二是针对 Ul 对话框的功能编写相应的控制程序。 6.3 系统运行界面系统运行界面编写对话框界面后,就可以进行程序源文件的编写。通过程序将对话框中输入的参数传递给经 Pro/Program 参数化的三维模型文件,从而就可以生成相应的模型。程序源文件编写完成后,就可以进行编译、连接,生成可执行文件。经过在 Pro/Engineer 中注册运行。就可以运行该参数化建模系统。程序执行的主界面见图 6.1。此界面非常直观。从中选择要创建的模型类型,就会弹出参数输入的对话框,输入基本的参数就可以生成相应的模型。例如:我们从主界面中选择要创建的类型为螺栓,就会立即弹出六角螺栓参数设计的对话框,见图 6.2。参数输入完毕后点确定就可立即生成相应的三维模型。图 6.3 为其它紧固件参数输入界面。限于篇幅,其它的就不再一一赘述。该三维参数化建模系统是运用了 Pro/Engineer 与 VS2005,它充分体现了参数化驱动技术的优越性,并展现了 Pro/Toolkit 的 Windows 风格的功能。它具有操作方便、专业实用、速度快捷等特点。它集合了销、螺钉、螺栓、键、弹性挡圈、垫片等紧固件,通过该系统我们可以方便快捷地创62建通用件等。这种人机交互式的设计界面直观方便,在一定程度上大大提高了建模效率。图 6.1 程序执行界面图 6.2 六角螺栓输入界面 63 图 6.3 其它紧固件的输入界面6.4 本章小结本章小结本章主要对紧固件进行了分类,利用 Protoolkit 开发紧固件的参数化系统,完成了复杂的对话框界面,完成了紧固件库的用户界面设计,并以示意图图像的绑定。通过该系统我们可以方便快捷地创建通用件等。这种人机交互式的设计界面直观方便,在一定程度上大大提高了建模效率。 64结论结论本文从工程实用角度出发,主要围绕 Pro/ENGINEER 平台进行符合我国标准的通用零件的二次开发。在设计中,主要从符合工程技术人员的习惯及使用方便的角度出发,设计了良好的人机对话面,摸索出一些较实用的建模方法,开发了销、螺钉、螺栓、键、弹性挡圈、垫片等紧固件的插件。65致谢致谢这段时间以来,在导师毛美姣老师的悉心指导下,这次毕业设计终于较为顺利地完成了。几个月的时间里,从课题的选定、资料的收集、课题的具体设计到论文的审定改进,毛美姣老师都给予了极大的帮助,倾注了大量的心血;在毛美姣老师的指导下,我们不仅开拓了思路、扩大了视野、丰富了知识面,还初步掌握了分析和处理具体实践问题的科学方法,为我们今后发展打下了坚实的基础。同时,由于本人才疏学浅,加之此次设计时间紧任务重,龚涛等同学都给予了重要帮助。由于篇幅限制在此不再将他们一一列举,但是我对他们无私慷慨的帮助表示深深的谢意!此外,感谢我的父母,感谢他们这么多年来的养育之恩,是他们的辛勤工才使我能顺利地完成学业。感谢父母在我受到挫折、打击时候的鼓励和支持。66参考文献参考文献1 李世国.Pro/TOOLKIT 程序设计M.北京:机械工业出版社,2003.6:1299.2源清,肖文.CAD 技术发展历程概览.计算机辅助设计与制造,2000(3):34-363 刘文剑.CAD/CAM 集成技术.哈尔滨:哈尔滨工业大学出版社,2000.51-584 赵红雁.CAD 技术的发展趋势及其相关技术.计算机辅助设计与制造,2001(12).8-105 孙家广.计算机辅助设计技术基础.北京:清华大学出版社,2000.112- 1186 王贤坤.机械 CAD/CAM 技术、应用与开发.北京:机械工业出版社,2001.78-837 姚英学,蔡颖.计算机辅助设计与制造.北京:高等教育出版社,2002.231-2378 廖敏.基于图形元素特征参数的参数化设计方法.四川工业学院学报,2001(3) :5-79 张峰.参数化设计的研究现状与发展趋势.机械工程师,2002 (1):13-2510姚剑峰.三维参数化特征库的研究与实现.机械设计与研究,2002(l): 38-3911 赖朝安.Pro/E 二次开发的关键技术.机械设计与制造工程,2001(l):21-2412 张红旗.Pro/Engineer 二次开发技术的应用与研究.计算机辅助设计及制造,2002(0):48-5013 张超,张益华.Pro/E 二次开发技术在齿轮三维参数化设计中的应用,2004(l):22-2414 梁洪帮.用 Pro/E 组建三维参数化设计系统.计算机应用,2001(7):70-7115 肖颖.基于 Visual C+的 Pro/E 三维标准件库开发研究.机械工程师,2001(l):22-2467附录附录 I I 外文翻译外文翻译基于特征的,参数化建模系统的 CAD / CAPP / CAM 集成系统摘要:较短的产品开发时间,本文提出了一种方法,发展基于特征的参数化产品建模系统是适合的综合工程设计 CIMS 环境下。建筑的 zd - mcadii 的特点和它的每个模块 areis 管理详细的介绍。 zd - mcadii 的产品数据的一种面向对象的数据库管理系统,奥斯卡,以及标准的一步。为产品模型是建立在根据产品的设计是建立在一个统一的产品型号,所有产品的数据,全球相关的在 zd - mcadii 。 zd - imcadi1 提供了各种设计特点,以促进产品设计,并支持完整的 CAD , CAPP 和 CAM 的。一 导言与增加的步伐,科技发展和国际竞争,今天的工业环境,是要求作进一步的改进设计质量和效率。因此,研究和商品化的现代 CAD / CAM 技术的重点是基于特征的建模一 ,参数化设计,甚至对计算机集成制造系统( con1puter 集成制造系统) ,以减少差距,这之间存在着传统的设计和制造业,并提高其效率的产品开发。因此,特征技术和参数化设计是中发挥着越来越重要的作用,在现代的 CAD 系统。主要的原因在于在这方面基于特征的设计,支持一体化的 CAD , CAPP 和 CAM 系统,参数化设计将减少产品设计周期时间急剧变化。实体建模有助于快速,高效,有竞争力的产品开发,并能模拟地下性质的实物(如体积,转动惯量,和重心) 。对比之下,三维线框和表面模型只模拟形状的实物。因此,大多数的 CAD / CAM 开发商选择实体模型作为几何模型的产品。二 概述 zd mcadiizd - mcadii 是一种产品建模系统浙江研制的人工情报研究所是一个基于特征的参数化建模系统的大学。它结合 cappkam 系统。该系统的基础上,实现国家第七个五年计划项目-“研究机械产品的 C AD 支撑软件为 v ax 系列( U NIX 操作系统) ” ,结合国家 8 63高技术。项目-“产品模型 b asedcad/ C APP/ C AM 集成系统”在第八个五年计划时期。本文提出了一种方法,已应用在我们的制度 zd - mcadii ,发展基于特征的参数化产品建模系统。基本理念的发展, zd - mcadii 是目前所有产品的特点,在电脑内部的代表性,提供建模技术,允许定义和操纵这些产品特性,并整合与 CAD , CAM 系统在 CIMS 环境。68 图 1 和图 2 建筑 zd - mcadii模 zd - mcadii 能捕捉到设计意图,并允许设计师作出很大的变化,部分或大会在任何时间在设计过程中。参数化设计提供了一个灵活的做法,三维参数化建模。它包括基准的助手,如模式和组行动,坐标系统,平面基准,基准曲线,基准点,有助于改善设计师praductivity 。 zd - mcadii 的三维参数化模型,二维参数和装配模型是相关的全球性,使任何的变化, onb 或两个,这些模式将导致任何其他相关的模型自动更新。zd - mcadii 的 sketcher 允许设计师建立尺寸驱动的概况与几何的限制,例如,并行,切, colinearity ,抓获自动。设计师,系统会提示智能线时,这些几何约束的出现。 zd - mcadii 的限制,基于建模,使设计师的定义方程双向定向有关的模型参数,以对外工程的要求,然后可以驱动模型的几何形状。 基于特征的建模在 zd - mcadii 允许设计,其中包括标准的设计元素在产品的几何模型,并消除传统的,时间长,业务建模,它提供了各种设计特点,以促进产品设计。 zd - mcadii 也可以让设计师构建自己的特点,图书馆与用户定义的功能,所提供的 zd - mcadii 的功能模块。 zd - mcadii 的功能编辑器可让设计师修改的一个特点在屏幕上选择维和进入一个氦氖 vahe 。用户可以创建一个功能的配置没有任何限制,或尺寸,甚至更好,他可以添加尺寸和制约因素后,按一下功能重新定位,简单的图标。 zd - mcadii 是可以转换的设计特点,制造功能,用在 CAPP 和 CAM 其特征映射模块。三 建筑的 zd mcadii69这是人所共知的一个开放的软件体系结构带来即插即用“的兼容性和自由选择的应用软件。因此,作为一个 excelient 软件,它必须有一个开放式体系结构。从这个角度看,我们高度重视,就其建筑的同时,发展中国家 zd - mcadii 。图 1 和图 2,说明建筑 zd - mcadii 。在底部的 diagtam ,有一个开发环境界面,这是独立的装置。在这模块,了 VAPI (虚拟应用程序编程接口)为设计的应用系统提供。它是独立于硬件和软件平台。了 VAPI 带来很多好处,如便携式,灵活,可扩展性和可重复使用的,等等。 用户界面(用户界面)是一个事件驱动的 GUI ,它可以 be.a 窗口,命令行,菜单,对话框,或其他类型的界面,需要用户输入的原料和生成一个命令流,并提供图形的互动。该functionsprovided 由用户界面模块是: 可视化的图标,在线文件和在线帮助多视图显示(自动隐藏) ,彩色底纹。为 U1 提供动态显示回应鼠标移动和按钮的事件。 菜单 customizer 采摘实体。钦点实体可以过滤使用的标准,如实体类型,颜色,实体层和显示地位,等等。 网格的支持。网格允许抢购到积极施工平面。 用户定义的看法pdpm (产品设计与产品管理)的核心 zd - mcadii 。 pdpm 对待产品的设计,包括施工图设计,零件设计,装配设计,以及产品数据管理软件。 pdpm 有管理能力的充分结合所有型号相同的产品。不同于传统的数据管理程序,重点放在 managingfiles , zd - mcadii的 pdpm 是优化管理模式,包括产品成分,人际关系,及其他相关资料。产品数据,包括固体的几何信息,特征信息,工程信息(宽容,素材,完成等) ,以及过程 6 ,对象资料等,是由奥斯卡面向对象数据库管理系统,开发的爱浙江大学。奥斯卡不仅支持研究所的表达模式 7 ,并加强 sdai 8 (标准数据访问接口) ,而且还作为一个工程数据管理系统的 CAD / CAPP / CAM 集成系统。独特的产品数据,确保在奥斯卡的正确性,充分结合的所有型号。 dei (数据交换接口) 5 月 exporthmport 产品数据/从其他 CAD / CAM 系统。支持并行工程, CAD 系统必须是开放和具有足够的灵活性以交换的产品数据与其他 CAD 系统或 CAE 技术, CAPP 系统, CAM 系统。标准步骤 9 是首个国际标准由国际标准组织( ISO ) ,使捕获的信息组成一个电脑产品型号,在一个中立的形式,没有广播卫星服务的完整性和完整性,在整个生命 cyde 一个产品 10 。其中最重要的要点,步骤,发展是正式的面向对象和计算机 processable 语言表达,这是用来界定标准,在一个独特的是一种趋势,大部分和毫不含糊的方式。我们认为,它的 CAD / CAM 系统的开发将使他们的系统支持 STEP标准,在未来的。建模根据产品型号的一步,这是某些完整 zd - mcadii 支持的一步。因此,一个步骤的数据翻译是没有必要的任何更多, zd - mcadii 是能够产生 STEP 中性文件为一个产品或取出一个 STEP 中性文件 toform 内部加强产品模型直接。即 zd - mcadii可以处理步骤的产品数据。 以及作为第一步, dei 还支持其他 is0 或行业标准,如 IGES的,一套, dwg 档, DXF 格式等 dei 是如此膨胀,就是可以支持任何其他的标准是现在还是一个新的翻译后,只有一件事你必须这样做,只是补充一点,就是标准 dei 。 另一个方面 zd - mcadii 的开放是,它提供用户应用开发接口。此接口包含两个部分:宏语言编程接口和 C / C + +编程接口。用户可以四 流动的设计信息,在 zd mcadii在 zd - mcadii ,用户开始设计,从三维特征建模,不同于传统的二维图纸设计。图 3 说明了流动的设计信息,在 zd - mcadii 。 1 prbduct 的绘图会自动生成,通过预测三维零70件模型或三维装配模型简单。此外,绘图将继续充分协会与它的三维模型,当 3D 模型的改变,相关的图纸或集会将自动更新,以反映所做的更改在三维模型。与保持一致性和完整性,产品,时间长,设计任务将变得非常方便和更多的本能。事实上,在 70-80 的机械设计加以利用三维建模技术在发达国家和数目有一个非常快速增加,平均的国家,今天的世界。部分的工程设计( ped ) ,是界定非几何信息,如材料,宽容,完成后,热轧过程中表面上,等后,生成零件模型,用户可以进入施工图设计模块(的 DDM )出示详细图纸该部分,或进入装配设计模块( ADM )的建设和管理的超大型,复杂的集会与无限数量的元件,或输入的过程中设计模块( PDM )的。形成过程模型交付给一般事务的 CAPP ,这是一个过程,规划系统,基于知识库和专家系统技术。 图 3 流动的设计信息在 zd - mcadii当过程模型离开工艺规划模块(百万分之一) ,这将转化为制造模型所接受的一般事务凸轮, CAM 系统与职能的自动化数控编程,干扰探测和处理,加工过程仿真,和一般职位-处理。71 图 4 流量控制在 zd - mcadii 五 流量控制在 zd mcadii图 4,说明流量控制在 zd - mcadii 。组成部分,示意图如下: 用户输入的组成,原料的命令和行动,来自用户输入(通过键盘或使用鼠标)或档案载有命令编写的脚本在脂肪酶。 用户界面事件处理过程的用户输入,并划分这些投入由三个部分组成:鼠标事件,键盘事件和脂肪酶程序,然后提供这些资料,以 3 处理(鼠标事件处理程序, keyboara 事件处理程序和脂肪酶处理) 。 鼠标事件处理程序是专门设计,可让用户输入的数据,从鼠标的移动或鼠标的clickingevent ,然后传递这些数据鼠标到 COM - mands 处理器。 键盘事件处理程序,主要是为了收集键盘输入进入由用户,然后提供键盘数据的命令处理器。以适应在任何情况下, zd - mcadii 可以运行在正确的情况,用户只有一个键盘和鼠标没有,副经。 脂肪酶处理过程中用户的书面房程序,并翻译成脂肪酶的相应的 C / C + +电话所提供的核心 zd - mcadii 。 命令处理器,开发的 Unix 工具包 2 :法和 yacc ,试图了解鼠标和键盘的数据资料,以及这些输入的数据将被翻译成内核的 C / C + +的来电。 核心 zd - mcadii 包含几个重要的 30 几何建模工具,组件,包括部分设计套件(特征造型) ,装配设计工具,绘图设计工具包,图形显示试剂盒,产品管理工具包(面向对象数据库) ,和产品数据导入/导出工具包等。六 结论zd - mcadii 已实施在 UNIX wmotif 环境在 Sun 的 Sparc 工作站。我们所选择的是更多的 C / C + +开发这一系统。金额超过 45.0 万源线。该系统亦已结合我们的 CAPP 系统(一般事务的 CAPP )和 CAM 系统(一般事务凸轮) zd - mcadii 在综合系统,一般事务 iccc 成功。也可以作为一个平台,为制定未来的智能集成 CAD / CAM 系统与并行工程的设计能力。72七 参考文献1 J.J., Shah, “Assessment of Features rechnology,” CAD, vol. 23, no. 5, 1991, pp. 331-343. 2 Li Hailong, “The Research of Feature-Based Parametric for CIMS,” MS Dissertation, Zhejiang M,odeiing System University, 1995. 3 Li Hailong, Dong Jinxiang, Tan Mengen, “Feature-Based Modeling System for Mechanical Product Design,” in The Fourth international Conference on CAWCG, Wuhan, China, 1995, pp. 508-513. 4 Ge Jianxin, “The Research and Implementation of the New Ph. D. Dissertation, Generation of CAD System,” Zhejiang University, 1993. 5 Ge Jianxin, Li Hailong, Dong Jinxiang, He Zhijun, “Constrain Based Method for Describing and Inferring ACTA AUTOMA TIC SiNICA, Position of Assemblies,” vol. 22, no. 1, 1996, pp. 41-47. 6 Shou Yucheng, “Design and Implementation of Object- Oriented Engineering Database Management System STEP,” Ph.D. Dissertation, Zhejiang University, Under 1993. 7 IS0 TC184/SC4 DIS 10303-11, “The EXPRESS Language Reference Manual,” 1992. 8 IS0 TC184/SC4/WG7 N202 Part22, “Standard Data Access Interface Specification,” 1992. 9 Documents of ISO/TC 184/SC4/WGs. 10 H. Grabowski, R. Anderl and M. Schmitt, Das Produkt- modellkonzept von STEP, VDI-Z, Nr, 12, 1989, pp.-84- 96.73附录附录 IIII 外文文献原文外文文献原文A Feature-Based, Parametric Modeling System for CAD/CAPP/CAM Integrated SystemAbstract:To shorter product development time, this paper proposed an approach to developing feature based parametric product modeling systems which are suitable for integrated engineering design in CIMS environment. The architecture of ZD-MCADII and the characteristics of its each module areis managed by introduced in detail. ZD-MCADIIs product data an object-oriented database management system OSCAR, and to the standard STEP. For the product model is built according the product design is established on a unified product model, all product data are globally associated in ZD-MCADII. ZD- iMCADI1 provides various design features to facilitate the product design, and supports the integrity of CAD, CAPP and CAM.I. INTRODUCTION With the increasing pace of technology development and international competition, todays industrial environment is asking for further improvement of design quality and efficiency. As a result, research and commercialization of modern CAD/CAM technology are focusing on the feature- based modeling I, the parametric design, and even on CIMS(Con1puter Integrated Manufacturing System), to reduce the gap, which traditionally existed between design and manufacturing, and improve the efficiency of product development. So, feature technology and parametric design are playing a more and more important role in the modern CAD systems. The main reason lies in that feature-based design support the integration of CAD, CAPP and CAM systems, and parametric design will reduce product design cycle times dramatically. Solid modeling contributes to fast, efficient, competitive product development, and can simulate the mass properties of physical objects (such as volume, moments of inertia, and center of gravity). In contrast, 3D wireframe and surface models only simulate the shapes of physical objects. So, the most of CAD/CAM developer choose solid model as geometric model of product. OVERVIEW OF ZD-MCADII ZD-MCADII 2-51 is a product modeling system of Zhejiang developed by Artificial Intelligence institute is a feature-based parametric modeling system University. It integrated with CAPPKAM systems. The system is based on the achievement of the National 7th five-year-plan project - The research of the mechanical product CAD support software for VAX series (UNIX OS), combined with the National 863 high-tech. Project - Product model basedCAD/CAPP/ CAM integrated system in 8th five-year-plan period.This paper proposed an approach, which has been applied in our system ZD-MCADII, to develop feature-based parametric product modeling systems. The basic idea of the 74development of ZD-MCADII is to present all the product characteristics in a computer internal representation, to provide the modeling techniques that allow the definition and manipulation of those product characteristics, and to integrate with CAD, CAM systems in CIMS environment. Parametric modeling of ZD-MCADII can capture design to a intent and allows designer to make substantial changes part or assembly at any time during the design process. Parametric design offers a flexible approach to 3D-parametric modeling. It includes datum aides, such as pattern and group operations, coordinate systems, datum plane, datum curve, and datum point, that help improve designer praductivity. ZD-MCADIIs 3D parametric model, 2D parametric and assembly model are associated globally so that any changes in onb or two of these models will cause any other associated models be automatically updated.ZD-MCADIIs sketcher allows designer to build dimension-driven profiles with geometric constraints such as, parallelism, tangency, and colinearity, captured automatically. Designer will be prompted by Smart-Line when these geometric constraints emerge. ZD-MCADIIs constraints- based modeling allows designer to define equations bi- directionally relating model parameters to external engineering requirements which can then drive model geometry.Feature-based modeling in ZD-MCADII allows design to include standard design elements in product geometric model and eliminates traditional, time-consuming modeling operations, and it provides various design features to facilitate the product design. ZD-MCADII also allows designer to construct his own feature libraries with user-defined feature provided by ZD-MCADIIs feature module. ZD-MCADIIs feature editor allows designer to modify a feature on screen by selecting the dimension and entering a ne& vahe. User can create a feature from a profile that lacks any constraints or dimensions, and even better, he can add dimensions and constraints later by clicking the feature redefine icon simply. ZD-MCADII is able to convert design feature to manufacture feature used in CAPP and CAM by its feature mapping module. THE ARCHITECTURE OF ZD-MCADII It is we11 known that an open software architecture brings plug and play” compatibility and freedom of choice to software applications. So, as an excelient software, it must have an open architecture. From this view point, we pay much attention on its architecture while developing ZD-MCADII.75 Fig. 1 and fig. 2 illustrate the architecture of ZD- MCADII. At the bottom of the diagtam, there is a developing environment interface which is independent of device. In this module, A VAPI (Virtual Application Programming Interface) for designers of application system is supplied. It is independent on the hardware and software platforms. VAPI brings much benefit, such as portable, flexible, expandable and reusable, etc.UI(User Interface) is an event driven GUI, it can be.a of window, command line, menu, dialog box, or other type interface that takes raw user input and generates a command stream, and provides graphic interaction. The functionsprovided by UI module are: Visualized icons, on-line documentation and on-line help Multi-views displaying(automatic hidden), color shading. U1 provides dynamic display to respond to mouse movement and button events. Menu customizer Picking entities. Picked entities can be filtered using criteria, such as entity type, color, entity layer and display status, etc. Grid support. The grid allows snapping onto the active Construction Plane. 76User defined viewPDPM (Product Design & Product Management) is the kernel of ZD-MCADII. PDPM treats the product design, including drawing design, part design, assembly design, and the product data management. PDPM has an ability to manage the full associativity of all models of the same product. Unlike traditional data management programs that focus on managingfiles, ZD-MCADIIs PDPM is optimized to manage models including product components, relationships, and other associated information. Product data, including solid geometric information, feature information, engineering information (tolerance, material, finish, etc.), and process 6, an object- information, etc., is managed by OSCAR oriented database management system, developed by AI of Zhejiang University. OSCAR not only supports Institute EXPRESS schema 7 and STEP SDAI 8 (Standard Data Access Interface),
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。