【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()