]> Creatis software - clitk.git/commitdiff
Made .mat reading robust to non matrix files (e.g., Gate material files)
authorSimon Rit <simon.rit@creatis.insa-lyon.fr>
Thu, 4 Jul 2013 16:36:54 +0000 (18:36 +0200)
committerSimon Rit <simon.rit@creatis.insa-lyon.fr>
Thu, 4 Jul 2013 16:36:54 +0000 (18:36 +0200)
common/clitkTransformUtilities.cxx
common/clitkTransformUtilities.h
common/vvImageReader.cxx

index ef210d70ae3318c5dbb778557787d9d86b51677e..832d5983eed109898fe427337ec9b4f6dd0a8483 100644 (file)
@@ -67,4 +67,32 @@ itk::Matrix<double, 3, 3> GetRotationMatrix<3>(itk::Array<double> rotationParame
   return GetRotationMatrix3D(rotationParameters);
 }
 
+//--------------------------------------------------------------------
+itk::Matrix<double, 4, 4> ReadMatrix3D(std::string fileName)
+{
+  // read input matrix
+  std::ifstream is;
+  openFileForReading(is, fileName);
+  std::vector<double> nb;
+  double x;
+  skipComment(is);
+  is >> x;
+  while (is && !is.eof()) {
+    nb.push_back(x);
+    skipComment(is);
+    is >> x;
+  }
+
+  if(nb.size() != 16)
+    itkGenericExceptionMacro(<< "Could not read 4x4 matrix in " << fileName);
+
+  //copy it to the matrix
+  itk::Matrix<double, 4, 4> matrix;
+  unsigned int index=0;
+  for (unsigned int i=0;i<4;i++)
+    for (unsigned int j=0;j<4;j++)
+      matrix[i][j]=nb[index++];
+  return matrix;
+}
+
 }
index cbc30b97ac806aa0cd3c91d531dc4cac082bd2e8..d3644b19206f830eab30397f2c209ef721eca6f4 100644 (file)
@@ -255,29 +255,7 @@ namespace clitk
     return matrix; 
   }
    
-  inline itk::Matrix<double, 4, 4> ReadMatrix3D(std::string fileName)
-  {
-    // read input matrix
-    std::ifstream is;
-    openFileForReading(is, fileName);
-    std::vector<double> nb;
-    double x;
-    skipComment(is);
-    is >> x;
-    while (!is.eof()) {
-      nb.push_back(x);
-      skipComment(is);
-      is >> x;  
-    }
-     
-    //copy it to the matrix
-    itk::Matrix<double, 4, 4> matrix;
-    unsigned int index=0;
-    for (unsigned int i=0;i<4;i++)
-      for (unsigned int j=0;j<4;j++)
-       matrix[i][j]=nb[index++];
-    return matrix; 
-  }
+  itk::Matrix<double, 4, 4> ReadMatrix3D(std::string fileName);
  
   inline vtkMatrix4x4* ReadVTKMatrix3D(std::string fileName) {
     // read input matrix
index f4f1a907214912b61b4bbe295a1c2652c6359c8e..ddc4ad3833ae2e60050fee3debd5c58e106ee4c7 100644 (file)
@@ -161,7 +161,15 @@ void vvImageReader::ReadMatImageTransform()
   if(f.is_open()) {
     f.close();
 
-    itk::Matrix<double, 4, 4> itkMat = clitk::ReadMatrix3D(filename);
+    itk::Matrix<double, 4, 4> itkMat;
+    itkMat.SetIdentity();
+    try {
+      itkMat = clitk::ReadMatrix3D(filename);
+    }
+    catch (itk::ExceptionObject & err) {
+      itkWarningMacro(<< "Found " << filename
+                      << " but this is not a 4x4 matrix so it is ignored.");
+    }
 
     vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New();
     matrix->Identity();