]> Creatis software - gdcm.git/blobdiff - src/gdcmFile.cxx
Fix bug in Orientation::VerfCriterion
[gdcm.git] / src / gdcmFile.cxx
index 1e90cccb49650543aa4b9a35789e4d5adb3e3cd7..8b29ba6808608ff8c54962eabefdffaa6890db66 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/08/29 13:05:01 $
-  Version:   $Revision: 1.265 $
+  Date:      $Date: 2005/09/21 17:16:15 $
+  Version:   $Revision: 1.271 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
 //  in the images.
 //
 // Remember also :
-// Patient Position (0018,5100) values : HFP   = Head First-Prone
-//                                       HFS   = Head First-Supine
-//                                       HFDR  = Head First-Decubitus Right
-//                                       HFDL = Head First-Decubitus Left
-//                                       FFDR = Feet First-Decubitus Right
-//                                       FFDL = Feet First-Decubitus Left
-//                                       FFP  = Feet First-Prone
-//                                       FFS  = Feet First-Supine
-//                    can also find      SEMIERECT
-//                                       SUPINE
+// Patient Position (0018,5100) values :
+
+//  HFS   = Head First-Supine, where increasing (positive axis direction) :
+//     X -> to the direction pointed to by the patient's oustretched left arm
+//     Y -> to the anterior-to-posterior direction in the patient's body
+//     Z -> to the feet-to-head direction in the patient's body
+
+//  HFP   = Head First-Prone, where increasing (positive axis direction) :
+//     X -> to the direction pointed to by the patient's oustretched left arm
+//     Y -> to the anterior-to-posterior direction in the patient's body
+//     Z -> to the feet-to-head direction in the patient's body
+
+//  FFS  = Feet First-Supine, where increasing (positive axis direction) :
+//     X -> to the direction pointed to by the patient's oustretched left arm
+//     Y -> to the anterior-to-posterion direction in the patient's body
+//     Z -> to the feet-to-head direction in the patient's body
+
+//  FFP  = Feet First-Prone, where increasing (positive axis direction) :
+//     X -> to the direction pointed to by the patient's oustretched left arm
+//     Y -> to the posterior-to-anterior direction in the patient's body
+//     Z -> to the feet-to-head direction in the patient's body
+
+// HFDR = Head First-Decubitus Right
+// HFDL = Head First-Decubitus Left
+// FFDR = Feet First-Decubitus Right
+// FFDL = Feet First-Decubitus Left
+
+//  we can also find      
+
+// SEMIERECT
+// SUPINE
+
 // CS 2 Patient Orientation (0020 0020)
-//               When the coordinates of the image 
-//               are always present, this field is almost never used.
-//               Better we don't tust it too much ...
-//               Found Values are :      L\P
-//                                       L\FP
-//                                       P\F
-//                                       L\F
-//                                       P\FR
-//                                       R\F
+//    When the coordinates of the image 
+//    are always present, this field is almost never used.
+//    Better we don't trust it too much ...
+//    Found Values are :
+//     L\P
+//     L\FP
+//     P\F
+//     L\F
+//     P\FR
+//     R\F
 //
 // (0020|0037) [Image Orientation (Patient)] [1\0\0\0\1\0 ]
 
-                                      
+               
 // ---------------------------------------------------------------
 //
 #include "gdcmFile.h"
@@ -76,7 +99,7 @@
 #include "gdcmJPEGFragmentsInfo.h"
 
 #include <vector>
-#include <stdio.h> //sscanf
+#include <stdio.h>  //sscanf
 #include <stdlib.h> // for atoi
 
 namespace gdcm 
@@ -731,9 +754,11 @@ float File::GetZOrigin()
 
 /**
   * \brief gets the info from 0020,0037 : Image Orientation Patient
+  *                   or from 0020 0035 : Image Orientation (RET)
   * (needed to organize DICOM files based on their x,y,z position)
   * @param iop adress of the (6)float array to receive values
-  * @return cosines of image orientation patient
+  * @return true when one of the tag is found
+  *         false when nothing is found
   */
 bool File::GetImageOrientationPatient( float iop[6] )
 {
@@ -747,7 +772,8 @@ bool File::GetImageOrientationPatient( float iop[6] )
       if ( sscanf( strImOriPat.c_str(), "%f \\ %f \\%f \\%f \\%f \\%f ", 
           &iop[0], &iop[1], &iop[2], &iop[3], &iop[4], &iop[5]) != 6 )
       {
-         gdcmWarningMacro( "Wrong Image Orientation Patient (0020,0037). Less than 6 values were found." );
+         gdcmWarningMacro( "Wrong Image Orientation Patient (0020,0037)."
+                        << " Less than 6 values were found." );
          return false;
       }
    }
@@ -758,13 +784,16 @@ bool File::GetImageOrientationPatient( float iop[6] )
       if ( sscanf( strImOriPat.c_str(), "%f \\ %f \\%f \\%f \\%f \\%f ", 
           &iop[0], &iop[1], &iop[2], &iop[3], &iop[4], &iop[5]) != 6 )
       {
-         gdcmWarningMacro( "wrong Image Orientation Patient (0020,0035). Less than 6 values were found." );
+         gdcmWarningMacro( "wrong Image Orientation Patient (0020,0035). "
+                        << "Less than 6 values were found." );
          return false;
       }
    }
    return true;
 }
 
+
+
 /**
  * \brief   Retrieve the number of Bits Stored (actually used)
  *          (as opposed to number of Bits Allocated)
@@ -1472,7 +1501,7 @@ bool File::Write(std::string fileName, FileType writetype)
    if ( e0000 )
    {
       std::ostringstream sLen;
-      sLen << ComputeGroup0002Length(writetype);
+      sLen << ComputeGroup0002Length( );
       e0000->SetValue(sLen.str());
    }
 
@@ -1662,7 +1691,7 @@ bool File::ReadTag(uint16_t testGroup, uint16_t testElem)
       itemTagGroup = ReadInt16();
       itemTagElem  = ReadInt16();
    }
-   catch ( FormatError e )
+   catch ( FormatError /*e*/ )
    {
       //std::cerr << e << std::endl;
       return false;