我正在尝试从我的 vti 文件中的网格中读取双精度值。但是,当我尝试访问其中的任何元素时,我从
GetScalarPointer
获得的返回值会生成分段错误,例如与scalarPtr[0]
:
#include <vtkSmartPointer.h>
#include <vtkXMLImageDataReader.h>
#include <vtkImageData.h>
int main(){
vtkSmartPointer<vtkXMLImageDataReader> reader =
vtkSmartPointer<vtkXMLImageDataReader>::New();
reader->SetFileName("my_file.vti");
reader->Update();
vtkSmartPointer<vtkImageData> imageData =
vtkSmartPointer<vtkImageData>::New();
imageData->ShallowCopy(reader->GetOutput());
double* scalarPtr = static_cast<double*>(imageData->GetScalarPointer());
std::cout << scalarPtr[0] << std::endl; // segmentation fault
}
我知道类型是 double 因为
imageData->GetDataType()
返回 11,对应于 VTK_DOUBLE
.
我也试过看看是不是因为值的字节顺序,但是
double* scalarPtr = static_cast<double*>(imageData->GetScalarPointer());
const vtkIdType numScalars = imageData->GetNumberOfPoints();
const int scalarSize = sizeof(double);
vtkByteSwap::SwapVoidRange(scalarPtr, numScalars, scalarSize);
也会导致分段错误,可能是因为
scalarPtr
不可访问。
这些是我
vtkImageData
课的内容:
vtkImageData (0x556e1ad5afd0)
Debug: Off
Modified Time: 307
Reference Count: 1
Registered Events: (none)
Information: 0x556e1ad5b470
Data Released: False
Global Release Data: Off
UpdateTime: 0
Field Data:
Debug: Off
Modified Time: 307
Reference Count: 1
Registered Events: (none)
Number Of Arrays: 1
Array 0 name = comments
Number Of Components: 1
Number Of Tuples: 1
Number Of Points: 2431
Number Of Cells: 1920
Cell Data:
Debug: Off
Modified Time: 302
Reference Count: 1
Registered Events:
Registered Observers:
vtkObserver (0x556e1ad5cb00)
Event: 33
EventName: ModifiedEvent
Command: 0x556e1ad5c6a0
Priority: 0
Tag: 1
Number Of Arrays: 1
Array 0 name = material
Number Of Components: 1
Number Of Tuples: 1920
Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 1 1 1 )
Interpolate Flags: ( 1 1 1 1 1 0 0 1 1 1 1 )
Pass Through Flags: ( 1 1 1 1 1 1 1 1 1 1 1 )
Scalars: (none)
Vectors: (none)
Normals: (none)
TCoords: (none)
Tensors: (none)
GlobalIds: (none)
PedigreeIds: (none)
EdgeFlag: (none)
Tangents: (none)
RationalWeights: (none)
HigherOrderDegrees: (none)
Point Data:
Debug: Off
Modified Time: 304
Reference Count: 1
Registered Events:
Registered Observers:
vtkObserver (0x556e1ad5c8e0)
Event: 33
EventName: ModifiedEvent
Command: 0x556e1ad5c6a0
Priority: 0
Tag: 1
Number Of Arrays: 0
Number Of Components: 0
Number Of Tuples: 0
Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 1 1 1 )
Interpolate Flags: ( 1 1 1 1 1 0 0 1 1 1 1 )
Pass Through Flags: ( 1 1 1 1 1 1 1 1 1 1 1 )
Scalars: (none)
Vectors: (none)
Normals: (none)
TCoords: (none)
Tensors: (none)
GlobalIds: (none)
PedigreeIds: (none)
EdgeFlag: (none)
Tangents: (none)
RationalWeights: (none)
HigherOrderDegrees: (none)
Bounds:
Xmin,Xmax: (0, 5e-06)
Ymin,Ymax: (0, 8e-06)
Zmin,Zmax: (0, 6e-06)
Compute Time: 308
Spacing: (5e-07, 5e-07, 5e-07)
Origin: (0, 0, 0)
Direction: (1, 0, 0, 0, 1, 0, 0, 0, 1)
Dimensions: (11, 17, 13)
Increments: (0, 0, 0)
Extent: (0, 10, 0, 16, 0, 12)
就访问网格值的方式而言,我做错了什么?