UFun创建混合面_NXopen-UG二次开发_新浪博客

//创建混合面

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

static int report_error( char *file, int line, char *call, int irc)
{
    if (irc)
    {
        char err[133],
             msg[133];

        sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ",
            irc, line, file);
        UF_get_fail_message(irc, err);

   

        UF_print_syslog(msg, FALSE);
        UF_print_syslog(err, FALSE);
        UF_print_syslog("\n", FALSE);
        UF_print_syslog(call, FALSE);
        UF_print_syslog(";\n", FALSE);

        if (!UF_UI_open_listing_window())
        {
            UF_UI_write_listing_window(msg);
            UF_UI_write_listing_window(err);
            UF_UI_write_listing_window("\n");
            UF_UI_write_listing_window(call);
            UF_UI_write_listing_window(";\n");
        }
    }

    return(irc);
}

static int filter_body_type(tag_t object, int type[3], void *data,
    UF_UI_selection_p_t select)
{
    int
        body_type;

    UF_CALL(UF_MODL_ask_body_type(object, &body_type));
    if (body_type == *(int *)data)
        return (UF_UI_SEL_ACCEPT);
    else
        return (UF_UI_SEL_REJECT);
}

static int mask_body_type( UF_UI_selection_p_t select, void *type)
{
    UF_UI_mask_t
        mask = { UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY };

    if (!UF_CALL(UF_UI_set_sel_mask(select,
            UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, 1, &mask)) &&
        !UF_CALL(UF_UI_set_sel_procs(select, filter_body_type, NULL, type)))
        return (UF_UI_SEL_SUCCESS);
    else
        return (UF_UI_SEL_FAILURE);
}

static tag_t select_a_sheet(char *prompt)
{
    double
        cp[3];
    int
        sheet = UF_MODL_SHEET_BODY,
        resp;
    tag_t
        object,
        view;

    UF_CALL(UF_UI_select_with_single_dialog( "Select a sheet", prompt,
        UF_UI_SEL_SCOPE_WORK_PART, mask_body_type, &sheet, &resp,
        &object, cp, &view));

    if (resp == UF_UI_OBJECT_SELECTED || resp == UF_UI_OBJECT_SELECTED_BY_NAME)
    {
        UF_CALL(UF_DISP_set_highlight(object, 0));
        return object;
    }
    else return NULL_TAG;

}

static void do_it(void)
{
    int
        num_bodies_created = 0,
        num_blend_faces = 0,
        inx = 0;
    tag_t           
        first_set = NULL_TAG,
        second_set = NULL_TAG,
        feature_tag = NULL_TAG,
        *bodies_created = NULL,
        *blend_faces = NULL;   
    UF_MODL_face_blend_create_data_t  
        create_data;
   
    create_data.first_set = &first_set;
    create_data.first_set_size = 1;
    create_data.flip_first_normal = FALSE;
    create_data.second_set = &second_set;
    create_data.second_set_size = 1;
    create_data.flip_second_normal = TRUE;
    create_data.propagate = FALSE;
    create_data.cliff_edges = NULL;
    create_data.n_cliff_edges = 0;
    create_data.thls = NULL;
    create_data.n_thls = 0;
    create_data.proj_on_first_set = FALSE;
    create_data.end_overflow = TRUE;
    create_data.blend_tolerance = "0.0004";
    create_data.trim_option = UF_TRIM_AND_ATTACH;
    create_data.radius_type = UF_CONSTANT;
    create_data.default_radius = "1.0";
    create_data.law_parameters = NULL;
    
    if (((first_set = select_a_sheet("Select first set sheet")) != NULL_TAG)
     && ((second_set = select_a_sheet("Select second set sheet")) != NULL_TAG))
    {            
        UF_CALL( UF_MODL_create_face_blend( &create_data, NULL,
                                            &feature_tag, &num_bodies_created,
                                            &bodies_created,
                                            &num_blend_faces, &blend_faces ));
    }
}

void ufusr(char *param, int *retcode, int paramLen)
{
    if (UF_CALL(UF_initialize())) return;
    do_it();
    UF_terminate();
}

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值