带选择功能的ui styler dialog
在ug中,自己制作的ui styler dialog有时候需要与ug 图形窗口交互来选择对象,
这是时候需要我们在制作dialog的时候,选择->类型单个->【√选择】 【√取消】 【√单个位置】
//头文件与参数定义
#include <uf_obj.h>
#include <uf_modl.h>
UF_STYLER_item_value_type_t sel_data;
一、 回调函数:
// Filter proc
static int filter_face_cb( tag_t object, int type[3], void *user_data, UF_UI_selection_p_t select)
{
return (UF_UI_SEL_ACCEPT);
}
//初始化
static int init_proc(UF_UI_selection_p_t select,void *user_data)
{
if((UF_UI_set_sel_procs(select, filter_face_cb,NULL,user_data)) == 0)
{
return (UF_UI_SEL_SUCCESS);
}
else
{
return (UF_UI_SEL_FAILURE);
}
}
//selection 回调函数
static int sel_face_cb(int num_selected, tag_p_t selected_objects,
int num_deselected, tag_p_t deselected_objects,
void *user_data, UF_UI_selection_p_t selection)
{
return (UF_UI_CB_CONTINUE_DIALOG);
}
二、在对话框【构造函数】中初始化,使得本对话框在ug中显示后能够在图形窗口交互选择对象
//获得对话框的selection对象
UF_UI_mask_t face_mask[1] = {UF_face_type, 0, 0};
sel_data.item_id = UF_STYLER_DIALOG_INDEX;
sel_data.item_attr = UF_STYLER_SELECTION;
UF_CALL(UF_STYLER_ask_value(dialog_id, &sel_data));
//设置selection 对象,选择类型,选择MASK类型,
UF_UI_set_sel_type(sel_data.value.selection, UF_UI_SEL_TYPE_SINGLE_SELECTION | UF_UI_SEL_TYPE_SINGLE_DESELECTION);
UF_CALL(UF_UI_set_sel_mask(sel_data.value.selection,//selection
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,//all type in mask are allowed
1, //number of mask
face_mask));//mask types
UF_UI_set_sel_procs(sel_data.value.selection, filter_face_cb, //Filter proc
sel_face_cb, //selection proc
NULL); //user data
三、选择好后,获得所选择对象 【ok函数】
//得到所选对象的objs //得到选择对象的数量count
tag_p_t objs = NULL;
int count = 0;
UF_UI_ask_sel_object_list(sel_data.value.selection,&count,&objs);
char msg[64];
sprintf(msg, "%d",count); //数字转字符串
uc1601(msg,1); //弹出框 显示 选择的对象数量
// 其它操作 ——————————————————————
// 分析面
int type=0;
int norm_dir=0;
double point[3];
double dir[3];
double box[6];
double radius[1];
double rad_data[1];
UF_MODL_ask_face_data (
objs[0], //输入面
&type, //判断面类型
point, //轴中心 点
dir, //轴方向
box, //极点坐标
radius, //半径 圆锥=最小半径 + 最大半径 /2
rad_data, //
&norm_dir); //面法向
//判断面类型 type值
//16 =圆柱
//17 =圆锥
//18 =球
//19 =旋转(环形)
//20 =挤压
//22 =有界平面
//23 =角(物)
//43 = b级表面
//65 =偏移曲面
//66 =外表面
sprintf(msg, "%d",type); //数字转字符串
uc1601(msg,1); //弹出框 显示 选择的对象数量
UF_free(objs);
_____________________________________________________________________________ _
中磊UG二次开发教程 梅雷著 qq1821117007
学UG就上UG网 http://www.9sug.com/ |