iCAx开思工具箱

标题: UG中如何获得一个长方体的长宽高? [打印本页]

作者: baihai    时间: 2003-8-19 00:11
标题: UG中如何获得一个长方体的长宽高?
在UG中,手工画了一个长方体,或者打开了一个只有长方体的文件,如何获得这个长方体的长宽高?谢谢。
作者: zzz    时间: 2003-8-19 08:39
读表达式
作者: baihai    时间: 2003-8-21 01:13
谢谢zzz兄。
我找到了读表达式的例子。可以把长方体的表达式在listing_window里写成如下形式:
p0=125
p1=34
p3=2
我的问题是:如何从表达式获取数值(即125,34,2)?谢谢。
  
    int ifail=0;
    char *string;
    tag_t *exps;
    int number_of_exps=0,i;
    char buf[UF_UI_MAX_STRING_LEN+1];
    char err_msg[MAX_LINE_SIZE+1];
    tag_t part;
  
   UF_UI_open_listing_window();
  
    if((part=UF_PART_ask_display_part()) == NULL_TAG)
    {
        UF_UI_write_listing_window("当前没有板类零件\n");
        return;
    }
  
    ifail=UF_MODL_ask_exps_of_part(part,[$number_of_exps,&exps)]
    if(ifail)
    {
      UF_get_fail_message(ifail,err_msg);
      sprintf(buf,"Error: %s\n", err_msg);
      UF_UI_write_listing_window(buf);
    }
    sprintf(buf,"number_of_exps=%d\n",number_of_exps);
    UF_UI_write_listing_window(buf);
    UF_UI_write_listing_window("Asking expression strings\n");
  
    for(i=0;i<number_of_exps;i++)
    {
  
    ifail=UF_MODL_ask_exp_tag_string(exps,[$string)]
      if(ifail)
      {
        UF_get_fail_message(ifail, err_msg);
        sprintf(buf, "Error: %s\n", err_msg);
        UF_UI_write_listing_window(buf);
      }
      sprintf(buf,"Expression %d: %s\n",i,string);
      UF_UI_write_listing_window(buf);
  
      UF_UI_write_listing_window(string);
      UF_free(string);
    }
    UF_free(exps);
作者: liberty000    时间: 2003-8-21 08:23
不大明白你的意思,这个函数如何? UF_MODL_eval_exp (char *exp_name,  
double * exp_value )就是得到具体数值的。建议你不要用UG默认的p0等作名称,而是在创建之初重命名它们,这样你就知道哪个是长、宽或高了。
作者: baihai    时间: 2003-8-22 04:28
谢谢liberty兄,我用字符串处理函数解决了这个问题:因为表达式的数值前都是3个字符("p0=","p1=","p2="),我把这三个字符替换为“0”,之后用字符串转数值函数求得长方体边长,最后通过排序得到长宽高。
可能有点复杂,但是可以得到正确结果。
liberty兄的方法可能会简单。由于时间的关系,我没有进行实验。
  
(1)表达式  
   p0=12  
   p1=340   
   p3=2.5
(2)两个主要函数  
     _strnset( string, '0', 3 );
     bianliang=atof(string);
(3)运行结果:  
长宽高分别为:340.000000,12.000000,2.500000
  
     int ifail=0;
     char *string;
     tag_t *exps;
     int number_of_exps=0,i;
     char buf[UF_UI_MAX_STRING_LEN+1];
     char err_msg[MAX_LINE_SIZE+1];
     tag_t part;
     double bianliang[3],a,b,c;
      
  
//  UF_UI_open_listing_window();
  
     if((part=UF_PART_ask_display_part()) == NULL_TAG)
     {
  //       UF_UI_write_listing_window("当前没有板类零件\n");
    uc1601("当前没有板类零件",1);
     return;
     }
  
     ifail=UF_MODL_ask_exps_of_part(part,[$number_of_exps,&exps)]
     if(ifail)
     {
       UF_get_fail_message(ifail,err_msg);
       sprintf(buf,"Error: %s\n", err_msg);
//      UF_UI_write_listing_window(buf);
       uc1601(buf,1);
   
     }
//    sprintf(buf,"number_of_exps=%d\n",number_of_exps);
//    UF_UI_write_listing_window(buf);
//   UF_UI_write_listing_window("Asking expression strings\n");
  
     for(i=0;i<number_of_exps;i++)
     {
  
     ifail=UF_MODL_ask_exp_tag_string(exps,[$string)]
       if(ifail)
       {
         UF_get_fail_message(ifail, err_msg);
         sprintf(buf, "Error: %s\n", err_msg);
   //      UF_UI_write_listing_window(buf);
      uc1601(buf,1);
     }
//    sprintf(buf,"Expression %d: %s\n",i,string);
//    UF_UI_write_listing_window(buf);
//      UF_UI_write_listing_window(string);
         
  
     _strnset( string, '0', 3 );
      
     bianliang=atof(string);
  
//         sprintf(buf, "%f\n", bianliang);
//     UF_UI_write_listing_window(buf);
  
      
     UF_free(string);
   }
   UF_free(exps);
         if((bianliang[0]>=bianliang[1])&(bianliang[0]>=bianliang[2]))
     {
      a=bianliang[0];
          if(bianliang[1]>=bianliang[2])
      {
      b=bianliang[1];
          c=bianliang[2];
      }
      else
      {
      b=bianliang[2];
          c=bianliang[1];
      }
      }
  
         if((bianliang[1]>=bianliang[2])&(bianliang[1]>=bianliang[0]))
     {
      a=bianliang[1];
          if(bianliang[0]>=bianliang[2])
      {
      b=bianliang[0];
          c=bianliang[2];
      }
      else
      {
      b=bianliang[2];
          c=bianliang[0];
      }
      }
  
if((bianliang[2]>=bianliang[1])&(bianliang[2]>=bianliang[0]))
     {
      a=bianliang[2];
          if(bianliang[0]>=bianliang[1])
      {
      b=bianliang[0];
          c=bianliang[1];
      }
      else
      {
      b=bianliang[1];
          c=bianliang[0];
      }
      }
  
          sprintf(buf, "板的外形尺寸: %f %f %f\n", a,b,c);
//       UF_UI_write_listing_window(buf);
          uc1601(buf,1);




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