【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_ ...
随机推荐
- shell中的引号和转义
引号和转义 Bash 只有一种数据类型,就是字符串.不管用户输入什么数据,Bash 都视为字符串.因此,字符串相关的引号和转义,对 Bash 来说就非常重要. 转义 某些字符在 Bash 里面有特殊含 ...
- 截取字符串长度,超出部分用省略号代替 PHP
function subText($text, $length){ if (mb_strlen($text, 'utf8') > $length) { return mb_substr($tex ...
- python多进程、多线程服务器和客户端的简单实现
使用了多进程的服务器: from SocketServer import TCPServer, ForkingMixIn, ThreadingMixIn, StreamRequestHandler c ...
- Jira&Confluence服务器安装
1.Mysql安装 参考https://confluence.atlassian.com/doc/database-setup-for-mysql-128747.html 创建相应的数据库 CREAT ...
- 027. Python面向对象的__init__方法
__init__魔术方法(构造方法) 触发时机:实例化对象,初始化的时候触发 功能:为对象添加成员 参数:参数不固定,至少一个self参数 返回值:无 基本用法,至少含有一个参数 class MyCl ...
- IDEA 查看类图功能(分析源码的利器)
引言 做过项目开发的童靴,应该会有这样的经历,就是刚进公司领导二话不说直接丢个项目,而且没有任何文档,让熟悉一下,一两周就让上手写代码.打开项目后就看到一堆类源码,完全不知道从何处入手,应该如何分析项 ...
- Java 中布尔(boolean)类型占用多少个字节
为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就 boolean 类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean ...
- 将.netcore5.0(.net5)部署在Ubuntu的docker容器中
环境: 宿主机:winows 10 家庭版 虚拟机管理软件:Hyper-V 虚拟机系统:Ubuntu 20.10 Docker版本:Docker CE 20.10.2 ...
- Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系
在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:<ignore_js_op> 以前一直好奇这几个参数和实际使用的STM32芯片中F ...
- Spring5.0源码学习系列之事务管理概述
Spring5.0源码学习系列之事务管理概述(十一),在学习事务管理的源码之前,需要对事务的基本理论比较熟悉,所以本章节会对事务管理的基本理论进行描述 1.什么是事务? 事务就是一组原子性的SQL操作 ...