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, SubType, Body_Type;
14     int Count = 0;
15     char msg[256];
16     UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_solid_type, &ObjectTag);
17     while (ObjectTag != NULL_TAG)
18     {
19         UF_OBJ_ask_type_and_subtype(ObjectTag, &Type, &SubType);
20         if (SubType == UF_solid_body_subtype)
21         {
22             UF_MODL_ask_body_type(ObjectTag, &Body_Type);
23             if (Body_Type == UF_MODL_SOLID_BODY)
24             {
25                 UF_OBJ_set_color(ObjectTag, 186);
26                 SolidVector.push_back(ObjectTag);
27                 Count++;
28             }
29         }
30         UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_solid_type, &ObjectTag);
31     }
32
33     //求所有体的最大边界
34     double MaxBox[6] = {10000, 10000, 10000, -10000, -10000, -10000};
35     for (int i = 0; i < Count; i++)
36     {
37         double Box[6];
38         UF_MODL_ask_bounding_box(SolidVector[i], Box);
39         MaxBox[0] = MaxBox[0] < Box[0]? MaxBox[0]:Box[0];
40         MaxBox[1] = MaxBox[1] < Box[1]? MaxBox[1]:Box[1];
41         MaxBox[2] = MaxBox[2] < Box[2]? MaxBox[2]:Box[2];
42         MaxBox[3] = MaxBox[3] > Box[3]? MaxBox[3]:Box[3];
43         MaxBox[4] = MaxBox[4] > Box[4]? MaxBox[4]:Box[4];
44         MaxBox[5] = MaxBox[5] > Box[5]? MaxBox[5]:Box[5];
45     }
46
47     //转换
48     char Length[200], Width[200], Height[200];
49     sprintf(Length, "%f", MaxBox[3] - MaxBox[0]);
50     sprintf(Width, "%f", MaxBox[4] - MaxBox[1]);
51     sprintf(Height, "%f", MaxBox[5] - MaxBox[2]);
52
53     char* Len[3];
54     Len[0] = Length;
55     Len[1] = Width;
56     Len[2] = Height;
57
58     //创建块
59     double Ori[3] = {MaxBox[0], MaxBox[1], MaxBox[2]};
60     tag_t BlkTag = NULL_TAG;
61     UF_MODL_create_block1(UF_NULLSIGN, Ori, Len, &BlkTag);
62
63     //特征找体
64     tag_t BodyTag = NULL_TAG;
65     UF_MODL_ask_feat_body (BlkTag,&BodyTag);
66
67     //设置透明度
68     UF_OBJ_set_translucency(BodyTag, 50);
69
70     UF_terminate();

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

时间: 2024-10-10 18:30:29

NX二次开发-算法篇-创建最大边界包容盒的相关文章

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二次开发-算法篇-随便找个不规则的体,找出面的中心点的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:通过判断相邻面公共边的光顺性来找相切面 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

NX二次开发-UFUN建模创建特征组UF_MODL_create_set_of_feature

1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_modl.h> 5 6 UF_initialize(); 7 8 //创建块 9 UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔 10 double Corner_pt[3] = { 0.0, 0.0, 0.0 };//设置原点 11 char *Edge_Len[3] = { "100", "100", &q

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

iOS开发多线程篇—创建线程

iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 -