#include "nx_inc.h"
#include "Lin_uf_CALL.h"
#include "Lin_uf_select.h"
#ifdef __cplusplus
extern "C" {
#endif
//
// nx_select.h //
//
/*===============================================*\
* 功能:鼠标选择过滤函数
* 参数:userdata - 选择类型
这个要改进用户选择对象如果为空要处理,返回response
\*===============================================*/
int SelTarget(UF_UI_selection_p_t select, void* userdata)
{
char message[133];
int num_triples(0);
UF_UI_mask_t *mask_triples=NULL;
int* filter_type=(int*)userdata;
switch(*filter_type)
{
case SOLID_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(2,sizeof(UF_UI_mask_t));
mask_triples[0].object_type=UF_solid_type;
mask_triples[0].object_subtype=UF_solid_body_subtype;
mask_triples[0].solid_type=UF_UI_SEL_FEATURE_BODY;
break;
case FEAT_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples[0].object_type=UF_feature_type;
mask_triples[0].object_subtype=UF_all_subtype;
mask_triples[0].solid_type=0;
break;
case EDGE_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples->object_type=/*UF_edge_type*/UF_edge_type;
mask_triples->object_subtype=UF_all_subtype;
mask_triples->solid_type=0;
break;
case LINE_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples->object_type=/*UF_edge_type*/UF_line_type;
mask_triples->object_subtype=UF_all_subtype;
mask_triples->solid_type=0;
break;
case POINT_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples->object_type=/*UF_edge_type*/UF_point_type;
mask_triples->object_subtype=UF_all_subtype;
mask_triples->solid_type=0;
break;
case CIRCLE_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples->object_type=/*UF_edge_type*/UF_circle_type;
mask_triples->object_subtype=UF_all_subtype;
mask_triples->solid_type=0;
break;
case FACE_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples->object_type=UF_face_type;
mask_triples->object_subtype=UF_all_subtype;
mask_triples->solid_type=0;
break;
case FACE_EDGE_TYPE:
num_triples=2;
mask_triples=(UF_UI_mask_t*)calloc(2,sizeof(UF_UI_mask_t));
mask_triples[0].object_type=UF_face_type;
mask_triples[0].object_subtype=0;
mask_triples[0].solid_type=UF_UI_SEL_FEATURE_ANY_FACE;
mask_triples[1].object_type=UF_edge_type;
mask_triples[1].object_subtype=0;
mask_triples[1].solid_type=UF_UI_SEL_FEATURE_ANY_EDGE;
break;
case DIMENSION_TYPE:
num_triples=1;
mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
mask_triples->object_type=UF_dimension_type;
mask_triples->object_subtype=UF_all_subtype;
mask_triples->solid_type=0;
break;
}
int err = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
num_triples, mask_triples);
free(mask_triples);
if(err == 0)
{
return (UF_UI_SEL_SUCCESS);
}
else
{
UF_get_fail_message(err, message);
return (UF_UI_SEL_FAILURE);
}
return (UF_UI_SEL_SUCCESS);
}
/* 调用对话框选择单一对象 */
extern int select_single_with_dlg(
FILTER_TYPE seltype, // I:选择类型
char* title, // I:选择对话框显示提示字符
tag_t * selobj // O:返回选择对象
)
{
try
{
int response=-1;
int ugError=-1;
char cue[] = "Select Single Object";
tag_t view;
double cursor[3];
UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);
ugError=UF_UI_select_with_single_dialog(cue,title,
UF_UI_SEL_SCOPE_NO_CHANGE, SelTarget, &seltype,
&response, selobj, cursor, &view);
UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);
if(ugError!=0)
{
return -1;
}
if (*selobj != NULL_TAG)
{
UF_DISP_set_highlight(*selobj, 0);
}
}
catch (...)
{
return -1;
}
return 0;
}
/* 对话框的形式选多个对象 */
extern int select_class_with_dlg(
FILTER_TYPE seltype, // I:选择类型
char* title, // I:选择对话框显示提示字符
tag_t * selobj // O:返回选择对象
)
{
try
{
char cue[] = "Select Multi Objects";
int response, count, i;
UG二次开发之选择相关的函数
最新推荐文章于 2024-03-17 03:37:15 发布