购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
/***************************************************************
* GetTwoObjAngle 【获得两个面或直线间最大最小角度】
* Returns: void 【void】
* Para<I>: tag_t Obj1Tag 【面\直线TAG】
* Para<I>: tag_t Obj2Tag 【面\直线TAG】
* Para<I/O>: double *smallAngle 【最小角度】
* Para<I/O>: double *largeAngle 【最大角度】
****************************************************************/
void GetTwoObjAngle(tag_t Obj1Tag, tag_t Obj2Tag, double *smallAngle, double *largeAngle)
{
int type, subtype;
double uv_min_max [4];
double param[2], face_uv_point[3],u1[3], v1[3], u2[3], v2[3], unit_norm[3], radii [2], line1Vector[3], line2Vector[3];
//获得第一个对象的矢量
UF_OBJ_ask_type_and_subtype(Obj1Tag, &type, &subtype);
if (type == UF_solid_type && subtype == UF_solid_face_subtype) //判断对象是面还是曲线
{
//获得面UV的最大和最小值
UF_MODL_ask_face_uv_minmax( Obj1Tag, uv_min_max );
param[0] = ( uv_min_max[1] - uv_min_max[0] )/2 + uv_min_max[0];
param[1] = ( uv_min_max[3] - uv_min_max[2] )/2 + uv_min_max[2];
UF_MODL_ask_face_props( Obj1Tag, param, face_uv_point, u1, v1, u2, v2, line1Vector, radii );
}
else
{
UF_CURVE_line_t lineCoords;
UF_CURVE_ask_line_data(Obj1Tag, &lineCoords);
line1Vector[0] = lineCoords.end_point[0] - lineCoords.start_point[0];
line1Vector[1] = lineCoords.end_point[1] - lineCoords.start_point[1];
line1Vector[2] = lineCoords.end_point[2] - lineCoords.start_point[2];
}
//获得第二个对象的矢量
UF_OBJ_ask_type_and_subtype(Obj2Tag, &type, &subtype);
if (type == UF_solid_type && subtype == UF_solid_face_subtype) //判断对象是面还是曲线
{
//获得面UV的最大和最小值
UF_MODL_ask_face_uv_minmax( Obj2Tag, uv_min_max );
param[0] = ( uv_min_max[1] - uv_min_max[0] )/2 + uv_min_max[0];
param[1] = ( uv_min_max[3] - uv_min_max[2] )/2 + uv_min_max[2];
UF_MODL_ask_face_props( Obj2Tag, param, face_uv_point, u1, v1, u2, v2, line2Vector, radii );
}
else
{
UF_CURVE_line_t lineCoords;
UF_CURVE_ask_line_data(Obj2Tag, &lineCoords);
line2Vector[0] = lineCoords.end_point[0] - lineCoords.start_point[0];
line2Vector[1] = lineCoords.end_point[1] - lineCoords.start_point[1];
line2Vector[2] = lineCoords.end_point[2] - lineCoords.start_point[2];
}
UF_MODL_ask_vector_angle(line1Vector, line2Vector, smallAngle, largeAngle);
}