首页 > 其他分享 >Teamcenter_NX集成开发:通过NXOpen查询零组件是否存在

Teamcenter_NX集成开发:通过NXOpen查询零组件是否存在

时间:2023-03-24 20:14:26浏览次数:31  
标签:idx 零组件 int NXMessageBox NX Teamcenter NXOpen print include

之前用过NXOpen PDM的命名空间下的类,现在记录一下通过PDM命名空间下的类查询Teamcenter零组件的信息,也可以用来判断该零组件是否存在。

1-该工程为DLL工程,直接在NX界面调用,所以直接获取NXSession。

2-查询函数advanced用到的查询为:__NX_STD_ANY_ITEM_QUERY,可以在Teamcenter查询构建器模块中看到该查询。

 

  1 // Mandatory UF Includes
  2 #include <uf.h>
  3 #include <uf_object_types.h>
  4 
  5 // Internal Includes
  6 #include <NXOpen/ListingWindow.hxx>
  7 #include <NXOpen/NXMessageBox.hxx>
  8 #include <NXOpen/UI.hxx>
  9 #include <NXOpen/LogFile.hxx>
 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_SoaConnectionHandle.hxx>
 26 #include <NXOpen/PDM_PdmSession.hxx>
 27 #include <NXOpen/PDM_PdmSearch.hxx>
 28 #include <NXOpen/PDM_PdmFile.hxx>
 29 #include <NXOpen/PDM_PdmNavigatorNode.hxx>
 30 #include <NXOpen/PDM_PdmPart.hxx>
 31 #include <NXOpen/PDM_PdmSearchManager.hxx>
 32 #include <NXOpen/PDM_SoaQuery.hxx>
 33 #include <NXOpen/PDM_SearchResult.hxx>
 34 
 35 // Std C++ Includes
 36 #include <iostream>
 37 #include <sstream>
 38 
 39 using namespace NXOpen;
 40 using std::string;
 41 using std::exception;
 42 using std::stringstream;
 43 using std::endl;
 44 using std::cout;
 45 using std::cerr;
 46 
 47 NXOpen::ListingWindow *lw = NULL;
 48 NXOpen::NXMessageBox *mb = NULL;
 49 
 50 void do_it();
 51 void print(const NXString &);
 52 void print(const string &);
 53 void print(const char*);
 54 void showClickMessage(int &iRet);
 55 
 56 //------------------------------------------------------------------------------
 57 // Entry point(s) for unmanaged internal NXOpen C/C++ programs
 58 //------------------------------------------------------------------------------
 59 extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
 60 {
 61     try
 62     {
 63         // 获取NXSession并初始化
 64         NXOpen::Session *theSession = NXOpen::Session::GetSession();
 65         NXOpen::UI *theUI = NXOpen::UI::GetUI();
 66         NXOpen::Part *displayPart(theSession->Parts()->Display());
 67         NXOpen::PDM::PdmSession * pdmSession = theSession->PdmSession();
 68         NXOpen::LogFile *lf = theSession->LogFile();    
 69         lw = theSession->ListingWindow();    
 70         mb = theUI->NXMessageBox();        
 71 
 72         // 获取设置数据
 73         bool isSsoEnabled;
 74         NXOpen::NXString ssoServerUrl;
 75         NXOpen::NXString ssoAppID;
 76         NXOpen::NXString connectString;
 77         NXOpen::NXString discriminator;
 78         pdmSession->GetSsoSettings(&isSsoEnabled, &ssoServerUrl, &ssoAppID);
 79         pdmSession->GetTcserverSettings(&connectString, &discriminator);
 80     
 81         // 查询Teamcenter中零组件 000015200AA000000
 82         NXOpen::PDM::PdmSearchManager *pdmSearchManager = theSession->PdmSearchManager();
 83         NXOpen::PDM::PdmSearch *pdmSearch = pdmSearchManager->NewPdmSearch();
 84         std::vector<NXOpen::NXString> entries;
 85         std::vector<NXOpen::NXString> values;
 86         entries.push_back("item_id");
 87         values.push_back("000015200AA000000");
 88         NXOpen::PDM::SearchResult * advancedSearchResults = pdmSearch->Advanced(entries, values);
 89         if (advancedSearchResults == NULL)
 90             return;
 91         std::vector<NXString> resultMfkIds = advancedSearchResults->GetResultMfkIds();
 92         std::vector<NXString> resultObjectNames = advancedSearchResults->GetResultObjectNames();
 93         std::vector<NXString> resultObjectTypes = advancedSearchResults->GetResultObjectTypes();
 94 
 95         // 输出查询到零组件的信息到信息框
 96         print("输出查询到零组件的信息到信息框");
 97         for (int idx = 0; idx < (int)resultMfkIds.size(); idx++){
 98             print("resultMfkIds = " + resultMfkIds[idx]);
 99             lf->WriteLine("resultMfkIds = " + resultMfkIds[idx]);
100         }
101         for (int idx = 0; idx < (int)resultObjectNames.size(); idx++){
102             print("resultObjectNames = " + resultObjectNames[idx]);
103             lf->WriteLine("resultObjectNames = " + resultObjectNames[idx]);
104         }
105         for (int idx = 0; idx < (int)resultObjectTypes.size(); idx++){
106             print("resultObjectTypes = " + resultObjectTypes[idx]);
107             lf->WriteLine("resultObjectTypes = " + resultObjectTypes[idx]);
108         }
109     
110         print("输出信息到信息框");
111         print("ssoAppID = " + ssoAppID);
112         print("ssoServerUrl = " + ssoServerUrl);
113         print("connectString = " + connectString);
114         print("discriminator = " + discriminator);
115         
116         // 输出信息到日志文件
117         print("输出信息到日志文件");
118         lf->WriteLine("LogFileName = " + lf->FileName());
119         lf->WriteLine("ssoServerUrl = " + ssoServerUrl);
120         lf->WriteLine("ssoAppID = " + ssoAppID);
121         lf->WriteLine("connectString = " + connectString);
122         lf->WriteLine("discriminator = " + discriminator);
123 
124         // 输出查询到零组件的信息到提示框
125         int iRet = mb->Show("resultMfkIds", NXOpen::NXMessageBox::DialogTypeError, resultMfkIds);
126         showClickMessage(iRet);
127         iRet = mb->Show("resultObjectNames", NXOpen::NXMessageBox::DialogTypeWarning, resultObjectNames);
128         showClickMessage(iRet);
129         iRet = mb->Show("resultObjectTypes", NXOpen::NXMessageBox::DialogTypeInformation, resultObjectTypes);
130         showClickMessage(iRet);
131         iRet = mb->Show("resultObjectTypes", NXOpen::NXMessageBox::DialogTypeQuestion, resultObjectTypes);
132         showClickMessage(iRet);
133     }
134     catch (const NXException& e1)
135     {
136         UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
137     }
138     catch (const exception& e2)
139     {
140         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
141     }
142     catch (...)
143     {
144         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
145     }
146 }
147 
148 
149 //------------------------------------------------------------------------------
150 // Unload Handler
151 //------------------------------------------------------------------------------
152 extern "C" DllExport int ufusr_ask_unload()
153 {
154     return (int)NXOpen::Session::LibraryUnloadOptionImmediately;// 调试用
155     //return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;// 程序发布用
156     //return (int)NXOpen::Session::LibraryUnloadOptionExplicitly;
157 }
158 
159 void showClickMessage(int &iRet){
160     if (iRet == 1){
161         mb->Show("提示", NXOpen::NXMessageBox::DialogTypeInformation, "你点击了是");
162     }
163     else if (iRet == 2){
164         mb->Show("提示", NXOpen::NXMessageBox::DialogTypeInformation, "你点击了否");
165     }
166     else if (iRet == -2){
167         mb->Show("提示", NXOpen::NXMessageBox::DialogTypeInformation, "你点击了确定");
168     }
169 }
170 
171 void print(const NXString &msg)
172 {
173     if (!lw->IsOpen()) lw->Open();
174     lw->WriteLine(msg);
175 }
176 void print(const string &msg)
177 {
178     if (!lw->IsOpen()) lw->Open();
179     lw->WriteLine(msg);
180 }
181 void print(const char * msg)
182 {
183     if (!lw->IsOpen()) lw->Open();
184     lw->WriteLine(msg);
185 }

 

程序执行后截图:

 

 

 

 

 

 

 

GIF动图:

 

标签:idx,零组件,int,NXMessageBox,NX,Teamcenter,NXOpen,print,include
From: https://www.cnblogs.com/huangym1/p/17252660.html

相关文章

  • 【230324-7】求函数f(x)=2SinX^2-tanX^2的最大值
    ......
  • ASEMI代理NXP汽车芯片MIMXRT1064CVJ5B
    编辑-ZMIMXRT1064CVJ5B工业产品交叉处理器MIMXRT1064CVJ5B是一个新的处理器系列,采用了恩智浦先进的ArmCortex®-M7内核,其运行速度高达528MHz,可提供高CPU性能和最佳实时响......
  • ASEMI代理NXP汽车芯片PCF85163T/1,518
    编辑-ZPCF85163T/1,518是一款针对低功耗进行优化的CMOS1实时时钟(RTC)和日历。还提供了可编程时钟输出、中断输出和低电压检测器。所有地址和数据通过双线双向I2C总线串行传输......
  • Centos + Django + Nginx + uwsgi 部署项目-rpm包安装 Mysql 5
    笔者发觉下面这个方法可能有些缺陷,适合自己的就看下,如果是新开的虚拟机有可能不适用下面的方法,云服务器开的LinuxCentos系统应该可以。虚拟机安装Mysql的具体方法,可以看......
  • k8s ingress-nginx 使用 snippet 添加自定义配置(例如:安全头)
    比如在有些时候我们需要在server里或者location里添加一些参数,例如添加安全头、包体大小限制、添加跨域配置、添加自定义header、处理响应header等等。遇到这些需求的时......
  • Nginx服务起不来报错:Failed to start nginx service.::解决方法
    报错信息:  报错原因:1、在安装好Nginx服务的时候,可以正常启动Nginx,但是执行systemctlrestartnginx的时候,会报错,然后去查看服务的日志发现此问题。2、经过在CSDN上......
  • liunx 开机服务自启
    创建:进入/usr/lib/systemd/system/vim服务名称.service[Unit]Description=javaportalsite-webAfter=portalsite-webservice[Service][Service]Type=forkingExecStar......
  • Prometheus通过Nginx防盗链加密node_exporter
    node_exporter是Prometheus的一个扩展程序,也是通过go语言编写,同样是开箱即食,主要用来采集服务器上的数据(CPU、内存等等)主机Prometheus可以通过部署在客户端的node_exporte......
  • Teamcenter_NX集成开发:UF_UGMGR函数的使用
    最近工作中经常使用Teamcenter、NX集成开发的情况,因此在这里记录UF_UGMGR函数的使用。使用UF_UGMGR相关函数需要有Teamcenter使用经验,理解Teamcenter中文件夹、伪文件夹、......
  • Nginx面试
    1Nginx负载均衡算法nginx的upstream目前支持4种方式的分配0)、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。1)、wei......