【NX二次开发】获取对象边界包容盒的三个函数UF_MODL_ask_bounding_box
今天看到胡工对bounding_box的分享,我也来测试一番(原帖地址:https://www.ugapi.com/thread-10287.html)
获取对象的边界盒子的三个函数:
1 UF_MODL_ask_bounding_box //只能得到绝对坐标系下的边界盒子,速度快,结果不精确
2 UF_MODL_ask_bounding_box_aligned //可以得到指定坐标系下的盒子,速度快,结果不精确
3 UF_MODL_ask_bounding_box_exact //可以得到指定坐标系下的盒子,速度慢,结果精确
运行时间测试:

生成上面这个3D产品的边界包容盒100次,测试的结果为:

UF_MODL_ask_bounding_box_exact的速度还是挺慢的
函数例子:
1 //box
2 #include "Text.h"
3 static int init_proc(UF_UI_selection_p_t select, void *user_data)
4 {
5 int errorCode = 0;
6 int num_triples = 1; //选择类型 数量
7 UF_UI_mask_t mask_triples[] = { UF_solid_type,0,0 }; //定义选择类型
8
9 errorCode = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples);
10 if (errorCode == 0)
11 {
12 return UF_UI_SEL_SUCCESS;
13 }
14 else
15 {
16 return UF_UI_SEL_FAILURE;
17 }
18 }
19
20 extern DllExport void ufusr(char *param, int *returnCode, int rlen)
21 {
22 UF_initialize();
23 char *message = "提示";
24 char *title = "标题";
25 int scope = UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;//选取范围
26 int response;
27 int count = 0;
28 tag_p_t object;
29 UF_UI_select_with_class_dialog(message, title, scope, init_proc, NULL, &response, &count, &object);
30 for (int i = 0; i < count; i++)
31 {
32 tag_t tagObj = object[i];
33 UF_DISP_set_highlight(tagObj, 0);
34 //---------------------- Enter your callback code here -------------------
35 double block_corner_pt[3];
36 char charC[132] = "";
37 char charK[132] = "";
38 char charG[132] = "";
39 char * edge_len[3] = { "","","" };
40
41 //UF_MODL_ask_bounding_box
42 double bounding_box[6];
43 UF_MODL_ask_bounding_box(tagObj, bounding_box);
44 //创建方块
45 tag_t tagBox;
46 block_corner_pt[0] = bounding_box[0];
47 block_corner_pt[1] = bounding_box[1];
48 block_corner_pt[2] = bounding_box[2];
49 sprintf(charC, "%f", abs(bounding_box[0]-bounding_box[3]));
50 sprintf(charK, "%f", abs(bounding_box[1]-bounding_box[4]));
51 sprintf(charG, "%f", abs(bounding_box[2]-bounding_box[5]));
52 edge_len[0] = charC;
53 edge_len[1] = charK;
54 edge_len[2] = charG;
55 UF_MODL_create_block1(UF_NULLSIGN, block_corner_pt, edge_len, &tagBox);
56
57
58 //UF_MODL_ask_bounding_box_aligned
59 tag_t tagWcsTemp = NULL_TAG;
60 UF_CSYS_ask_wcs(&tagWcsTemp);
61 double pDblMin_corner[3] = { 0,0,0 };
62 double pDblminDirections[3][3];
63 double pDbDistances[3] = { 0,0,0 };
64 UF_MODL_ask_bounding_box_aligned(tagObj, tagWcsTemp, FALSE, pDblMin_corner, pDblminDirections, pDbDistances);
65 //创建方块
66 block_corner_pt[0] = pDblMin_corner[0];
67 block_corner_pt[1] = pDblMin_corner[1];
68 block_corner_pt[2] = pDblMin_corner[2];
69 sprintf(charC, "%f", pDbDistances[0]);
70 sprintf(charK, "%f", pDbDistances[1]);
71 sprintf(charG, "%f", pDbDistances[2]);
72 edge_len[0] = charC;
73 edge_len[1] = charK;
74 edge_len[2] = charG;
75 UF_MODL_create_block1(UF_NULLSIGN, block_corner_pt, edge_len, &tagBox);
76
77
78 //UF_MODL_ask_bounding_box_exact
79 double pDblBodyBox[3];
80 double directions[3][3];
81 double distances[3];
82 UF_MODL_ask_bounding_box_exact(tagObj, tagWcsTemp, pDblBodyBox, directions, distances);
83 //创建方块
84 block_corner_pt[0] = pDblBodyBox[0];
85 block_corner_pt[1] = pDblBodyBox[1];
86 block_corner_pt[2] = pDblBodyBox[2];
87 sprintf(charC, "%f", distances[0]);
88 sprintf(charK, "%f", distances[1]);
89 sprintf(charG, "%f", distances[2]);
90 edge_len[0] = charC;
91 edge_len[1] = charK;
92 edge_len[2] = charG;
93 UF_MODL_create_block1(UF_NULLSIGN, block_corner_pt, edge_len, &tagBox);
94
95
96 //------------------------------------------------------------------------
97 }
98 UF_terminate();
99 }
100
101 extern int ufusr_ask_unload(void)
102 {
103 return (UF_UNLOAD_IMMEDIATELY);
104 }
效果:

【NX二次开发】获取对象边界包容盒的三个函数UF_MODL_ask_bounding_box的更多相关文章
- 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_MODL_ask_face_data
NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...
- 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二次开发-获取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_ ...
随机推荐
- JetBrains系列软件用法
IDEA JSON格式化 IDEA的JSON_Formatter插件,下载地址 安装方式:File->Settings->Plugins,然后选择INstall plugin from d ...
- 使用FileStream读写数据
这节讲一下使用FileStream读写数据,这是一个比较基础的流. FileStream类只能处理原始字节,所以它可以处理任何类型的文件. 先看一下它的构造方法: FileStream fs = ne ...
- TLB和CPU缓存
TLB 如果每次应用程序访问一个线性地址都需要先解析(查PDT,PTT)那么效率十分低,为了提高执行效率CPU在CPU内部建立了一个TLB表,此表和寄存器一样访问速度极高.其会记录线性地址和物理地址之 ...
- char值不能直接用作数组下标
#include <stdio.h> //用 char 的值作为数组下标(例如,统计字符串中每个字符出现的次数),要考虑到 //char 可能是负数.有的人考虑到了,先强制转型为 unsi ...
- RTTI之typeid运算符
1 #include <iostream> 2 #include <cstdlib> 3 #include <ctime> 4 #include <typei ...
- 测试报告$\alpha$
pytorch可视化编程网站VisualPytorch NAG \(\alpha\)版本发布了!点击网址访问:VisualPytorch 一.测试查虫(bug detection) 测试贯穿了开发.集 ...
- 3D深色金属哥特3D项目工具小图标icon高清设计素材
3D深色金属哥特3D项目工具小图标icon高清设计素材
- prometheus node-exporter增加新的自定义监控项
项目中collector中新增加自己所需监控项即可 定义启动node-exporter是传入的参数 var ( phpEndPoint = kingpin.Flag("collector.p ...
- 【转载】一次「Too many open files」故障
一次「Too many open files」故障 发表于2015-08-02 昨天,项目的 ElasticSearch 服务挂了,我说的挂可不是进程没了,因为有 Supervisor 保护,而是服务 ...
- python中类属性和数据属性的解释
python中的类叫class object,类的实例叫instance object. 类 Class Objects 类拥有两种操作,1.类属性 attribute references 2.实例 ...