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

打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

之前用过NXOpen PDM的命名空间下的类,现在记录一下通过PDM命名空间下的类查询Teamcenter零组件的信息,也可以用来判断该零组件是否存在。
1-该工程为DLL工程,直接在NX界面调用,所以直接获取NXSession。
2-查询函数advanced用到的查询为:__NX_STD_ANY_ITEM_QUERY,可以在Teamcenter查询构建器模块中看到该查询。

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

 
 
 
 
 
 
 
GIF动图:

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表