最近工作中经常使用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-关闭打开的零组件并释放内存。
// Mandatory UF Includes#include <uf.h>#include <uf_object_types.h>#include <uf_ugmgr.h>#include <uf_part.h>#include <uf_disp.h>#include <uf_modl.h>#include <uf_obj.h>#include <uf_assem.h> // Internal+External Includes#include <NXOpen/Annotations.hxx>#include <NXOpen/Assemblies_Component.hxx>#include <NXOpen/Assemblies_ComponentAssembly.hxx>#include <NXOpen/Body.hxx>#include <NXOpen/BodyCollection.hxx>#include <NXOpen/Face.hxx>#include <NXOpen/Line.hxx>#include <NXOpen/NXException.hxx>#include <NXOpen/NXObject.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/Session.hxx> #include <NXOpen/PDM_PdmSession.hxx>#include <NXOpen/PDM_SoaConnectionHandle.hxx>#include <teamcenter/soa/client/Connection.hxx>#include <teamcenter/services/core/DatamanagementService.hxx>#include <teamcenter/soa/common/Version.hxx> // Std C++ Includes#include <iostream>#include <sstream> using namespace NXOpen;using namespace Teamcenter::Soa::Client;using namespace Teamcenter::Services::Core;using std::string;using std::exception;using std::stringstream;using std::endl;using std::cout;using std::cerr; void do_it(){ int err = 0; UF_UGMGR_tag_t database_part_tag = NULL_TAG; err = UF_UGMGR_ask_part_tag("000000000AA000082", &database_part_tag); err = UF_UGMGR_set_config_rule("Latest Working"); UF_UGMGR_tag_t part_revision = NULL_TAG; err = UF_UGMGR_ask_configured_rev(database_part_tag, &part_revision); char revision_id[UF_UGMGR_NAME_BUFSIZE] = { 0 }; err = UF_UGMGR_ask_part_revision_id(part_revision, revision_id); int file_count = 0; char** file_types = NULL; char** file_names = NULL; err = UF_UGMGR_list_part_rev_files(part_revision, &file_count, &file_types, &file_names); if (file_count <= 0) return; for (int idx = 0; idx < file_count; idx++){ if (file_names[idx] == NULL) continue; char encoded_name[MAX_FSPEC_BUFSIZE] = { 0 }; err = UF_UGMGR_encode_part_filename("000000000AA000082", revision_id, file_types[idx], file_names[idx], encoded_name); tag_t partTag = NULL_TAG; UF_PART_load_status_t error_status; err = UF_PART_open(encoded_name, &partTag, &error_status); //=================== // 打开零组件后获取Session,不然会报错。也可以获取零组件属性,打开的是图纸还可以导出PDF。 //=================== NXOpen::Session *theSession = NXOpen::Session::GetSession(); NXOpen::Part *displayPart(theSession->Parts()->Display()); NXOpen::PDM::PdmSession *thePdmSession = NULL; NXOpen::PDM::SoaConnectionHandle *connectHandle = NULL; Teamcenter::Soa::Client::Connection *tcSoaConnect = NULL; thePdmSession = theSession->PdmSession(); connectHandle = thePdmSession->GetSoaConnectionHandle(); tcSoaConnect = reinterpret_cast<Teamcenter::Soa::Client::Connection*>(connectHandle->GetHandle()); Teamcenter::Services::Core::DatamanagementService *dmService = Teamcenter::Services::Core::DatamanagementService::getService(tcSoaConnect); Teamcenter::Soa::Common::Version clientVersion = tcSoaConnect->getClientVersion(); Teamcenter::Soa::Common::Version serviceClient = tcSoaConnect->getServerVersion(); Teamcenter::Soa::Client::Connection::Protocol protocol = tcSoaConnect->getProtocol(); Teamcenter::Soa::Client::Connection::Binding binding = tcSoaConnect->getBinding(); std::cout << "\nclientVersion.getTeamcenterVersion = " << clientVersion.getTeamcenterVersion() << std::endl; std::cout << "clientVersion.getTeamcenterVersionLabel = " << clientVersion.getTeamcenterVersionLabel() << std::endl; std::cout << "serviceClient.getTeamcenterVersion = " << serviceClient.getTeamcenterVersion() << std::endl; std::cout << "serviceClient.getTeamcenterVersionLabel = " << serviceClient.getTeamcenterVersionLabel() << std::endl; std::cout << "\ntcSoaConnect->getLocale = " << tcSoaConnect->getLocale() << std::endl; std::cout << "tcSoaConnect->getServerAddress = " << tcSoaConnect->getServerAddress() << std::endl; std::cout << "tcSoaConnect->getCurrentObjectPropertyPolicy = " << tcSoaConnect->getCurrentObjectPropertyPolicy() << std::endl; switch (protocol){ case Teamcenter::Soa::Client::Connection::HTTP: std::cout << "\n\nTeamcenter::Soa::Client::Connection::HTTP" << std::endl; break; case Teamcenter::Soa::Client::Connection::TCCS: std::cout << "\nTeamcenter::Soa::Client::Connection::TCCS" << std::endl; break; case Teamcenter::Soa::Client::Connection::IIOP: std::cout << "\nTeamcenter::Soa::Client::Connection::IIOP" << std::endl; break; case Teamcenter::Soa::Client::Connection::TCTP: std::cout << "\nTeamcenter::Soa::Client::Connection::TCTP" << std::endl; break; default: break; } switch (binding){ case Teamcenter::Soa::Client::Connection::REST: std::cout << "\n\nTeamcenter::Soa::Client::Connection::REST" << std::endl; break; case Teamcenter::Soa::Client::Connection::SOAP: std::cout << "\nTeamcenter::Soa::Client::Connection::SOAP" << std::endl; break; default: break; } err = UF_PART_free_load_status(&error_status); err = UF_PART_close(partTag, 1, 1); } UF_free_string_array(file_count, file_names); UF_free_string_array(file_count, file_types); file_types = NULL; file_names = NULL;} //===================// Entry Point//===================int main(int argc, char* argv[]){ try{ const char** dd = (const char**)(argv); int err = UF_UGMGR_initialize(argc, dd); do_it(); err = UF_UGMGR_terminate(); return err; } catch (const NXException& e1){ cerr << "NXException: " << e1.ErrorCode() << endl; cerr << e1.Message() << endl; } catch (const exception& e2){ cerr << "Exception: " << e2.what() << endl; } catch (...){ cerr << "Unknown Exception: " << endl; }}encode:把ID、版本、文件类型编码成NX可以打开的名称。



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删