【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_ ...
随机推荐
- java之Map和Collection
java中保存对象的容器可分为两类: 1.Map.Map是以键值对的形式来保存一组对象,可以通过键来查找值. 2.Collection.用来保存独立对象的序列.Collection又可分为三种类型: ...
- Mac 解压缩软件-keka
去官网 GitHub地址 功能预览
- 手写一个LRU工具类
LRU概述 LRU算法,即最近最少使用算法.其使用场景非常广泛,像我们日常用的手机的后台应用展示,软件的复制粘贴板等. 本文将基于算法思想手写一个具有LRU算法功能的Java工具类. 结构设计 在插入 ...
- C++入门教程之一:Hello world
C++入门教程之一:Hello world C++是各位程序员跳不过的一个坑,也是各位想学编程的人必备的知识,更是各大比赛(如NOI)的官方指定语言. 在TIOBE(一个编程语言社区排行榜)中,截止2 ...
- Java 并发编程(一) → LockSupport 详解
开心一刻 今天突然收到花呗推送的消息,说下个月 9 号需要还款多少钱 我就纳了闷了,我很长时间没用花呗了,怎么会欠花呗钱? 后面我一想,儿子这几天玩了我手机,是不是他偷摸用了我的花呗 于是我找到儿子问 ...
- [bug] conda:Segmentation fault (core dumped)
参考 https://www.jianshu.com/p/5e230ef8a14d
- tuple必须加上逗号
tuple支持 空 元组 不加逗号 >>> tup4 = () tuple非空的元组必须加上逗号>>> tup4 = (55,)>>> tup4 ...
- MyBatis 映射文件详解(六)
MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...
- python 中 list 的append与extend区别
append 添加的是一个对象 extend 添加的是序列与原序列合并
- Windows 10正式版官方原版镜像!(备忘)
本文搜集整理微软官方发布的Windows 10正式版镜像下载链接,从RTM原始正式版开始,按照时间倒序排列,即越往上的越新. 注意:以下资源均来自于微软官方原版,ed2k可视为P2P下载链接.下载完成 ...