]> Creatis software - gdcm.git/blobdiff - src/gdcmOrientation.cxx
* Bug fix for python use
[gdcm.git] / src / gdcmOrientation.cxx
index 6632d4c80b968ec2205592b9293f3c88a60d1187..0800e7b144d60d65de547ea4702f41e01b079872 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmOrientation.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/07/24 02:34:42 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2005/07/29 15:07:56 $
+  Version:   $Revision: 1.4 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -18,6 +18,8 @@
 
 #include "gdcmOrientation.h"
 #include "gdcmFile.h"
+#include "gdcmDebug.h"
+#include <math.h> // for sqrt
 
 namespace gdcm 
 {
@@ -34,9 +36,8 @@ namespace gdcm
  *           (Axial, Coronal, Sagital) of the image
  * \note Should be run on the first gdcm::File of a 'coherent' Serie
  * @return orientation code
- * @return orientation code
  *   #   0 :   Not Applicable (neither 0020,0037 Image Orientation Patient 
- *   #                         nor     0020,0032Image Position     found )
+ *   #                         nor     0020,0032 Image Position    found )
  *   #   1 :   Axial
  *   #  -1 :   Axial invert
  *   #   2 :   Coronal
@@ -56,7 +57,8 @@ double Orientation::TypeOrientation( File *f )
    bool succ = f->GetImageOrientationPatient( iop );
    if ( !succ )
    {
-      return 0.;
+      gdcmErrorMacro( "No Image Orientation (0020,0037) was found in the file, cannot proceed." )
+      return 0;
    }
 
    vector3D ori1;
@@ -67,12 +69,12 @@ double Orientation::TypeOrientation( File *f )
 
    // two perpendicular vectors describe one plane
    double dicPlane[6][2][3] =
-   { {  {1,    0,    0   },{0,       1,     0     }  },       // Axial
-     {  {1,    0,    0   },{0,       0,    -1     }  },       // Coronal
-     {  {0,    1,    0   },{0,       0,    -1     }  },       // Sagittal
-     {  { 0.8, 0.5,  0.0 },{-0.1,    0.1 , -0.95  }  },       // Axial - HEART
-     {  { 0.8, 0.5,  0.0 },{-0.6674, 0.687, 0.1794}  },       // Coronal - HEART
-     {  {-0.1, 0.1, -0.95},{-0.6674, 0.687, 0.1794}  }        // Sagittal - HEART
+   { {  {1,    0,    0   },{0,       1,     0     }  }, // Axial
+     {  {1,    0,    0   },{0,       0,    -1     }  }, // Coronal
+     {  {0,    1,    0   },{0,       0,    -1     }  }, // Sagittal
+     {  { 0.8, 0.5,  0.0 },{-0.1,    0.1 , -0.95  }  }, // Axial - HEART
+     {  { 0.8, 0.5,  0.0 },{-0.6674, 0.687, 0.1794}  }, // Coronal - HEART
+     {  {-0.1, 0.1, -0.95},{-0.6674, 0.687, 0.1794}  }  // Sagittal - HEART
    };
 
    vector3D refA;
@@ -107,11 +109,10 @@ double Orientation::TypeOrientation( File *f )
 //                 res=self.VerfCriterion( -i , self.CalculLikelyhood2Vec(refB,refA,ori1,ori2) , res )
 //             return res[0]
 */
-
 }
 
 Res 
-Orientation::VerfCriterion(int typeCriterion, double criterionNew, Res const & in)
+Orientation::VerfCriterion(int typeCriterion, double criterionNew, Res const &in)
 {
    Res res;
    double criterion = in.second;
@@ -132,7 +133,7 @@ Orientation::VerfCriterion(int typeCriterion, double criterionNew, Res const & i
    return res;
 } 
 
-inline double square_dist(vector3D const &v1, vector3D const & v2)
+inline double square_dist(vector3D const &v1, vector3D const &v2)
 {
   double res;
   res = (v1.x - v2.x)*(v1.x - v2.x) +
@@ -158,8 +159,8 @@ inline double square_dist(vector3D const &v1, vector3D const & v2)
 //------------------------- Other : -------------------------------------
 // The calculus is based with vectors normalice
 double
-Orientation::CalculLikelyhood2Vec(vector3D const & refA, vector3D const & refB, 
-                           vector3D const & ori1, vector3D const & ori2 )
+Orientation::CalculLikelyhood2Vec(vector3D const &refA, vector3D const &refB, 
+                                  vector3D const &ori1, vector3D const &ori2 )
 {
 
    vector3D ori3 = ProductVectorial(ori1,ori2);