之前用过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. 为动态二级域名申请https的免费证书.

    前面已经讲过将nginx部署,并注册了免费的二级域名.但将网址发给儿子,儿子说微信已经不能打开http的网址了,所以一想还是研究一下https的证书申请. 网上有很多讲通过,acme的脚本来自动化申请 ...

  2. linux 学习shell

    1. bash的父进程,子进程 [root@A~]# my_var=123[root@A~]# echo $my_var123[root@A~]# bash[root@A~]# [root@A~]# ...

  3. react常见bug - 查询条件变化,但page未重置为1

    问题1.多次触发请求,且存在潜在的竞态问题 const [page, setPage] = useState(1); const [keyword, setKeyword] = useState('' ...

  4. OPENSUSE网速慢

    无线网卡是Broadcom 4313,刚安装完opensuse,网速只有60Kb左右. 添加packman私有驱动后,网速才正常起来.

  5. window安装nginx,并解决前端跨域问题

    window 安装 nginx 流程 第一步:下载nginx http://nginx.org/en/download.html 第二步:下载完成后,解压到指定目录文件,启动nginx 进入nginx ...

  6. Longest Peak

    refer to: https://www.algoexpert.io/questions/Longest%20Peak Problem Statement Sample Analysis Code ...

  7. angular项目语言切换功能

    1.NzI18nService服务 参考:https://ng.ant.design/docs/i18n/zh 2.ngx-translate插件 1)安装依赖 npm install @ngx-tr ...

  8. k8s配置ingress的https访问

    一.部署步骤 1.安装nginx-ingress-controller 2.创建secret绑定证书 3.创建测试服务 4.创建ingress 5.测试https访问 二.安装nginx-ingres ...

  9. Day03_Class01

    用户交互Scanner Scanner对象 基本语法 Scanner sc = new Scanner(System.in); 通过Scanner类的next()与nextLine()方法获取输入的字 ...

  10. [C#]接口Interface快速Demo

    参考代码1: using System; namespace InterfaceDemo { /// <summary> /// 定义一个爬树接口 /// </summary> ...