【UG二次开发】获取边的端点 UF_MODL_ask_edge_verts
一条边可以有0个、1个或2个顶点。
例如,圆是一条顶点为零的边,而线是一条有两个顶点的边。也可以创建一个只有一个顶点的圆边。
extern DllExport void ufsta(char *param, int *returnCode, int rlen) { UF_initialize(); tag_t tagEdge = 0; int vertex; double p1[3] = { 0.0, 0.0, 0.0 }; double p2[3] = { 0.0, 0.0, 0.0 }; UF_MODL_ask_edge_verts(tagEdge, p1, p2, &vertex); tag_t tagPointTemp; switch (vertex) { case 0: //这条边没有端点 break; case 1: //这条有1个端点 UF_CURVE_create_point(p1, &tagPointTemp); break; case 2: //这条有2个端点 UF_CURVE_create_point(p1, &tagPointTemp); UF_CURVE_create_point(p2, &tagPointTemp); break; default: break; } UF_terminate(); } extern int ufusr_ask_unload(void) { return (UF_UNLOAD_IMMEDIATELY); }
也可以使用UF_MODL_ask_curve_points求曲线的端点
int get_Edge_Start_Point(tag_t tagCurve, double douStol, double douStartPoint[3], double douEndPoint[3]) { double ctol(0.0); double atol(0.0); double stol(douStol); int numpts(0); tag_t pt_tag(NULL_TAG); double *ufPts = NULL; UF_MODL_ask_curve_points(tagCurve, ctol, atol, stol, &numpts, &ufPts); if (numpts >= 2) { douStartPoint[0] = ufPts[0]; douStartPoint[1] = ufPts[1]; douStartPoint[2] = ufPts[2]; douEndPoint[0] = ufPts[0 + (numpts-1) * 3]; douEndPoint[1] = ufPts[1 + (numpts-1) * 3]; douEndPoint[2] = ufPts[2 + (numpts-1) * 3]; tag_t tPointEnd = NULL_TAG; //UF_CURVE_create_point(douStartPoint, &tPointEnd); //UF_CURVE_create_point(douEndPoint, &tPointEnd); } else { return 1; } UF_free(ufPts); return 0; }
如果是直线可以使用 UF_CURVE_ask_line_data求端点
UF_CURVE_line_t EdgeStartEndPoint; UF_CURVE_ask_line_data(tagEdge, &EdgeStartEndPoint); //EdgeStartEndPoint.start_point //EdgeStartEndPoint.end_point