简介
本文将介绍 ug 中常见的面类型以及如何获取它们的法向。
博主是 ug 二开的初学者,如果有说错的地方,请大佬在评论区指正。
常见的面类型
我们可以通过 NXOpen::Face::FaceType 或者 UF_MODL_ask_face_data 获取到面的类型,其中有有界平面(Planar face)、圆柱面(Cylindrical face)、圆锥面(Conical face)、球面(Spherical face)、混合面(Blending face)和偏置面(Offset face)等各种面类型。
在获取法向的方式上,以上的面就分为两种:平面和非平面。
面的法向
我们可以通过上面提到的 UF_MODL_ask_face_data 获取面的很多信息:
int UF_MODL_ask_face_data
(
tag_t face,
int* type,
double point[],
double dir[],
double box[],
double* radius,
double* rad_data,
int* norm_dir
)
解释一下上面的参数:
point:返回中心点,但根据面类型不同,点的具体位置会有不同。对于平面中心点位置在平面上;对于圆柱面、锥面和旋转面,返回的中心点在轴线上。
dir:返回法向,但根据面类型不同,法向的意义也不同。对于平面,面上每一个点的法向都是如此;对于圆柱面、锥面、环形面和旋转面,返回的法向表示面在创建时使用的法向,比如圆柱面返回的 dir 表示创建这个圆柱时的轴向法向。因此对于非平面,我们不能使用 dir 作为面上每一个点的法向。
box:面的最小包容盒。
那么对于非平面,我们只能去求面上某点的法向,方法如下:
double pnt[3], param[2], pnt2[3], u1[3], v1[3], u2[3], v2[3], unit_norm[3], radii[2];
UF_MODL_ask_face_parm(tag, pnt, param, pnt2);
UF_MODL_ask_face_props(tag, param, pnt2, u1, v1, u2, v2, unit_norm, radii);
这里得到的 unit_norm 便是该点在面上的法向。