【发布时间】:2019-02-22 03:46:55
【问题描述】:
我是 VTK 新手,我正在尝试在 vtk 中读取二进制结构化点(图像数据)文件,但在空白窗口中出现“读取二进制数据时出错”错误。我正在使用一个简单的fortran程序来创建数据文件(高斯场数据)如下,
program gaussian
implicit none
integer i, j, k
character(1) c
open(unit=100, file='energyDensity.vtk',
1 form="unformatted",access="stream")
write(100) '# vtk DataFile Version 3.0', new_line(c)
write(100) 'First time trying vtk import \n', new_line(c)
write(100) 'BINARY', new_line(c)
write(100) 'DATASET STRUCTURED_POINTS', new_line(c)
write(100) 'DIMENSIONS 101 101 101', new_line(c)
write(100) 'ORIGIN 0 0 0', new_line(c)
write(100) 'SPACING 1 1 1', new_line(c)
write(100) 'POINT_DATA 1030301', new_line(c)
write(100) 'SCALARS volume_scalars double 1', new_line(c)
write(100) 'LOOKUP_TABLE default', new_line(c)
do k = -50,50
do j = -50,50
do i = -50,50
write(100) 50.*exp(float((-(i*i+j*j+k*k))/25))
enddo
enddo
enddo
close(100)
endprogram
如果数据是 ASCII 格式,VTK 可以很好地读取和绘制数据(见下图)
我在VTK中使用下面的代码C++来读取数据(没有任何endian设置),
vtkNew<vtkStructuredPointsReader> reader;
reader->SetFileName (argv[1]);
reader->Update();
我尝试在互联网上进行大量搜索,但找不到以二进制形式读取结构化点数据的正确方法。似乎也没有办法为结构化点阅读器设置字节序。我不确定在这里做什么。任何帮助将不胜感激。
【问题讨论】:
-
您确定数据正确吗? Paraview 或 Visit 是否正确打开您的二进制数据?
-
弗拉基米尔,Paraview 设法打开了文件,但情节与上图完全不同。 Paraview 显示了四个奇怪的球体(规则间隔),这没有意义。所以,不,paraview 没有正确读取二进制文件。我不知道如何解决这个问题。在导入像 Mathematica 这样的软件时,我在 Fortran 中生成二进制文件的方式(如上面的代码)对我来说一直很好。