今天看到胡工对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的更多相关文章

  1. NX二次开发-获取WCS坐标系的原点坐标和矩阵标识

    函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...

  2. NX二次开发-获取WCS标识

    函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...

  3. NX二次开发-获取面的法向向量UF_MODL_ask_face_data

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...

  4. NX二次开发-获取切换按钮的当前状态UF_MB_ask_toggle_state

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  5. 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 ...

  6. NX二次开发-获取WCS标识UF_CSYS_ask_wcs

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  7. NX二次开发-获取坐标系信息UF_CSYS_ask_csys_info

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  8. NX二次开发-获取矩阵值UF_CSYS_ask_matrix_values

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  9. NX二次开发-获取工程图尺寸的值UF_DRF_ask_dim_info

    UF_initialize(); //遍历所有尺寸 ; tag_t DimTag = NULL_TAG; UF_OBJ_cycle_objs_in_part1(UF_PART_ask_display_ ...

随机推荐

  1. MySQL 8.0配置文件my.ini文件位置

    文件位置 C:\ProgramData\MySQL\MySQL Server 8.0 如果看不到ProgramData文件夹,可能是被隐藏了.打开显示隐藏文件夹选项即可

  2. 使用TK框架中selectByPrimaryKey

    使用TK框架中selectByPrimaryKey(Object key),需要注意要在entity里注明哪个字段是主键,否则会不知道哪个是PrimaryKey会随机一个字段就报错. 如下: 引入 i ...

  3. python工业互联网应用实战14——单元测试覆盖率

    前面的章节我们完成了任务管理主要功能的开发及单元测试编写,可如何知道单元测试效果怎么样呢?测试充分吗?还有没有没有测到的地方呢? 本章节我们介绍一个统计测试代码覆盖率的利器Coverage,Cover ...

  4. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...

  5. 2-9-9-12分页机制(xp)

    10-10-12分页限制 10-10-12分页因为页表PEB只有四个字节所以只能访问2^32 = 4GB物理地址空间,现在的物理内存都大于4GB为了能访问到更多的物理内存2-9-9-12将PEB的大小 ...

  6. java集合-哈希表HashMap

    一.简介 HashMap是一个散列表,是一种用于存储key-value的数据结构. 二.类图 public class HashMap<K,V> extends AbstractMap&l ...

  7. 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术

    在大数据项目开发过程中,ETL(Extract-Transform-Load)是必不可少.即便目前 JSON 非常流行,开发人员也有必定会有对远古系统的挑战,而 XML 格式的数据源作为经典存在浑身上 ...

  8. mysql注入getshell

    0x00 利用条件 root权限 secure_file_priv=为空或者在网站根目录下(网站根目录为d:\www,secure_file_priv=d:\也可以) 知道绝对路径 gpc关闭,这个应 ...

  9. [刷题] 70 Climbing Stairs

    要求 楼梯共有n个台阶,每次上一个台阶或两个台阶,一共有多少种上楼梯的方法? 示例 输入:n=3 [1,1,1],[1,2,],[2,1] 输出:n=3 实现 自顶向下(递归) 递归 1 class ...

  10. [Qt] 事件机制(二)

    在samp4_1中加一个小功能,点击右上角关闭按钮时,弹出"确认是否关闭"的消息框.如果点"yes"则关闭,如果点"No"则不关闭 在wid ...