最近工作中经常使用Teamcenter、NX集成开发的情况,因此在这里记录使用NX、SOA连接到Teamcenter的连接方式。

主要操作:

1-初始化UGMGR环境成功后就可以连接到Teamcenter。

2-获取指定ID编码零组件标识和Latest Working(没记错的话应该是最新版本)版本ID。

3-获取版本下相关数据集文件(UGMASTER、UGPART等)。

4-ID、版本、文件类型Encode组成集成环境下NX可以打开的NX部件文件名称,并打开。

5-获取Session,打印Teamcenter当前登录方式(二层或者四层等)及其他信息。

6-关闭打开的零组件并释放内存。

  1 // Mandatory UF Includes
2 #include <uf.h>
3 #include <uf_object_types.h>
4 #include <uf_ugmgr.h>
5 #include <uf_part.h>
6 #include <uf_disp.h>
7 #include <uf_modl.h>
8 #include <uf_obj.h>
9 #include <uf_assem.h>
10
11 // Internal+External Includes
12 #include <NXOpen/Annotations.hxx>
13 #include <NXOpen/Assemblies_Component.hxx>
14 #include <NXOpen/Assemblies_ComponentAssembly.hxx>
15 #include <NXOpen/Body.hxx>
16 #include <NXOpen/BodyCollection.hxx>
17 #include <NXOpen/Face.hxx>
18 #include <NXOpen/Line.hxx>
19 #include <NXOpen/NXException.hxx>
20 #include <NXOpen/NXObject.hxx>
21 #include <NXOpen/Part.hxx>
22 #include <NXOpen/PartCollection.hxx>
23 #include <NXOpen/Session.hxx>
24
25 #include <NXOpen/PDM_PdmSession.hxx>
26 #include <NXOpen/PDM_SoaConnectionHandle.hxx>
27 #include <teamcenter/soa/client/Connection.hxx>
28 #include <teamcenter/services/core/DatamanagementService.hxx>
29 #include <teamcenter/soa/common/Version.hxx>
30
31 // Std C++ Includes
32 #include <iostream>
33 #include <sstream>
34
35 using namespace NXOpen;
36 using namespace Teamcenter::Soa::Client;
37 using namespace Teamcenter::Services::Core;
38 using std::string;
39 using std::exception;
40 using std::stringstream;
41 using std::endl;
42 using std::cout;
43 using std::cerr;
44
45 void do_it()
46 {
47 int err = 0;
48 UF_UGMGR_tag_t database_part_tag = NULL_TAG;
49 err = UF_UGMGR_ask_part_tag("000000000AA000082", &database_part_tag);
50 err = UF_UGMGR_set_config_rule("Latest Working");
51
52 UF_UGMGR_tag_t part_revision = NULL_TAG;
53 err = UF_UGMGR_ask_configured_rev(database_part_tag, &part_revision);
54
55 char revision_id[UF_UGMGR_NAME_BUFSIZE] = { 0 };
56 err = UF_UGMGR_ask_part_revision_id(part_revision, revision_id);
57
58 int file_count = 0;
59 char** file_types = NULL;
60 char** file_names = NULL;
61 err = UF_UGMGR_list_part_rev_files(part_revision, &file_count, &file_types, &file_names);
62 if (file_count <= 0) return;
63
64 for (int idx = 0; idx < file_count; idx++){
65 if (file_names[idx] == NULL)
66 continue;
67
68 char encoded_name[MAX_FSPEC_BUFSIZE] = { 0 };
69 err = UF_UGMGR_encode_part_filename("000000000AA000082", revision_id, file_types[idx], file_names[idx], encoded_name);
70
71 tag_t partTag = NULL_TAG;
72 UF_PART_load_status_t error_status;
73 err = UF_PART_open(encoded_name, &partTag, &error_status);
74
75 //===================
76 // 打开零组件后获取Session,不然会报错。也可以获取零组件属性,打开的是图纸还可以导出PDF。
77 //===================
78 NXOpen::Session *theSession = NXOpen::Session::GetSession();
79 NXOpen::Part *displayPart(theSession->Parts()->Display());
80 NXOpen::PDM::PdmSession *thePdmSession = NULL;
81 NXOpen::PDM::SoaConnectionHandle *connectHandle = NULL;
82 Teamcenter::Soa::Client::Connection *tcSoaConnect = NULL;
83
84 thePdmSession = theSession->PdmSession();
85 connectHandle = thePdmSession->GetSoaConnectionHandle();
86 tcSoaConnect = reinterpret_cast<Teamcenter::Soa::Client::Connection*>(connectHandle->GetHandle());
87 Teamcenter::Services::Core::DatamanagementService *dmService = Teamcenter::Services::Core::DatamanagementService::getService(tcSoaConnect);
88
89 Teamcenter::Soa::Common::Version clientVersion = tcSoaConnect->getClientVersion();
90 Teamcenter::Soa::Common::Version serviceClient = tcSoaConnect->getServerVersion();
91 Teamcenter::Soa::Client::Connection::Protocol protocol = tcSoaConnect->getProtocol();
92 Teamcenter::Soa::Client::Connection::Binding binding = tcSoaConnect->getBinding();
93
94 std::cout << "\nclientVersion.getTeamcenterVersion = " << clientVersion.getTeamcenterVersion() << std::endl;
95 std::cout << "clientVersion.getTeamcenterVersionLabel = " << clientVersion.getTeamcenterVersionLabel() << std::endl;
96 std::cout << "serviceClient.getTeamcenterVersion = " << serviceClient.getTeamcenterVersion() << std::endl;
97 std::cout << "serviceClient.getTeamcenterVersionLabel = " << serviceClient.getTeamcenterVersionLabel() << std::endl;
98
99 std::cout << "\ntcSoaConnect->getLocale = " << tcSoaConnect->getLocale() << std::endl;
100 std::cout << "tcSoaConnect->getServerAddress = " << tcSoaConnect->getServerAddress() << std::endl;
101 std::cout << "tcSoaConnect->getCurrentObjectPropertyPolicy = " << tcSoaConnect->getCurrentObjectPropertyPolicy() << std::endl;
102
103 switch (protocol){
104 case Teamcenter::Soa::Client::Connection::HTTP:
105 std::cout << "\n\nTeamcenter::Soa::Client::Connection::HTTP" << std::endl;
106 break;
107 case Teamcenter::Soa::Client::Connection::TCCS:
108 std::cout << "\nTeamcenter::Soa::Client::Connection::TCCS" << std::endl;
109 break;
110 case Teamcenter::Soa::Client::Connection::IIOP:
111 std::cout << "\nTeamcenter::Soa::Client::Connection::IIOP" << std::endl;
112 break;
113 case Teamcenter::Soa::Client::Connection::TCTP:
114 std::cout << "\nTeamcenter::Soa::Client::Connection::TCTP" << std::endl;
115 break;
116 default:
117 break;
118 }
119 switch (binding){
120 case Teamcenter::Soa::Client::Connection::REST:
121 std::cout << "\n\nTeamcenter::Soa::Client::Connection::REST" << std::endl;
122 break;
123 case Teamcenter::Soa::Client::Connection::SOAP:
124 std::cout << "\nTeamcenter::Soa::Client::Connection::SOAP" << std::endl;
125 break;
126 default:
127 break;
128 }
129
130 err = UF_PART_free_load_status(&error_status);
131 err = UF_PART_close(partTag, 1, 1);
132 }
133
134 UF_free(file_names);
135 UF_free(file_types);
136 file_types = NULL;
137 file_names = NULL;
138 }
139
140 //===================
141 // Entry Point
142 //===================
143 int main(int argc, char* argv[])
144 {
145 try{
146 const char** dd = (const char**)(argv);
147 int err = UF_UGMGR_initialize(argc, dd);
148 do_it();
149 err = UF_UGMGR_terminate();
150 return err;
151 }
152 catch (const NXException& e1){
153 cerr << "NXException: " << e1.ErrorCode() << endl;
154 cerr << e1.Message() << endl;
155 }
156 catch (const exception& e2){
157 cerr << "Exception: " << e2.what() << endl;
158 }
159 catch (...){
160 cerr << "Unknown Exception: " << endl;
161 }
162 }

释放应该使用以下函数:

1     UF_free_string_array(file_count, file_names);
2 UF_free_string_array(file_count, file_types);

encode:把ID、版本、文件类型编码成NX可以打开的名称。

控制台输出日志:

注意事项:

  1-要以bat文件启动VS进行调试运行,bat文件中设置Teamcenter相关的环境变量,不然初始化函数UF_UGMGR_Initlization()会报错。

  2-连接两层Teamcenter客户端时:Tao窗口要成功启动。

  3-bat文件内容如下:

 1 cd /d %~dp0
2 call "D:\PLM\Siemens\Teamcenter12\install\tem_init.bat"
3 call "D:\PLM\Siemens\Teamcenter12\tc_menu\tc_config1.bat"
4
5 set UGII_UGMGR_COMMUNICATION=IIOP
6 set TPR=D:\PLM\Siemens\Teamcenter12\portal
7 set UGII_BASE_DIR=D:\PLM\Siemens\NX
8 set TC_ROOT=D:\PLM\Siemens\Teamcenter12
9 set TC_DATA=D:\PLM\Siemens\tcdata
10 set FMS_HOME=D:\PLM\Siemens\Teamcenter12\tccs
11
12 set JAVA_HOME=%TC_JRE_HOME%
13 set JRE_HOME=%TC_JRE_HOME%
14
15 set PATH=%JAVA_HOME%\bin;%FME_HOME%\bin;%FMS_HOME%\lib;%TPR%;%UGII_BASE_DIR%\NXBIN;%UGII_BASE_DIR%\UGII;%PATH%;
16
17 start "TAO ImR" /min cmd /c "D:\PLM\Siemens\Teamcenter12\iiopservers\start_imr.bat"
18 cd "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
19 C:
20 devenv.exe

零组件在Teamcenter中截图:

Teamcenter_NX集成开发:使用NX、SOA连接Teamcenter的更多相关文章

  1. [国嵌笔记][019][Eclipse集成开发环境]

    Eclipse集成开发环境的作用 可以编译程序,也可以对程序进行在线调试 集成开发环境 1.JLink连接开发板的JTAG 2.JLink连接PC的USB 3.eclipse软件 4.gdb serv ...

  2. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  3. 【超全整理】J2EE集成开发环境MyEclipse使用心得汇总

    一.首先我们为什么需要MyEclipse? 下面允许我做一些简要的介绍: 应该大家都知道另一个MyEclipse的近亲——Eclipse的优点:免费.程序代码排版功能.有中文汉化包.可增设许多功能强大 ...

  4. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. Windows下的Objective-C集成开发环境(IDE)(转)

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...

  6. 【软件使用】Windows下的Objective-C集成开发环境搭建(IDE)

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...

  7. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. Windows下的Objective-C集成开发环境(IDE)

    Windows下的Objective-C集成开发环境(IDE) 分类: Objective-C2012-04-20 21:54 26631人阅读 评论(42) 收藏 举报 windowside编译器c ...

  9. WINDOWS 下搭建 OC 集成开发环境

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...

  10. VC6集成开发环境使用参考

    VC6集成开发环境使用参考 1.VC6的常用菜单命令项 (1)File菜单 New:打开“new”对话框,以便创建新的文件.工程或工作区. Close Workspace:关闭与工作区相关的所有窗口. ...

随机推荐

  1. java jdk8安装之后java -version失败

    将此目录下的(C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_86850671)三个.exe文件删除即可!

  2. 我的第二次JAVA作业

    1. Java包含哪两大类数据类型?其中基本类型的每种类型的取值范围和默认值分别是多少?请编程验证. Java 的两大数据类型: 基本类型 引用类 基本数据类型: 整数类型: byte: byte 数 ...

  3. 学习笔记||使用Vue时踩过的坑2.0

    6.Vue指令之v-show篇 v-show的功能,其功能类似于v-if 1.判断某个元素是否显示或隐藏 <el-button v-show="list.power == 1" ...

  4. seleniumUI自动化学习记录

    2019.2.9 尝试了一个启动浏览器并打开指定网址的程序: 这里首先要注意的就是浏览器的版本和selenium jar包的版本必须符合才行,不然会报错 2019.9.16 必须要下载相应的chrom ...

  5. excel制作表格

    我们这个表格举例: 1. 序号列自动生成序号.选中数字"1"所在的单元格,将鼠标停留在图片中标红的区域向下拖动即可                                 ...

  6. 【Docker】Postgres 安装

    1.docker pull postgres 2.docker run --name postgres -v /home/postgre/data:/var/lib/postgresql/data - ...

  7. Javaheima21

    Java 学习内容 XML XML解析技术 XPath 设计模式 在有些业务场景下,存储数据或者传输数据给别人的时候,数据需要满足优点的规范进行组织 XML文件存储的数据需要提取出来 如何方便的在XM ...

  8. C# 根据 RichTextBox 内容 动态 重设其大小 以达到 不会 显示滚动条

    /// <summary> /// 根据内容重设大小以达到不会显示滚动条 /// 测试:正确 /// 时间:202106021957 /// </summary> public ...

  9. 宝塔linux面板进行数据库操作显示"数据库管理密码"

    在使用宝塔linux面板时,对数据库进行操作之后,显示数据库管理密码错误.经历了卸载数据库并删除了数据库文件和olddata, 在从新安装,仍然显示数据库管理密码错误. 这时,我们可以进入到 /www ...

  10. 通过网页或者移动设备链接跳转qq(tim)添加好友(群)

    首先需要去qq群官方,然后点记加群组件,然后选择群,复制对应的代码即可 登录到QQ群官网 点击加群组件 选择群,选择网页还是移动设备 复制代码 示例: <html> <head> ...