[封装函数] 获得两个面或直线间最大最小角度

不及无耐 3月前 280 1

/***************************************************************
* 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); 
}


1

承接UG NX二次开发、功能定制、毕业设计、疑难解决、远程培训,胡君QQ:85585969
最新回复 (1)
  • boyue 1月前
    1

    好东西,学习了,感谢

请登录后发表新帖