购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
函数结构:UF_MODL_create_instantiated_udf( tag_t udf_definition_tag, char * cgm_file_name, tag_t * old_parents, tag_t * new_parents, int num_parents, tag_t * old_expression, char * * new_expression_value, int num_expression, tag_t * new_udf) 函数说明:
创建在当前部分新的UDF实例。步骤来实例化一个新的UDF如下:1)打开使用UF_PART_open_quiet的UDF定义文件()。2)找到UDF功能定义。3)问的UDF定义把所有的外部引用。4)变更部分的部分实例5)对于每一个外部参考需要选择在一个新的参考实例化的一部分。6)为表达式获取新值。7)使用UF_MODL_create_instantiated_udf创建UDF实例。有这个API的更新版本 - UF_MODL_create_instantiated_udf1建议使用下列情形之一的新版本 - 1.一个UDF的输入包括选择意图的对象。2.一个需要在相反意义上使用UDF输入。3.人愿意和选择意向的输入打交道时,提供具体的映射。有关映射的更多详细信息,请参阅UF_MODL_create_instantiated_udf1文档注:本日常工作只与新样式的UDF在V15发布
函数参数:
第1个参数为输入:
udf_definition_tag代表参数变量,tag_t 为输入参数类型,该UDF特征定义,UDF DEF的对象标识符。
第2个参数为输入:
输入char * 字符类型的参数,参数的变量格式为cgm_file_name,CGM文件
第3个参数为输入:
old_parents代表参数变量,tag_t * 为输入参数类型,年迈的父母数组
第4个参数为输入:
new_parents代表参数变量,tag_t * 为输入参数类型,新父母的数组
第5个参数为输入:
输入int 整数型的参数,参数的变量格式为num_parents,父母数
第6个参数为输入:
old_expression代表参数变量,tag_t * 为输入参数类型,UDF定义表达式数组
第7个参数为输入:
输入char * * 字符类型的参数,参数的变量格式为new_expression_value,新的表达新的价值只有右手边阵
第8个参数为输入:
输入int 整数型的参数,参数的变量格式为num_expression,表达式的数量。
第9个参数为输出:
new_udf代表参数变量,tag_t * 为输出参数类型,新的UDF实例化的特征,UDF_INS功能。
UF_MODL_create_instantiated_udf函数实例代码演示:
描述该程序演示如何使用下面的UG/ Open API的程序(S):UF_MODL_create_instantiated_udf项目描述此示例在名为“boss.prt”现有UG的一部分。 这部分由一个老板的功能和一个名为“老大”UDF的。用户功能创建现有UDF的实例,并把它在树上。
[quote]
#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);
}
[/quote]