Proe应用ProTOOLKIT二次开发_第1页
Proe应用ProTOOLKIT二次开发_第2页
Proe应用ProTOOLKIT二次开发_第3页
Proe应用ProTOOLKIT二次开发_第4页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、下载可编辑手把手教你开发 Pro/TOOLKIT 应用程序1 前言本教程采用 VS2008 + Pro/E Wildfire5.0来讲解怎样开发 Pro/TOOLKIT 应用程序。开发 Pro/TOOLKIT 应用程序时, Pro/E 和 VisualStudio 的版本需对应,否则很难搭建开发环境,其对应关系如下:?Wildfire 4.0 <> VS2008?Wildfire 5.0 <> VS2008?Creo 1.0 <> VS2010?Creo 2.0 <> VS2010本教程所述的方法完全适用于 Wildfire4.0 + VS200

2、8 、Creo1.0 + VS2010 、 Creo2.0 + VS2010 。2 一、准备1.Pro/TOOLKIT在安装 Pro/E 时,默认是不安装 Pro/TOOLKIT的,必须选中【 API 工具包】节点下的 Pro/TOOLKIT 选项。可以通过运行: Pro/E 安装目录 /bin/ptcsetup.bat查看有无安装.专业 .整理 .下载可编辑Pro/TOOLKIT。2.VS2008VS2008中文版下载地址: http:/pan.baidu./s/1ntt7PH3最好安装下 VS2008 SP1补丁,否则编译Debug版本时常会报错。VS2008 SP1中文版下载地址: .m

3、icrosoft./zh-CN/download/details.aspx?id=13276如果你需要开发 64 位的 Pro/TOOLKIT程序,请确保安装 X64 Compilers and Tools ,.专业 .整理 .下载可编辑如下图所示:3 二、新建工程点击【文件】 -> 【新建】 -> 【项目】菜单命令,创建MFC DLL工程。输入工程名称: test_wf5 。.专业 .整理 .下载可编辑单击【确定】,然后在弹出的对话框中单击【下一步 > 】DLL类型:使用共享 MFC DLL.专业 .整理 .下载可编辑单击【完成】完成创建工程。4 三、配置工程属性1. 新增

4、 64 位编译平台注意:如果只编译32 位程序,请跳过此步骤。单击【生成】 -> 【配置管理器】菜单命令,然后依照下图操作。.专业 .整理 .下载可编辑如果没有 x64 选项,那说明安装 VS2008时,没有安装 X64 Compilers and Tools ,重新安装此选项即可。2. 新增头文件路径单击【项目】 -> 【属性】菜单命令,添加如下头文件路径。【 Pro/E 安装目录】 prodevelopincludes【 Pro/E 安装目录】 protoolkitincludes注意:请先选择平台是 Win32 还是 x64。.专业 .整理 .下载可编辑3. 新增库文件路径3

5、2 位:【 Pro/E 安装目录】 prodevelopi486_ntobj【 Pro/E 安装目录】 protoolkiti486_ntobj.专业 .整理 .下载可编辑64 位:【 Pro/E 安装目录】 prodevelopx86e_win64obj【 Pro/E 安装目录】 protoolkitx86e_win64obj.专业 .整理 .下载可编辑4. 添加附加依赖项mpr.libwsock32.libpsapi.libprotk_dllmd.libprodev_dllmd.libnetapi32.lib.专业 .整理 .下载可编辑5. 设置工程字符集推荐优先采用 Unicode 。.

6、专业 .整理 .下载可编辑5 四、添加 Pro/TOOLKIT 代码在 test_wf5.cpp 文件的最后添加以下 Pro/TOOLKIT 代码。该段代码的功能是: 在 Pro/E 的【帮助】菜单后新增一个菜单【 TestMenu】,然后在【 TestMenu】下新增两个菜单项【 Test 】和【 ShowCurrModelName】。分别实现弹出测试对话框和获取当前模型的名称并弹窗显示。注意:先只要大体理解代码的整体思路即可, 本教程会在第三篇: 手把手教你开发 Pro/TOOLKIT 应用程序 ( 三 ) 中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第三篇会比较好。/ 包含

7、常用头文件#i nclude <ProTool kit.h>#i nclude <ProUtil . h>#i nclude <ProMenuBar. h>.专业 .整理 .下载可编辑1 / 包含常用头文件2 #include <ProToolkit.h>3 #include <ProUtil.h>4 #include <ProMenuBar.h>5 #include <ProMenu.h>6 #include <ProMode.h>7 #include <ProMdl.h>8 #inc

8、lude <ProSolid.h>9 #include <ProAsmcomp.h>10 #include <ProArray.h>11 #include <ProModelitem.h>12 #include <ProLayer.h>1314/函数声明15 uiCmdAccessState TestAccess(uiCmdAccessMode access_mode);16 uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessModeaccess_mode);1718int Te

9、st(uiCmdCmdIdcommand,19uiCmdValue *p_value,20void*p_push_command_data);21int ShowCurrModelName(uiCmdCmdIdcommand,22uiCmdValue *p_value,23void*p_push_command_data);2425 / Pro/TOOLKIT 入口函数26 extern "C" int user_initialize()27 28 ProError err;2930/信息文件名称31 ProFamilyName MsgFile;32 ProStringTo

10、Wstring(MsgFile, "Test_Msg.txt");3334 / 添加菜单 :TestMenu35 err = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE,36 MsgFile);3738 / 添加命令和菜单项39 / 测试命令40 uiCmdCmdId cmd_id1;41 err = ProCmdActionAdd("Test", Test, uiCmdPrioDefault, TestAccess,

11、42 PRO_B_FALSE, PRO_B_FALSE, &cmd_id1);43 err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test", "Test",44 "Test_Help",.专业 .整理 .下载可编辑45 NULL, PRO_B_TRUE, cmd_id1, MsgFile);4647 / 显示并输出当前模型的名称48 uiCmdCmdId cmd_id2;49 err = ProCmdActionAdd("ShowCurrModel

12、Name", ShowCurrModelName,50 uiCmdPrioDefault,51 ShowCurrModelName_Access,52 PRO_B_FALSE, PRO_B_FALSE, &cmd_id2);53 err = ProMenubarmenuPushbuttonAdd("TestMenu", "ShowCurrModelName",54 "ShowCurrModelName",55 "ShowCurrModelName_Help", NULL, PRO_B_TRUE,

13、cmd_id2, MsgFile);5657 return 0;58 5960 / Pro/TOOLKIT 结束时调用的函数61 extern "C" void user_terminate()62 63 6465 / 测试命令响应函数66int Test(uiCmdCmdIdcommand,67uiCmdValue *p_value,68void*p_push_command_data)69 70 AfxMessageBox(_T("Just For Test");71 return 0;72 7374 / 命令 : 获取当前模型的名称并显示75int

14、 ShowCurrModelName(uiCmdCmdIdcommand,76uiCmdValue *p_value,77void*p_push_command_data)78 79 ProError err;8081 / 获取当前模型82 ProMdl mdl;83 err = ProMdlCurrentGet(&mdl);84 if (PRO_TK_NO_ERROR != err)85 86 return -1;87 88.专业 .整理 .下载可编辑89/获取当前模型名称并显示90 ProName name;91 err = ProMdlNameGet(mdl, name);92

15、MessageBoxW(NULL, name, L"wf5 test", MB_OK);9394 return 0;95 9697 / 测试命令 菜单权限函数98 / 任何情况下菜单都有效99 uiCmdAccessState TestAccess(uiCmdAccessMode access_mode)100 101 return ACCESS_AVAILABLE;102 /*103 ProError err;104 ProModemode;105106 err = ProModeCurrentGet(&mode);107 if (err != PRO_TK_NO

16、_ERROR)108 109 return ACCESS_UNAVAILABLE;110 111112 if (mode = PRO_MODE_PART113 | mode = PRO_MODE_ASSEMBLY)114 115 return ACCESS_AVAILABLE;116 117 else118 119 return ACCESS_UNAVAILABLE;120 121 */122 123124 /获取当前模型名称并显示菜单权限函数125 /只有在当前打开的模型为PART档 ,ASM档或 Drawing 档时菜单才有效126 uiCmdAccessState ShowCurrMod

17、elName_Access(uiCmdAccessMode access_mode)127 128 ProError err;129 ProModemode;130131 err = ProModeCurrentGet(&mode);132 if (PRO_TK_NO_ERROR != err).专业 .整理 .下载可编辑133 134 return ACCESS_UNAVAILABLE;135 136137 if (mode = PRO_MODE_PART| mode = PRO_MODE_ASSEMBLY| mode = PRO_MODE_DRAWING)140 141 retur

18、n ACCESS_AVAILABLE;142 143 elsereturn ACCESS_UNAVAILABLE;代码说明:1. user_initialize() 为 Pro/TOOLKIT 应用程序的入口函数,每个Pro/TOOLKIT程序在被 Pro/E 加载时,首先执行此函数。2. user_terminate() 是 Pro/TOOLKIT 程序被 Pro/E 卸载时执行的函数。3. ProMenubarMenuAdd为 Pro/TOOLKIT程序添加菜单。4. ProCmdActionAdd为 Pro/TOOLKIT程序添加一个命令, 一般在添加菜单项时会将命令和菜单项关联,这样在

19、单击菜单项时,就会执行对应的命令。5. ProMenubarmenuPushbuttonAdd为菜单添加菜单项。6. 以上代码添加了两个命令:test -直接弹出测试对话框。ShowCurrModelName - 获取当前模型的名称并显示。6 五、编译程序1. 选择需要编译 Win32 还是 x64 版本,以及 Debug还是 Release 版本。2. 单击【生成】 -> 【生成解决方案】即可编译生成 DLL 文件: test_wf5.dll 。注意:如果你的 VS2008没有安装 SP1补丁,编译 Debug版本时常会报错,即使编译成功, Pro/E 也无法加载生成的test_wf5

20、.dll。在编写信息文件前, 首先在工程文件夹下新建 Bin 文件夹,然后将第五步生成的 test_wf5.dll 拷贝到 Bin 文件夹下。.专业 .整理 .下载可编辑6.1 六、编写信息文件信息文件是用来定义 Pro/TOOLKIT 程序菜单及菜单项显示信息的文本文件。 其容以四行为一组,每行代表的意义如下 :? 菜单或菜单项的名称? 菜单或菜单项的英文显示? 菜单或菜单项的中文显示或其他语言版本的显示? #加载 Pro/TOOLKIT 程序时,会读取信息文件, 并根据菜单或菜单项的名称,匹配出菜单或菜单项的显示字符串。信息文件必须位于text目录下。操作步骤如下 :1. 首先在 Bin

21、文件夹下新建 text 文件夹。2. 然后在 text 文件夹下新建两个子文件夹: chinese_ 、usascii ,分别代表当 Pro/E 的语言版本为简体中文时,会读取 chinese_cn 文件夹下的信息文件。当 Pro/E 的语言版本为英文时,会读取 usascii 文件夹下的信息文件。3. 在 chinese_cn 文件夹下新建如下容的文本文件: Test_Msg.txt 。TestMenuTest测试菜单#Test1 TestMenu2 Test3 测试菜单4 #5 Test6 Test7 测试8 #9 Test_Help10 Just For Test.专业 .整理 .下载可

22、编辑11 测试12 #13 ShowCurrModelName14 ShowCurrModelName15 显示模型名称16 #17 ShowCurrModelName_Help18 Show Current Model Name19 显示模型名称20 #4.在 usascii文件夹下新建如下容的文本文件:Test_Msg.txt 。TestMenuTest#Test1 TestMenu2 Test3 #4 #5 Test6 Test7 #8 #9 Test_Help10 Just For Test11 #12 #13 ShowCurrModelName14 ShowCurrModelName

23、15 #16 #17 ShowCurrModelName_Help18 Show Current Model Name19 #20 #.专业 .整理 .下载可编辑6.2 七、编写注册文件注册文件包含 Pro/TOOLKIT 应用程序的路径, text 文件夹的路径等信息, Pro/E 通过注册文件中包含的信息,找到 Pro/TOOLKIT 程序并加载。在 Bin 文件夹下新建文本文件protk.dat,并输入如下容。nameTest_wf5startupdl lexec_file . Test_wf5. dl ltext_dir.r evisionWil dfi re1 nameTest_wf

24、52startupdll3exec_file.Test_wf5.dll4text_dir.5revisionWildfire6 allow_stop TRUE7 end含义如下:o name: Pro/TOOLKIT 应用程序标识名称ostartup: Pro/TOOLKIT 应用程序与Pro/E 的交互方式,一般为dllo exec_file : Pro/TOOLKIT 程序的路径,可以是绝对路径,也可以使相对路径o text_dir :text 文件夹路径o revision :版本oallow_stop:是否允许手动终止Pro/TOOLKIT 程序o end:结束标志6.3 八、自动加载

25、Pro/TOOLKI 程序在 Bin 文件夹下新建一批处理文件 GoProE.bat ,输入命令:call Pro/E 全路径 例如在我的电脑上输入以下命令即可:cal l "C:proeWi ldfire 5.biproe1. bat"1 call "C:PTCproeWildfire 5.0binproe1.bat".专业 .整理 .下载可编辑双击 GoProE.bat 运行,将会启动 Pro/E 并自动加载我们编写的 Pro/TOOLKIT程序。这是因为我们通过 GoProE.bat 来启动 Pro/E ,那么 Pro/E 的启动目录就为当前的 B

26、in 文件夹, Pro/E 启动时,会自动读取启动目录下,名为 protk.dat 的注册文件,来加载 Pro/TOOLKIT 程序。6.4 九、测试程序1. 单击【测试】菜单项,会弹出以下对话框。2. 新建一档案:零件档、组立档或工程图。单击【显示模型名称】菜单项,会弹出窗口,显示当前模型的名称。.专业 .整理 .下载可编辑6.5 十、手动加载Pro/TOOLKIT 程序我们也可以手动加载Pro/TOOLKIT 程序。在手动加载 Pro/TOOLKIT 程序之前,我们需要先修改之前创建的注册文件protk.dat。将 exec_dir和 text_dir指定的相对路径改为绝对路径,否则手动加

27、载时会由于找不到相对路径指定的文件而报错的。示例如下 :nameTest_wf5startupdl lexec_file D: WangYTest_wfBiTest_wf5. dl ltext_dirD: WangYTest_wfBir evisionWil dfi re1 nameTest_wf52startupdll3exec_fileD:WangYaoTest_wf5BinTest_wf5.dll4text_dirD:WangYaoTest_wf5Bin5revisionWildfire6 allow_stop TRUE7 end通过桌面上的快捷方式来启动Pro/E 。单击【工具】 -&

28、gt; 【辅助应用程序】1. 单击【注册】,在弹出的对话框中选择 Bin 文件夹下的 protk.dat 文件。2. 选中加载进来的 Pro/TOOLKIT 程序。3. 单击【启动】。这篇主要讲解第一篇中Pro/TOOLKIT代码的具体含义。Line 112包含 Pro/TOOLKIT 常用的头文件。.专业 .整理 .下载可编辑Line 1524函数声明。Line 2655user_initializeuser_initialize为 Pro/TOOLKIT程序的初始化函数,每个Pro/TOOLKIT程序( DLL)都必须定义该函数。一般在该函数中添加菜单和菜单项。Line 3032定义了宽字

29、符数组变量MsgFile 用于存储信息文件的名称:Test_Msg.txt 。ProFamilyName为宽字符( wchar_t )数组。ProStringToWstring函数将 char 字符串转换为 wchar_t 字符串。Line 35在 Pro/E 【帮助】菜单之后添加菜单【TestMenu】。ProError ProMenubarMenuAdd(ProMenuItemName menu_name,ProMenuItemLabel untranslated_menu_label,ProMenuItemName neighbor,1 ProError ProMenubarMenuAd

30、d(2 ProMenuItemName menu_name,3 ProMenuItemLabel untranslated_menu_label,4 ProMenuItemName neighbor,5 ProBoolean add_after_neighbor,6 ProFileName filename);? menu_name:菜单名称,必须唯一。? untranslated_menu_label :菜单文本,该文本用于匹配信息文件中的容。? neighbor :相邻的菜单名。 "Help" 为【帮助】菜单。? add_after_neighbor :是否位于相邻菜单

31、的右侧。 PRO_B_TRUE表明位于右侧,否则位于左侧。? filename :信息文件名。Line 3941.专业 .整理 .下载可编辑添加命令: Test 。ProError ProCmdActionAdd(char*action_name,uiCmdCmdActFnaction_cb,uiCmdPrioritypriority,1 ProError ProCmdActionAdd(2 char*action_name,3uiCmdCmdActFnaction_cb,4uiCmdPrioritypriority,5uiCmdAccessFnaccess_func,6ProBooleana

32、llow_in_non_active_window,7ProBooleanallow_in_accessory_window,8uiCmdCmdId*action_id);?action_name :命令名称,必须唯一。?action_cb :命令的响应函数。?priority:命令的优先级,一般为 uiCmdPrioDefault 。? access_func :命令的访问权限函数。该函数的返回值关系到和命令关联的菜单项的状态,具体如下:typedef enumACCESS_REMOVE = -1,/ 移除菜单项ACCESS_INVISIBLE,/ 菜单项不可见1 typedef enum2

33、3ACCESS_REMOVE = -1, /移除菜单项4ACCESS_INVISIBLE,/菜单项不可见5ACCESS_UNAVAILABLE, /菜单项灰化不可选6ACCESS_DISALLOW,/菜单项不可选7ACCESS_AVAILABLE/菜单项可选8 uiCmdAccessState;? allow_in_non_active_window :是否在非激活窗口中显示命令关联的菜单项,一般为 PRO_B_FALSE。? allow_in_accessory_window :是否在附属窗口中显示命令关联的菜单项,一般为 PRO_B_FALSE。? action_id :命令 ID 。Line 4243.专业 .整理 .下载可编辑添加菜单按钮: Test 。ProError ProMenubarmenuPushbutonAdd(ProMenuItemNameparent_menu,ProMenuItemNamepush_button_name,

温馨提示

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

评论

0/150

提交评论