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二次开发-以指定字符分割字符串