iCAx开思网

标题: 也来说个实例,大家可以借鉴 [打印本页]

作者: 有偿帮助    时间: 2010-7-27 09:27
标题: 也来说个实例,大家可以借鉴
前几天来论坛找个油水活干干,网友zjs同志说手头很多小活自己做不过来给我一个做,我说这周做做看不保证做出来,结果昨天晚上做到10点做完了发现zjs给我发了一封邮件说自己做出来了,让我自己去研究吧,哎。
既然这样我留着也没用就当个实例来讲讲吧。
大体要求:
功能要求:测量附件:  L0, L1,L2  及 D1, D2 。及头上形状大小 X size, Y size.
图形如下:
[attach]1019564[/attach][localimg=180,109]2[/localimg]
[attach]1019564[/attach]
作者: 有偿帮助    时间: 2010-7-27 09:35
上图是个二维图,说明了要对这个三维图形所求的几个参数,我的做法如下,考虑到这个模型可能存在旋转的情况,zjs推荐使用UF_MODL_ask_bounding_box_exact求包络立方体大小,鉴于本人对矩阵转化不是很熟悉,所以避开了矩阵使用采取下面的方法:
1、if(UF_MODL_CYLINDRICAL_FACE == faceType)获取圆柱面对象。
2、UF_MODL_ask_face_edges(CylindFaces[i], &edges_list);获取每个圆柱面的两条圆边edge。
3、UF_MODL_ask_minimum_dist(cylindFaceEdges[p][0],cylindFaceEdges[p][1],1,guess[0],1,guess[1],&min_dist,pt_on_obj1,pt_on_obj2);最小距离就是圆柱的高度了,至于圆柱半径在第一步的时候就可以用UF_MODL_ask_face_data(CylindFaces[i], &typeData, pointData, dirData, boxData, &radiusData, &radData, &norm_dirData);可计算出来了。
4、遍历所有面获取法线方向与圆柱轴向相同的面,用函数UF_MODL_ask_face_edges(CylindFaces[i], &edges_list);找出edge个数为4的面既是最上面的举行,求出线段长度就是长和宽了。
5,对法线平行于圆柱轴线的面两两就距离UF_MODL_ask_minimum_dist最大的就是L0了。

这个方法就避免了用矩阵旋转的问题了。

欢迎有二次开发小活的兄弟以后多多关照。在此多谢了
作者: yl.fu    时间: 2010-7-27 12:06
在此多谢了
作者: tangxu12    时间: 2010-7-27 19:34
不能通过特征求的?
作者: yanjin    时间: 2010-7-29 12:01
楼主是个高手,可以多奉献一下
作者: 357357    时间: 2010-8-31 01:08
学习学习..................
作者: zhangguangyang    时间: 2011-7-15 10:14
楼主是个高手,学习
作者: ssy871120    时间: 2011-8-18 14:25
谢谢分享





欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3