iCAx开思工具箱

标题: 关于装配中对象事件的问题 [打印本页]

作者: zhb7081    时间: 2006-3-10 10:05
标题: 关于装配中对象事件的问题
举个例子来说明我的问题:
假设一个装配中有两个对象事件part_occurrences1和part_occurences2,
这两个对象的原型都是同一个零件,这个零件有一个圆柱面,名字
叫face(这个名字是自己在UG里设的),现在要把part_occurrences1里
的圆柱面作为一配合面,应该怎么样才能保证我用UF_OBJ_cycle_by_name
找到的face是part_occurrences1里的,而不是part_occurrences2的

请高手指点,谢谢!!!!
作者: zzz    时间: 2006-3-10 10:16
可以再判断face属于哪个part啊。
UF_ASSEM_ask_part_occurrence
作者: zhb7081    时间: 2006-3-10 10:57
谢谢zzz的回答
不过我现在希望的是通过part来找它的face
而不是有了face来判断part
作者: zzz    时间: 2006-3-10 11:45
uf_assem里面也有cycle函数啊,你去找一个吧
作者: zhb7081    时间: 2006-3-10 12:25
我找了好久都没找到合适的,我现在把我的例子贴上来,ZZZ兄帮我出个主意吧。

D:\1.bmp
这图里我想用两个这样的导柱装配到两个孔中,我已经在上面加入了两个导柱,并且通过下面的代码把其中一个导柱装配到左孔中,现在想把另一个导柱装到另一孔中,这两个导柱的原型都是同一个,而且在UG里我设了导柱的圆柱面名字为:DAOZHU_COL_FACE,导柱的端面名为:DAOZHU _FLA_FACE,请问我该怎样做呢?


代码如下:

int ret;
char * cface3="XIAMOBAN_COL_FACE1";
char * cface4="XIAMOBAN_COL_FACE2";
char * cface5="DAOZHU_COL_FACE";
char * fface2="XIAMOBAN_FLA_FACE";
char * fface3="DAOZHU_FLA_FACE";

tag_t zhu_cplan,zhu_fplan, xia_cplan1, xia_cplan2,xia_fplan;

tag_t from_part_occ;
      tag_t to_part_occ;
      tag_t from_part_ins;
      tag_t to_part_ins;
      logical is_occ;

tag_t flat_from_part_occ;
      tag_t flat_to_part_occ;
      tag_t flat_from_part_ins;
      tag_t flat_to_part_ins;

char part_name[ 256 + 1 ];
      char refset_name[ 30 + 1 ];
      char instance_name[ 30 + 1 ];
      double origin[ 3 ];
      double csys_matrix[ 9 ];
      double transform[ 4 ][ 4 ] ;
      char message[133];

      UF_ASSEM_mc_status_t status;
      UF_ASSEM_mc_structure_state_t struct_status;
      UF_ASSEM_dof_t dof;
      UF_ASSEM_mating_condition_t ftf;

     if ( UF_initialize() != 0)
          return ( UF_UI_CB_CONTINUE_DIALOG );

         
         xia_cplan1=NULL_TAG;
         xia_cplan2=NULL_TAG;
         xia_fplan=NULL_TAG;
         zhu_cplan=NULL_TAG;
         zhu_fplan=NULL_TAG;
       
     UF_OBJ_cycle_by_name(cface3, &xia_cplan1);
     UF_OBJ_cycle_by_name(cface4, &xia_cplan2);
         UF_OBJ_cycle_by_name(cface5, &zhu_cplan);        
     UF_OBJ_cycle_by_name(fface2, &xia_fplan);
         UF_OBJ_cycle_by_name(fface3, &zhu_fplan);
  

         /*下面为下模板与导柱的配合关系*/

         ret=UF_ASSEM_ask_parent_component(zhu_cplan1, &from_part_occ);   //获取父标志
         is_occ=UF_ASSEM_is_occurrence(from_part_occ);                    //确定父标志类型
         from_part_ins=UF_ASSEM_ask_inst_of_part_occ(from_part_occ);     //获取part occurrence中instance的tag
         ret=UF_ASSEM_ask_component_data(from_part_occ,part_name,refset_name,instance_name,  
                                     origin, csys_matrix, transform);

         ret=UF_ASSEM_ask_parent_component(xia_cplan1, &to_part_occ);
      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);

          ret=UF_ASSEM_ask_parent_component(zhu_fplan1, &flat_from_part_occ);
          is_occ=UF_ASSEM_is_occurrence(flat_from_part_occ);
      flat_from_part_ins=UF_ASSEM_ask_inst_of_part_occ(flat_from_part_occ);
      ret=UF_ASSEM_ask_component_data(flat_from_part_occ,part_name,refset_name,instance_name,  
                                       origin, csys_matrix, transform);

      ret=UF_ASSEM_ask_parent_component(xia_fplan, &flat_to_part_occ);
      flat_to_part_ins=UF_ASSEM_ask_inst_of_part_occ(flat_to_part_occ);
      ret=UF_ASSEM_ask_component_data(flat_to_part_occ,part_name,refset_name,instance_name,  
                                     origin, csys_matrix, transform);

         UF_ASSEM_init_mc (&ftf);

     ftf.mated_object=from_part_ins;
     ftf.name=NULL;
     ftf.user_name=FALSE;
         ftf.suppressed=FALSE;

     ftf.constraints[0].from_status=UF_ASSEM_ok;
     ftf.constraints[0].to_status=UF_ASSEM_ok;
     ftf.constraints[0].mate_type=UF_ASSEM_center;           //选择同轴匹配类型
     ftf.constraints[0].from_type=UF_ASSEM_cylindrical_face; //定义为选取圆周面匹配
     ftf.constraints[0].to_type=UF_ASSEM_cylindrical_face;
     ftf.constraints[0].from=UF_ASSEM_ask_prototype_of_occ(zhu_cplan);
     ftf.constraints[0].from_part_occ=from_part_occ;
     ftf.constraints[0].to=UF_ASSEM_ask_prototype_of_occ(xia_cplan1);
     ftf.constraints[0].to_part_occ=to_part_occ;
     ftf.constraints[0].offset=NULL_TAG;
     ftf.constraints[0].name="center to center";
     ftf.constraints[0].user_name=TRUE;
         ftf.constraints[0].sub_type=UF_ASSEM_center_1_to_1;//选取角度和同轴对齐的适当子类型

         ftf.constraints[1].from_status=UF_ASSEM_ok;
     ftf.constraints[1].to_status=UF_ASSEM_ok;
     ftf.constraints[1].mate_type=UF_ASSEM_v16_align; //定义对齐匹配类型
     ftf.constraints[1].from_type=UF_ASSEM_planar_face; //定义为选取圆周面匹配
     ftf.constraints[1].to_type=UF_ASSEM_planar_face; //定义为选取圆周面匹配
     ftf.constraints[1].from=UF_ASSEM_ask_prototype_of_occ(zhu_fplan);//获取选取对象原型的tag
     ftf.constraints[1].from_part_occ=flat_from_part_occ;  //匹配对象的part occurrence的tag
     ftf.constraints[1].to=UF_ASSEM_ask_prototype_of_occ(xia_fplan);
     ftf.constraints[1].to_part_occ=flat_to_part_occ;
     ftf.constraints[1].offset=NULL_TAG;  //定义距离,可利用表达式控制
     ftf.constraints[1].name="plan to plan";
     ftf.constraints[1].user_name=TRUE;  

         ftf.num_constraints = 2;
         
         ret=UF_ASSEM_solve_mc (&ftf, &status, &dof, transform);//条件计算
     UF_get_fail_message (ret,message);
   
     if (ret==0||status==UF_ASSEM_mc_solved)
         {
     ret=UF_ASSEM_apply_mc_data (&ftf, &struct_status, &status);//执行匹配
     UF_DISP_refresh();
     UF_MODL_update();
         }


请ZZZ兄指导,我怎样才能把另一个导柱加到下模板的右孔中,谢谢!
作者: zhb7081    时间: 2006-3-10 12:29
不好意思,图传不了
作者: zhb7081    时间: 2006-3-10 15:13
问题已解决,谢谢
我是用UF_OBJ_cycle_by_name(cface,&daozhu_col_face);
         UF_OBJ_set_name (daozhu_col_face,cface1);
对面进行重新命名
作者: skyonetop    时间: 2009-7-27 09:44
为什么一定要进行重命名呢?




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3