许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Teamcenter与NX集成开发:使用NX、SOA连接Teamcenter

Teamcenter与NX集成开发:使用NX、SOA连接Teamcenter

阅读数 2
点赞 0
article_banner

最近工作中经常使用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可以打开的名称。


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


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空