【UG二次开发】获取圆弧信息UF_CURVE_ask_arc_data

要想用好UF_CURVE_ask_arc_data()这个函数必须清楚“获取的圆弧起始角度值、圆弧中心坐标都是相对于圆弧坐标系的(Arc's csys)”

例子:

extern DllExport void ufsta(char *param, int *returnCode, int rlen)
{
    UF_initialize();
    UF_CURVE_arc_t    arc_coords;
    tag_t tagEdge= 44798;
    UF_CURVE_ask_arc_data(tagEdge, &arc_coords);
    //arc_coords.start_angle
    //arc_coords.end_angle

    //注意:这个arc_coords.arc_center不是绝对坐标系下坐标,而是arc_coords.matrix_tag下的坐标值
    double douMatrixValue[9];
    UF_CSYS_ask_matrix_values(arc_coords.matrix_tag, douMatrixValue);
    double douPoint[3];
    UF_MTX3_vec_multiply_t(arc_coords.arc_center, douMatrixValue,douPoint);
    tag_t pnt;
    UF_CURVE_create_point(douPoint, &pnt);

    tag_t tagCSYS = NULL_TAG;
    UF_CSYS_create_csys(douPoint, arc_coords.matrix_tag, &tagCSYS);
    UF_CSYS_set_wcs(tagCSYS);

    //("arc_coords.start_angle=%g\narc_coords.end_angle=%g\n\n", arc_coords.start_angle, arc_coords.end_angle);
    //("arc_coords.start_angle*180/PI=%g\narc_coords.end_angle*180/PI=%g\n\n", arc_coords.start_angle*180/PI, arc_coords.end_angle*180/PI);
    //("角度差=%g\n", arc_coords.end_angle * 180 / PI -arc_coords.start_angle*180/PI);

    UF_terminate();
}

extern int ufusr_ask_unload(void)
{
    return (UF_UNLOAD_IMMEDIATELY);
}

关于arc_coords.arc_center

arc_coords.arc_center不是绝对坐标系下坐标,而是arc_coords.matrix_tag下的坐标值

关于arc_coords.start_angle和arc_coords.end_angle的解释,如下图:

 还有另一个类似的函数 UF_EVAL_ask_arc()

posted @ 2020-09-05 09:30  王牌飞行员_里海  阅读(213)  评论(0编辑  收藏  举报