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

iCAx开思网

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

发现ugOpen里这个函数好象是错的

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

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

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

x
我使用UF_MODL_ask_face_data(face_id, &faceType, Point, dir, box, &radius, &rad_data, &norm_dir);时,得到point,dir和box的值都是错的。而其它值却正确。难道是函数库的错误吗?请高手指点。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-9-15 15:36:12 | 只看该作者
大家帮下我啊
头像被屏蔽
3
发表于 2005-9-16 10:02:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
4
发表于 2005-9-16 11:53:52 | 只看该作者
绝对坐标系和工作坐标系不重合吧,返回的值都是绝对坐标系的。
5
发表于 2005-9-19 11:05:48 | 只看该作者
但是我通过调用UF_MODL_ask_edge_verts(edge_id, p1, p2, &vertex),获取point的值都是正确的啊,所以觉得不会是“绝对坐标系和工作坐标系不重合”的缘故。还请大家帮我想个方法吧。
6
发表于 2005-9-19 13:18:52 | 只看该作者
看看这个代码哪里有错呢。
#include <stdio.h>
#include <uf_defs.h>
#include <uf_modl.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_object_types.h>

static FILE *outFile = NULL;
static const char *out_filename = "C:\\ufd_cam_sample_debug1.out";

#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))

static int report( char *file, int line, char *call, int irc)
{
  if (irc)
  {
     char    messg[133];
     printf("%s, line %d:  %s\n", file, line, call);
     (UF_get_fail_message(irc, messg)) ?
       printf("    returned a %d\n", irc) :
       printf("    returned error %d:  %s\n", irc, messg);
  }
  return(irc);
}

static void do_ugopen_api(void)
{

  tag_t obj_id = 0;
  tag_t edge_id = 0;
  tag_t face_id = 0;
  tag_t view;

  uf_list_p_t edge_list;
  uf_list_p_t face_list;

  UF_UI_selection_options_t opts;
  UF_UI_mask_t mask = {UF_solid_type,0,UF_UI_SEL_FEATURE_BODY};


  int edge_count = 0;
  int face_count = 0;
  int index, vertex, response;

  double tempPoint[3],dir[3]={0.0, 0.0, 0.0}, box[6]={0.0, 0.0, 0.0,0.0, 0.0, 0.0}, radius=0.0, rad_data=0.0;
  int norm_dir=0,faceType=0;

  double p1[3]={0.0, 0.0, 0.0}, p2[3]={0.0, 0.0, 0.0}, cursor[3];
  opts.num_mask_triples = 1;
  opts.mask_triples = &mask;
  opts.scope = UF_UI_SEL_SCOPE_WORK_PART;

  tempPoint[0]=0.0;
  tempPoint[1]=0.0;
  tempPoint[2]=0.0;

  outFile = fopen(out_filename, "w");
  response = 5;

  //  UF_CALL(UF_UI_select_single("Select a solid body", &opts,
    //                          &response, &obj_id,
    //                          cursor, &view));

      UF_MODL_ask_object(70,0,&obj_id);
      UF_MODL_ask_body_edges(obj_id, &edge_list);
      UF_MODL_ask_list_count(edge_list, &edge_count);
      UF_MODL_create_list(&face_list);
      UF_MODL_ask_body_faces(obj_id, &face_list);
      UF_MODL_ask_list_count(face_list, &face_count);

      fprintf(outFile,"obj_id %d \n", obj_id);
      fprintf(outFile,"face count %d \n", face_count);

        for(index=0; index<face_count; index++)
        {        
            UF_MODL_ask_list_item(face_list, index, &face_id);
            fprintf(outFile,"face_id %d \n", face_id);
            UF_MODL_ask_face_data(face_id, &faceType, tempPoint, dir, box, &radius, &rad_data, &norm_dir);
            fprintf(outFile,"faceType %d \n", faceType);
            fprintf(outFile,"x,y,z %d,%d,%d\n", tempPoint[0],tempPoint[1],tempPoint[2]);
            fprintf(outFile,"x,y,z,x,y,z %d,%d,%d;%d,%d,%d\n", box[0],box[1],box[2], box[3],box[4],box[5]);
         }      

        
  
      for(index = 0; index < edge_count; index++)
      {
        printf("\nInfo for edge number: %d\n", index);
        UF_MODL_ask_list_item(edge_list, index, &edge_id);
        UF_MODL_ask_edge_verts(edge_id, p1, p2, &vertex);
        printf("The number of vertices is: %d\n", vertex);
        switch(vertex)
        {
          case 0:
            printf("There are no vertices on this edge.\n");
            break;
          case 1:
            printf("The X value of P1 is: %f\n", p1[0]);
            printf("The Y value of P1 is: %f\n", p1[1]);
            printf("The Z value of P1 is: %f\n", p1[2]);
            break;
          case 2:
            fprintf(outFile,"The X value of P1 is: %f\n", p1[0]);
           fprintf(outFile,"The Y value of P1 is: %f\n", p1[1]);
            fprintf(outFile,"The Z value of P1 is: %f\n", p1[2]);
            fprintf(outFile,"The X value of P2 is: %f\n", p2[0]);
            fprintf(outFile,"The Y value of P2 is: %f\n", p2[1]);
            fprintf(outFile,"The Z value of P2 is: %f\n", p2[2]);
            break;
          default:
            break;
        }
      }

    printf("Total number of faces: %d\n", face_count);
fclose(outFile);

}

/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
  if (!UF_CALL(UF_initialize()))
  {
    do_ugopen_api();
    UF_CALL(UF_terminate());
  }
}

int ufusr_ask_unload(void)
{
  return (UF_UNLOAD_IMMEDIATELY);
}
7
发表于 2005-9-19 18:01:04 | 只看该作者
fprintf(outFile,"x,y,z %d,%d,%d\n", tempPoint[0],tempPoint[1],tempPoint[2]);
            fprintf(outFile,"x,y,z,x,y,z %d,%d,%d;%d,%d,%d\n", box[0],box[1],box[2], box[3],box[4],box[5]);

你输出的结果,都是整型数,能不错吗?
8
发表于 2005-9-19 18:37:02 | 只看该作者
谢谢。可以了。编译器也没提示有错,而且那些数也很小啊,绝对没>int32.maxValue or  < int32.minValue。居然得到些非常奇怪的数。
9
发表于 2005-9-20 10:28:13 | 只看该作者
原帖由 zaixiang 于 2005-9-19 18:37 发表
谢谢。可以了。编译器也没提示有错,而且那些数也很小啊,绝对没>int32.maxValue or  < int32.minValue。居然得到些非常奇怪的数。


晕啊。
编译器怎么可能知道你是要输出哪种类型的数啊。double a = 1.5;你要作为整型输出,那不就是1了嘛。
10
发表于 2005-9-20 12:52:14 | 只看该作者
输出的不是1,全是些-999934234234535555555555555.000000000000000000之类的数。所以才没想到是那个错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-26 01:28 , Processed in 0.032652 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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