Proe应用ProTOOLKIT二次开发.docx

上传人:b****4 文档编号:5076152 上传时间:2023-05-08 格式:DOCX 页数:25 大小:901.62KB
下载 相关 举报
Proe应用ProTOOLKIT二次开发.docx_第1页
第1页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第2页
第2页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第3页
第3页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第4页
第4页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第5页
第5页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第6页
第6页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第7页
第7页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第8页
第8页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第9页
第9页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第10页
第10页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第11页
第11页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第12页
第12页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第13页
第13页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第14页
第14页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第15页
第15页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第16页
第16页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第17页
第17页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第18页
第18页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第19页
第19页 / 共25页
Proe应用ProTOOLKIT二次开发.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Proe应用ProTOOLKIT二次开发.docx

《Proe应用ProTOOLKIT二次开发.docx》由会员分享,可在线阅读,更多相关《Proe应用ProTOOLKIT二次开发.docx(25页珍藏版)》请在冰点文库上搜索。

Proe应用ProTOOLKIT二次开发.docx

Proe应用ProTOOLKIT二次开发

手把手教你开发Pro/TOOLKIT应用程序

1前言

本教程采用VS2008+Pro/EWildfire5.0来讲解怎样开发Pro/TOOLKIT应用程序。

开发Pro/TOOLKIT应用程序时,Pro/E和VisualStudio的版本需对应,否则很难搭建开发环境,其对应关系如下:

∙Wildfire4.0<>VS2008

∙Wildfire5.0<>VS2008

∙Creo1.0<>VS2010

∙Creo2.0<>VS2010

本教程所述的方法完全适用于Wildfire4.0+VS2008、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.VS2008

VS2008中文版下载地址:

最好安装下VS2008SP1补丁,否则编译Debug版本时常会报错。

VS2008SP1中文版下载地址:

如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64CompilersandTools,如下图所示:

3二、新建工程

点击【文件】->【新建】->【项目】菜单命令,创建MFCDLL工程。

输入工程名称:

test_wf5。

单击【确定】,然后在弹出的对话框中单击【下一步>】

DLL类型:

使用共享MFCDLL

单击【完成】完成创建工程。

4三、配置工程属性

1.新增64位编译平台

注意:

如果只编译32位程序,请跳过此步骤。

单击【生成】->【配置管理器】菜单命令,然后依照下图操作。

如果没有x64选项,那说明安装VS2008时,没有安装X64CompilersandTools,重新安装此选项即可。

2.新增头文件路径

单击【项目】->【属性】菜单命令,添加如下头文件路径。

【Pro/E安装目录】\prodevelop\includes

【Pro/E安装目录】\protoolkit\includes

注意:

请先选择平台是Win32还是x64。

3.新增库文件路径

32位:

【Pro/E安装目录】\prodevelop\i486_nt\obj

【Pro/E安装目录】\protoolkit\i486_nt\obj

64位:

【Pro/E安装目录】\prodevelop\x86e_win64\obj

【Pro/E安装目录】\protoolkit\x86e_win64\obj

4.添加附加依赖项

mpr.lib

wsock32.lib

psapi.lib

protk_dllmd.lib

prodev_dllmd.lib

netapi32.lib

5.设置工程字符集

推荐优先采用Unicode。

5四、添加Pro/TOOLKIT代码

在test_wf5.cpp文件的最后添加以下Pro/TOOLKIT代码。

该段代码的功能是:

在Pro/E的【帮助】菜单后新增一个菜单【TestMenu】,然后在【TestMenu】下新增两个菜单项【Test】和【ShowCurrModelName】。

分别实现弹出测试对话框和获取当前模型的名称并弹窗显示。

注意:

先只要大体理解代码的整体思路即可,本教程会在第三篇:

手把手教你开发Pro/TOOLKIT应用程序(三)中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第三篇会比较好。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

//包含常用头文件

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

//函数声明

uiCmdAccessStateTestAccess(uiCmdAccessModeaccess_mode);

uiCmdAccessStateShowCurrModelName_Access(uiCmdAccessModeaccess_mode);

 

intTest(uiCmdCmdId  command,

uiCmdValue*p_value,

void      *p_push_command_data);

intShowCurrModelName(uiCmdCmdId  command,

  uiCmdValue*p_value,

  void      *p_push_command_data);

 

//Pro/TOOLKIT入口函数

extern"C"intuser_initialize()

{

ProErrorerr;

 

//信息文件名称

ProFamilyNameMsgFile;

ProStringToWstring(MsgFile,"Test_Msg.txt");

 

//添加菜单:

TestMenu

err=ProMenubarMenuAdd("TestMenu","TestMenu","Help",PRO_B_TRUE,MsgFile);

 

//添加命令和菜单项

//测试命令

uiCmdCmdIdcmd_id1;

err=ProCmdActionAdd("Test",Test,uiCmdPrioDefault,TestAccess,

PRO_B_FALSE,PRO_B_FALSE,&cmd_id1);

err=ProMenubarmenuPushbuttonAdd("TestMenu","Test","Test","Test_Help",

NULL,PRO_B_TRUE,cmd_id1,MsgFile);

 

//显示并输出当前模型的名称

uiCmdCmdIdcmd_id2;

err=ProCmdActionAdd("ShowCurrModelName",ShowCurrModelName,uiCmdPrioDefault,

ShowCurrModelName_Access,

PRO_B_FALSE,PRO_B_FALSE,&cmd_id2);

err=ProMenubarmenuPushbuttonAdd("TestMenu","ShowCurrModelName","ShowCurrModelName",

"ShowCurrModelName_Help",NULL,PRO_B_TRUE,cmd_id2,MsgFile);

 

return0;

}

 

//Pro/TOOLKIT结束时调用的函数

extern"C"voiduser_terminate()

{    

}

 

//测试命令响应函数

intTest(uiCmdCmdId  command,

uiCmdValue*p_value,

void      *p_push_command_data)

{

AfxMessageBox(_T("JustForTest"));

return0;

}

 

//命令:

获取当前模型的名称并显示

intShowCurrModelName(uiCmdCmdId  command,

  uiCmdValue*p_value,

  void      *p_push_command_data)

{

ProErrorerr;

 

//获取当前模型

ProMdlmdl;

err=ProMdlCurrentGet(&mdl);

if(PRO_TK_NO_ERROR!

=err)

{

return-1;

}

 

//获取当前模型名称并显示

ProNamename;

err=ProMdlNameGet(mdl,name);

MessageBoxW(NULL,name,L"wf5test",MB_OK);

 

return0;

}

 

//测试命令菜单权限函数

//任何情况下菜单都有效

uiCmdAccessStateTestAccess(uiCmdAccessModeaccess_mode)

{

returnACCESS_AVAILABLE;

/*

ProErrorerr;

ProMode  mode;

 

err=ProModeCurrentGet(&mode);

if(err!

=PRO_TK_NO_ERROR)

{

returnACCESS_UNAVAILABLE;

}

 

if(mode==PRO_MODE_PART

||mode==PRO_MODE_ASSEMBLY)

{

returnACCESS_AVAILABLE;

}

else

{

returnACCESS_UNAVAILABLE;

}

*/

}

 

//获取当前模型名称并显示菜单权限函数

//只有在当前打开的模型为PART档,ASM档或Drawing档时菜单才有效

uiCmdAccessStateShowCurrModelName_Access(uiCmdAccessModeaccess_mode)

{

ProErrorerr;

ProMode  mode;

 

err=ProModeCurrentGet(&mode);

if(PRO_TK_NO_ERROR!

=err)

{

returnACCESS_UNAVAILABLE;

}

 

if(mode==PRO_MODE_PART

||mode==PRO_MODE_ASSEMBLY

||mode==PRO_MODE_DRAWING)

{

returnACCESS_AVAILABLE;

}

else

{

returnACCESS_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程序添加一个命令,一般在添加菜单项时会将命令和菜单项关联,这样在单击菜单项时,就会执行对应的命令。

5.ProMenubarmenuPushbuttonAdd为菜单添加菜单项。

6.以上代码添加了两个命令:

test---直接弹出测试对话框。

ShowCurrModelName---获取当前模型的名称并显示。

6五、编译程序

1.选择需要编译Win32还是x64版本,以及Debug还是Release版本。

2.单击【生成】->【生成解决方案】即可编译生成DLL文件:

test_wf5.dll。

注意:

如果你的VS2008没有安装SP1补丁,编译Debug版本时常会报错,即使编译成功,Pro/E也无法加载生成的test_wf5.dll。

在编写信息文件前,首先在工程文件夹下新建Bin文件夹,然后将第五步生成的test_wf5.dll拷贝到Bin文件夹下。

 

6.1六、编写信息文件

信息文件是用来定义Pro/TOOLKIT程序菜单及菜单项显示信息的文本文件。

其内容以四行为一组,每行代表的意义如下:

∙菜单或菜单项的名称

∙菜单或菜单项的英文显示

∙菜单或菜单项的中文显示或其他语言版本的显示

∙#

加载Pro/TOOLKIT程序时,会读取信息文件,并根据菜单或菜单项的名称,匹配出菜单或菜单项的显示字符串。

信息文件必须位于text目录下。

操作步骤如下:

1.首先在Bin文件夹下新建text文件夹。

2.然后在text文件夹下新建两个子文件夹:

chinese_cn、usascii,分别代表当Pro/E的语言版本为简体中文时,会读取chinese_cn文件夹下的信息文件。

当Pro/E的语言版本为英文时,会读取usascii文件夹下的信息文件。

3.在chinese_cn文件夹下新建如下内容的文本文件:

Test_Msg.txt。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

TestMenu

Test

测试菜单

#

Test

Test

测试

#

Test_Help

JustForTest

测试

#

ShowCurrModelName

ShowCurrModelName

显示模型名称

#

ShowCurrModelName_Help

ShowCurrentModelName

显示模型名称

#

4.在usascii文件夹下新建如下内容的文本文件:

Test_Msg.txt。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

TestMenu

Test

#

#

Test

Test

#

#

Test_Help

JustForTest

#

#

ShowCurrModelName

ShowCurrModelName

#

#

ShowCurrModelName_Help

ShowCurrentModelName

#

#

6.2七、编写注册文件

注册文件包含Pro/TOOLKIT应用程序的路径,text文件夹的路径等信息,Pro/E通过注册文件中包含的信息,找到Pro/TOOLKIT程序并加载。

在Bin文件夹下新建文本文件protk.dat,并输入如下内容。

1

2

3

4

5

6

7

name      Test_wf5

startup    dll

exec_file  .\Test_wf5.dll

text_dir  .\

revision  Wildfire

allow_stopTRUE

end

含义如下:

oname:

Pro/TOOLKIT应用程序标识名称

ostartup:

Pro/TOOLKIT应用程序与Pro/E的交互方式,一般为dll

oexec_file:

Pro/TOOLKIT程序的路径,可以是绝对路径,也可以使相对路径

otext_dir:

text文件夹路径

orevision:

版本

oallow_stop:

是否允许手动终止Pro/TOOLKIT程序

oend:

结束标志

6.3八、自动加载Pro/TOOLKI程序

在Bin文件夹下新建一批处理文件GoProE.bat,输入命令:

call[Pro/E全路径]

例如在我的电脑上输入以下命令即可:

1

call"C:

\PTC\proeWildfire5.0\bin\proe1.bat"

双击GoProE.bat运行,将会启动Pro/E并自动加载我们编写的Pro/TOOLKIT程序。

这是因为我们通过GoProE.bat来启动Pro/E,那么Pro/E的启动目录就为当前的Bin文件夹,Pro/E启动时,会自动读取启动目录下,名为protk.dat的注册文件,来加载Pro/TOOLKIT程序。

6.4九、测试程序

1.单击【测试】菜单项,会弹出以下对话框。

2.新建一档案:

零件档、组立档或工程图。

单击【显示模型名称】菜单项,会弹出窗口,显示当前模型的名称。

6.5十、手动加载Pro/TOOLKIT程序

我们也可以手动加载Pro/TOOLKIT程序。

在手动加载Pro/TOOLKIT程序之前,我们需要先修改之前创建的注册文件protk.dat。

将exec_dir和text_dir指定的相对路径改为绝对路径,否则手动加载时会由于找不到相对路径指定的文件而报错的。

示例如下:

1

2

3

4

5

6

7

name      Test_wf5

startup    dll

exec_file  D:

\WangYao\Test_wf5\Bin\Test_wf5.dll

text_dir  D:

\WangYao\Test_wf5\Bin\

revision  Wildfire

allow_stopTRUE

end

通过桌面上的快捷方式来启动Pro/E。

单击【工具】->【辅助应用程序】

1.单击【注册】,在弹出的对话框中选择Bin文件夹下的protk.dat文件。

2.选中加载进来的Pro/TOOLKIT程序。

3.单击【启动】。

这篇主要讲解第一篇中Pro/TOOLKIT代码的具体含义。

Line1~12

包含Pro/TOOLKIT常用的头文件。

Line15~24

函数声明。

Line26~55 user_initialize

user_initialize为Pro/TOOLKIT程序的初始化函数,每个Pro/TOOLKIT程序(DLL)都必须定义该函数。

一般在该函数中添加菜单和菜单项。

Line30~32

定义了宽字符数组变量MsgFile用于存储信息文件的名称:

Test_Msg.txt。

ProFamilyName为宽字符(wchar_t)数组。

ProStringToWstring函数将char字符串转换为wchar_t字符串。

Line35

在Pro/E【帮助】菜单之后添加菜单【TestMenu】。

1

2

3

4

5

6

ProErrorProMenubarMenuAdd(

ProMenuItemNamemenu_name,

ProMenuItemLabeluntranslated_menu_label,

ProMenuItemNameneighbor,

ProBooleanadd_after_neighbor,

ProFileNamefilename);

∙menu_name:

菜单名称,必须唯一。

∙untranslated_menu_label:

菜单文本,该文本用于匹配信息文件中的内容。

∙neighbor:

相邻的菜单名。

"Help"为【帮助】菜单。

∙add_after_neighbor:

是否位于相邻菜单的右侧。

PRO_B_TRUE表明位于右侧,否则位于左侧。

∙filename:

信息文件名。

Line39~41

添加命令:

Test。

1

2

3

4

5

6

7

8

ProErrorProCmdActionAdd(

char            *action_name,

    uiCmdCmdActFn    action_cb,

    uiCmdPriority    priority,

    uiCmdAccessFn    access_func,

    ProBoolean        allow_in_non_active_window,

    ProBoolean        allow_in_accessory_window,

    uiCmdCmdId      *action_id);

∙action_name:

命令名称,必须唯一。

∙action_cb:

命令的响应函数。

∙priority:

命令的优先级,一般为uiCmdPrioDefault。

∙access_func:

命令的访问权限函数。

该函数的返回值关系到和命令关联的菜单项的状态,具体如下:

1

2

3

4

5

6

7

8

typedefenum

{

    ACCESS_REMOVE=-1,  //移除菜单项

    ACCESS_INVISIBLE,    //菜单项不可见

    ACCESS_UNAVAILABLE,  //菜单项灰化不可选

    ACCESS_DISALLOW,    //菜单项不可选

    ACCESS_AVAILABLE    //菜单项可选

}uiCmdAccessState;

∙allow_in_non_active_window:

是否在非激活窗口中显示命令关联的菜单项,一般为PRO_B_FALSE。

∙allow_in_accessory_window:

是否在附属窗口中显示命令关联的菜单项,一般为PRO_B_FALSE。

∙action_id:

命令ID。

Line42~43

添加菜单按钮:

Test。

1

2

3

4

5

6

7

8

9

ProErrorProMenubarmenuPushbuttonAdd(

ProMenuItemName        parent_menu,

    ProMenuItemName

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2