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 21:29 编辑 ]
作者: 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,即,不能显示“成功求解”对话框。
另外,第一到第四个点都能执行到。
请问是什么原因呢?

十分感谢!!!

[ 本帖最后由 chengcheng82 于 2006-12-7 19:59 编辑 ]
作者: sky9987    时间: 2006-12-7 14:31
问一下,有知道二次开发的函数的全介绍的资料的吗?
作者: jjf1120    时间: 2006-12-8 17:58
chengcheng82兄弟;
看了你的代码,编译运行后程序没有问题,两个面也装配在了一起;
如果还有什么问题可以来我的网站找我:西安天空网(https://www.xiansky.com




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3