]> Creatis software - gdcm.git/blobdiff - src/gdcmOrientation.h
gdcm::Orientation uses RefCounter
[gdcm.git] / src / gdcmOrientation.h
index 7a69aa101dacf9ccfdf537b7434f1acb0a717b95..870bee43620edba224da86db640cc2827c84e114 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmOrientation.h,v $
   Language:  C++
-  Date:      $Date: 2005/10/01 15:51:42 $
-  Version:   $Revision: 1.8 $
+  Date:      $Date: 2005/11/18 11:42:48 $
+  Version:   $Revision: 1.12 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -19,7 +19,7 @@
 #ifndef GDCMORIENTATION_H
 #define GDCMORIENTATION_H
 
-#include "gdcmBase.h"
+#include "gdcmRefCounter.h"
 #include <map>
 
 namespace gdcm 
@@ -57,7 +57,7 @@ class File;
  *
  * Example #1:
  * Imagine the patient, in "HFS" position.
- * Sagital images are requested.
+ * Full body sagital images are requested.
  * All the cosines will be -1, 0, or +1;
  * "Patient Orientation" (deduced) will be "A/F".
  * Positive X axis is oriented 'towards patient's nose
@@ -65,26 +65,49 @@ class File;
  *
  * Example #2:
  * Imagine now that patient has a stiffneck and his head is *turned* 30 degrees towards the left.
- * Sagital images are requested.
+ * Head sagital images are requested.
  * One of the cosines will be almost 0.5
  * Deduced "Patient Orientation" will be "AL\F"
  * (main X axis orientation is towards patient's nose, and a little bit towards the left)
- * but the image is *perfectly* sagital !
+ * but the image looks *perfectly* sagital (for the head, not for the patient) !
  *
  * Imagine the patient's stiffneck causes head to be *bended* 30 degrees towards the left AND *turned* left.
  * Sagital images are requested...
  * You'll probabely have 3 letters for X axis and  Y axis, and the image remains *perfectly* sagital !
- * The values are given within the 'imager referential', better than within the 'Patient Referential' ...
+ * The values are given within the 'Patient referential', *not* within the 'Organ referential' ...
  */
-class GDCM_EXPORT Orientation : public Base
+typedef enum {
+   NotApplicable = 0,
+   Axial = 1,
+   AxialInvert = -1,
+   Coronal = 2,
+   CoronalInvert = -2,
+   Sagital = 3,
+   SagitalInvert = -3,
+   HeartAxial = 4,
+   HeartAxialInvert = -4,
+   HeartCoronal = 5,
+   HeartCoronalInvert = -5,
+   HeartSagital = 6,
+   HeartSagitalInvert = -6
+} OrientationType;
+
+class GDCM_EXPORT Orientation : public RefCounter
 {
+   gdcmTypeMacro(Orientation);
 public:
-  Orientation() {}
-  ~Orientation() {}
+   static Orientation *New() {return new Orientation();}
 
-  double TypeOrientation( File *file );
+  OrientationType GetOrientationType( File *file );
   std::string GetOrientation ( File *file );  
   
+  static const char* GetOrientationTypeString(OrientationType const o);
+  
+protected:
+/// \brief Constructor
+  Orientation() {}
+/// \brief Canonical Destructor
+  ~Orientation() {}
 private:
    Res VerfCriterion(int typeCriterion, double criterionNew, Res const &res);
    double CalculLikelyhood2Vec(vector3D const &refA, vector3D const &refB,