【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_ ...
随机推荐
- <JVM下篇:性能监控与调优篇>05-分析GC日志
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- 日志框架整合报错Class path contains multiple SLF4J bindings.
在进行SSM框架的日志框架统一管理时,报错Class path contains multiple SLF4J bindings 如下图 意思是类路径下包含重复的SLF4J绑定,然后给出了重复的两个全 ...
- JDBC相关配置和操作
获取数据库连接的几种方式 ps.数据库URL : String url = "jdbc:mysql://localhost:3306/dailytext?useSSL=false&s ...
- 数据库导入时出现“2006 - MySQL server has gone away”问题的解决(windows)
1.查到文件my.ini,在文件最后([mysqld]段最后),修改"max_allowed_packet = 50M",添加"interactive_timeout = ...
- Fiddler抓包工具使用记录
前言 Fiddler是一款强大的Web调试代理工具,又称抓包软件,本文记录如何使用Flidder进行抓包 Fiddler官网:https://www.telerik.com/fiddler 下载安装 ...
- 缓存架构中的服务详解!SpringBoot中二级缓存服务的实现
创建缓存服务 创建缓存服务接口项目 创建myshop-service-redis-api项目,该项目只负责定义接口 创建项目的pom.xml: <?xml version="1.0&q ...
- 风变编程(Python自学笔记)第12关-我们都是中国人
1.类的个例叫做实例:类,是对某个群体的统称(类是某个特定的群体),实例是群体中某个具体的个体. 2.Python中的对象等于类和实例的集合. 3. 类的创建:class+类名+冒号,后面语句要缩进. ...
- 安装centos7提示 please make your choice from above
分别输入"1" "2" "q" "yes",如上图 释义如下:
- linux服务器默认使用中文字符集zh_CN.UTF-8
linux服务器默认使用中文字符集zh_CN.UTF-8 一.问题描述和相关概念 linux服务器的字符集设置可能影响到网站页面出现 "???" 等问号乱码,还有可能导致文件中的汉 ...
- Python re 截取文本中IP地址及用户名
文本示例: ts=2019-07-10T06:43:06523942Z pid=1875 tid=6320 version=e73c536 proto=http id=5a61a613e395f883 ...