NX二次开发-克隆装配
- 克隆操作
1 string CloneAssemble(const string & fileName, const string & outputDirectory, bool isDryrun) 2 { 3 //设置操作类型 4 UF_CLONE_operation_class_t operation_class = UF_CLONE_clone_operation; 5 UF_CLONE_initialise(operation_class); 6 7 //设置默认克隆操作 8 UF_CLONE_action_t action = UF_CLONE_clone; 9 UF_CLONE_set_def_action(action); 10 11 //初始化命名失败结构体 12 UF_CLONE_naming_failures_t naming_failures; 13 UF_CLONE_init_naming_failures(&naming_failures); 14 15 //设置输出目录 16 UF_CLONE_set_def_directory(outputDirectory.c_str()); 17 18 UF_PART_load_status_t load_status; 19 UF_CLONE_add_assembly(fileName.c_str(), &load_status); 20 UF_free_string_array(load_status.n_parts, load_status.file_names); 21 UF_free(load_status.statuses); 22 23 24 string tmpOutputFile; 25 if (IsUgmanagerActive()) //集成环境下 26 { 27 //设置默认命名为自动生成 28 UF_CLONE_naming_technique_t naming_technique = UF_CLONE_autogen; 29 UF_CLONE_set_def_naming(naming_technique); 30 31 //获取克隆后的part名,仅限于集成环境下 32 char* outputFile = NULL; 33 UF_CLONE_set_naming(fileName.c_str(), naming_technique, NULL); 34 UF_CLONE_ask_naming(fileName.c_str(), &naming_technique, &outputFile); 35 tmpOutputFile = outputFile; 36 } 37 else //本地 38 { 39 UF_CLONE_naming_technique_t naming_technique = UF_CLONE_naming_rule; 40 UF_CLONE_set_def_naming(naming_technique); 41 42 //定义命名规则 43 UF_CLONE_name_rule_def_t name_rule; 44 name_rule.type = UF_CLONE_append_string; 45 name_rule.base_string = ""; 46 name_rule.new_string = "Clone"; 47 48 //设置命名规则 49 UF_CLONE_set_name_rule(&name_rule, &naming_failures); 50 if (naming_failures.n_failures > 0) 51 { 52 UF_free_string_array(naming_failures.n_failures, naming_failures.input_names); 53 UF_free_string_array(naming_failures.n_failures, naming_failures.output_names); 54 UF_free(naming_failures.statuses); 55 } 56 57 string dirName; 58 string tmpFileName; 59 SplitFileName(fileName, dirName, tmpFileName); 60 vector<string> outputList; 61 SplitStringToList(tmpFileName, ".", outputList); 62 tmpOutputFile = outputDirectory + "\" + outputList[0] + "Clone." + outputList[1]; 63 } 64 65 //设置是否空运行 66 UF_CLONE_set_dryrun(isDryrun); 67 68 //执行克隆操作 69 UF_CLONE_perform_clone(&naming_failures); 70 if (naming_failures.n_failures > 0) 71 { 72 UF_free_string_array(naming_failures.n_failures, naming_failures.input_names); 73 UF_free_string_array(naming_failures.n_failures, naming_failures.output_names); 74 UF_free(naming_failures.statuses); 75 } 76 77 UF_CLONE_terminate(); 78 79 return tmpOutputFile; 80 }
- IsUgmanagerActive()、SplitFileName()、SplitStringToList()写法如链接所示,NX二次开发-NX是否处于集成环境下、NX二次开发-拆分路径为文件夹和文件名、NX二次开发-以指定字符分割字符串