+
+ //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]);
+ }