|
马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我作装配时,在找面时,程序调试通过,可运行时似乎进入死循环。一直找不到面 。我是将一个孔和轴装在一起,程序如下:
//------------------------------------提取参数------------------------------------------
double d1,d2,h1,h2;
char d1_s[100],d2_s[100],h1_s[100],h2_s[100];
UF_STYLER_item_value_type_t data;
data.item_attr=UF_STYLER_VALUE;
data.item_id=B_A_D1;
UF_STYLER_ask_value(dialog_id,[$data)]
d1=data.value.real;
sprintf(d1_s,"%f",d1);
data.item_attr=UF_STYLER_VALUE;
data.item_id=B_A_D2;
UF_STYLER_ask_value(dialog_id,[$data)]
d2=data.value.real;
sprintf(d2_s,"%f",d2);
data.item_attr=UF_STYLER_VALUE;
data.item_id=B_A_H1;
UF_STYLER_ask_value(dialog_id,[$data)]
h1=data.value.real;
sprintf(h1_s,"%f",h1);
data.item_attr=UF_STYLER_VALUE;
data.item_id=B_A_H2;
UF_STYLER_ask_value(dialog_id,[$data)]
h2=data.value.real;
sprintf(h2_s,"%f",h2);
//-----------------------------判断输入数据是否合法-----------------------------
if(d1<=0||d2<=0||d1<d2||h1<=0||h2<=0)
uc1601 ("输入数据非法,请重新输入",1);
else
{
//----------------------------获得装配根----------------------------
tag_t wcs_id,matrix_id;
double csys_origin[3];
double matrix_values[9];
UF_CSYS_ask_wcs([$wcs_id)]
UF_CSYS_ask_csys_info(wcs_id,[$matrix_id,csys_origin)]
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);
tag_t display_part,display_part_old,root_tag;
display_part=UF_PART_ask_display_part();
display_part_old=display_part;
root_tag=UF_ASSEM_ask_root_part_occ(display_part);
//-----------------------------加bear和axis零件入装配体------------------------------
tag_t instance1,instance2;
UF_PART_load_status_t error_status1,error_status2;
UF_ASSEM_add_part_to_assembly(display_part,"e:\\standard_part\\z_program\\bear\\bear.prt","",
"bear",csys_origin,matrix_values,0,[$instance1,&error_status1)]
UF_ASSEM_add_part_to_assembly(display_part,"e:\\standard_part\\z_program\\axis\\axis.prt","",
"axis",csys_origin,matrix_values,0,[$instance2,&error_status2)]
//----------------------------------修改零件尺寸-------------------------------
tag_t bear_tag;
tag_t axis_tag;
bear_tag=UF_PART_ask_part_tag("e:\\standard_part\\z_program\\bear\\bear.prt");
UF_PART_set_display_part(bear_tag);
axis_tag=UF_PART_ask_part_tag("e:\\standard_part\\z_program\\axis\\axis.prt");
char string0[100],string1[100],string2[100],string3[100],string4[100];
UF_PART_set_display_part(bear_tag);
strcpy(string0,"p0=");
strcat(string0,d1_s);
UF_MODL_edit_exp(string0);
strcpy(string1,"p1=");
strcat(string1,h1_s);
UF_MODL_edit_exp(string1);
strcpy(string2,"p2=");
strcat(string2,d2_s);
UF_MODL_edit_exp(string2);
UF_MODL_update();
UF_PART_set_display_part(axis_tag);
strcpy(string3,"p0=");
strcat(string3,d2_s);
UF_MODL_edit_exp(string3);
strcpy(string4,"p1=");
strcat(string4,h2_s);
UF_MODL_edit_exp(string4);
UF_MODL_update();
UF_PART_set_display_part(display_part_old);
//--------------------------在被配对组件选择一平面---------------------------
display_part=UF_PART_ask_display_part();
tag_t from_plan[2],body;
uf_list_p_t face_list1;
int type1,nom_dir1;
int body_type,sub_type;
double point1[3],dir1[3],box1[6],radius1,rad_data1;
UF_OBJ_cycle_objs_in_part(display_part, UF_solid_type,[$body )]
while ( body!= NULL_TAG)
{
UF_OBJ_ask_type_and_subtype (body,[$body_type,&sub_type) ]
int list_num1=0;
if(body_type==UF_solid_type&&sub_type==UF_solid_body_subtype)
{
tag_t face_id1;
UF_MODL_create_list([$face_list1)]
UF_MODL_ask_body_faces(body,[$face_list1)]
UF_MODL_ask_list_count(face_list1,[$list_num1)]
for (int j=0;j<list_num1;j++)
{
UF_MODL_ask_list_item(face_list1,j,[$face_id1)]
UF_MODL_ask_face_data(face_id1,&type1,point1,dir1,
box1,[$radius1,&rad_data1,&nom_dir1)]
if (type1==22&&fabs(dir1[2]-1)<=10e-7)
from_plan[0]=face_id1;
}
UF_MODL_delete_list([$face_list1)]
}
UF_OBJ_cycle_objs_in_part(display_part, UF_solid_type, [$body)]
}
UF_DISP_set_highlight(from_plan[0],1);
}
难道是用表达式修改尺寸的原因?望各位大虾指出我的错误,并帮我解决。谢谢。 |
|