上图是个二维图,说明了要对这个三维图形所求的几个参数,我的做法如下,考虑到这个模型可能存在旋转的情况,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了。
这个方法就避免了用矩阵旋转的问题了。
欢迎有二次开发小活的兄弟以后多多关照。在此多谢了 |