找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 1303|回复: 4

[原创] Teamcenter_NX集成开发:UF_UGMGR_invoke_pdm_server函数的使用

[复制链接]

3

主题

25

回帖

367

积分

二级士官

积分
367
发表于 2023-3-25 17:12:46 | 显示全部楼层 |阅读模式
之前了解到通过UFUN函数UF_UGMGR_invoke_pdm_server可以调用Teamcenter ITK函数,从而可以获取及编辑Teamcenter对象。UFUN中有样例代码,但是就是不知道怎么使用,今天下午看了帮助文档,想到需要把ITK的USER_invoke_pdm_server函数进行注册,就进行测试,没想到给写通了。在此记录代码调试过程,转载请注明出处。
注意事项:

NX工程代码:
  1. //================================
  2. // UF_UGMGR_invoke_pdm_server
  3. //================================
  4. //tcnx_project

  5. // Mandatory UF Includes
  6. #include <uf.h>
  7. #include <uf_object_types.h>
  8. #include <uf_draw.h>
  9. #include <uf_part.h>
  10. #include <uf_ugmgr.h>

  11. #include <NXSigningResource.cpp>

  12. // Internal Includes
  13. #include <NXOpen/ListingWindow.hxx>
  14. #include <NXOpen/NXMessageBox.hxx>
  15. #include <NXOpen/UI.hxx>
  16. #include <NXOpen/LogFile.hxx>

  17. // Internal+External Includes\
  18. #include <NXOpen/Annotations.hxx>
  19. #include <NXOpen/Assemblies_Component.hxx>
  20. #include <NXOpen/Assemblies_ComponentAssembly.hxx>
  21. #include <NXOpen/Body.hxx>
  22. #include <NXOpen/BodyCollection.hxx>
  23. #include <NXOpen/Face.hxx>
  24. #include <NXOpen/Line.hxx>
  25. #include <NXOpen/NXException.hxx>
  26. #include <NXOpen/NXObject.hxx>
  27. #include <NXOpen/Part.hxx>
  28. #include <NXOpen/PartCollection.hxx>
  29. #include <NXOpen/Session.hxx>

  30. #include <NXOpen/PDM_SoaConnectionHandle.hxx>
  31. #include <NXOpen/PDM_PdmSession.hxx>
  32. #include <NXOpen/PDM_PdmSearch.hxx>
  33. #include <NXOpen/PDM_PdmFile.hxx>
  34. #include <NXOpen/PDM_PdmNavigatorNode.hxx>
  35. #include <NXOpen/PDM_PdmPart.hxx>
  36. #include <NXOpen/PDM_PdmSearchManager.hxx>
  37. #include <NXOpen/PDM_SoaQuery.hxx>
  38. #include <NXOpen/PDM_SearchResult.hxx>

  39. #include <NXOpen/PrintPDFBuilder.hxx>
  40. #include <NXOpen/PlotManager.hxx>
  41. #include <NXOpen/Drawings_DrawingSheet.hxx>
  42. #include <NXOpen/NXObjectManager.hxx>

  43. // Std C++ Includes
  44. #include <iostream>
  45. #include <sstream>
  46. #include <vector>
  47. #include <string>
  48. #include <algorithm>
  49. #include <tchar.h>
  50. #include <atlconv.h>
  51. #include <shellapi.h>

  52. #include <windows.h>
  53. #undef CreateDialog
  54. #pragma comment(lib,"shell32.lib")

  55. #define CREATION_DATE       1
  56. #define MODIFICATION_DATE   2
  57. #define MAX_UGMGR_NAME_LEN 1024

  58. using namespace NXOpen;
  59. using std::string;
  60. using std::exception;
  61. using std::stringstream;
  62. using std::endl;
  63. using std::cout;
  64. using std::cerr;

  65. NXOpen::ListingWindow *lw = NULL;
  66. NXOpen::NXMessageBox *mb = NULL;

  67. #define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
  68. int report_error(char *file, int line, char *call, int code)
  69. {
  70.     if (code){
  71.         stringstream errmsg;
  72.         errmsg << "Error " << code << " in " << file << " at line " << line << endl;
  73.         errmsg << call << endl;
  74.         cerr << errmsg.str();
  75.         throw NXOpen::NXException::Create(code);
  76.     }
  77.     return(code);
  78. }

  79. void print(const NXString &);
  80. void print(const string &);
  81. void print(const char*);
  82. int invokePdmServer();
  83. int invokePdmServer()
  84. {
  85.     int _errCode = 0;
  86.     _errCode = UF_CALL(UF_UGMGR_initialize(0, NULL));

  87.     char        part_name[MAX_UGMGR_NAME_LEN + 1] = "000015200AA000000";
  88.     int         output_code = -1;
  89.     char*       date = NULL;

  90.     _errCode = UF_CALL(UF_UGMGR_invoke_pdm_server(CREATION_DATE, part_name, &output_code, &date));
  91.     print("\nAfter calling UF_UGMGR_invoke_pdm_server()\n");
  92.     print("Part          : " + string(part_name));
  93.     print("creation date : " + string(date));
  94.     print("output_code   : " + std::to_string(output_code) + "\n\n");
  95.     UF_free(date);
  96.     date = NULL;

  97.     UF_UGMGR_terminate();
  98.     return _errCode;
  99. }

  100. extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
  101. {
  102.     try
  103.     {
  104.         invokePdmServer();
  105.         return;
  106.     }
  107.     catch (const NXException& e1)
  108.     {
  109.         UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
  110.     }
  111.     catch (const exception& e2)
  112.     {
  113.         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
  114.     }
  115.     catch (...)
  116.     {
  117.         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
  118.     }
  119. }

  120. extern "C" DllExport int ufusr_ask_unload()
  121. {
  122.     return (int)NXOpen::Session::LibraryUnloadOptionImmediately;// 调试用
  123.     //return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;// 程序发布用
  124.     //return (int)NXOpen::Session::LibraryUnloadOptionExplicitly;
  125. }

  126. void print(const NXString &msg)
  127. {
  128.     if (!lw->IsOpen()) lw->Open();
  129.     lw->WriteLine(msg);
  130. }
  131. void print(const string &msg)
  132. {
  133.     if (!lw->IsOpen()) lw->Open();
  134.     lw->WriteLine(msg);
  135. }
  136. void print(const char * msg)
  137. {
  138.     if (!lw->IsOpen()) lw->Open();
  139.     lw->WriteLine(msg);
  140. }
复制代码
Teamcenter Handler工程代码:
  1. //======================================
  2. // libA2CustStudy_register_callbacks
  3. //======================================

  4. //=======================
  5. // libA2CustStudy.h
  6. //=======================
  7. #ifndef TCHANDLER_STUDY_H
  8. #define TCHANDLER_STUDY_H

  9. #pragma once
  10. #include <bom/bom.h>
  11. #include <ict/ict_userservice.h>
  12. #include <epm\epm_access_control.h>
  13. #include <epm\epm_task_template_itk.h>
  14. #include <epm\epm.h>
  15. #include <epm\epm_toolkit_iman_utils.h>
  16. #include <epm/epm_toolkit_tc_utils.h>
  17. #include <pie/sample_err.h>
  18. #include <tc/tc.h>
  19. #include <tc/iman.h>
  20. #include <tccore/custom.h>
  21. #include <tccore/aom_prop.h>
  22. #include <user_exits/user_exits.h>
  23. #include <tccore/workspaceobject.h>

  24. #include <tccore/aom.h>
  25. #include <tccore/item.h>
  26. #include <base_utils/Mem.h>

  27. #include "register_custom_user_service.h"


  28. #ifdef __cplusplus
  29. extern "C"
  30. {
  31. #endif

  32.     extern DLLAPI int libA2CustStudy_register_callbacks();
  33.     int libA2CustStudy_invoke_pdm_server(int *decision, va_list args);

  34. #ifdef __cplusplus
  35. }
  36. #endif

  37. #endif
复制代码
  1. //=======================
  2. // libA2CustStudy.cpp
  3. //=======================
  4. #include "libA2CustStudy.h"

  5. #define CUST_TCHANDLER_STUDY "libA2CustStudy"

  6. extern DLLAPI int libA2CustStudy_register_callbacks()
  7. {
  8.     int stat = ITK_ok;
  9.     stat = CUSTOM_register_exit(CUST_TCHANDLER_STUDY, "USER_invoke_pdm_server", (CUSTOM_EXIT_ftn_t)libA2CustStudy_invoke_pdm_server);
  10.     stat == ITK_ok ? printf("(libA2CustStudy.dll)-函数libA2CustStudy_invoke_pdm_server返回值为ITK_ok,注册成功!!!\n") : printf("(libA2CustStudy.dll)-函数libA2CustStudy_invoke_pdm_server返回值不等于ITK_ok,注册失败!!!\n");
  11.     return stat;
  12. }
复制代码

Teamcenter 零组件属性

Teamcenter 零组件属性

NX信息框信息

NX信息框信息

Snipaste_2023-03-25_17-10-33.png Snipaste_2023-03-25_17-10-28.png
GIF调试动图大于1M,上传不了,想看的可以到博客园中看:Teamcenter_NX集成开发:UF_UGMGR_invoke_pdm_server函数的使用 - huangym1 - 博客园 (cnblogs.com)


1

主题

2361

回帖

6596

积分

上尉

积分
6596
发表于 2024-3-6 13:01:54 | 显示全部楼层
感谢分享

1

主题

2361

回帖

6596

积分

上尉

积分
6596
发表于 2024-3-12 11:24:44 | 显示全部楼层
感谢分享

1

主题

2361

回帖

6596

积分

上尉

积分
6596
发表于 2024-3-12 13:19:05 | 显示全部楼层
感谢分享

2

主题

114

回帖

514

积分

三级士官

积分
514
发表于 2024-5-5 21:46:24 | 显示全部楼层
66666666666666666666666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2024-12-22 10:24

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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