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