PROE二次开发
- 格式:pdf
- 大小:218.41 KB
- 文档页数:9
proe二次开发教程——手把手教你如何二次开发经历了千辛万苦才把图片截取完整,现在就把它贴出来吧……本实例是针对proe4.0在VS2005环境下的开发,对于vs2003以上版本的开发本例均适用,本例从开始的打开vs2005软件开始讲解,一步不漏,并加入适当的解释和必要的说明,相信照着做完之后应该没有不成功的了!注:软件安装注意事项:proe的安装目录不能有空格,比如:“D:\Program Files\proeWildfire4.0”是不对的,运行的时候会出错,要把路径中的空格去掉,如“D:\proeWildfire4.0”一、配置相关信息:打开VS2005,选择工具——》选项,在“项目和解决方案”中选择“VC++目录”,在“显示一下内容的目录”中选择“包含文件”,加入以下文件:D:\proeWildfire4.0\protoolkit\includesD:\proeWildfire4.0\protoolkit\protk_appls\includesD:\proeWildfire4.0\prodevelop\includes在“显示一下内容的目录”中选择“库文件”,加入以下文件:D:\proeWildfire4.0\protoolkit\i486_nt\objD:\proeWildfire4.0\prodevelop\i486_nt\obj注:这是开始前的环境配置,一次配置之后永久生效,以后再新建项目就不需要再配置了二、新建项目,进行项目设置:文件——》新建——》项目:选择MFC DLL 模板,输入项目名称:确定后点完成,项目生成后选择项目——》属性,进行属性设置:在test(本例的项目名称)属性页中选择配置属性——》连接器——》输入,在附加依赖项里加入:wsock32.libmpr.libpsapi.libprotk_dllmd.lib注:对于不同的环境附加依赖项是不同的,以上是VS2005版本的开发软件附加依赖项,如果是VC++6.0则是“protk_dll.lib protoolkit.lib mpr.lib wsock32.lib ”,同时还要加入忽略库“msvcrt.lib”,还要选择“强制输出”,否则程序会因为一些警告终止编译。
PRO/E 5.0环境下使用vs2008进行二次开发1、环境设置(只需第一次设置)1)进入工具/选项对话框,包含文件:○1./prodevelop/include; ○2./protoolkit/include2)库文件:○1./protoolkit/i486_nt/obj; ○2./prodevelop/i486_nt/obj2、新建MFC DLL工程(采用默认动态链接烈类型)3、设置项目属性1)进入项目/属性对话框(ALT+F7),选择配置管理器,将Active版本类型改为Release。
2)选择配置属性/链接器/输入,在附加依赖项一栏输入:wsock32.lib mpr.lib protk_dll.lib prodev_dll.lib psapi.lib netapi32.lib3)在忽略特定库一项输入mvcrt.lib1)添加头文件#include"ProMenu.h"#include"ProUtil.h"#include"ProMenubar.h"2)添加初始化函数extern"C"int user_initialize() {ProError status;// 用户接口程序return status;}extern"C"void user_terminate() {// 结束代码}// 定义菜单的可访问性设置函数static uiCmdAccessState UserAccessDefault(uiCmdAccessMode access_mode) {return(ACCESS_AVAILABLE);}int MsgBox() // 定义菜单按钮相应函数{AfxMessageBox(_T("My first Pro/E redeveloping"));return 0;}extern"C"int user_initialize(){ProError status;uiCmdCmdId cmd_idl;ProFileName mfName;ProStringToWstring(mfName, "Msg.txt");// 添加菜单status = ProMenubarMenuAdd("CHECK", "CHECK", "Utilities",PRO_B_TRUE, mfName);// 添加菜单动作status = ProCmdActionAdd("ShowTest1", (uiCmdCmdActFn)MsgBox,uiCmdPrioDefault,UserAccessDefault,PRO_B_TRUE, PRO_B_TRUE, &cmd_idl);// 添加菜单按钮status = ProMenubarmenuPushbuttonAdd("CHECK", "MSGBOX", "PathMsg",NULL, NULL,PRO_B_TRUE, cmd_idl, mfName);return status;}4)关键函数wchar_t* ProStringToWstring ( wchar_t*wstr, char*str );// 把char*类型转换为wchar_t*ProError ProMenubarMenuAdd (ProMenuItemName menu_name,ProMenuItemLabel untranslated_menu_label,ProMenuItemName neighbor,ProBoolean add_after_neighbor,ProFileName filename )ProError ProCmdActionAdd (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 );ProError ProMenubarmenuPushbuttonAdd (ProMenuItemName parent_menu,ProMenuItemName push_button_name,ProMenuItemLabel push_button_label,ProMenuLineHelp one_line_help,ProMenuItemName neighbor,ProBoolean add_after_neighbor,uiCmdCmdId action_id,ProFileName filename );static uiCmdAccessState UserAccessDefault(uiCmdAccessMode access_mode) {return(ACCESS_AVAILABLE);// ACCESS_REMOVE 移除菜单项// ACCESS_INVISIBLE 不可见// ACCESS_UNAVALIABLE 可见,变灰不可选// ACCESS_DISALLOW 不可选// ACCESS_AVAILABLE 可选}5)编写信息文件格式第1行:关键字(必须与使用该信息文件函数的相关字符串相同)第2行:菜单显示英文文本第3行:中文文本第4行:为空(用#表示,必须在英文输入法下输入)6)编写注册文件格式:NAME 应用程序标识名EXEC_FILE 可执行程序名(包括路径)TEXT_DIR Text目录路径STARTUP 启动应用模式ALLOW_UP 是否允许在PROE工作时终止应用程序DELAY_START 是否延迟调用应用程序REVISION Pro/TOOLKIT版本号END 结束标志(每次修改后请重启PROE)。
32位系统preo5.0二次开发测试及环境配置首先,proe5.0是配合VC++2008来进行二次开发的,因此首先得安装VS2008,其次,要确保proe5.0中已经安装了protoolkit,安装方法略。
如何测试Pro/Toolkit 安装成功第一步,找到proe安装目录下的protooltik文件夹,并找到..\protoolkit\i486_nt\obj 这个路径下的一个叫做make_install的文件,用写字板打开,找到如下# Pro/Toolkit Source & Machine Loadpoint (EXTERNAL USE - DEFAULT)这么一行字,然后把它下面的PROTOOL_SRC=../攻成PROTOOL_SRC = ...\PTC\protoolkit,保存下关闭就好了。
第二步,在"开始"中找到Microsoft Visuall Studio Tools Visual Studio Tools Visual StudioTools2008命令提示符,打开。
第三步,在打开的这个界面里面敲下如下字符cd ...\PTC\protoolkit\i486_nt\obj ,然后回车,再敲上如下字符:nmake /f make_install dll ,然后再回车,等其运行完毕,关掉命令提示符,然后再回到...\PTC\protoolkit\i486_nt\obj 文件夹中,会发现多了一个pt_inst_test.dll文件,证明前面的工作全是成功的。
第四步,回到...\PTC\protoolkit文件夹,找到protk.dat文件,用写字板打开,将第二行和第三行前面的"."改成路径...\PTC\protoolkit,将第五行后面的"18”改成"wildfire5.0 ”, 其他保持不变,保存,关闭。
第五步,启动proe5.0,找到工具辅助应用程序,打开,点"注册",找到...\PTC\protoolkit , 里的protk.dat ,打开,选中,点"启动",发现左上角出现"pt_inst_test.dll '启动成功"。
一、基于Pro/TOOLKIT的二次开发Pro/TOOLKIT是Pro/ENGINEER软件功能强大的二次开发工具,也称为应用程序接口。
它封装了许多针对Pro/ENGINEER底层资源调用的库函数与头文件,能够使外部应用程序安全有效地访问Pro/E的数据库和应用程序,通过C语言编程及应用程序与Pro/E的无缝集成,客户和第三方能够在Pro/E系统中添加所需的功能。
Pro/ENGINEER 为应用程序提供两种工作模式:同步模式(Synchronous Mode)和异步模式(Asyn—chronous Mode),由于后者使用复杂而很少使用。
同步模式又分为Spawn(多进程模式)和dll(动态连接库模式)。
动态连接库是将Pro/TOOLKIT应用程序集成到Pro/ENGINEER中的标准方法。
在该模式下,Pro/TOOLKIT应用程序和Pro/ENGINEER的信息交换是通过直接函数调用实现的。
使用Pro/TOOLKIT开发应用程序包含3个基本步骤:编写源文件(包括资源文件和程序源文件),生成可执行文件,可执行文件在Pro/ENGINEER中注册并运行。
二、基于J—Link的二次开发Java 是一种面向对象的、多线程的与操作系统平台无关的编程语言,它功能强大,表达能力强。
Java是从C++发展而来的,语法比C++更简单,减轻了编程人员的负担。
J—Link是由PTC公司提供的基于Java的二次开发程序接口,它是Pro/E自带的一个开发工具包,通过这个程序可以开发出一个可以获取Pro/E进程中内部资源的程序。
J—Link也提供了丰富的库函数,可以实现Pro/E系统的大部分功能。
J—Link开发过程类似于Pro/TOOLKIT的开发过程,首先在开发前设置好Java和J—Link 开发的环境变量,选定采用同步模式还是异步模式,一般采用同步模式,然后进行源代码编写和程序的编译。
任何J—Link程序在操纵Pro/E数据之前,必须要先获取一个当前Pro /E进程对象的句柄。
Pro/Toolkit入门简介一、ProE客制化开发工具ProE的二次开发工具主要有以下四种(1)Pro/Toolkit基于C/C++语言的二次开发工具包,功能最强大,但学习的难度也最大。
(2)Pro/J-Link基于Java语言的二次开发工具包。
(3)Pro/WebLink基于javascript语言的二次开发工具包,通过编写基于javascript的Web程序,使用户能通过内嵌在ProE中的网页和ProE进行交互操作。
(4)Pro/VB基于Visual Basic语言的二次开发工具包。
Pro/Toolkit与其他二次开发工具包最大的区别在于提供了创建特征的能力,而其他3种工具包则只能创建UDF特征。
但Pro/Toolkit也不是万能的,它能大概实现ProE 80%的功能,而Pro/J-Link&Pro/WebLink&Pro/VB只能实现Pro/Toolkit 60%的功能。
还有一点关系到开发者的切身利益,Pro/J-Link&Pro/WebLink&Pro/VB 是完全免费的,而开发Pro/Toolkit程序需要从PTC公司购买Pro/Toolkit License。
(从网络论坛上得知,2006年的时候,一个Pro/Toolkit License大概需要2万美金。
)二、Pro/Toolkit介绍。
Pro/Toolkit是PTC公司为Pro/E提供的客制化开发包。
它使用户和第三方使用者有能力通过编写C语言程式扩展ProE的功能并无缝集成到ProE中。
Pro/Toolkit提供了大量的C函数库以供外部程式安全地控制和访问ProE。
Pro/Toolkit是ProE客制化开发的首选开发工具。
三、Pro/Toolkit风格Pro/Toolkit采用面向对象的编程风格。
Toolkit应用程序与ProE程序之间传递信息的数据结构,对应用程序而言,并不是直观可见的。
这些数据只能通过Pro/Toolkit函数访问处理。
1.问题:
Example2_1项目未能在Creo2.0软件的辅助应用程序中打开
2.尝试方法:
1.阅读API中内容,查找API中解锁相关内容
2.对比在proe5.0上搭建好的功能,解锁proe5.0的Example2_1.dll文件,希望通过解锁其dll 文件来移植到creo新的环境中。
3.发现未解锁原因为提供者问题,重新新建项目,将之低版本文件一个个复制进去。
4.重新下载creo2.0版本软件(觉得有可能是creo安装包的问题)
5.重新配置vs2010的环境
6.百度:
7.询问qq群:
群里开发人员认为缺少高级授权,认为这个无法解决。
3.存在问题
1.解锁结果:需要高级的选项(TOOLKIT-3D_Drawings),这部分盗版creo
2.0安装中
均无此模块;
2.Proe5.0通过cmd 运行protk_unlock.dat解锁Example2_1.dll同样出现Unlocking application requires option Creo Parametric TOOLKIT-3D_Drawings的问题;
3. 重新建立项目还是失败。
项目是本人创建,但未解锁原因一直显示联系提供者。
4.其他方案均未能解决。
Pro/e(野火版)二次开发之MTool功能应用一.MTool的安装以及Pro/e中文的转换1.MTool的安装把“M:\mtool安装文件”里面的6个文件复制到“C:\Windows(或Winnt)\system32”下;2.Pro/e中文转换安装(更新安装)如已安装则不需要执行该步。
步骤如下:a.找到:“C:\Program Files\proeWildfire 2.0\bin\ptcsetup.bat”文件并双击,出现以下的界面并连续点击4次“下一个”(或next)按钮,如下图所示:b.把“Pro/ENGINEER”进行“编辑”:c.找到“Chinese_Translation”并添加到右边的“启动扩展名及浮动许可证”栏:d.安装完成后,确认退出即可。
3.系统语言中文显示设置“我的电脑”→“属性”(右键点击下拉菜单)→“高级”→“环境变量(N)”→“新建”变量名和变量值:二.文件的Update打开M:盘,找到“”文件并拷贝到桌面,双击后弹出如下对话框:完成以上步骤后会发现在D盘下多了“tmpl”和“Edm”文件夹。
三.当M盘已连上,这时打开PRO/E(野火版),你会发现菜单栏中多了一个MTOOL下拉菜单,里面有很多实用的功能,如下图所示:这时表示MTOOL安装成功。
四.MTOOL功能的介绍✧重命名装配通常在确定模胚规格后,应将总装配、模胚装配、模胚装配中的所有零件名的“MOLD”改为实际模号。
步骤:1.把总装配以及和总装配所对应的图纸、bom表打开再返回总装配;2.点击下拉菜单“MTool”→“重命名装配”,弹出如下对话框,将“MOLD”改为实际模号;3.点击“修改”按钮,系统即可将各装配以及装配中所有零件名全改为实际模号,并自动存盘。
注意:1.总装配所对应的图纸以及bom表在改好实际模号后再单独改名,点击图标改名后保存关闭即可。
2.用全3D设计的模,如果遇到有一部份零件名没有修改成功,要先把文件备份一份,但是图纸和bom表不能备份出来,要自行拷贝到备份的文件里,然后打开备份的装配改名。
Pro/E二次开发Pro/E在提供强大的设计、分析、制造功能的同时,也为用户提供了多种二次开发工具。
常用的二次开发工具有:族表(Family Table)、用户自定义特征(UDF)、 Pro/PROGRAM、J—Link和 Pro/TOOLKIT等。
(1)族表 (Family Table)。
族表是一个用表格来驱动模型的工具,通过族表可以方便地管理具有相同或相近结构的零件,特别适用于标准零件的管理。
族表可以将事先定义好的模型(称为“GENERIC”的零件)中可供驱动的尺寸参数、特征、模型参数等放入表格中,通在表格中输入参数值就可创建一个新的零件(称为“INSTANCE”的零件)。
族表的产生过程是,首先建立一个具有代表性的零件,此零件称为通用零件或原始零件 (GENERCI RART)。
然后,根据可变情况编辑族表项目,可变项目可以是:尺寸(Dimension)、参数 (Parameter)、特征(Featrue)、与组件(Component)等。
完成族表内容后,需进行校验,然后系统会自动一一再生,从而生成若干子零件(Instance Part)。
(2)用户定义特征(UDF)。
用户定义特征是将若干个系统特征融合为一个自定义特征,使用时作为一个整体出现。
UDF适用特定产品中的特定结构,有利于设计者根据产品特征快速生成几何模型。
(3)Pro/PROGRAM应用简单易操作,但主要用于开发简单的控制程序,实现一些简单的功能,无法实现与Pro/E集成,无法与外部数据库相连,不适合于开发大型的CAD系统,只可用于开发一些简单的具有高度重复性的零件。
(4)J—Link是对Pro/E进行封装,功能上与Pro/TOOLKIT相近,能完成较复杂的程序的开发,但相比较于Pro/TOOLKIT,有些功能目前还没有实现,还有待于以后的继续发展。
( 5)Pro/TOOLKIT是美国PTC公司为Pro/E软件提供的开发工具包,其主要目的是让用户或第三方通过C程序代码扩充Pro/E的系统功能,开发基于Pro/E系统的应用程序模块,从而满足用户的特殊要求。
ProE二次开发教程Pro/ENGINEER Wildfire4.0 &Microsoft Visual Studio 2005 实现二次开发首个测试作者:无维网TomLee今天终于有时间玩一玩,Microsoft Visual Studio 2005还不熟悉,还要继续摸索: 下面我把我的测试成功的例子做个教程,希望对需要配置新环境进行开发的朋友有所帮助!新建项目新建MFC DLL默认下一步默认完成新建开始创建程序代码代码部分的解释如下:extern "C" int user_initialize(int argc, /** Number of arguments **/char *argv[], /** Pro/E arguments **/ char *proe_vsn, /** Pro/E version **/ char *build, /** Pro/E build **/ wchar_t err_buff[]) /** Error buffer **/ {ProName msgFileName;ProStringToWstring(msgFileName,"message.txt");ProMessageDisplay(msgFileName, "USER Welcome you!");return 0;}extern "C" void user_terminate(){return;}这里我只使用了一个ProMessageDisplay函数来做信息显示功能的测试,本教程的主要目的在于配置编译环境,所以未设置任何功能,甚至菜单都没加:lol包含文件的设置(include)库文件(lib)项目设置,附加的库wsock32.libmpr.libpsapi.libprotk_dllmd.lib(此处接见湃睿技术社区byan的设置)项目设置,预处理器定义添加:PRO_USE_VAR_ARGS,这个是使用ProMessageDisplay函数的需要不管选择Win32 Release 还是Win32 Debug设置都相同,但是不知道什么原因,编译时很多警告,同时我编译成功的Debug 下面的dll不能用,只能用Release,原因不明,欢迎讨论编译警告信息如下:------ 已启动生成: 项目: ProMessageDisplay, 配置: Release Win32 ------正在编译...stdafx.cpp正在编译...ProMessageDisplay.cpp正在编译资源...正在链接...正在创建库c:\toolkit_test\ProMessageDisplay\Release\ProMessageDisplay.lib 和对象c:\toolkit_test\ProMessageDisplay\Release\ProMessageDisplay.exp正在生成代码已完成代码的生成protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfprintfprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vwprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfwprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vswprintfprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_vswprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsnprintfprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsnprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vwscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vswscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToWideprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToWideprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToEucprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToEucprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToNativeprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToNativeprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToWideprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToEucprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToNativeprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToNativeprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrWideToUtf16protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrWideToUtf16protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrWideToUtf8protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrEucToUtf16protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrEucToUtf8protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrNativeToUtf16protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrNativeToUtf8protk_dllmd.lib(cu_dll_tools.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(cttime.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号protk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(cu_appid.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctmemmgr.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenv protk_dllmd.lib(cu_appid.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(cttime.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(frgnalt3.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctmemmgr.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintf protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_u16tou8protk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctwcfun_mt.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_u8tou16protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToUtf8protk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToUtf8protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToUtf16protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalphaprotk_dllmd.lib(ctwcfun_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalphaprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalphaprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswasciiprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswasciiprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctstrutil_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_wctombprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fgetcprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_mbtowcprotk_dllmd.lib(ctwcfun_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_mbtowcprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fgetwsprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stdinprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToUtf16Allocprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToUtf16Allocprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fputsprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_pro_vsnprintf_low_legacyprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_pro_vsnprintf_lowprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fgetsprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_scanf_stream_lowprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_putenvprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_putenvprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalnumprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalnumprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswrtolprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btkGetMemprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_spawnvpprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_systemprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_wcstombsprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_mbstowcsprotk_dllmd.lib(ctsigutil_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctsigutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_removeprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_openprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_openprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_open protk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_strncasecmpprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_strncasecmpprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_getdcwdprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_Disposeprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkLangEucEncodingprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkLangGetCurrentprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkLangNativeEncodingprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_Createprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUtfTypeFromBOMprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUtfTypeToBOM_btkUConv_ToPivotWithOffsetsprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_CountPendingToPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_Resetprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_FromPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_CountPendingFromPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_TranscodeExprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_ToPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_sscanf protk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_sscanfprotk_dllmd.lib(cttime.obj) : warning LNK4049: 已导入本地定义的符号_btk_sscanfprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_execvprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stdoutprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_fflushprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_strlwrprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_fullpathprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_getcwdprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_getcwdprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_statprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_stat protk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_stat protk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_accessprotk_dllmd.lib(frgnalt3.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeDisableprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_chdir protk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_mkdirprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_rmdirprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_rmdir protk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_unlinkprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_unlink protk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_utimeprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_utimeprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_tempnamprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_fopen protk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_rename正在嵌入清单...生成日志保存在“file://c:\toolkit_test\ProMessageDisplay\ProMessageDisplay\Release\BuildLog.htm”ProMessageDisplay - 0 个错误,159 个警告========== 生成: 1 已成功, 0 已失败, 0 最新, 0 已跳过==========创建测试目录创建测试快捷启动启动验证中文英文测试数据下载请到无维网!。
Pro/TOOLKIT是Pro/ENGINEER的一个应用程序接口(API),其编程语言是C 语言,它可以对Pro/ENGINEER进行功能扩展,满足PTC客户的特定需求。
而且,Pro/TOOLK提供了定制标准Pro/ENGINEER用户界面的能力,自动执行重复性的程序,通过Pro/ENGINEER 集成的内部程序(Dll)或外部应用程序(Exe)可以为造型用户提供自定义的应用程序、设计规划和绘图自动化。
Pro/TOOLKIT 是Pro/ENGINEER 软件系统自带的二次开发模块,可以直接访问Pro/ENGINEER 软件的最底层数据库资源,它几乎能够访问所有Pro/ENGINEER 的资源,可以说这是进行Pro/ENGINEER 二次开发最根本的方法。
但想用Pro/TOOLKIT进行二次开发,需要具有Visual C++或者C语言的编程功底。
现在的CAD/CAM系统,如Pro/ENGINEER、UG等,都是比较通用的大型软件系统,用这样的大型系统建立我们所需要的产品模型可能需要大量的时间。
如果能在此类软件的基础上,开发出适合本单位产品的应用程序,无疑会大大提高本单位产品的设计效率,加快产品的更新速度,从而提高企业的市场竞争能力。
所谓“二次开发”就是在商业应用软件系统的基础上开发本地化应用程序的过程。
编辑本段Pro/ENGINEER的二次开发方法Pro/ENGINEER的二次开发方法有五种:(1)基于Pro/TOOLKIT的二次开发过程Pro/TOOLKIT是针对Pro/ENGINEER功能强大的二次开发工具。
它封装了许多针对Pro/EN-GINEER底层资源调用的库函数与头文件,借助第三方编译环境(C语言、VC++语言等)进行调试。
使用Pro/TOOLKIT开发应用程序包含三个基本步骤:编写源文件(包括资源文件和程序源文件);生成可执行文件;可执行文件在Pro/ENGI-NEER中注册并运行。
Automation Gateway元件的装配涉及两个主要的函数一个是AsmAddComponent 和AsmAddConstraint。
AsmAddComponent添加一个元件到装配体中(封装形式),再使用AsmAddConstraint约束添加的元件。
AsmAddConstraint为元件添加约束。
例子:这个例子是装配一个新的元件(a.prt)到装配体(asm1.asm)中首先是把零件模型"a.prt" 载入到PROE的内存中(程序行 lGwErr = gw.ModelRetrieve("a.prt") )添加元件的约束1. 对齐元件a中的MATE_SURF 基准平面和装配体中b元件的ASMMATE_SURF 基准平面。
2. 对齐元件a中的AX_A_1基准轴和装配体中b元件的A_1基准轴。
这样就把元件a装配到装配体asm1中了。
代码:Public gw As New GWayAX‘装配元件aPrivate Sub a_Click()Dim lGwErrAs LongDim lID(1 To 3)As Longgw.ModelRetrieve ("D:\VBasm\a.prt")lGwErr = gw.AsmAddConstraint(lID(1), ALGN, "D:\VBasm\a.prt", "MATE_SURF","D:\VBasm\asm1.asm/b.prt.40", "ASMMATE_SURF", 0)If Not (lGwErr = 0) Then GoTo ErrorTestlGwErr = gw.AsmAddConstraint(lID(2), ALGN, "D:\VBasm\a.prt", "AX_A_1","D:\VBasm\asm1.asm/b.prt.40", "A_1")If Not (lGwErr = 0) Then GoTo ErrorTestlGwErr = gw.AsmAddComponent(lID(3), "D:\VBasm\asm1.asm", "D:\VBasm\a.prt") ErrorTest:If lGwErr = 0 ThenMsgBox ("装配 - 成功")ElseMsgBox ("装配 - 失败" & vbCrLf & _"Error number: " & lGwErr)End IfEnd Sub‘打开装配体asm1Private Sub asm1_Click()gw.ModelRetrieve ("D:\VBasm\asm1.asm")gw.SessionSetCurrentModel ("D:\VBasm\asm1.asm")End Sub附件使用方法:把附件复制到D:盘,解压到当前文件夹(确保模型的路径符合代码的要求)——运行程序~~~(有安装AGW软件)。
第一章 PRO/TOOLKIT的安装及VC++环境的配置§1.1 PRO/TOOLKIT的安装PRO/TOOLKIT是PROE二次开发的接口,采用C语言的结构编程语言,本文假设PROE安装在E:\ProgramFiles\proeWildfire4.0,在PTC Set up的对话框如图1-1中选择API工具包,图1-1 PTC Set up的对话框选中PRO/TOOLKIT,点击右键选择安装该组件,安装完成后,可以在PROE 的安装目录下看到E:\Program Files\proeWildfire 4.0\protoolkit的文件夹,其中,里面的内容见图1-2所示。
图1-2 PRO/TOOLKIT 文件夹下的内容另外,选择E:\Program Files\proeWildfire 4.0\bin目录下的ptcsetup.bat文件可以再现PROE的安装界面,但是,该方法只能修改PROE的各个参数的配置,不能增加安装过程中的各个组件。
§1.2 VC++编程环境的设置§1.2.1 VC++目录设置当我们打开VC++2008时,我们在工具-选项-项目和解决方案中的VC++目录,得到如图1-3所示的对话框所示的界面。
图1-3 VC++中选项对话框目录设置对整个VC++中的各个项目均起作用,如果VC++不重新安装或者其他的较大的变化,目录设置可以不用改动。
目录的设置主要包括两个方面:包含文件的路径的设置及库文件的设置。
点击图1-3所示的可执行文件右边的下拉三角号,选择包含文件,如图1-4所示。
图1-4 VC++中包含文件对话框添加包含文件的路径。
具体的包含文件的路径主要有一下三个:E:\ProgramFiles\proeWildfire4.0\protoolkit\protk_appls\includesE:\Program Files\proeWildfire 4.0\protoolkit\includesE:\Program Files\proeWildfire 4.0\prodevelop\includes点击图1-3所示的可执行文件右边的下拉三角号,选择库文件,如图1-5所示,添加库文件的路径,如下所示:图1-5 VC++中库文件对话框E:\ProgramFiles\proeWildfire4.0\protoolkit\protk_applsE:\Program Files\proeWildfire 4.0\protoolkit\i486_nt\objE:\Program Files\proeWildfire 4.0\prodevelop\i486_nt\obj至此,PROE与VC++中的连接目录的设置已经结束。
Pro/E二次开发程序设置与调试安装Pro/E首先确保你正确安装了Pro/EPro/E开发工具Toolkit的目录结构:设置包含文件和库文件然后在你的VS2005IDE中设置好包含文件和库文件目录。
点击工具->选项菜单,弹出选项对话框1.加入包含文件:在安装目录下<安装目录>\protoolkit\includes2.加入库文件:在安装目录下<安装目录>\protoolkit\i486_nt\obj新建工程新建一个工程1.选择MFC DLL模板;2.填入项目名称,点击确定;3.在应用程序设置页,选择“使用共享MFC DLL的规则DLL”4.点击完成。
设置工程属性点击项目->属性菜单开始设置项目属性。
1.在C/C++标签下预处理器页面,预处理器定义中添加一条PRO_USE_VAR_ARGS宏。
3.在语言页设置将wchar_t视为内置类型为否(/Z c:wchar_t-)4.在连接器标签->输入页面a)附加依赖项中添加要附加的依赖库文件:protk_dllmd.lib,wsock32.lib,mpr.lib。
b)在忽略特定库中添加要忽略的库文件:msvcrt.lib。
5.在链接器->命令行标签->附加命令选择中填入/FORCE设置完成以上内容后即可编译成功。
编辑源文件重新编译你的工程注册和运行程序1.编写一个注册文件Protk.dat,该文件描述了二次开发程序的注册信息。
典型的文件结构如下:语法意义如下:name:为你的二次开发程序指定一个单独的名字。
startup:指定程序模式,这里是DLL模型。
exec_file:你编译出来的动态链接库的放置路径。
text_dir:应用程序使用的菜单和消息文件的放置路径。
allow_stop:程序运行停止。
delay_start:延迟启动。
end:注册文件结束2.在工程目录下新建一个Text文件夹,然后在Text文件夹下面,新建一个user_msg.txt启动Pro/E主程序,选择工具->辅助应用程序菜单(Tools->Auxiliary Application)4.然后点击注册(Register)按钮,选择前面编写的注册文件protk.dat。
Proe Wildfire 5.0 J-link二次开发——入门篇为什么选择J-link?选择J-link二次开发的理由:J-link拥有开源社区的强大优势,JAVA语言开源,社区很活跃,可以说除了PROE以外的所有开发工具都可以免费获得,并且这些开发工具的性能绝不逊色于microsoft;J-link二次开发的程序运行编译过程都较C++二次开发简单。
J-link二次开发所需的准备工作:1.熟悉JAVA语言;JAVA仍为IT界使用最为广泛的开发工具之一,其学习难度并不比C++语言高,网络上有大量免费视频可供学习。
2.初次安装PROE时请选中J2RE(java 2 runtime enviroment)与J-link选项随PROE主程序一起安装,一般默认安装未选中此模块,所以请务必注意;自安装的JRE目录是D:\PTC\pr oeWildfire 5.0\i486_nt\obj\JRE;若已经安装了PROE但是没有安装J2RE(java 2 runtime e nviroment),也可以下载jdk6来安装(jdk7未试过)。
3.安装JAVA的集成开发环境IDE,可以下载Eclipse,选Java开发版即可,不要jee的(用于Web开发)。
4.配置开发环境:配置JVM,设置环境变量(如果网友安装目录与此不同请自行注意更改)5.学习J-link请参考PROE目录下*\jlink\jlinkug.pdf文档,也可以用浏览器打开*\jlin k\jlinkdoc\index.html,里面包含开发文档和api。
自此,J-link开发环境就配置完成!下面以Proe自带的入门的例子来测试一下J-link开发环境是否配置正确。
1. 打开eclipse(网上关于eclipse使用资料非常多,可自行查询),依次File->new->j ava project,建立new javaproject,工程名如:InstallTest,其他选项默认即可,点击fin ish;2. 在InstallTest工程中添加外部JAR包,将*\text\java\pfc.jar引入到project中;3.在InstallTest工程中,新建2个空的java class,name分别是StartInstallTest和pf cInstallTest,然后用win写字板或者EditPlus等工具分别打开*\jlink\jlink_appls\instal l_test下的StartInstallTest.java与pfcInstallTest.java两个文件中的内容复制到刚才创建的相应的class中,并覆盖原有内容;4. 点击run->run运行并编译,因为需和proe配合才能显示工作效果,所以其实就是确认完成编译罢了;5. 在本机上新建test文件夹,在第2步所创建的InstallTest工程目录下找到bin文件夹,复制其中所有的.class文件至test文件夹中。