iCAx开思工具箱
标题:
UG API 装配问题!
[打印本页]
作者:
chengcheng82
时间:
2006-12-4 19:06
标题:
UG API 装配问题!
我想请教各位一个问题:
如果在UG的装配中已经由UF_ASSEM_solve_mc(&ftf,&status,&dof,transform)函数正确求解,那么当接下来执行
UF_ASSEM_apply_mc_data(&ftf,&struct_status,&status)函数将配对条件应用到装配时,不能顺利进行,即:struct_status不等于UF_ASSEM_structure_ok
请问这是什么原因啊?
是不是与引用集相关呢?
多谢大家啊!
作者:
jjf1120
时间:
2006-12-5 17:09
把代码贴上来
作者:
chengcheng82
时间:
2006-12-6 19:17
下面的是具体的程序。
作者:
chengcheng82
时间:
2006-12-6 19:25
标题:
2
char message[133];
message[0]='\0';
strcpy(message,"请选择第一个面");
UF_UI_selection_options_t opts;
UF_UI_mask_t mask;
int response;
tag_t first_plan,view;
double cursor[3];
int unhighlight=0;
opts.other_options=0;
opts.reserved=NULL;
opts.num_mask_triples=1;
opts.mask_triples=&mask;
opts.mask_triples->object_type=UF_face_type;
opts.mask_triples->object_subtype=UF_bounded_plane_subtype;
opts.mask_triples->solid_type=UF_UI_SEL_FEATURE_ANY_FACE;
opts.scope=UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;
int type;
double point[3],dir[3],box[6],radius,rad_data;
int norm_dir;
do
{
int irc=UF_UI_select_single(message,&opts,&response,&first_plan,cursor,&view);
UF_MODL_ask_face_data(first_plan,&type,point,dir,box,&radius,&rad_data,
&norm_dir);
if(type!=22)
{
uc1601("请选择一个平面",1);
UF_DISP_set_highlight(first_plan,0);
}
}
while(!(type==22&&response==5));
if(response!=5)
{
uc1601("没有选择平面",1);
UF_terminate();
return(UF_UI_CB_CONTINUE_DIALOG);
}
int ret;
tag_t from_part_occ;
ret=UF_ASSEM_ask_parent_component(first_plan,&from_part_occ);
logical is_occ=UF_ASSEM_is_occurrence(from_part_occ);
tag_t from_part_inst=UF_ASSEM_ask_inst_of_part_occ(from_part_occ);
char part_name[132+1];
char refset_name[30+1];
char instance_name[30+1];
double origin[3];
double csys_matrix[9];
double transform[4][4];
ret=UF_ASSEM_ask_component_data(from_part_occ,part_name,refset_name,instance_name,
origin,csys_matrix,transform);
uc1601(instance_name,1);
message[0]='\0';
strcpy(message,"请选择第二个面");
tag_t second_plan;
do
{
int irc=UF_UI_select_single(message,&opts,&response,&second_plan,cursor,&view);
UF_MODL_ask_face_data(second_plan,&type,point,dir,box,&radius,&rad_data,
&norm_dir);
if(type!=22)
{
uc1601("请选择一个平面",1);
UF_DISP_set_highlight(second_plan,0);
}
}
while(!(type==22&&response==5));
if(response!=5)
{
uc1601("没有选择平面",1);
UF_terminate();
return(UF_UI_CB_CONTINUE_DIALOG);
}
tag_t to_part_occ;
ret=UF_ASSEM_ask_parent_component(second_plan,&to_part_occ);
tag_t to_part_ins=UF_ASSEM_ask_inst_of_part_occ(to_part_occ);
ret=UF_ASSEM_ask_component_data(to_part_occ,part_name,refset_name,instance_name, origin,csys_matrix,transform);
uc1601(instance_name,1);
UF_ASSEM_mating_condition_t ftf;
UF_ASSEM_init_mc(&ftf);
ftf.mated_object=from_part_inst;
ftf.name=NULL;//"tool->assemly";
ftf.user_name=FALSE;
ftf.constraints[0].from_status=UF_ASSEM_ok;
ftf.constraints[0].to_status=UF_ASSEM_ok;
ftf.constraints[0].mate_type=UF_ASSEM_v16_mate;
ftf.constraints[0].from_type=UF_ASSEM_planar_face;
ftf.constraints[0].to_type=UF_ASSEM_planar_face;
ftf.constraints[0].from=UF_ASSEM_ask_prototype_of_occ(first_plan);
ftf.constraints[0].from_part_occ=from_part_occ;
ftf.constraints[0].to=UF_ASSEM_ask_prototype_of_occ(second_plan);
ftf.constraints[0].to_part_occ=to_part_occ;
ftf.constraints[0].offset=NULL_TAG;
ftf.constraints[0].name="face to face";
ftf.constraints[0].user_name=TRUE;
ftf.num_constraints=1;
ftf.suppressed=FALSE;
UF_ASSEM_mc_status_t status;
UF_ASSEM_mc_structure_state_t struct_status;
UF_ASSEM_dof_t dof;
ret=UF_ASSEM_solve_mc(&ftf,&status,&dof,transform);
if(ret==0||status==UF_ASSEM_mc_solved)
{
ret=UF_ASSEM_apply_mc_data(&ftf,&struct_status,&status);
if (
struct_status=UF_ASSEM_structure_ok
)
uc1601("成功求解",1);
UF_DISP_refresh();
uc1601("第一个点",1);
UF_MODL_update();
uc1601("第2个点",1);
}
UF_DISP_set_highlight(second_plan,0);
uc1601("第3个点",1);
UF_DISP_set_highlight(first_plan,0);
uc1601("第4个点",1);
UF_terminate();
/* Callback acknowledged, terminate dialog */
/* It is STRONGLY recommended that you exit your */
/* callback with UF_UI_CB_EXIT_DIALOG in a ok callback.*/
/* return ( UF_UI_CB_EXIT_DIALOG ); */
return (UF_UI_CB_CONTINUE_DIALOG);
}
问题:程序已经通过编译。可以得到:status=UF_ASSEM_mc_solved
但是当应用 ret=UF_ASSEM_apply_mc_data(&ftf,&struct_status,&status);函数时,
并不能使其参数得到struct_status=UF_ASSEM_structure_ok,即,不能显示“成功求解”对话框。
另外,第一到第四个点都能执行到。
请问是什么原因呢?
十分感谢!!!
作者:
sky9987
时间:
2006-12-7 14:31
问一下,有知道二次开发的函数的全介绍的资料的吗?
作者:
jjf1120
时间:
2006-12-8 17:58
chengcheng82兄弟;
看了你的代码,编译运行后程序没有问题,两个面也装配在了一起;
如果还有什么问题可以来我的网站找我:西安天空网(
https://www.xiansky.com
)
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3