【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_ ...
随机推荐
- Portswigger web security academy:DOM Based XSS
Portswigger web security academy:DOM Based XSS 目录 Portswigger web security academy:DOM Based XSS DOM ...
- XCTF-fakebook
fakebook stm的fakebook,乍一看还以为是facebook,果然fake 看题 有登录和注册两个功能点 看了下robots.txt,发现有备份文件 果断下载,内容如下 这里的blog在 ...
- HashMap 的数据结构
目录 content append content HashMap 的数据结构: 数组 + 链表(Java7 之前包括 Java7) 数组 + 链表 + 红黑树(从 Java8 开始) PS:这里的& ...
- Excel-宏与VBA-数据类型
学习视频,本文是观看前视频时做的笔记,手动感谢up. 数据类型 案例 声明一个变量并且赋值 Sub 变量() ' 声明一个变量用Dim,格式就是 Dim 变量名 As 数据类型 Dim Score A ...
- OPC使用思路
- Java_封装
分类(分层)思想 dao层(数据访问层):对数据进行管理的操作(增.删.改.查). 数据库.数组.集合 service层(业务层): 具体做一些业务操作 controller(控制层): 用来接收用户 ...
- FHE-Toolkit 安装
什么是FHE-Toolkit? FHE-Toolkit-linux是用于Linux的IBM全同态加密工具包, 该工具包是一个基于Linux的Docker容器,可演示对加密数据的计算而无需解密, 该工具 ...
- volatile 的使用
① 编译器很聪明,会帮我们做些优化,比如: int a; a = 0; // 这句话可以优化掉,不影响 a 的结果 a = 1; ② 有时候编译器会自作聪明,比如: int *p = ioremap( ...
- 深入源码,深度解析Java 线程池的实现原理
java 系统的运行归根到底是程序的运行,程序的运行归根到底是代码的执行,代码的执行归根到底是虚拟机的执行,虚拟机的执行其实就是操作系统的线程在执行,并且会占用一定的系统资源,如CPU.内存.磁盘.网 ...
- [bug] Python:“TabError: inconsistent use of tabs and spaces in indentation”
原因 代码中混用了Tab和4个空格 参考 https://blog.csdn.net/dongdong9223/article/details/82745068