|
马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在参数化CAD系统的二次开发中,我们不可避免的需要图形随控件的值动态的变化,以增加可视化的效果。以下是一个用滑动条控件控制长方体特征其中一个参数的例子,虽然例子比较简单,但如果可以抛砖引玉,能够给各位一个小小的启发,已达到我所期望。下面是创建过程和部分源代码,请各位给予指导!
进入UG界面后,Application->User Interface Styler...进行对话框的设置。加入滑动条控件,并设置Drag一项的回调函数,进行对话框的回调函数设置!保存生成*.h,*.template.c和*.dlg三个文件。
将*.dlg放入相应的application目录下。利用VC建立工程,删除系统生成的文件,添加*.h,*.template.c两个文件,设置用户入口函数
//#ifdef DISPLAY_FROM_USER_EXIT
extern void ufusr (char *param, int *retcode, int rlen)
然后在对话框的构造函数中生成立方体特征。
tag_t blk_obj;//全局变量
int DT_construction ( int dialog_id,
void * client_data,
UF_STYLER_item_value_type_p_t callback_data)
{
/* Make sure User Function is available. */
char *block_len[3]={"25","25","25"};
double block_orig[3]={0.0,0.0,0.0};
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
UF_MODL_create_block1(UF_NULLSIGN,block_orig,block_len,[$blk_obj)]
UF_terminate ();
/* Callback acknowledged, do not terminate dialog */
return (UF_UI_CB_CONTINUE_DIALOG);
/* A return value of UF_UI_CB_EXIT_DIALOG will not be accepted */
/* for this callback type. You must continue dialog construction.*/
}
在滑动条控件回调函数中进行动态更新
int DT_scale_real_valuechanged ( int dialog_id,
void * client_data,
UF_STYLER_item_value_type_p_t callback_data)
{
/* Make sure User Function is available. */
/////////////////////////////////////////////////
////////////////////////////////////////////
// double exp_value;
// int number_of_exps=0,i;
// tag_t *exps;
double p0_value;
char string[256];
char length[256];
UF_STYLER_item_value_type_t data;
data.item_attr=UF_STYLER_VALUE;
data.item_id=DT_SCALE_REAL_0;
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
UF_STYLER_ask_value(dialog_id,[$data)]
sprintf(length,"%f",data.value.real);
p0_value=data.value.real;
strcpy(string,"p0=");
strcat(string,length);
UF_MODL_edit_exp(string);
UF_MODL_update();
UF_terminate ();
/* Callback acknowledged, do not terminate dialog */
return (UF_UI_CB_CONTINUE_DIALOG);
/* or Callback acknowledged, terminate dialog. */
/* return ( UF_UI_CB_EXIT_DIALOG ); */
}
编译,连接生成*.dl文件。
进入UG界面,File—>Execute UG/OPEN—>User Function...调用*.dl文件即可! |
|