C VTK结构化点文件

C VTK结构化点文件,c,vtk,voxel,paraview,C,Vtk,Voxel,Paraview,我试图通过提取VTK文件中的点数据并将每个点存储在3D数组中,来解析C中的VTK文件。然而,我正在使用的文件每点有9条短裤,我很难理解每个数字的含义 我相信我理解大部分标题信息,如果我误解了,请纠正我: ASCII:ASCII或二进制文件的类型 数据集:数据集的类型 尺寸:体素x、y、z的dims 间距:每个体素w、h、d的体积 来源:不确定 点数据:点/体素总数dimx.dimy.dimz 我已经看过了文档,但仍然没有理解如何解释数据。有人能帮我理解或给我指一些有用的资源吗 # vtk Dat

我试图通过提取VTK文件中的点数据并将每个点存储在3D数组中,来解析C中的VTK文件。然而,我正在使用的文件每点有9条短裤,我很难理解每个数字的含义

我相信我理解大部分标题信息,如果我误解了,请纠正我:

ASCII:ASCII或二进制文件的类型 数据集:数据集的类型 尺寸:体素x、y、z的dims 间距:每个体素w、h、d的体积 来源:不确定 点数据:点/体素总数dimx.dimy.dimz 我已经看过了文档,但仍然没有理解如何解释数据。有人能帮我理解或给我指一些有用的资源吗

# vtk DataFile Version 3.0
vtk output
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 256 256 130
SPACING 1 1 1.3
ORIGIN 86.6449 -133.929 116.786
POINT_DATA 8519680
SCALARS scalars short
LOOKUP_TABLE default
0 0 0 0 0 0 0 0 0 
0 0 7 2 4 5 3 3 4 
4 5 5 1 7 7 1 1 2 
1 6 4 3 3 1 0 4 2 
2 3 2 4 2 2 0 2 6 
...

谢谢。

关于标题中字段的含义,您是正确的。 原点对应于栅格0-0-0角的坐标。 可在中找到数据集结构化_点的示例

从这里开始,这里是一个小文件,每个点有6条短裤。每条线代表一个点

# vtk DataFile Version 2.0
Volume example
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 3 4 2
ASPECT_RATIO 1 1 1
ORIGIN 0 0 0
POINT_DATA 24
SCALARS volume_scalars char 6
LOOKUP_TABLE default
0 1 2 3 4 5
1 1 2 3 4 5
2 1 2 3 4 5
0 2 2 3 4 5
1 2 2 3 4 5
2 2 2 3 4 5
0 3 2 8 9 10
1 3 2 8 9 10
2 3 2 8 9 10
0 4 2 8 9 10
1 4 2 8 9 10
2 4 2 8 9 10
0 1 3 18 19 20
1 1 3 18 19 20
2 1 3 18 19 20
0 2 3 18 19 20
1 2 3 18 19 20
2 2 3 18 19 20
0 3 3 24 25 26
1 3 3 24 25 26
2 3 3 24 25 26
0 4 3 24 25 26
1 4 3 24 25 26
2 4 3 24 25 26
可以显示前3个字段以了解数据布局:x的变化速度快于y,y的变化速度快于文件中的z

如果希望将数据存储在数组a[2][4][3][6]中,只需在执行循环时读取:

for(k=0;k<2;k++){ //z loop  
  for(j=0;j<4;j++){ //y loop : y change faster than z
    for(i=0;i<3;i++){ //x loop : x change faster than y 
      for(l=0;l<6;l++){
         fscanf(file,"%d",&a[k][j][i][l]);
      }
    }
  }
}
注意:fscanf需要指向数据的指针&sizex,而不是sizex。字符串是指向以\0、%s、headerpart结尾的字符数组的指针,可以正常工作。它可以替换为%s,&headerpart[0]。函数比较两个字符串,如果字符串相同,则返回0


由于您的网格看起来很大,可以使用二进制类型而不是ASCII来获取较小的文件,但请注意指定的格式

关于标题中字段的含义,您是正确的。 原点对应于栅格0-0-0角的坐标。 可在中找到数据集结构化_点的示例

从这里开始,这里是一个小文件,每个点有6条短裤。每条线代表一个点

# vtk DataFile Version 2.0
Volume example
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 3 4 2
ASPECT_RATIO 1 1 1
ORIGIN 0 0 0
POINT_DATA 24
SCALARS volume_scalars char 6
LOOKUP_TABLE default
0 1 2 3 4 5
1 1 2 3 4 5
2 1 2 3 4 5
0 2 2 3 4 5
1 2 2 3 4 5
2 2 2 3 4 5
0 3 2 8 9 10
1 3 2 8 9 10
2 3 2 8 9 10
0 4 2 8 9 10
1 4 2 8 9 10
2 4 2 8 9 10
0 1 3 18 19 20
1 1 3 18 19 20
2 1 3 18 19 20
0 2 3 18 19 20
1 2 3 18 19 20
2 2 3 18 19 20
0 3 3 24 25 26
1 3 3 24 25 26
2 3 3 24 25 26
0 4 3 24 25 26
1 4 3 24 25 26
2 4 3 24 25 26
可以显示前3个字段以了解数据布局:x的变化速度快于y,y的变化速度快于文件中的z

如果希望将数据存储在数组a[2][4][3][6]中,只需在执行循环时读取:

for(k=0;k<2;k++){ //z loop  
  for(j=0;j<4;j++){ //y loop : y change faster than z
    for(i=0;i<3;i++){ //x loop : x change faster than y 
      for(l=0;l<6;l++){
         fscanf(file,"%d",&a[k][j][i][l]);
      }
    }
  }
}
注意:fscanf需要指向数据的指针&sizex,而不是sizex。字符串是指向以\0、%s、headerpart结尾的字符数组的指针,可以正常工作。它可以替换为%s,&headerpart[0]。函数比较两个字符串,如果字符串相同,则返回0


由于您的网格看起来很大,可以使用二进制类型而不是ASCII来获取较小的文件,但请注意指定的格式

由于标记了paraview,因此可以使用软件作为参考,查看文件所代表的内容打开文件-单击“应用”按钮-然后在主窗口中打开新的电子表格视图,作为电子表格,您可以查看自标记paraview以来与之关联的点和数据,您可以使用该软件作为参考,查看文件所代表的内容打开文件-单击应用按钮-然后在主体窗口中打开一个新的电子表格视图,作为电子表格,您可以看到哪些是点以及与点相关的数据感谢您的回复,fscanf方法很好还使用strok_r将每一行拆分!。例如,我如何使用fscanf有效地拆分标头,以在结构中存储DIM。另外,我对体素是新手,那么点与坐标的关系如何?你能举一个我可以想象的例子吗?谢谢你的回答,fscanf方法很好,而且它还使用strtok_r来分割每一行!。例如,我如何使用fscanf有效地拆分标头,以在结构中存储DIM。另外,我对体素是新手,那么点与坐标的关系如何?你能举个我能想象的例子吗?