资源描述
基于Pro/E环境下的工程图增强功能开发JINGCHU UNIVERSITY OF TECHNOLOGY本科毕业设计(论文)设计(论文)题目基于Pro/E环境下的工程图增强功能开发 学 院 机械工程学院 专 业 机械设计制造及其自动化 年级班别 07机制三班 学 号 学生姓名 指导教师 2011年 5月23日目 录1.摘要21.1摘要21.2 Abstract32.设计说明42.1本课题的研究目的42.2本课题的研究要求42.3本课题的研究意义43.基于Pro/E环境下的工程图增强功能开发53.1开发环境53.1.1开发环境介绍53.1.2软件配置53.1.3开发环境调试53.2功能开发143.2.1功能分析143.2.2程序构架143.2.3程序开发163.2.4资源文件定义253.2.5国家标准配置303.2.6模板定义383.2.7程序注册运行393.3程序兼容性优化403.3.1程序文件整理403.3.2兼容性优化414.总结435.参考文献446.外文翻译451.摘要1.1摘要产品的三维设计离不开CAD/CAM系统的支持,具有技术成熟、功能强大的Pro/ENGINEER参数化造型系统在设计和制造业中引起了人们的重视,并得到了日益广泛的应用。Pro/ENGINEER作为通用的三维CAD/CAM系统在功能上基本能够满足产品三维设计的要求,但要高效地进行产品设计以满足更高层次的要求,必须借助于高级开发工具包Pro/TOOLKIT。Pro/ENGINEER是目前国际上最流行的“参数化,全相关”的三维设计软件。全相关技术即产品的三维模型与二维图形相互关联、能高效率地生成二维投影视图。因为在工程实践中,二维工程图是必不可少的,作为重要的技术文档,工程图具有一定的规范和标准,特别是工程信息的标注如各种标注符号、标题栏和明细表以及工程图的打印等,这都需要按行业,企业和国家的标准统一做相应的二次开发定制工作。Pro/ENGINEER软件具有广而博的通用性,但它在具体的应用时不能直接处理特定的产品,再加上国外的设计观念、标准和国内的差异,在使用该软件进行具体产品的设计时会感到有些地方不是特别方便。本课题二次开发的目的是为了减小Pro/ENGINEER系统上国外的设计观念、标准和国内的差异对用户应用时造成的影响和不必要的麻烦,对Pro/ENGINEER系统的二次开发的目的是对一些相关操作和参数进行国标化,更方便用户的应用。关键词:Pro/ENGINEER、Pro/TOOLKIT、工程图、二次开发1.2 AbstractThe three-dimensional design of product is inseparable from the CAD/CAM systems support. With the mature technology, powerful Pro/ENGINEER parametric modeling system in the design and manufacturing , it has aroused attention, and has been increasingly widely used. As a general three-dimensional CAD/CAM system, Pro/ENGINEER basically meet the requirements of three-dimensional design .If we want to be more efficient to meet the requirements of a higher level, we should resort to high-level Development Kit Pro/TOOLKIT.Pro/ENGINEER is the worlds most popular parameter, all related, three-dimensional design software. All related technology is a technology that make three-dimensional model and two-dimensional graphics interrelated. In engineering practice, the two-dimensional engineering drawings is essential. As an important technical documents, engineering drawings have certain norms and standards, especially a variety of engineering information marked symbols, the title bar and the schedule and project Map printing. All of these standards need to be done by the secondary development of software.Pro/ENGINEER software has broad and general usage, but it can not directly address specific products. What is more, foreign design concepts, standards and national differ from us. So it would be inconvenient in the use of the software. The second development of this project aims to reduce the influence caused by foreign concepts, standards and internal differences of the Pro/ENGINEER. The purpose of the secondary development is to make the number of related operations and parameters international, more convenient for application.Keywords: Pro/ENGINEER, Pro/TOOLKIT, Drawings, Secondary Development2.设计说明2.1本课题的研究目的Pro/ENGINEER软件具有广而博的通用性,但它在具体的应用时不能直接处理特定的产品,再加上国外的设计观念、标准和国内的差异,在使用该软件进行具体产品的设计时会感到有些地方不是特别方便。本课题二次开发的目的是为了减小Pro/ENGINEER系统上国外的设计观念、标准和国内的差异对用户应用时造成的影响和不必要的麻烦,对Pro/ENGINEER系统的二次开发的目的是对一些相关操作和参数进行国标化,更方便用户的应用。2.2本课题的研究要求本设计课题为基于Pro/ENGINEER环境下的工程图增强功能开发。为了高效地利用Pro/ENGINEER实现工程图的完善及标注;同时也为了更加深入地了解Pro/ENGINEER系统的开发方法和步骤,为以后的设计开发工作打下一定的基础。拟在学习了解Pro/ENGINEER二次开发的过程中完成以下功能的二次开发:1.自动生成同名工程图文件;2.用菜单的方式选择图框及标题栏格式;3.按照国家标准样式加载配置。2.3本课题的研究意义Pro/ENGINEER是目前国际上最流行的“参数化,全相关”的三维设计软件。全相关技术即产品的三维模型与二维图形相互关联、能高效率地生成二维投影视图。因为在工程实践中,二维工程图是必不可少的,作为重要的技术文档,工程图具有一定的规范和标准,特别是工程信息的标注如各种标注符号、标题栏和明细表以及工程图的打印等,这都需要按行业,企业和国家的标准统一做相应的二次开发定制工作。3. 基于Pro/E环境下的工程图增强功能开发3.1开发环境3.1.1开发环境介绍Pro/TOOLKIT是针对Pro/ENGINEER功能强大的二次开发工具。它封装了许多针对Pro/ENGINEER底层资源调用的库函数与头文件,借助第三方编译环境(C语言、VC+语言等)进行调试。使用Pro/TOOLKIT开发应用程序包含三个基本步骤:编写源文件(包括资源文件和程序源文件);生成可执行文件;可执行文件在Pro/ENGINEER中注册并运行是Pro/ENGINEER软件自带的二次开发模块,可以直接访问ProE软件的最底层数据库资源,这是进行PRO二次开发最根本的方法,但要求开发人员具有相当C语言的编程能力;它是PTC公司为Pro/ENGINEER提供的用户化工具箱(18以前的版本为Pro/DEVELOP),该工具箱为用户程序、软件及第三方程序提供了与Pro/ENGINEER的无缝联接。用户程序和第三方程序是用c语言编写的,Pro/TOOLKIT提供了大量的c语言的库函数,能够使外部应用程序安全有效地访问Pro/ENGINEER的数据库和应用程序。通过c语言编程及应用程序与Pro/ENGINEER的无缝集成,用户和第三方能够在Pro/ENGINEER系统中增加所需的功能。3.1.2软件配置1.操作系统:Windows XP SP3 专业版2.程序开发软件:Pro/TOOLKIT、Microsoft Visual Studio 2008 企业版3.程序测试软件:Pro/ENGINEER Wildfire 4.0 M1704.程序兼容性优化软件:Microsoft Visual Basic 6.0 中文版3.1.3开发环境调试首先打开Microsoft Visual Studio 2008(以下简称VS2008)。依次选择文件新建项目,系统弹出项目对话框(图1)。选择如图所示的MFC DLL 项目, 输入项目名称并设置项目路径,点击确定。在接下来的对话框中选择“使用共享MFC DLL 的规则DLL”(默认的也是这个选项),点击完成后,系统自动为我们搭建了一个DLL的开发环境,现在,我们要在这个环境下配置TOOLKIT 开发所需要的头文件和库文件路径。图1依次在菜单中选择: 工具选项,系统弹出选项对话框。在该对话中选择“项目和解决方案”一栏中的“VC+目录”选项,并参照图2的方法设置头文件路径。图2添加包含文件路径如下:D:SheJiproe4.0M170protoolkitincludeD:SheJiproe4.0M170protoolkitprotk_applsincludesD:SheJiproe4.0M170prodevelopincludesD:SheJiproe4.0M170prodevelopprotk_applsincludes仍旧在该对话框下,设置库文件路径,如图3:图3添加包含文件路径如下:D:SheJiProe4.0M170protoolkiti486_ntobjD:SheJiProe4.0M170prodevelopi486_ntobj设置好头文件和库文件路径后,就还差最后一步了,现在我们要来指定使用中的具体库文件。点击:项目属性,系统弹出该项目的属性对话框。按照图4的方法设置工程的连接属性。添加如下参数:附加依赖项:wsock32.lib mpr.lib psapi.lib protk_dllmd.lib忽略特定库:msvcrtd.lib如上设置即完成了VS2008与Pro/TOOLKIT程序的连接,接下来编写测试程序如下:程序源码:/文件名:ZHUCAIDAN.cpp#include windows.h#include ProUtil.h图4#include ProMenu.h#include ProMessage.h#include ProMenuBar.h#include ProUIDialog.h#include ProUIPushbutton.h#include ProToolkit.h#include ProMenubar.h#include ProUICheckbutton.h#include ProUIList.h#include ProUISpinbox.h#include ProUILabel.h#include ProUIRadiogroup.h#include ProArray.h#include ProUIInputpanel.h#include malloc.h#include stdlib.h#include Pro2dEntdef.h#include ProElement.h#include ProFeatForm.h#include ProFeatType.h#include ProStdSection.h#include ProWindows.h#include ProModelitem.h#include ProRevolve.h#include ProSolid.h#include ProElempath.h#include ProDtmPln.h/以上为程序编译所用头文件#define PRO_USE_VAR_ARGS1void OK_Action(char*,char*,ProAppData data);void FUN01();static uiCmdAccessState AccessDefault(uiCmdAccessMode)return ACCESS_AVAILABLE;/以上为函数声明/用户入口函数:extern C int user_initialize()ProFileName MSGFILE;ProError status;/引用资源文件DAT01.dat:ProStringToWstring(MSGFILE,DAT01.dat);uiCmdCmdId PushButtonID01;/新建工具栏菜单:status=ProMenubarMenuAdd(ZHUCAIDAN,IMGS01,Help,PRO_B_FALSE,MSGFILE);/在工具栏菜单上新建功能键:ProCmdActionAdd(BUTTON01_Act,(uiCmdCmdActFn)FUN01,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&PushButtonID01);ProMenubarmenuPushbuttonAdd(ZHUCAIDAN,BUTTON01,IMGS02,IMGS03,NULL,PRO_B_TRUE,PushButtonID01,MSGFILE);ProCmdIconSet(PushButtonID01,ICON01.gif);return status;/用户终止函数:extern C void user_terminate()/功能函数:void FUN01()int dialog_status;/引用UI界面文件RES01.res:ProUIDialogCreate(RES01,RES01);ProUIDialogCloseActionSet(RES01,OK_Action,NULL);ProUIPushbuttonActivateActionSet(RES01,Button1,OK_Action,NULL);ProUIDialogActivate(RES01,&dialog_status);ProUIDialogDestroy(RES01);void OK_Action(char* dialog,char* componets,ProAppData data) ProUIDialogExit(RES01,1);/编译以上源码生成应用程序,重命名应用程序为:DLL01.dll资源文件:/文件名:DAT00.datNAME 主菜单EXEC_FILE D:KeChengSheJiDLL01.dllTEXT_DIR D:KeChengSheJitextSTARTUP DLLFAIL_TOL TRUEDELAY_START FALSEALLOW_STOP FALSEREVISION 2010END/文件名:DAT01.datIMGS01毕业设计(&B)#IMGS02关于我们(&M)#IMGS03关于我们#UI界面文件:/文件名:RES01.res(Dialog RES01 (Components (Label Label1) (PushButton Button1) ) (Resources (Button1.Label 确定)(Button1.Bitmap cl_Ok) (Button1.AttachRight True) (Button1.TopOffset 5) (Button1.BottomOffset 5) (Button1.LeftOffset 5) (Button1.RightOffset 5) (Label1.TopOffset 5) (Label1.BottomOffset 0) (Label1.LeftOffset 5) (Label1.RightOffset 5) (Label1.BitmapPIC01.gif) (.Label 关于我们) (.DialogStyle 0) (.Focus Button1) (.Resizeable False) (.DefaultButton Button1) (.AlwaysOnTop True) (.Layout (Grid (Rows 1 1) (Cols 1) Label1 Button1 ) ) )图片资源:ICON01.gif、PIC01.gif设置以上文件路径:D:KeChengSheJiDLL01.dllD:KeChengSheJitextchinese_cnDAT00.datD:KeChengSheJitextchinese_cnDAT01.datD:KeChengSheJitextchinese_cnResourceRES01.resD:KeChengSheJitextchinese_cnResourceICON01.gifD:KeChengSheJitextchinese_cnResourcePIC01.gif注册并运行测试程序,运行Pro/ENGINEER,点击:工具辅助应用程序,注册并运行资源文件DAT00.dat;(如图5)图5启动成功后工具栏新增菜单“毕业设计”和功能键“关于我们”,点击:毕业设计关于我们,效果如图6所示。图63.2功能开发3.2.1功能分析本设计课题为基于Pro/ENGINEER环境下的工程图增强功能开发。为了高效地利用Pro/ENGINEER实现工程图的完善及标注;同时也为了更加深入地了解Pro/ENGINEER系统的开发方法和步骤,为以后的设计开发工作打下一定的基础。拟在学习了解Pro/ENGINEER二次开发的过程中完成以下功能的二次开发:1.自动生成同名工程图文件;对于已经存在的Pro/ENGINEER零件图或组件图,通过程序获取它的文件名,并对生成的工程图以获取的文件名自动进行命名。自动生成零件图或组件图的三视图(国家标准:主视图,俯视图,侧视图)。2.用菜单的方式选择图框及标题栏格式;Pro/ENGINEER系统默认绘图环境下的图框及格式均不符合国家标准要求,应按照相应的国家标准要求绘制图框及标题栏模板,并在二次开发程序中加入选择图框的功能(图幅:A0、A1、A2、A3、A4;图框:横向、纵向;是否带装订边等),程序按照要求调用已有模板,自动生成工程图的同时生成图框,标题栏等。3.按照国家标准样式加载配置;Pro/ENGINEER系统默认的配置都是以英制单位为标准,与国家标准不符,不适应国家标准环境下的应用。常规方式下修改Pro/ENGINEER配置参数仅在当次有效,下次使用时需要重复修改,工作量大而繁琐,拟通过研究Pro/ENGINEER系统的工作原理达到将Pro/ENGINEER系统的默认环境更改为符合国家标准要求的配置。综合以上功能分析,第1、2项功能通过Pro/TOOLKIT二次开发程序实现,第3项功能可通过重定义Pro/ENGINEER配置文件实现。3.2.2程序构架依据对程序所需完成的功能的分析,结合Pro/TOOLKIT程序的工作流程,拟定此功能模块的开发流程如下:1.Pro/ENGINEER系统开始运行是加载程序,在(3.1.3开发环境调试)程序加载的工具栏菜单上加载功能键;2.获取当前工作环境,若为零件或组件工作环境则功能键处于激活状态(功能键可用),否则功能键不激活;图73.Pro/ENGINEER系统在零件或组件工作环境下,点击功能键获到当前环境下文件名并赋值给变量;4.弹出程序窗口,定义UI界面的参数和功能,将文件名变量赋值给窗口中文件名栏(可输入更改);5.按照窗口中所列选项选择图幅、图框、更改文件名等;6.点击确定按钮程序开始配置工作或点击取消结束程序工作;7.获取Pro/ENGINEER工作进程中是否已存在当前工程图,若存在则直接打开并激法工程图;8.若Pro/ENGINEER工作进程中不存在当前工程图则按照用户的选择调用相关的格式文件和图幅模板,生成工程图。9.激活工程图,释放程序内存,结束程序工作。综合以上工作流程,绘制程序框图如图7所示。3.2.3程序开发1.Pro/ENGINEER系统开始运行是加载程序,在(3.1.3开发环境调试)程序加载的工具栏菜单上加载功能键。上文中用于开发环境调试的程序已使用ProMenubarMenuAdd()函数在工具栏上加载菜单毕业设计,使用ProCmdActionAdd()函数在毕业设计菜单下加载功能键关于我们。在菜单毕业设计上使用ProCmdActionAdd()函数加载新的功能键新建工程图,使用ProMenubarmenuPushbuttonAdd()函数定义功能键的各项参数,使用ProCmdIconSet()函数定义功能键的图标,其实现方法为:ProFileName MSGFILE;ProError status;ProStringToWstring(MSGFILE,DAT01.dat);uiCmdCmdId PushButtonID02;status=ProCmdActionAdd(BUTTON02_Act,(uiCmdCmdActFn)FUN02,uiCmdPrioDefault,AccessDefault,PRO_B_FALSE,PRO_B_TRUE,&PushButtonID02);ProMenubarmenuPushbuttonAdd(ZHUCAIDAN,BUTTON02,IMGS04,IMGS05,NULL,PRO_B_FALSE,PushButtonID02,MSGFILE);ProCmdIconSet(PushButtonID02,ICON02.gif);说明:DAT01.dat为资源文件,在下文中将给出定义;ICON02.gif图标文件。FUN02为点击功能键后执行操作的函数,将在下文中定义。2.获取当前工作环境,若为零件或组件工作环境则功能键处于激活状态(功能键可用),否则功能键不激活。status=ProCmdActionAdd(BUTTON02_Act,(uiCmdCmdActFn)FUN02,uiCmdPrioDefault,AccessDefault,PRO_B_FALSE,PRO_B_TRUE,&PushButtonID02);上文语句中AccessDefault为函数变量,作用是决定功能键是否激活(是否可用),函数返回值为:ACCESS_AVAILABLE(功能键激活参数);ACCESS_UNAVAILABLE(功能键不激活参数)。按照程序构架的要求,决定功能键是否激活的是Pro/ENGINEER系统的当前工作环境。当工作环境为零件(PRO_MODE_PART)或组件(PRO_MODE_ASSEMBLY)时功能键激活,否则不激活。使用ProModeCurrentGet()函数获取Pro/ENGINEER系统的当前工作环境,判断并返回合适的返回值。对AccessDefault函数的定义如下:uiCmdAccessState AccessDefault(uiCmdAccessMode)ProMode mode;ProError status;status=ProModeCurrentGet(&mode);if (mode=PRO_MODE_PART|mode=PRO_MODE_ASSEMBLY)return ACCESS_AVAILABLE;else return ACCESS_UNAVAILABLE;3.Pro/ENGINEER系统在零件或组件工作环境下,点击功能键获到当前环境下文件名并赋值给变量。使用ProMdlCurrentGet()函数获得当前工作环境句柄,使用ProMdlNameGet()函数获取当前环境下的文件名,赋值给变量current_name,其实现语句为:ProName current_name;ProMdl mdlhandle;ProMdlCurrentGet(&mdlhandle);ProMdlNameGet(mdlhandle,current_name);使Pro/ENGINEER系统当前工作文件名赋值给变量current_name,供后续程序使用。4.弹出程序窗口,定义UI界面的参数和功能,将文件名变量赋值给窗口中文件名栏(可输入更改)。此动作在点击功能键后触发,即为void FUN02()函数,其返回值为空。上一流程中的语句应包含在void FUN02()函数内。使用ProUIDialogCreate()函数调用Pro/E标准UI界面文件RES02.res;使用ProUIPushbuttonActivateActionSet()函数定义UI界面内各按钮所执行的动作;使用ProUIDialogCloseActionSet()函数定义取消按钮;使用ProUIInputpanelValueSet()函数对UI界面内文件名输入栏赋值(初始值,可重新输入更改);使用ProUIDialogActivate()函数显示并激活UI界面;UI界面激活后使用ProUIDialogDestroy()函数清除内存中的对话框资源。对void FUN02()函数的完整定义如下:void FUN02()ProName current_name;ProMdl mdlhandle;int dialog_status;ProMdlCurrentGet(&mdlhandle);ProMdlNameGet(mdlhandle,current_name);ProUIDialogCreate(RES02,RES02);ProUIDialogCloseActionSet(RES02,Cancel_Action,NULL);ProUIPushbuttonActivateActionSet(RES02,Ok,OK_Action,NULL);ProUIPushbuttonActivateActionSet(RES02,Cancel,Cancel_Action,NULL);ProUIInputpanelValueSet(RES02,InputText,current_name);ProUIDialogActivate(RES02,&dialog_status);ProUIDialogDestroy(RES02);说明:以上程序段调用了UI资源文件RES02.res,此文件将在下文中定义;程序段中OK_Action、 Cancel_Action分别为点击确定、取消按钮后执行的动作函数。5.按照窗口中所列选项选择图幅、图框、更改文件名等。实现过程如下:/定义过程中所需变量:int w_id,p_count,a,b,i,j=0;ProMdl solid,*p_model_array;ProMdldata data01;ProModel model;ProName dwg_temp,name,names;wchar_t *name_temp;ProDrawing drawing;ProDwgcreateErrs errors;char strtmpPRO_PATH_SIZE, *tf, *tk, name_stringPRO_NAME_SIZE, *tzmb;/获取新建工程图文件名:ProUIInputpanelValueGet(RES02,InputText,&name_temp);/获取图幅参数:ProUIRadiogroupSelectednamesGet(RES02,SelectType1,&a,&tf);/获取图框参数:ProUIRadiogroupSelectednamesGet(RES02,SelectType2,&b,&tk);/获取工程图模板:tzmb=strcat(*tf,*tk);/变量的赋值,变量类型转换:ProStringToWstring(dwg_temp,tzmb);ProWstringToString(name_string,name_temp);ProStringToWstring(name,name_string);ProMdlCurrentGet(&solid);ProMdlDataGet(solid,&data01);ProWstringToString(strtmp,data01.name);ProStringToWstring(model.name,strtmp);ProWstringToString(strtmp,data01.type);ProStringToWstring(model.type,strtmp);6.点击确定按钮程序开始配置工作或点击取消结束程序工作。确定按钮对应的动作函数为:void OK_Action(char* dialog,char* componets,ProAppData data)上一流程中的各语句应包含在OK_Action()函数中,并且下一流程也应包含其中。7.获取Pro/ENGINEER工作进程中是否已存在当前工程图,若存在则直接打开并激活工程图。使用ProSessionMdlList()函数获取Pro/ENGINEER系统工作进程列表,使用for语句遍历进程列表,若存在当前文件名的工程图则使用ProMdlDisplay()函数显示进程,并使用ProMdlWindowGet()函数获取进程ID,最后使用ProWindowActivate()函数激活窗口,使用ProWindowRepaint()函数刷新界面。程序过程如下:ProSessionMdlList(PRO_MDL_DRAWING,&p_model_array,&p_count);for(i=0,j=0;ip_count;i+)ProMdlNameGet(p_model_arrayi,names);if(name=names)j+;ProMdlDisplay(p_model_arrayi);ProMdlWindowGet(p_model_arrayi,&w_id);ProWindowActivate(w_id);ProWindowRepaint(w_id);8.若Pro/ENGINEER工作进程中不存在当前工程图则按照用户的选择调用相关的格式文件和图幅模板,生成工程图。生成工程图的语句如下:ProObjectwindowCreate(name,PRO_DRAWING,&w_id);ProDrawingFromTmpltCreate(name,dwg_temp,&model,PRODWGCREATE_DISPLAY_DRAWING,&drawing,&errors);9.激活工程图,释放程序内存,结束程序工作。此功能实现语句如下:/激活窗口:ProWindowActivate(w_id);/刷新界面:ProWindowRepaint(w_id);/结束程序:ProUIDialogExit(RES02,1);10.整理以上功能代码,编写程序如下:/文件名:main.cpp#include windows.h#include ProUtil.h#include ProMenu.h#include ProMessage.h#include ProMenuBar.h#include ProUIDialog.h#include ProUIPushbutton.h#include ProToolkit.h#include ProMenubar.h#include ProUICheckbutton.h#include ProUIList.h#include ProUISpinbox.h#include ProUILabel.h#include ProUIRadiogroup.h#include ProArray.h#include ProUIInputpanel.h#include malloc.h#include stdlib.h#include Pro2dEntdef.h#include ProElement.h#include ProFeatForm.h#include ProFeatType.h#include ProStdSection.h#include ProWindows.h#include ProModelitem.h#include ProRevolve.h#include ProSolid.h#include ProElempath.h#include ProDtmPln.h#include ProDrawing.h#include ProMdl.h#define PRO_USE_VAR_ARGS1void Cancel_Action(char* dialog,char* componets,ProAppData data);void OK_Action(char* dialog,char* componets,ProAppData data);void FUN02();uiCmdAccessState AccessDefault(uiCmdAccessMode);extern C int user_initialize()ProFileName MSGFILE;ProError status;ProStringToWstring(MSGFILE,DAT01.dat);uiCmdCmdId PushButtonID02;status=ProCmdActionAdd(BUTTON02_Act,(uiCmdCmdActFn)FUN02,uiCmdPrioDefault,AccessDefault,PRO_B_FALSE,PRO_B_TRUE,&PushButtonID02);ProMenubarmenuPushbuttonAdd(ZHUCAIDAN,BUTTON02,IMGS04,IMGS05,NULL,PRO_B_FALSE,PushButtonID02,MSGFILE);ProCmdIconSet(PushButtonID02,ICON02.gif);return status;extern C void user_terminate()uiCmdAccessState AccessDefault(uiCmdAccessMode)ProMode mode;ProError status;status=ProModeCurrentGet(&mode);if (mode=PRO_MODE_PART|mode=PRO_MODE_ASSEMBLY)return ACCESS_AVAILABLE;else return ACCESS_UNAVAILABLE;void FUN02()ProName current_name;ProMdl mdlhandle;int dialog_status;ProMdlCurrentGet(&mdlhandle);ProMdlNameGet(mdlhandle,current_name);ProUIDialogCreate(RES02,RES02);ProUIDialogCloseActionSet(RES02,Cancel_Action,NULL);ProUIPushbuttonActivateActionSet(RES02,Ok,OK_Action,NULL);ProUIPushbuttonActivateActionSet(RES02,Cancel,Cancel_Action,NULL);ProUIInputpanelValueSet(RES02,InputText,current_name);ProUIDialogActivate(RES02,&dialog_status);ProUIDialogDestroy(RES02);void OK_Action(char* dialog,char* componets,ProAppData data)int w_id,p_count,a,b,i,j=0;ProMdl solid,*p_model_array;ProMdldata data01;ProModel model;ProName dwg_temp,name,names;wchar_t *name_temp;ProDrawing drawing;ProDwgcreateErrs errors;char strtmpPRO_PATH_SIZE,*tf,*tk,name_stringPRO_NAME_SIZE,*tzmb;ProUIInputpanelValueGet(RES02,InputText,&name_temp);ProUIRadiogroupSelectednamesGet(RES02,SelectType1,&a,&tf);ProUIRadiogroupSelectednamesGet(RES02,SelectType2,&b,&tk);tzmb=strcat(*tf,*tk);ProStringToWstring(dwg_temp,tzmb);ProWstringToString(name_string,name_temp);ProStringToWstring(name,name_string);ProMdlCurrentGet(&solid);ProMdlDataGet(solid,&data01);ProWstringToString(strtmp,data01.name);ProStringToWstring(model.name,strtmp);ProWstringToString(strtmp,data01.type);ProStringToWstring(model.type,strtmp);ProSessionMdlList(PRO_MDL_DRAWING,&p_model_array,&p_count);for(i=0,j=0;ip_count;i+)ProMdlNameGet(p_model_arrayi,names);if(name=names)j+;ProMdlDisplay(p_model_arrayi);ProMdlWindowGet(p_model_arrayi,&w_id);if(j=0)ProObjectwindowCreate(name,PRO_DRAWING,&w_id);ProDrawingFromTmpltCreate(name,dwg_temp,&model,PRODWGCREATE_DISPLAY_DRAWING,&drawing,&errors);ProWindowActivate(w_id);ProWindowRepaint(w_id);Cancel_Action(NULL,NULL,NULL);void Cancel_Action(char* dialog,char* componets,ProAppData data) ProUIDialogExit(RES02,1);/编译以上程序源码,重命名为DLL02.dll3.2.4资源文件定义1.程序语言资源文件,对程序中部分字段的定义和显示。/文件名:DAT01.datIMGS01毕业设计(&B)#IMGS02关于我们(&M)#IMGS03关于我们#IMGS04生成工程图(&S
展开阅读全文