马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我开始接触UG二次开发有好天了。因为要做个项目,加上自己有编程的基础,所以导师叫我去做个二次开发的课题。 我虽然有程序设计的基础,但是UG 和VC之间的接口还有点搞不明白。我有几个问题想向各位大哥请教,如果能得到深夜摔键盘兄的指导,那就更好了。
我的问题是这样的:老师叫我开发个小程序,利用参数输入,生成模型。
于是我做了个垫片参数建模的小程序。在UG下做了如下的对话框:
内径:
外径:
厚度:
创建(按钮)
在输入如上参数的基础上点击创建按钮,就能生成垫圈了。我的程序如下:
首先预设置参数值。找到 construct_cb(创建函数),然后加入如下代码:
int CY_construct_cb ( int dialog_id,
void * client_data,
UF_STYLER_item_value_type_p_t callback_data)
{
UF_STYLER_item_value_type_t data;
/* Make sure User Function is available. */
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
// UF_STYLER_item_value_type_t data;
data.item_attr=UF_STYLER_VALUE;
data.item_id=CY_RMIN;
data.value.real=2;
UF_STYLER_set_value(dialog_id,[$data)]
data.item_id=CY_RMAX;
data.value.real=3;
UF_STYLER_set_value(dialog_id,[$data)]
data.item_id=CY_HE;
data.value.real=4; UF_STYLER_set_value(dialog_id,[$data)]
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.*/
}
上部分的程序是给对话框预设置值的,运行上叙程序后,我预想对话框的值如下:
内径:2
外径:3
厚度:4
在创建按钮的回调函数中输入如下代码:
int CY_creat_cb ( int dialog_id,
void * client_data,
UF_STYLER_item_value_type_p_t callback_data)
{
UF_STYLER_item_value_type_t data;
double rx,rd,he; // 为什么这个定义一定要放 tag_t cy1_tag, cy2_tag;
int ret; // 前面呢
tag_t cy1_tag, cy2_tag;
double origin[3]={0,0,0};
double d[3]={0,0,1};
char dmin[256],dmax[256],hig[256];
dmin[0]='\0';
dmax[0]='\0';
hig[0]='\0';
//double rx,rd,he;
/* Make sure User Function is available. */
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
data.item_attr=UF_STYLER_VALUE;
data.item_id=CY_RMIN;
UF_STYLER_ask_value(dialog_id,[$data)]
rx=data.value.real;
data.item_id=CY_RMAX;
UF_STYLER_ask_value(dialog_id,[$data)]
rd=data.value.real;
data.item_id=CY_HE;
UF_STYLER_ask_value(dialog_id,[$data)]
he=data.value.real;
sprintf(dmin,"%f",rx);
sprintf(dmax,"%f",rd);
sprintf(hig,"%f",he);
ret=UF_MODL_create_cyl1(UF_NULLSIGN,origin,hig,dmax,d,[$cy1_tag)]
ret=UF_MODL_create_cyl1(UF_NEGATIVE,origin,hig,dmin,d,[$cy2_tag)]
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 ); */
}
程序的运行:输入参数,点击创建,然后生成垫圈:
上面的程序通过编译与连接,生成了DLL。但是我在UG中调用对话框却出现了这样的问题,都是要点击两次,才会出现对话框。此时,对话框参数的预设置值并不是我在程序中设置的,而全部是零。我的程序是没问题的啊,这是怎么回事??是不是我的UG出什么问题了啊?? 还有我输入参数后点击创建,并没有生成我要的垫圈(我是在建模模块下进行的)。这又是怎么回事啊?请各位大哥指教,小弟感激不尽!!
这是一个学UG开发的好例子,短小精悍,五脏俱全。--zzz |