NX二次开发-曲线或边分析函数

UF_EVAL_is_arc   判断是圆形曲线或边
UF_EVAL_ask_arc 圆形曲线或边分析,得到曲线或边的信息

类似的函数还有以下这些:

UF_EVAL_is_ellipse // 椭圆
UF_EVAL_ask_ellipse

UF_EVAL_is_hyperbola //双曲线
UF_EVAL_ask_hyperbola

UF_EVAL_is_line  //直线
UF_EVAL_ask_line //起点终点长度

UF_EVAL_is_parabola //抛物线
UF_EVAL_ask_parabola

UF_EVAL_is_spline  //样条曲线
UF_EVAL_ask_spline

下面以UF_EVAL_ask_arc 为例:

#include "Text.h"
static int init_proc_select_edges(UF_UI_selection_p_t select, void *user_data)
{
    int  errorCode = 0;
    //只是选择面
    int  num_triples = 1; //选择类型 数量
    UF_UI_mask_t mask_triples[] = { UF_solid_type,UF_solid_edge_subtype,1 }; //定义选择类型

    errorCode = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples);
    if (errorCode == 0)
    {
        return UF_UI_SEL_SUCCESS;
    }
    else
    {
        return UF_UI_SEL_FAILURE;
    }
}
int Text_UI_select_edges(vector<tag_t> *vecFaces)
{
    //调用API
    char *message = "提示:选择边";
    char *title = "标题:选择边";
    int scope = UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;//选取范围
    int response;
    int count = 0;
    tag_p_t object;
    UF_UI_select_with_class_dialog(message, title, scope, init_proc_select_edges, NULL, &response, &count, &object);
    for (int i = 0; i < count; i++)
    {
        tag_t tagObj = object[i];
        //取消高亮显示
        UF_DISP_set_highlight(tagObj, 0);
        (*vecFaces).push_back(tagObj);
    }
    return 0;
}

extern DllExport void ufusr(char *param, int *returnCode, int rlen)
{
    UF_initialize();
    vector<tag_t> vecEdges;
    Text_UI_select_edges(&vecEdges);
    for (int i = 0; i < vecEdges.size(); i++)
    {
        UF_EVAL_p_t evaluator;
        UF_EVAL_initialize(vecEdges[i], &evaluator);
        //确定给定的数据是否来自圆形曲线或边缘
        bool boolIsArc;
        UF_EVAL_is_arc(evaluator, &boolIsArc);
        if (boolIsArc)
        {
            //返回圆形曲线或边的数据
            UF_EVAL_arc_t arc;
            UF_EVAL_ask_arc(evaluator, &arc);//arc结构体中有曲线的参数
//
arc.center 圆弧中心,圆心
            if (fabs(arc.limits[0]) < 0.001 && fabs(arc.limits[1] - 2 * PI) < 0.001)
            {
                bool boolVal = true;//此圆是整圆
            }
        }
    }

    UF_terminate();
}

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

 

 
posted @ 2020-03-24 17:10  王牌飞行员_里海  阅读(728)  评论(0编辑  收藏  举报