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 (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 }
  1. IsUgmanagerActive()、SplitFileName()、SplitStringToList()写法如链接所示,NX二次开发-NX是否处于集成环境下NX二次开发-拆分路径为文件夹和文件名NX二次开发-以指定字符分割字符串
posted on 2020-12-14 14:05  不再低调  阅读(958)  评论(0编辑  收藏  举报