Teamcenter_NX集成开发:UF_UGMGR函数的使用

打印 上一主题 下一主题

主题 988|帖子 988|积分 2964

最近工作中经常使用Teamcenter、NX集成开发的情况,因此在这里记录UF_UGMGR函数的使用。使用UF_UGMGR相关函数需要有Teamcenter使用经验,理解Teamcenter中文件夹、伪文件夹、零组件、零组件版本、数据集、关系、表单、命名引用等对象。
相关的可以看帮助中 Teamcenter Integration for NX的内容 及 UF_UGMGR Overview 介绍的数据模型及使用方法、注意事项。
主要操作:
1-初始化UGMGR环境成功后就可以连接到Teamcenter。
2-获取指定ID编码零组件标识和Latest Working(没记错的话应该是最新版本)版本ID。
3-UF_UGMGR相关函数使用
[code]  1 // Mandatory UF Includes  2 #include   3 #include   4 #include   5 #include   6 #include   7 #include   8 #include   9 #include  10  11 // Internal+External Includes 12 #include  13 #include  14 #include  15 #include  16 #include  17 #include  18 #include  19 #include  20 #include  21 #include  22 #include  23 #include  24  25 #include  26 #include  27 #include  28 #include  29 #include  30  31 // Std C++ Includes 32 #include  33 #include  34 #include  35 #include  36  37 using namespace NXOpen; 38 using namespace Teamcenter::Soa::Client; 39 using namespace Teamcenter::Services::Core; 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 static int indent_level = 0; 48  49 #define CHECK( func_ ) \ 50     ifail = (func_); \ 51 if (ifail != 0) {\ 52 printf("ERROR: %s returned %d", # func_, ifail); \ 53 return ifail;} 54  55 #define PRINT( content_ ) \ 56 { int ii; \ 57 for (ii = 0; ii < indent_level; ii++) \ 58 { printf("  "); } \ 59     printf content_; \ 60     printf("\n"); } 61  62 static int  list_in_part(UF_UGMGR_tag_t part) 63 { 64     int _errCode = 0; 65     UF_UGMGR_tag_t*  revisions; 66     int              i, j, k; 67     int              count; 68     int              dep_count; 69     int              rev_count; 70     char**           names; 71     char**           file_types; 72     char**           file_names; 73     char             part_name[MAX_FSPEC_SIZE + 1]; 74     char             revision_id[UF_UGMGR_NAME_SIZE + 1]; 75     char             part_number[UF_UGMGR_NAME_SIZE + 1]; 76     if (part == UF_UGMGR_null_tag) 77         return -1; 78  79     _errCode = UF_UGMGR_ask_part_number(part, part_number);// 获取零组件ItemID 80     PRINT(("Part: %s", part_number)); 81     indent_level++; 82     _errCode = UF_UGMGR_list_part_revisions(part, &rev_count, &revisions);// 获取零组件所有版本 83     for (j = 0; j < rev_count; j++) 84     { 85         _errCode = UF_UGMGR_ask_part_revision_id(revisions[j], revision_id);// 获取版本ID 86         _errCode = UF_UGMGR_encode_part_filename(part_number, revision_id, "", "", part_name);// encode文件名 87         PRINT(("Rev.: %s - Type: %s", revision_id, "master")); 88         indent_level++; 89  90         _errCode = UF_UGMGR_ask_dependent_files(part_name, &dep_count, &names);// 获取关联文件 91         for (k = 0; k < dep_count; k++) 92             PRINT(("Dependent files: %s", names[k])); 93  94         indent_level--; 95         if (dep_count > 0) 96             UF_free_string_array(dep_count, names); 97  98         _errCode = UF_UGMGR_list_part_rev_files(revisions[j], &count, &file_types, &file_names);// 列出版本下数据集 99         for (i = 0; i < count; i++)100         {101             _errCode = UF_UGMGR_encode_part_filename(part_number, revision_id, file_types, file_names, part_name);// 根据ItemID、版本、文件类型、文件名encode成新的文件名102             PRINT(("Rev.: %s - Type: %s, Name: %s", revision_id, file_types, file_names));103             indent_level++;104             _errCode = UF_UGMGR_ask_dependent_files(part_name, &dep_count, &names);// 获取关联文件105             for (k = 0; k < dep_count; k++)106                 PRINT(("Dependent files: %s", names[k]));107 108             indent_level--;109             if (dep_count > 0)110                 UF_free_string_array(dep_count, names);111         }112         if (count > 0){113             UF_free_string_array(count, file_types);114             UF_free_string_array(count, file_names);115         }116     }117     indent_level--;118     UF_free(revisions);119     revisions = NULL;120     return _errCode;121 }122 123 static int list_in_folder(UF_UGMGR_tag_t folder)124 {    125     int _errCode = 0;126     char folder_name[UF_UGMGR_NAME_SIZE + 1];127     if (folder == UF_UGMGR_null_tag) return -1;128 129     _errCode = UF_UGMGR_ask_folder_name(folder, folder_name);// 获取文件夹名称130     PRINT(("Folder: %s", folder_name));131     indent_level++;132 133     UF_UGMGR_object_type_t object_type;134     int root_folder_contents_count = 0;135     UF_UGMGR_tag_t * folder_contents = NULL;136     _errCode = UF_UGMGR_list_folder_contents(folder, &root_folder_contents_count, &folder_contents);// 列出文件夹下的所有文件137     for (int idx = 0; idx < root_folder_contents_count; idx++)138     {139         _errCode = UF_UGMGR_ask_object_type(folder_contents[idx], &object_type);// 获取文件类型140         switch (object_type)141         {142         case UF_UGMGR_type_folder:143             list_in_folder(folder_contents[idx]);// 是文件夹144             break;145         case UF_UGMGR_type_part:146             list_in_part(folder_contents[idx]);// 是零组件147             break;148         default:149             printf("Invalid object type found");150             break;151         }152     }153     UF_free(folder_contents);154     folder_contents = NULL;155     indent_level--;156     return _errCode;157 }158 159 void do_it()160 {161     int _errCode = 0;162 163     tag_t partTag = NULL_TAG;164     UF_PART_load_status_t error_status;165     UF_UGMGR_tag_t database_part_tag = NULL_TAG;166     UF_UGMGR_tag_t part_revision = NULL_TAG;167     UF_UGMGR_tag_t root_folder_tag = NULL_TAG;168     UF_UGMGR_tag_t user_folder_tag = NULL_TAG;169 170     char current_rule[UF_UGMGR_NAME_BUFSIZE] = { 0 };171     char revision_id[UF_UGMGR_NAME_BUFSIZE] = { 0 };172     char export_dir_name[MAX_FSPEC_BUFSIZE] = { 0 };173     char encoded_name[MAX_FSPEC_BUFSIZE] = { 0 };174     char user_role[UF_UGMGR_ROLE_BUFSIZE] = { 0 };175 176     _errCode = UF_UGMGR_ask_part_tag("000000000AA000082", &database_part_tag);// 获取编码为000000000AA000082的部件标识177     _errCode = UF_UGMGR_ask_config_rule(current_rule);// 获取默认配置规则178     std::cout

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表