今天看到胡工对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 }

效果:

最新文章

  1. SqlServer自动化分区
  2. GIT warning: LF will be replaced by CRLF.
  3. poj1573 模拟
  4. MySql之on duplicate key update详解
  5. 转:CFile.Open()的使用说明
  6. Calling a Web API From a .NET Client (C#)
  7. ASP.NET学习笔记——ASP.NET应用程序
  8. 基于bootstrap的bootstrap-editable插件实现即时编辑功能
  9. WebApi的安全性及其解决方案
  10. [Swift]LeetCode101. 对称二叉树 | Symmetric Tree
  11. Xcode注释快捷键和Alfred 快捷键冲突解决方案
  12. SENDMESSAGE和POSTMESSAGE
  13. 三层结构、MVC的简介
  14. Python3-IO模型
  15. mybatis的typeHandler
  16. TCP/IP 笔记 - 域名解析和域名系统
  17. centos下搭建Jenkins持续集成环境(安装jenkins)
  18. 高并发之限流RateLimiter(二)
  19. 在vue init webpack my-project卡住的问题
  20. Spring boot profile 多环境配置

热门文章

  1. Python学习笔记-StatsModels 统计回归(3)模型数据的准备
  2. Access denied for user &#39;电脑用户名&#39;@&#39;localhost&#39;
  3. .Net Core平台下,添加包的引用
  4. 交叉编译参数--build、host和target的区别
  5. MySQL配置HeartBeat实现心跳监控和浮动IP
  6. 优启通-PE启动盘制作工具 原版Win7系统安装超详细教程!!!!!
  7. Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题
  8. WordPress的config.php不小心删掉
  9. 1 理解Linux系统的“平均负载”
  10. Jquery ajax 详解(Day_16)