【NX二次开发】获取两个面之间的所有面

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

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二次开发】获取两个面之间的所有面的更多相关文章
- NX二次开发-获取WCS坐标系的原点坐标和矩阵标识
函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...
- NX二次开发-获取WCS标识
函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...
- NX二次开发-获取切换按钮的当前状态UF_MB_ask_toggle_state
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- 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 ...
- NX二次开发-获取面的法向向量UF_MODL_ask_face_data
NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...
- NX二次开发-获取WCS标识UF_CSYS_ask_wcs
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...
- NX二次开发-获取坐标系信息UF_CSYS_ask_csys_info
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...
- NX二次开发-获取矩阵值UF_CSYS_ask_matrix_values
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...
- NX二次开发-获取工程图尺寸的值UF_DRF_ask_dim_info
UF_initialize(); //遍历所有尺寸 ; tag_t DimTag = NULL_TAG; UF_OBJ_cycle_objs_in_part1(UF_PART_ask_display_ ...
随机推荐
- 取消本地SVN文件夹与服务器的关联
方法一. 1.新建文本文档,添加内容如下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Fold ...
- 2020BUAA 软工-结对作业
结对作业 项目 内容 北航2020软工 班级博客 作业要求 具体要求 1.在文章开头给出教学班级和可克隆的 GitHub 项目地址(例子如下).(1') 教学班级 005 项目地址 GitHub 2. ...
- 笔记·RCNN系相关
这篇博客总述了从RCNN到Mask RCNN的发展过程 https://blog.csdn.net/heavenpeien/article/details/80534963 简单的说,Fast RCN ...
- CRM帮助B2B企业持续改善战略决策「下篇」
尽管数据早已深入人心,但依然有相当比率的B2B企业在管理和战略决策时依赖直觉而不是客户数据.不停变化的B2B市场表明了以客户为中心的趋向和格局,CRM客户管理系统能够协助您更好的使用客户数据并最大限度 ...
- mybaties longtext 类型不能映射到自动生成的文件
假设数据库里有 fun_detail 这样一个字段. 使用 MyBatis Generator 生成的 XXExample 文件,发现没有 fun_detail 这个字段. 需要加一行: <co ...
- mysql 使用 source/mysqldump 命令导入/导出文件信息
要导入/导出数据库信息,使用 mysql 的source命令可以方便快速的处理 以MAC为例: 一.mysqldump命令导出SQL文件 /usr/local/mysql/bin/mysqldump ...
- [bug] org.apache.spark.sql.AnalysisException: Table or view not found spark
参考 https://blog.csdn.net/weixin_44634893/article/details/89629399
- 理解RESTful架构——Restful API设计指南
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- Ansible_使用Ansible galaxy部署角色
一.介绍Anisble galaxy 1.介绍Ansibleu galaxy 1️⃣:Ansible Galaxy (官网:https://galaxy.ansible.com)是一个Ansible内 ...
- nginx重定向rewrite
引入rewrite vim /etc/nginx/conf.d/mobile_pc.conf server{ listen 80; server_name www.zls.com zls.com; r ...