之前用过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动图:

Teamcenter_NX集成开发:通过NXOpen查询零组件是否存在的更多相关文章

  1. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    开发环境搭建好之后,还需要一个集成开发环境也就是IDE来进行编程.这里推荐的IDE是IDEA,那个老掉牙的Eclipse还是先放一边吧,(手动滑稽). IDEA的下载地址:http://www.jet ...

  2. 五款实用免费的Python机器学习集成开发环境(5 free Python IDE for Machine Learning)(图文详解)

    前言 集成开发环境(IDE)是提供给程序员和开发者的一种基本应用,用来编写和测试软件.一般而言,IDE 由一个编辑器,一个编译器(或称之为解释器),和一个调试器组成,通常能够通过 GUI(图形界面)来 ...

  3. SNF快速开发平台MVC-自由排序组件

    1.    自由排序功能使用 在一些需要排序优先级的数据进行调整处理,如民族数据,在北方实施的时候汉族比较多,希望把汉族放在第一位.在蒙古实施项目时,蒙古族人最多把蒙古族放在第一选择位. 1.1.   ...

  4. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  5. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  6. Windows下的Objective-C集成开发环境(IDE)(转)

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...

  7. 通用easyui查询页面组件

    easyui查询页面组件使用指南 本组件开发需求:信息系统的查询页面基本是包括:搜索区域,列表显示区域,按钮条. 1.录入一个查询语句(如:select * from Strudents),录入列表显 ...

  8. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  9. Windows下的Objective-C集成开发环境(IDE)

    Windows下的Objective-C集成开发环境(IDE) 分类: Objective-C2012-04-20 21:54 26631人阅读 评论(42) 收藏 举报 windowside编译器c ...

  10. 15 款最好的 C/C++ 编译器和集成开发环境

    我们有很多编程语言来进行 web 开发,比如 Java,.Net,PHP,Ruby,Perl,Python 等等.今天我们主要讨论的是两大古老而又流行的语言: C 和 C++ ,它们有着许多卓越的特性 ...

随机推荐

  1. python基础篇 15-常用模块:random string sorted lambda函数

    一.random import os,random,sys,time,string print(random.randint(1,10)) # 产生随机的整数 print(random.uniform ...

  2. 《Linux就该这么学》这本书写得真好,我很喜欢。

    本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...

  3. Python数据分析第七周作业-MySQL的安装及应用

    项目 MySQL 博客名称 2003031126-石升福-Python数据分析第七周作业 班级链接 20级数据班(本) 作业链接 第七周作业 要求 每道题要有题目,代码(使用插入代码,不会插入代码的自 ...

  4. heimaJava-网络编程

    Java 网络编程 概念 网络编程可以让程序与网络上的其他设备中的程序进行数据交互 网络通信基本模式 常见的通信模式有如下两种形式,Client-Server(CS),Browser/Server(B ...

  5. 多线程post

    async Task<long> post() { var stopwatch = new Stopwatch(); stopwatch.Start(); var client = new ...

  6. rust-must-know-crates-5ad8 100DayOfRust

    https://dev.to/cad97/rust-must-know-crates-5ad8 https://dev.to/search?q=100DayOfRust https://fastert ...

  7. java输入一个字符串,要求将该字符串中出现的英文字母, * 按照顺序输出,区分大小写,且大写优先

    public static void main(String[] args) { String input ="A8r4c5jaAjp#7"; //转为char[] char[] ...

  8. Linux查看CPU 内存命令

    查看CPU 内存命令:https://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html 查看某一进程内存占用:ps -ef 获取PID ...

  9. 手写深度比较isEqual函数

    function isObject(obj){ return typeof obj ==='object'&&obj!==null } functon isEqual(obj1,obj ...

  10. docker学习随笔

    总结自https://zhuanlan.zhihu.com/p/187505981 Linux内核提供了Namespace技术来隔离PID/IPC/网络资源等,还提供了Control Group(cg ...