许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  UG NX二次开发:插入UDF(用户定义特征)

UG NX二次开发:插入UDF(用户定义特征)

阅读数 3
点赞 0
article_banner

注: 此例子源于UGOpen帮助文档

#include <stdio.h>

#include <string.h>

#include <uf.h>

#include <uf_ui.h>

#include <uf_object_types.h>

#include <uf_part.h>

#include <uf_modl.h>

#include <uf_disp.h>

#include <uf_obj.h>

#include <uf_assem.h>

#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],
            messg[300],
			*msg = messg;
		int response = 0;


        UF_get_fail_message(irc, err);
        sprintf(messg, "\n%s\nerror %d at line %d in %s\n%s",
            err, irc, line, file, call);


		 /* Display the error Dialog if allowed */
		if( UF_UI_lock_ug_access( UF_UI_FROM_CUSTOM ) == UF_UI_LOCK_SET )
		  {
		  UF_UI_message_dialog( "", UF_UI_MESSAGE_ERROR, &msg, 1, TRUE, NULL, &response );
		  UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);
		  }

		/* Write the error to Syslog, always. */
		UF_print_syslog( messg, FALSE );
		UF_print_syslog( "\n", FALSE );
	}
	return irc;

}

static void report_load_status(UF_PART_load_status_t *status)
{
    char
        msg[133];
    int
        ii;

    for (ii=0; ii<status->n_parts; ii++)
    {
        UF_get_fail_message(status->statuses[ii], msg);
        printf("    %s - %s\n", status->file_names[ii], msg);
    }

    if (status->n_parts > 0)
    {
        UF_free(status->statuses);
        UF_free_string_array(status->n_parts, status->file_names);
    }
}

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

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

static tag_t select_planar_face(char *prompt)
{
    int
        resp;
    double
        cp[3];
    tag_t
        object,
        view;

    UF_CALL(UF_UI_select_with_single_dialog(prompt, "",
        UF_UI_SEL_SCOPE_WORK_PART,
        mask_for_planar_face, NULL, &resp, &object, cp, &view));

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

    return NULL_TAG;

}

static void do_it(void)
{
    int
        error,
        ii,
        num_parents,
        num_expression;
    tag_t
        *expression = NULL,
        feature = NULL_TAG,
        *new_parents = NULL,
        new_udf_feature,
        *parents = NULL,
        part,
        prev_work_part;
    char
        *exp_rhs[2] = {"2", "3"},
        **expression_prompt = NULL,
        **parents_prompt = NULL,
        **new_exp_rhs;
    UF_PART_load_status_t
        error_status;

    UF_CALL(UF_PART_open_quiet("boss.prt", &part, &error_status));
    if (error_status.failed == TRUE) report_load_status(&error_status);

    UF_CALL(UF_ASSEM_set_work_part_quietly(part, &prev_work_part));

    UF_CALL(UF_OBJ_cycle_by_name("Boss", &feature));

    UF_CALL(UF_MODL_ask_udf_definition(feature, &parents, &parents_prompt,
        &num_parents, &expression, &expression_prompt, &num_expression));

    /* This array will be free'd by the UF_MODL_create_instantiated_udf()
       so it must be allocated this way - See PR 4074614  */

    new_exp_rhs = (char ** )(UF_allocate_memory(sizeof(char *) * num_expression, &error));
    for (ii = 0; ii < num_expression; ii++)
    {
        new_exp_rhs[ii] = (char *)(UF_allocate_memory(sizeof(char) * 10, &error));
        strcpy(new_exp_rhs[ii], exp_rhs[ii]);
    }

    UF_CALL(UF_ASSEM_set_work_part_quietly(prev_work_part, &prev_work_part));

    new_parents = (tag_t *)(UF_allocate_memory(sizeof(tag_t) * num_parents, &error));
    for (ii = 0; ii < num_parents; ii++)
        new_parents[ii] = select_planar_face(parents_prompt[ii]);

    UF_CALL(UF_MODL_register_rpo_routine(UF_MODL_default_rpo_menu));

    UF_CALL(UF_MODL_create_instantiated_udf(feature, "boss.cgm", parents,
        new_parents, num_parents, expression, new_exp_rhs, num_expression,
        &new_udf_feature));

    UF_free(parents);
    UF_free(new_parents);
    UF_free_string_array(num_parents, parents_prompt) ;
    UF_free(expression);
    UF_free_string_array(num_expression, expression_prompt);

}

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);
}

专注MCAD开发

QQ: prodevelop@qq.com

www.mcadex.com


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空