1. 程式人生 > 實用技巧 >NX二次開發-克隆裝配

NX二次開發-克隆裝配

NX二次開發-克隆裝配

  1. 克隆操作
 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 (NXCommon::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 CFI::SplitFileName(fileName, dirName, tmpFileName); 60 vector<string> outputList; 61 CFI::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 }
  1. 是否在整合環境下
1 bool IsUgmanagerActive()
2 {
3     logical isActive = false;
4     UF_is_ugmanager_active(&isActive);
5 
6     return isActive;
7 }