最近工作中经常使用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. CSS尺寸设置的单位:px、rem、em、vw、vh

    px:pixel像素的缩写,绝对长度单位,它的大小取决于屏幕的分辨率,是开发网页中常常使用的单位. em:相对长度单位,在 `font-size` 中使用是相对于父元素的字体大小,在其他属性中使用是相 ...

  2. mysql之数据表基本操作-第四篇

    在关系型数据库中,数据表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构. 1.创建表,以创建一个简单的员工表为例: create table employee ( empId INT(11) ...

  3. swift 应用内切换语言

    1:在project info中的locations添加需要的语言 2:创建Localizable.strings文件 点击右边的localization勾选需要的语言 3:创建InfoPlist.s ...

  4. #硬件 #资讯 #科普 #短报 SSD价格跳水根本停不下来!不断刷出新低

    一份来自日本的统计显示,10~12月的初步统计显示,PC市场的指标产品中,256GB TLC颗粒SSD价格再次下跌2美元,现在只有29.5美元.这已经是该指标产品连续5个季度下跌,创下史上心底记录,同 ...

  5. springboot项目控制台日志不是彩色的原因

    采用springboot的方式启动,而不是application的方式启动,即可

  6. mmdetection RPNHead--_init_layers()

    RPNHead类包含的函数: (1)_init_():初始化函数 (2)_init_layers():设置Head中的卷积层 (3)forward_single():单尺度特征图的前向传播 (4)lo ...

  7. idea中新建java类

    project是项目,一个大目录,里面可以放多个module project里面存放: .idea文件(project相当于workplace) module(模块) out(编译生成的.class文 ...

  8. ABP vNext微服务架构详细教程——镜像推送

    1. Jenkins搭建 为实现容器化部署,我们需要将代码打包成镜像并推送至容器仓库,我们可以选择自建容器仓库或者使用公有云服务商提供的镜像仓库.这里我们使用阿里云提供的免费镜像仓库. 代码打包和镜像 ...

  9. 【转载】PostgreSQL逻辑订阅logical

    原文地址:https://blog.csdn.net/gguxxing008/article/details/106356086 逻辑订阅是PostgreSQL10.0开始支持的新功能,Postgre ...

  10. 【javascript】关于charCodeAt()方法

    在做算法题目leetcode 2283时,看见某些答案会使用charCodeAt(),因为自己没用过,所以作此纪录 描述在 JavaScript 中,charCodeAt() 是一种字符串方法,用于检 ...