找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 20790|回复: 4
打印 上一主题 下一主题

UG中如何获得一个长方体的长宽高?

[复制链接]
跳转到指定楼层
1
发表于 2003-8-19 00:11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
在UG中,手工画了一个长方体,或者打开了一个只有长方体的文件,如何获得这个长方体的长宽高?谢谢。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2003-8-19 08:39:25 | 只看该作者
读表达式
3
发表于 2003-8-21 01:13:06 | 只看该作者
谢谢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);
4
发表于 2003-8-21 08:23:19 | 只看该作者
不大明白你的意思,这个函数如何? UF_MODL_eval_exp (char *exp_name,  
double * exp_value )就是得到具体数值的。建议你不要用UG默认的p0等作名称,而是在创建之初重命名它们,这样你就知道哪个是长、宽或高了。
5
发表于 2003-8-22 04:28:33 | 只看该作者
谢谢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);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-29 08:48 , Processed in 0.023402 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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