【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

 

posted @ 2020-09-08 10:44  王牌飞行员_里海  阅读(86)  评论(0编辑  收藏  举报