mSpacing.resize(3);
mOrigin.resize(3);
mSize.resize(3);
+ mDirection.resize(3);
for(unsigned int i=0; i<3; i++) {
mSpacing[i] = image->GetSpacing()[i];
mOrigin[i] = image->GetOrigin()[i];
mSize[i] = image->GetSize()[i];
+ mDirection[i].resize(3);
+ for(unsigned int j=0; j<3; j++)
+ mDirection[i][j] = image->GetDirection()[i][j];
}
}
//--------------------------------------------------------------------
mSpacing.resize(3);
mOrigin.resize(3);
mSize.resize(3);
+ mDirection.resize(3);
for(unsigned int i=0; i<3; i++) {
mSpacing[i] = header->GetSpacing(i);
mOrigin[i] = header->GetOrigin(i);
mSize[i] = header->GetDimensions(i);
+ mDirection[i].resize(3);
+ for(unsigned int j=0; j<3; j++)
+ mDirection[i][j] = header->GetDirection(i)[j];
}
}
//--------------------------------------------------------------------
// Get bounds
double *bounds=mesh->GetBounds();
+ //Change mOrigin, mSize and mSpacing with respect to the directions
+ // Spacing is influenced by input direction
+ std::vector<double> tempSpacing;
+ tempSpacing.resize(3);
+ for(int i=0; i<3; i++) {
+ tempSpacing[i] = 0.0;
+ for(int j=0; j<3; j++) {
+ tempSpacing[i] += mDirection[i][j] * mSpacing[j];
+ }
+ }
+ for(int i=0; i<3; i++)
+ mSpacing[i] = tempSpacing[i];
+
+ // Size is influenced by affine transform matrix and input direction
+ // Size is converted to double, transformed and converted back to size type.
+ std::vector<double> tempSize;
+ tempSize.resize(3);
+ for(int i=0; i<3; i++) {
+ tempSize[i] = 0.0;
+ for(int j=0; j<3; j++) {
+ tempSize[i] += mDirection[i][j] * mSize[j];
+ }
+ }
+ for(int i=0; i<3; i++) {
+ if (tempSize[i] < 0.0) {
+ tempSize[i] *= -1;
+ mOrigin[i] += mSpacing[i]*(tempSize[i] -1);
+ mSpacing[i] *= -1;
+ }
+ mSize[i] = lrint(tempSize[i]);
+ }
+
// Compute origin
std::vector<double> origin;
origin.resize(3);
//--------------------------------------------------------------------
+//--------------------------------------------------------------------
+std::vector< std::vector<double> > vvImage::GetDirection()
+{
+ int dim = this->GetNumberOfDimensions();
+ vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
+ transform->Identity();
+ for (int i = 0; i < mTransform.size(); i++)
+ transform->Concatenate(this->mTransform[i]);
+
+ vtkSmartPointer<vtkMatrix4x4> matrix = transform->GetMatrix();
+ matrix->Invert();
+ std::vector<std::vector<double> > direction0;
+ for (int i = 0; i < dim; i++) {
+ if (i != 3) {
+ std::vector<double> direction1;
+ for (int j = 0; j < dim; j++) {
+ if (j != 3)
+#if VTK_MAJOR_VERSION <= 6
+ direction1.push_back((*matrix)[i][j]);
+#else
+ direction1.push_back((*matrix).GetElement(i,j))
+#endif
+ }
+ direction0.push_back(direction1);
+ }
+ }
+ return direction0;
+}
+//--------------------------------------------------------------------
+
+
+
//--------------------------------------------------------------------
bool vvImage::HaveSameSizeAndSpacingThan(vvImage * other)
{