This is what I did so far:
#define X_MAX 100
#define X_MIN -100
#define Y_MAX 100
#define Y_MIN -100
#define Z_MAX 100
#define Z_MIN -100
uint16_t getValue(uint16_t, uint16_t, uint16_t);
int main(int argc, char* argv[]) {
int *size = new int[3];
size[0] = abs(X_MIN - X_MAX);
size[1] = abs(Y_MIN - Y_MAX);
size[2] = abs(Z_MIN - Z_MAX);
uint16_t***values = new uint16_t **[size[0]];
for (uint16_t i = 0; i <= size[1]; ++i) {
values[i] = new uint16_t *[size[2]];
for (uint16_t j = 0; j <= size[1]; ++j) {
values[i][j] = new uint16_t[size[2]];
}
}
int i = 0;
for (uint16_t x = X_MIN; x <= X_MAX; x++) {
for (uint16_t y = Y_MIN; y <= Y_MAX; y++) {
for (uint16_t z = Z_MIN; z <= Z_MAX; z++) {
uint16_t value = getValue(x, y, z);
std::cout << "(" << x << "|" << y << "|" << z << ") = " << value << std::endl;
values[x + abs(X_MIN)][y + abs(Y_MIN)][z + abs(Z_MIN)] = value;
}
}
}
vtkIdType totalSize = (vtkIdType) size[0] * (vtkIdType) size[1] * (vtkIdType) size[2];
vtkNew<vtkUnsignedShortArray> array;
array->SetArray(**values, totalSize, 1);
vtkNew<vtkInformation> info;
vtkNew<vtkImageData> imageData;
imageData->GetPointData()->SetScalars(array);
imageData->SetDimensions(size);
imageData->SetScalarType(VTK_UNSIGNED_SHORT, info);
imageData->SetSpacing(1.0, 1.0, 1.0);
imageData->SetOrigin(0.0, 0.0, 0.0);
vtkNew<vtkMetaImageWriter> writer;
writer->SetInputData(imageData);
writer->SetFileName("data.mhd");
writer->Update();
}
But this throws an exception:
Ausnahme ausgelöst bei 0x00007FFD5C622BE7 (ucrtbased.dll) in minimal.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000000000000001.
Translating to access violation at 0x0…01 in minimal.exe (ucrtbased.dll). Not sure why this is coming up. The execution stack states that the error is thrown in line 66 (writer->Update();
).
Update:
PrintSelf output:
Modified Time: 51
Reference Count: 1
Registered Events: (none)
Information: 0000025C2C3574D0
Data Released: False
Global Release Data: Off
UpdateTime: 0
Field Data:
Debug: Off
Modified Time: 16
Reference Count: 1
Registered Events: (none)
Number Of Arrays: 0
Number Of Components: 0
Number Of Tuples: 0
Number Of Points: 8000000
Number Of Cells: 7880599
Cell Data:
Debug: Off
Modified Time: 19
Reference Count: 1
Registered Events:
Registered Observers:
vtkObserver (0000025C2C372960)
Event: 33
EventName: ModifiedEvent
Command: 0000025C2C357EF0
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)
Point Data:
Debug: Off
Modified Time: 36
Reference Count: 1
Registered Events:
Registered Observers:
vtkObserver (0000025C2C372780)
Event: 33
EventName: ModifiedEvent
Command: 0000025C2C357EF0
Priority: 0
Tag: 1
Number Of Arrays: 1
Array 0 name = nullptr
Number Of Components: 1
Number Of Tuples: 8000000
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:
Debug: Off
Modified Time: 11
Reference Count: 2
Registered Events: (none)
Name: (none)
Data type: unsigned short
Size: 8000000
MaxId: 7999999
NumberOfComponents: 1
Information: 0000000000000000
Name: (none)
Number Of Components: 1
Number Of Tuples: 8000000
Size: 8000000
MaxId: 7999999
LookupTable: (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, 199)
Ymin,Ymax: (0, 199)
Zmin,Zmax: (0, 199)
Compute Time: 59
Spacing: (1, 1, 1)
Origin: (0, 0, 0)
Direction: (1, 0, 0, 0, 1, 0, 0, 0, 1)
Dimensions: (200, 200, 200)
Increments: (0, 0, 0)
Extent: (0, 199, 0, 199, 0, 199)