已知两个蓝色面,使用遍历面的方法求紫色面。算法例子:

 1 bool is_NeighborFace(tag_t tagFace1, tag_t tagFace2)
2 {
3 vector<tag_t> vecEdges1;
4 uf_list_p_t list1 = NULL;//定义链表
5 UF_MODL_create_list(&list1); //创建链表
6 UF_MODL_ask_face_edges(tagFace1, &list1);
7 int count1 = 0;
8 UF_MODL_ask_list_count(list1, &count1);//链表计数
9 for (int i = 0; i < count1; i++)
10 {
11 tag_t tagEdge = NULL_TAG;
12 UF_MODL_ask_list_item(list1, i, &tagEdge); //接收链表数据
13 vecEdges1.push_back(tagEdge);
14 }
15 UF_free(list1); //释放链表指针
16 list1 = NULL;
17
18 vector<tag_t> vecEdges2;
19 uf_list_p_t list2 = NULL;//定义链表
20 UF_MODL_create_list(&list2); //创建链表
21 UF_MODL_ask_face_edges(tagFace2, &list2);
22 int count2 = 0;
23 UF_MODL_ask_list_count(list2, &count2);//链表计数
24 for (int i = 0; i < count2; i++)
25 {
26 tag_t tagEdge = NULL_TAG;
27 UF_MODL_ask_list_item(list2, i, &tagEdge); //接收链表数据
28 vecEdges2.push_back(tagEdge);
29 }
30 UF_free(list2); //释放链表指针
31 list2 = NULL;
32
33 for (int i = 0; i < vecEdges1.size(); i++)
34 {
35 for (int j = 0; j < vecEdges2.size(); j++)
36 {
37 if (vecEdges1[i] == vecEdges2[j])
38 {
39 return true;
40 }
41 }
42 }
43 return false;
44 }

 1 int get_NeighborFaces(tag_t tagFace, vector<tag_t> *vecFaces)
2 {
3 vector<tag_t> vecAllFaces;
4 vector<tag_t> vecEdges;
5 //获取面的边【自定义函数】
6 get_face_edges(tagFace, 0, &vecEdges);
7 for (int i = 0; i < vecEdges.size(); i++)
8 {
9 vector<tag_t> vecTempFaces;
10 //获取边的面【自定义函数】
11 get_edge_faces(vecEdges[i], &vecTempFaces);
12 for (int j = 0; j < vecTempFaces.size(); j++)
13 {
14
15 vecAllFaces.push_back(vecTempFaces[j]);
16 }
17 }
18 //排序去重【自定义函数】
19 Setting_Order(vecAllFaces, vecFaces, 3);
20
21 for (vector<tag_t>::iterator itor = (*vecFaces).begin(); itor != (*vecFaces).end(); /*++itor*/)
22 {
23 if (*itor == tagFace)
24 {
25 itor = (*vecFaces).erase(itor);
26 }
27 else
28 {
29 ++itor;
30 }
31 }
32 return 0;
33 }
 1 int get_faces_Between_two_faces(tag_t tagFace1, tag_t tagFace2, vector<tag_t> *vecFaces)
2 {
3 //如果输入的两个面相邻则return
4 if (is_NeighborFace(tagFace1, tagFace2)) return 0;
5
6 vector<tag_t> vecT1;
7 vecT1.push_back(tagFace1);
8 int m = 0;
9 bool isNOK = true;
10 while (isNOK)
11 {
12 vector<tag_t> vecTemp;
13 vecTemp.clear();
14
15 //输入一个面输出与他相邻的面 【自定义函数】
16 get_NeighborFaces(vecT1[m], &vecTemp);
17
18 vector<tag_t> vecT1_temp;
19 vecT1_temp.clear();
20 for (int i = 0; i < vecTemp.size(); i++)
21 {
22 vecT1_temp.push_back(vecTemp[i]);
23 }
24 //排序去重 【自定义函数】
25 Setting_Order(vecT1_temp, &vecT1, 3);
26
27 for (int i = 0; i < vecT1.size(); i++)
28 {
29 if (vecT1[i] == tagFace2) isNOK = false;
30 }
31
32 m++;
33 }
34
35 vector<tag_t> vecT2;
36 vecT2.push_back(tagFace2);
37 m = 0;
38 isNOK = true;
39 while (isNOK)
40 {
41 vector<tag_t> vecTemp;
42 vecTemp.clear();
43 //输入一个面输出与他相邻的面 【自定义函数】
44 get_NeighborFaces(vecT2[m], &vecTemp);
45
46 vector<tag_t> vecT2_temp;
47 vecT2_temp.clear();
48 for (int i = 0; i < vecTemp.size(); i++)
49 {
50 vecT2_temp.push_back(vecTemp[i]);
51 }
52 //排序去重 【自定义函数】
53 Setting_Order(vecT2_temp, &vecT2, 3);
54
55 for (int i = 0; i < vecT2.size(); i++)
56 {
57 if (vecT2[i] == tagFace1) isNOK = false;
58 }
59
60 m++;
61 }
62
63 for (int i = 0; i < vecT1.size(); i++)
64 {
65 for (int j = 0; j < vecT2.size(); j++)
66 {
67 if (vecT1[i] == vecT2[j])
68 {
69 (*vecFaces).push_back(vecT1[i]);
70 }
71 }
72 }
73
74 for (vector<tag_t>::iterator itor = (*vecFaces).begin(); itor != (*vecFaces).end(); /*++itor*/)
75 {
76 if ((*itor == tagFace1) || (*itor == tagFace2))
77 {
78 itor = (*vecFaces).erase(itor);
79 }
80 else
81 {
82 ++itor;
83 }
84 }
85
86 return 0;
87 }

【NX二次开发】获取两个面之间的所有面的更多相关文章

  1. NX二次开发-获取WCS坐标系的原点坐标和矩阵标识

    函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...

  2. NX二次开发-获取WCS标识

    函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...

  3. NX二次开发-获取切换按钮的当前状态UF_MB_ask_toggle_state

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  4. NX二次开发-获取按钮的ID UF_MB_ask_button_id

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  5. NX二次开发-获取面的法向向量UF_MODL_ask_face_data

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...

  6. NX二次开发-获取WCS标识UF_CSYS_ask_wcs

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  7. NX二次开发-获取坐标系信息UF_CSYS_ask_csys_info

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  8. NX二次开发-获取矩阵值UF_CSYS_ask_matrix_values

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  9. NX二次开发-获取工程图尺寸的值UF_DRF_ask_dim_info

    UF_initialize(); //遍历所有尺寸 ; tag_t DimTag = NULL_TAG; UF_OBJ_cycle_objs_in_part1(UF_PART_ask_display_ ...

随机推荐

  1. 在IDEA配置tomcat

    springboot的项目写多了,导致都快忘记怎么在idea中配置tomcat 点击加号,而不是Templates 选择Tomcat 服务器的Local 服务器配置 部署配置,选择Artifact 到 ...

  2. 【】POST、GET、RequestParam、ReqestBody、FormData、request payLoad简单认知

    背景: 使用vue+axios方式代替ajax后向后台发送数据出现问题了,controller获取不到数据.然后查.找.查.找中似乎找到一些门道.以下列出总结性的东西来记录自己的思考成果,仅供参考,不 ...

  3. 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出

    目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...

  4. 技术干货 | 基于MindSpore更好的理解Focal Loss

    [本期推荐专题]物联网从业人员必读:华为云专家为你详细解读LiteOS各模块开发及其实现原理. 摘要:Focal Loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失 ...

  5. git远端账号问题

    1. gitlab密码修改后git因保存密码无法下载,403 在.git/config添加如下 [credential] helper = store 添加了此项配置之后, github的账号信息就会 ...

  6. [刷题] PTA 02-线性结构4 Pop Sequence

    模拟栈进出 方法一: 1 #include<stdio.h> 2 #define MAXSIZE 1000 3 4 typedef struct{ 5 int data[MAXSIZE]; ...

  7. Docker------Idea连接远程并生成和上传镜像

    1.Docker开启远程访问连接 备注: 1)Linux是CentOS7版本 2)安装Docker可参考: https://www.cnblogs.com/tianhengblogs/p/125202 ...

  8. Linux工程师必备的88个监控工具

    Linux工程师必备的88个监控工具 https://learn-linux.readthedocs.io/zh_CN/latest/maintenance/monitor/tools/80-linu ...

  9. rsync同步遇到的报错和解决办法

    rsync同步遇到的报错和解决办法   科技小能手 2017-11-12 18:27:00 浏览1125 配置 code 同步 open stream file read   在同步的客户端操作: [ ...

  10. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...