点击查看详细介绍

UF_UI_set_sel_procs() 函数的参数解释说明、函数详细用法,以及实例代码演示

misnn 7年前 1900 0

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


函数结构:
UF_UI_set_sel_procs
(
UF_UI_selection_p_t select_,
UF_UI_sel_filter_fn_t filter_proc,
UF_UI_sel_cb_fn_t sel_cb,
void * user_data
)

函数说明:
指定额外的过滤选择过滤程序的基础上应用特定的标准,和/或选择的回调以执行处理对于每个选择手势应用特定的处理,和用户特定的数据被传递到这些例程。此功能可与UIStyler对话框和与使用UF_UI_select_with_single_dialog和UF_UI_select_with_class_dialog。在筛选过程和选择回调的typedef定义在这个头文件,如下所示:的typedef INT(UF_UI_sel_filter_fn_t)(tag_t对象,整型[3]虚空USER_DATA,UF_UI_selection_p_t SELECT_)的typedef INT(UF_UI_sel_cb_fn_t)(INT NUM_SELECTED,tag_p_t selected_objects,INT num_deselected,tag_p_t deselected_objects,虚空USER_DATA,UF_UI_selection_p_t SELECT_)过滤过程传递候选对象的标签时,类型候选对象(对象类型,对象亚型,固体亚型 - 见UF_UI_set_sel_mask),一个指向该用户的数据,和指针的选择。返回的响应定义uf_ui.h。在筛选过程应该返回UF_UI_SEL_REJECT如果该对象被丢弃UF_UI_SEL_ACCEPT如果对象是一个有效的候选人。传递给过滤器过程中的候选对象不调整为范围。因此,利用一个装配部分,该对象是发生而不是原型。您可以通过调用获取对象的原型UF_ASSEM_ask_prototype_of_occ。然而,如果目的是成为一个推广,例如,那么用户必须做一些如查询在下面的例子:如果(UF_ASSEM_is_occurrence(对象)){原= UF_ASSEM_ask_prototype_of_occ(对象);UF_MODL_ask_prom_feat_of_solid(原,与壮举));UF_MODL_prom_map_object_up(原,壮举,&舞会));状态= check_promotion(PROM);}选择回调是不同的。传递给它的对象是已经调整的范围。选择回调被传递的对象的分配的数组选择或与前面的选择取消。该分配的数组的标记将被释放给用户。用户可以强制对话框通过返回UF_UI_CB_EXIT_DIALOG终止。要继续该对话框,用户应返回UF_UI_CB_CONTINUE_DIALOG。当选择回调用于与UF_UI_select_with_single_dialog,返回被忽略,对话总是终止。无论是筛选过程和选择回调传递一个指针的选择可以被用作输入到其他UF_UI选择功能查询其他选择数据或修改选择。这个选择指针不再有效的筛选过程之后,或选择回调退出。

函数参数:
第1个参数为输入:
select_代表参数变量,UF_UI_selection_p_t 为输入参数类型,选择指针

第2个参数为输入:
filter_proc代表参数变量,UF_UI_sel_filter_fn_t 为输入参数类型,更多的用户特定的滤波或NULL筛选过程

第3个参数为输入:
sel_cb代表参数变量,UF_UI_sel_cb_fn_t 为输入参数类型,选择回调的应用程序特定的处理或NULL

第4个参数为输入:
user_data代表参数变量,void * 为输入参数类型,用户数据或NULL

UF_UI_set_sel_procs函数实例代码演示:
这个例子显示使用带有单一选择一个筛选过程对话框只能选择一个一定半径的圆弧,只选择表身体。此外,请参见UF_UI_remove_from_sel_list的例子显示了使用一个选择回调。
[quote]
#include <stdio.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_modl.h>
#include <uf_curve.h>
#include <uf_object_types.h>
static int init_proc(UF_UI_selection_p_t select,
void *user_data);
static int filter_proc(tag_t object, int type[3],
void *user_data,
UF_UI_selection_p_t select);
typedef struct user_data_s{
double radius;
}user_data_t,*user_data_p_t;
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
if (irc)
{
char messg[133];
printf("%s, line %d: %s\n", file, line, call);
(UF_get_fail_message(irc, messg)) ?
printf(" returned a %d\n", irc) :
printf(" returned error %d: %s\n", irc, messg);
}
return(irc);
}
static void do_ugopen_api(void)
{
char cue[] = "Cue Message";
char title[] = "Dialog Title";
int response;
tag_t object, view;
double cursor[3];
user_data_t data;
data.radius = 1.5;
/* Use single selection dialog with the scope set to the
work part and use a filter procedure.
*/
UF_CALL(UF_UI_select_with_single_dialog(
cue, title, UF_UI_SEL_SCOPE_WORK_PART,
init_proc, &data,
&response, &object, cursor, &view));
}
/* initialization procedure */
static int init_proc(
UF_UI_selection_p_t select,
void *user_data)
{
/* specify filter procedure for this dialog */
if((UF_CALL(UF_UI_set_sel_procs(select,
filter_proc,
NULL,
user_data))) == 0)
{
return (UF_UI_SEL_SUCCESS);
}
else
{
return (UF_UI_SEL_FAILURE);
}
}
/* filter procedure */
static int filter_proc(
tag_t object,
int type[3],
void *user_data,
UF_UI_selection_p_t select)
{
user_data_p_t data = user_data;
UF_CURVE_arc_t arc_data;
int body_type;
/* for arcs, filter on radius */
if (type[0] == UF_circle_type)
{
UF_CALL(UF_CURVE_ask_arc_data(object,&arc_data));
if (arc_data.radius > data->radius)
{
return (UF_UI_SEL_ACCEPT);
}
else
{
return (UF_UI_SEL_REJECT);
}
}
/* for bodies, only accept sheet bodies */
else if ((type[0] == UF_solid_type) &&
(type[1] == UF_solid_body_subtype))
{
UF_CALL(UF_MODL_ask_body_type(object,&body_type));
if (body_type == UF_MODL_SHEET_BODY)
{
return (UF_UI_SEL_ACCEPT);
}
else
{
return (UF_UI_SEL_REJECT);
}
}
else
{
return (UF_UI_SEL_ACCEPT);
}
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
if (!UF_CALL(UF_initialize()))
{
do_ugopen_api();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}



[/quote]

0

最新回复 (0)
请登录后发表新帖