NX二次开发-算法篇-找相切面

方法1:通过判断相邻面公共边的光顺性来找相切面

 1 #include <uf.h>
 2 #include <uf_modl.h>
 3 #include <uf_obj.h>
 4
 5
 6     UF_initialize();
 7
 8
 9     //获取面的所有边
10     uf_list_p_t edge_list;
11     UF_MODL_ask_face_edges(42084, &edge_list);
12
13     //获取链表的数量
14     int count;
15     UF_MODL_ask_list_count(edge_list, &count);
16
17     for (int i = 0; i < count; i++)
18     {
19         //获取链表里的tag
20         tag_t EdgeTag = NULL_TAG;
21         UF_MODL_ask_list_item(edge_list, i, &EdgeTag);
22
23         //获取边的光顺性
24         logical is_smooth;
25         UF_MODL_ask_edge_smoothness(EdgeTag, 0, &is_smooth);
26
27         if (is_smooth == true)
28         {
29             //边找面
30             uf_list_p_t face_list;
31             UF_MODL_ask_edge_faces(EdgeTag, &face_list);
32
33             //获得链表数量
34             int face_count;
35             UF_MODL_ask_list_count(face_list, &face_count);
36             for (int j = 0; j < face_count; j++)
37             {
38                 //获取链表里的tag
39                 tag_t FaceTag = NULL_TAG;
40                 UF_MODL_ask_list_item(face_list, j, &FaceTag);
41
42                 //设置颜色
43                 UF_OBJ_set_color(FaceTag, 186);
44             }
45         }
46
47     }
48
49
50     UF_terminate();

方法2:使用NXOPEN相切面方法

 1 #include <uf_defs.h>
 2 #include <uf_ui_types.h>
 3 #include <iostream>
 4 #include <NXOpen/Session.hxx>
 5 #include <NXOpen/UI.hxx>
 6 #include <NXOpen/NXMessageBox.hxx>
 7 #include <NXOpen/Callback.hxx>
 8 #include <NXOpen/NXException.hxx>
 9 #include <NXOpen/BlockStyler_UIBlock.hxx>
10 #include <NXOpen/BlockStyler_BlockDialog.hxx>
11 #include <NXOpen/BlockStyler_PropertyList.hxx>
12 #include <NXOpen/BlockStyler_Group.hxx>
13 #include <NXOpen/BlockStyler_FaceCollector.hxx>
14 #include <uf.h>
15 #include <uf_obj.h>
16 #include <NXOpen/NXObjectManager.hxx>
17 #include <NXOpen/PartCollection.hxx>
18 #include <NXOpen/Face.hxx>
19 #include <NXOpen/FaceTangentRule.hxx>
20 #include <NXOpen/ScCollectorCollection.hxx>
21 #include <NXOpen/ScRuleFactory.hxx>
22
23
24         UF_initialize();
25
26         //NXOPEN初始化
27         NXOpen::Session *theSession = NXOpen::Session::GetSession();
28         NXOpen::Part *workPart(theSession->Parts()->Work());
29         NXOpen::Part *displayPart(theSession->Parts()->Display());
30
31         //选择面控件
32         PropertyList* FaceSelectProps = face_select0->GetProperties();
33         std::vector<NXOpen::TaggedObject*> faces = FaceSelectProps->GetTaggedObjectVector("SelectedObjects");
34         delete FaceSelectProps;
35         FaceSelectProps = NULL;
36
37         tag_t FaceTag = faces[0]->Tag();
38
39         //对选中的面设置颜色
40         UF_OBJ_set_color(FaceTag, 186);
41
42         //给入一个面
43         NXOpen::Face *face1(dynamic_cast<NXOpen::Face *>(NXOpen::NXObjectManager::Get(FaceTag)));
44
45         //使用NXOPEN相切面规则
46         std::vector<NXOpen::Face *> boundaryFaces1(0);
47         NXOpen::FaceTangentRule *faceTangentRule1;
48         faceTangentRule1 = workPart->ScRuleFactory()->CreateRuleFaceTangent(face1, boundaryFaces1, 0.050000000000000003);
49         std::vector<NXOpen::SelectionIntentRule *> rules1(1);
50         rules1[0] = faceTangentRule1;
51
52         NXOpen::ScCollector* scCollector1 = workPart->ScCollectors()->CreateCollector();
53         scCollector1->ReplaceRules(rules1, false);
54
55         std::vector<NXOpen::TaggedObject*> BB = scCollector1->GetObjects();
56         for (int i = 0; i < BB.size(); i++)
57         {
58             UF_OBJ_set_color(BB[i]->Tag(), 1);
59         }
60
61         UF_terminate();

原文地址:https://www.cnblogs.com/nxopen2018/p/11070054.html

时间: 2024-08-30 06:42:04

NX二次开发-算法篇-找相切面的相关文章

NX二次开发-算法篇-随便找个不规则的体,找出面的中心点的Z坐标最高和最低的面,高亮显示

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_evalsf.h> 5 #include <NXOpen/Body.hxx> 6 #include <NXOpen/Face.hxx> 7 #include <uf_disp.h> 8 9 10 public: 11 12 void SelectBody(); 13 14 void SelectUVFace::SelectBody() 15 { 16

NX二次开发-算法篇-创建最大边界包容盒

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_obj.h> 5 #include <uf_modl.h> 6 #include <uf_part.h> 7 8 UF_initialize(); 9 10 //遍历当前显示部件所有体 11 std::vector<tag_t> SolidVector; 12 tag_t ObjectTag = NULL_TAG; 13 int Type, SubTy

NX二次开发-算法篇-判断找到两个数组里不相同的对象

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_curve.h> 5 #include <uf_modl.h> 6 #include <vector> 7 #include <uf_disp.h> 8 9 10 UF_initialize(); 11 12 //第一步,创建5条直线 13 UF_CURVE_line_t Coords1; 14 Coords1.start_point[0] = 0.0

NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_ui.h> 5 #include <uf_curve.h> 6 #include <uf_obj.h> 7 #include <uf_part.h> 8 #include <vector> 9 #include <algorithm> 10 11 using namespace std; 12 13 14 UF_initiali

NX二次开发-算法篇-冒泡排序(例子:遍历所有点并排序)

1 NX9+VS2012 2 3 4 #include <uf.h> 5 #include <uf_ui.h> 6 #include <uf_curve.h> 7 #include <uf_obj.h> 8 #include <uf_part.h> 9 #include <vector> 10 11 using namespace std; 12 13 14 15 UF_initialize(); 16 17 //遍历前有一点需要注意

NX二次开发-NX+VS写代码设断点调试技巧

在做NX二次开发的时候写完代码,编译可以通过,但是执行的时候却没有反应,或者得到的结果不对,说明肯定有地方传值出错了.我在查找代码错误的时候有几种方法:1.uc1601打印函数输入和输出的值看对不对.2.VS设断点-添加进程调试,来看输入输出值对不对3.UF_CALL也就是UF_get_fail_message这个函数,来看函数自己用的对不对.4.查看NX-Help-LogFile(日志),拖到最后看提示了哪些错误. 我一般用的比较多的是设断点调试,这里先说设断点调试.其他方法改天再写. 写举一

NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))

在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article/details/88922030 这篇博客,要不然你听不懂我下面在说什么. 版本NX11+VS2013+office2016 首先我们通过NX开发向导创建了一个模板. 先把项目属性改成多字节.下面我们把前面做的MFC项目里的几个EXCAL头文件和stdafx一块拷过来,加到NX的项目里. 在NX的

NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的方法,无论C++还是C#还是VB方式思路都是一样的.先介绍用MFC去做,然后在写一篇博客介绍怎么在NX的二次开发的向导模板里去做.NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article

Visual Stadio 与NX二次开发的环境配置(以VS2010、NX10.0为例)

问题描述: 许多博文发布了关于Visual Stadio 与NX二次开发的环境配置,这些博文的提示事修改了文件NX10_Open.vsz中的引擎为10.0,但实际结果是创建C++引导失败. 问题解决概述: 创建正确引导应该同时修改NX10_Open.vsz与NX10_NXOpenCPP.vsz两个文件的引擎版本号. 解决步骤: 将NX10.0 UGOPEN目录下的所有文件夹(VB.VC.VC#)复制,并粘贴到Visual Stadio 2010安装目录下与对应的文件夹合并即可(覆盖). 例如,将