iCAx开思工具箱

标题: 【求助】三元机测量数据如何导入ug中? [打印本页]

作者: nethumb    时间: 2003-8-11 09:09
标题: 【求助】三元机测量数据如何导入ug中?
我在做ug二次开发过程中,需要把三坐标测量机测量的数据文件读入程序中,根据其中的数据生成点。但如何把之间的接口该如何解决呢?请高手指点!!
作者: 恋云    时间: 2003-8-12 07:49
斑竹呢?
作者: las1109    时间: 2003-8-12 09:38
要看你的三坐标测量机测量的数据文件的格式能否满足UG输入的要求,ug有一个功能,根据点云构面。你可以看看该功能的说明。
作者: 恋云    时间: 2003-8-12 10:06
若是三坐标测量机输出格式是电子表格形式,具体如何读取其中的数据?能否清楚的讲解一下?谢谢!!
作者: spline    时间: 2003-8-12 10:34
1. Export the point to csv format file,and make a program to read the csv file.
  
2.Create a spline from point file, then create spline define point
作者: las1109    时间: 2003-8-12 15:03
贴个文件看看
作者: 恋云    时间: 2003-8-13 08:04
同意楼上!
spline能否给个例子?
谢谢!
作者: spline    时间: 2003-8-13 11:22
If there is no error in your csv file, use "fscanf" function.
This function can read formatted string.
  
Sorry, I am in training. So no examples, no Chinese IME, and no Opera Browser.
作者: lianyun    时间: 2003-8-13 11:51
thank you!spline!
作者: lianyun    时间: 2003-8-24 08:49
我做了一个读取csy file的小程序,在tc下编译,运行都完全正确。程序如下:
include "stdio.h"
main()
{
  FILE *fp;
  int i,j;
  double points[10][3];
  if((fp=fopen("points.txt","r"))==NULL)
  {
  printf("cannot open this file");
  exit(0);
  }
  i=0;
  while(!feof(fp))
  {
  fscanf(fp,"%s %s %s",[$points[0],&points[1],&points[2])]
  i++;
  }
  
  for(j=0;j<i;j++)
  {
   printf("%s %s %s\n",[$points[j][0],&points[j][1],&points[j][2])]
  
  }
  
  }
  
但是,相同的一段程序,放在vc中编译后,在ug中却读不了点。甚至把输出格式改为%s,整个ug都会跳出,还请大家一起讨论。
int YIN_RP_apply_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
            int i_ret;
          char message[133];
    tag_t point;
    FILE *fp;
    int i;
    double points[10][3];
  
     /* Make sure User Function is available. */   
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
   if((fp=fopen("C:\\points.txt","r"))==NULL)
  {
    UF_UI_open_listing_window();
   UF_UI_write_listing_window("cannot open the file");
  }
  else
  {  
   for(i=0;i<2;i++)
   {
  UF_UI_write_listing_window("can open the file");
  i_ret=fscanf(fp,"%s %s %s",[$points[0],&points[1],&points[2])]
   
   }
  }
  fclose(fp);
   UF_UI_open_listing_window();
    sprintf(message,"%f",points[0][0]);
    UF_UI_write_listing_window(message);
UF_terminate ();
return (UF_UI_CB_CONTINUE_DIALOG);  
}
作者: ifhaha    时间: 2003-8-25 12:56
在UG中,将三座标测量机得到的igs文件是可以读入的,不知道你得到的是什么样的格式,如果也是igs点描述,可以导入点后,使用spline命令成线,之后进行操作。
作者: lianyun    时间: 2003-8-25 20:59
能否请楼上的高手具体谈谈如何读取igs文件,小弟以前没有做过这方面的工作?先谢了!
作者: new_3344    时间: 2003-8-28 10:34
如果是igs格式,则可以利用UG的IGS接口直接读取就可以了。
如果是DAT文件格式,按照UG直接读取DAT文件要按UG的标准来。
应该是同楼上的大侠写的程序读点的格式一致,
但是注意,每个点单独一行,X\Y\Z之间必须要用空格来个开。
可以用SPLINE命令中由点来构造曲线,再用取点的功能POINT SET可以将这些点直接生成出来。
  
我估计楼上的大侠问题是在坐标之间的空格上。
可以试试。
作者: ifhaha    时间: 2003-8-31 09:56
能不能将你三坐标机得到的测量数据贴一下,想看看你的数据格式,可以吗?谢谢
作者: spline    时间: 2003-9-5 08:43
lianyun wrote:
我做了一个读取csy file的小程序,在tc下编译,运行都完全正确。程序如下:  
  
  double points[10][3];
  if((fp=fopen("points.txt","r"))==NULL)  
  {  
  ??printf("cannot open this file");  
  ??exit(0);  
  }  
  i=0;  
  while(!feof(fp))  
  {  
  fscanf(fp,"%s %s %s",[$points[0],&points[1],&points[2])]  
  i++;  
  }  
  
  

你把points定义成了double数组,不过你读取的时候把它当成了字符串
作者: spline    时间: 2003-9-5 12:12
i_ret=fscanf(fp,"%s %s %s",[$points[0],&points[1],&points[2])]  
这句话也有问题,fscanf的后面的三个参数应当是指针。
作者: spline    时间: 2003-9-5 12:12
i_ret=fscanf(fp,"%s %s %s",[$points[0],&points[1],&points[2])]  
这句话也有问题,fscanf的后面的三个参数应当是指针。
作者: 麻脸    时间: 2003-9-6 04:44
一般三坐标测量机在进行曲线曲面扫描时都会生成不同格式的数据文件,像SZJ系列使用的WINCOM软件就可以输出DXF、IGES、IBL和普通的文本文件。只要直接导入就行了。
  
如果只是做扫描,还可以用它自带的AUTOCAD的ARX模块中的功能,直接在AUTOCAD中进行扫描采点,然后存成想要的格式后转到UG中。
  
你的程序有关UG的我没看懂,不过其中进行数据读的语句错了。%s是用于读取字符串数据的标志,而你声明的point是一个指向浮点数组的指针。在TC中可能两个指针的大小一样,就没出错(可能,我也不知道),不过在VC中是肯定不成的
  i_ret=fscanf(fp,"%s %s %s",[$points[0],&points[1],&points[2])]  错!
  
应该是
  i_ret = fscanf( fp, "%f %f %f", points+i*3, points+i*3+1, points+i*3+2 );
  
。。。。不过你这么做挺累的,整个结构最好这样:
  
include "stdio.h"  
main()  
{  
FILE *fp;  
double point[3];  
if((fp=fopen("points.txt","r"))==NULL)  
{  
  printf("cannot open this file");  
  exit(0);  
}  
while(!feof(fp))  
{  
  fscanf(fp,"%f %f %f", point, point+1, point+2 );   
  printf("%f %f %f\n", point[0], point[1], point[2] );
}  
fclose( fp );
}  
    




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