iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24463|回复: 7
打印 上一主题 下一主题

有关装配找配合面的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2003-7-14 18:57:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

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);
  
   }
  
  难道是用表达式修改尺寸的原因?望各位大虾指出我的错误,并帮我解决。谢谢。

873564-b_a.rar

765.4 KB, 阅读权限: 1, 下载次数: 6, 下载积分: 贡献 -2

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
 楼主| 发表于 2003-7-14 20:15:41 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
板凳
 楼主| 发表于 2003-7-14 22:02:03 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
地板
发表于 2003-7-15 07:59:29 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
5
 楼主| 发表于 2003-7-15 15:12:45 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
6
发表于 2003-7-16 08:04:53 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
7
发表于 2003-7-16 08:46:23 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
8
 楼主| 发表于 2003-7-16 15:23:45 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-12-23 00:13 , Processed in 0.022216 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表