]> Creatis software - gdcm.git/blobdiff - src/gdcmHeaderHelper.cxx
* This commit should fix the Debug building under VC++, the problem was mainly a...
[gdcm.git] / src / gdcmHeaderHelper.cxx
index cb32855dc1c67997fe0a28ecec98fe51e4f2510a..05ade1c54c6e64685a3cb951e2192327f73d4d77 100644 (file)
@@ -1,4 +1,4 @@
-// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.2 2003/09/09 08:46:32 malaterre Exp $
+// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.5 2003/09/18 09:32:15 regrain Exp $
 
 //This is needed when compiling in debug mode
 #ifdef _MSC_VER
@@ -24,19 +24,22 @@ using namespace std;
 #include <windows.h> 
 int GetDir(string dPath, list<string> &filenames)
 {
+  //For now dPath should have an ending "\"
   WIN32_FIND_DATA FileData; 
   HANDLE hFile; 
-  hFile = FindFirstFile(dPath.c_str(), &FileData); 
+  hFile = FindFirstFile((dPath+"*").c_str(), &FileData); 
   if ( hFile == INVALID_HANDLE_VALUE ) 
   { 
     //No files !
     return false; 
   } 
   
-  filenames.push_back( FileData.cFileName );
+  if( strncmp(FileData.cFileName, ".", 1) != 0 )
+    filenames.push_back( dPath+FileData.cFileName );
   while( FindNextFile(hFile, &FileData ) != 0)
   { 
-    filenames.push_back( FileData.cFileName );
+    if( strncmp(FileData.cFileName, ".", 1) != 0 )
+      filenames.push_back( dPath+FileData.cFileName );
   }
   return true;
 }
@@ -114,7 +117,7 @@ int gdcmHeaderHelper::GetPixelSize() {
 string gdcmHeaderHelper::GetPixelType() {
    string BitsAlloc;
    BitsAlloc = GetElValByName("Bits Allocated");
-   if (BitsAlloc == "gdcm::Unfound") {
+   if (BitsAlloc == GDCM_UNFOUND) {
       dbg.Verbose(0, "gdcmHeader::GetPixelType: unfound Bits Allocated");
       BitsAlloc = string("16");
    }
@@ -123,7 +126,7 @@ string gdcmHeaderHelper::GetPixelType() {
 
    string Signed;
    Signed = GetElValByName("Pixel Representation");
-   if (Signed == "gdcm::Unfound") {
+   if (Signed == GDCM_UNFOUND) {
       dbg.Verbose(0, "gdcmHeader::GetPixelType: unfound Pixel Representation");
       BitsAlloc = string("0");
    }
@@ -145,7 +148,7 @@ float gdcmHeaderHelper::GetXSpacing() {
     float xspacing, yspacing;
     string StrSpacing = GetPubElValByNumber(0x0028,0x0030);
 
-    if (StrSpacing == "gdcm::Unfound") {
+    if (StrSpacing == GDCM_UNFOUND) {
        dbg.Verbose(0, "gdcmHeader::GetXSpacing: unfound Pixel Spacing (0028,0030)");
        return 1.;
      }
@@ -165,7 +168,7 @@ float gdcmHeaderHelper::GetYSpacing() {
    float xspacing, yspacing;
    string StrSpacing = GetPubElValByNumber(0x0028,0x0030);
   
-   if (StrSpacing == "gdcm::Unfound") {
+   if (StrSpacing == GDCM_UNFOUND) {
       dbg.Verbose(0, "gdcmHeader::GetYSpacing: unfound Pixel Spacing (0028,0030)");
       return 1.;
     }
@@ -201,10 +204,10 @@ float gdcmHeaderHelper::GetZSpacing() {
    
    string StrSpacingBSlices = GetPubElValByNumber(0x0018,0x0088);
 
-   if (StrSpacingBSlices == "gdcm::Unfound") {
+   if (StrSpacingBSlices == GDCM_UNFOUND) {
       dbg.Verbose(0, "gdcmHeader::GetZSpacing: unfound StrSpacingBSlices");
       string StrSliceThickness = GetPubElValByNumber(0x0018,0x0050);       
-      if (StrSliceThickness == "gdcm::Unfound")
+      if (StrSliceThickness == GDCM_UNFOUND)
          return 1.;
       else
          // if no 'Spacing Between Slices' is found, 
@@ -240,10 +243,10 @@ float gdcmHeaderHelper::GetXOrigin() {
     float xImPos, yImPos, zImPos;  
     string StrImPos = GetPubElValByNumber(0x0020,0x0032);
 
-    if (StrImPos == "gdcm::Unfound") {
+    if (StrImPos == GDCM_UNFOUND) {
        dbg.Verbose(0, "gdcmHeader::GetXImagePosition: unfound Image Position Patient (0020,0032)");
        StrImPos = GetPubElValByNumber(0x0020,0x0030); // For ACR-NEMA images
-       if (StrImPos == "gdcm::Unfound") {
+       if (StrImPos == GDCM_UNFOUND) {
           dbg.Verbose(0, "gdcmHeader::GetXImagePosition: unfound Image Position (RET) (0020,0030)");
           // How to tell the caller nothing was found ?
          return 0.;
@@ -265,10 +268,10 @@ float gdcmHeaderHelper::GetYOrigin() {
     float xImPos, yImPos, zImPos;
     string StrImPos = GetPubElValByNumber(0x0020,0x0032);
 
-    if (StrImPos == "gdcm::Unfound") {
+    if (StrImPos == GDCM_UNFOUND) {
        dbg.Verbose(0, "gdcmHeader::GetYImagePosition: unfound Image Position Patient (0020,0032)");
        StrImPos = GetPubElValByNumber(0x0020,0x0030); // For ACR-NEMA images
-       if (StrImPos == "gdcm::Unfound") {
+       if (StrImPos == GDCM_UNFOUND) {
           dbg.Verbose(0, "gdcmHeader::GetYImagePosition: unfound Image Position (RET) (0020,0030)");
           // How to tell the caller nothing was found ?
            return 0.;
@@ -291,7 +294,7 @@ float gdcmHeaderHelper::GetYOrigin() {
 float gdcmHeaderHelper::GetZOrigin() {
    float xImPos, yImPos, zImPos; 
    string StrImPos = GetPubElValByNumber(0x0020,0x0032);
-   if (StrImPos != "gdcm::Unfound") {
+   if (StrImPos != GDCM_UNFOUND) {
       if( sscanf( StrImPos.c_str(), "%f\\%f\\%f", &xImPos, &yImPos, &zImPos) != 3) {
          dbg.Verbose(0, "gdcmHeader::GetZImagePosition: wrong Image Position Patient (0020,0032)");
          return 0.;  // bug in the element 0x0020,0x0032
@@ -300,7 +303,7 @@ float gdcmHeaderHelper::GetZOrigin() {
       }    
    }  
    StrImPos = GetPubElValByNumber(0x0020,0x0030); // For ACR-NEMA images
-   if (StrImPos != "gdcm::Unfound") {
+   if (StrImPos != GDCM_UNFOUND) {
       if( sscanf( StrImPos.c_str(), "%f\\%f\\%f", &xImPos, &yImPos, &zImPos) != 3) {
          dbg.Verbose(0, "gdcmHeader::GetZImagePosition: wrong Image Position (RET) (0020,0030)");
          return 0.;  // bug in the element 0x0020,0x0032
@@ -309,7 +312,7 @@ float gdcmHeaderHelper::GetZOrigin() {
       }    
    }                
    string StrSliceLocation = GetPubElValByNumber(0x0020,0x1041);// for *very* old ACR-NEMA images
-   if (StrSliceLocation != "gdcm::Unfound") {
+   if (StrSliceLocation != GDCM_UNFOUND) {
       if( sscanf( StrSliceLocation.c_str(), "%f", &zImPos) !=1) {
          dbg.Verbose(0, "gdcmHeader::GetZImagePosition: wrong Slice Location (0020,1041)");
          return 0.;  // bug in the element 0x0020,0x1041
@@ -319,7 +322,7 @@ float gdcmHeaderHelper::GetZOrigin() {
    }   
    dbg.Verbose(0, "gdcmHeader::GetZImagePosition: unfound Slice Location (0020,1041)");
    string StrLocation = GetPubElValByNumber(0x0020,0x0050);
-   if (StrLocation != "gdcm::Unfound") {
+   if (StrLocation != GDCM_UNFOUND) {
       if( sscanf( StrLocation.c_str(), "%f", &zImPos) !=1) {
          dbg.Verbose(0, "gdcmHeader::GetZImagePosition: wrong Location (0020,0050)");
          return 0.;  // bug in the element 0x0020,0x0050
@@ -344,7 +347,7 @@ int gdcmHeaderHelper::GetImageNumber() {
   // simpler and faster function. sscanf() can do all possible conversions whereas atoi() can 
   //only do single decimal integer conversions.
   string StrImNumber = GetPubElValByNumber(0x0020,0x0013); //0020 0013 IS REL Image Number
-  if (StrImNumber != "gdcm::Unfound") {
+  if (StrImNumber != GDCM_UNFOUND) {
     return atoi( StrImNumber.c_str() );
   }
   return 0;   //Hopeless
@@ -357,35 +360,48 @@ int gdcmHeaderHelper::GetImageNumber() {
   */
 ModalityType gdcmHeaderHelper::GetModality(void) {
   string StrModality = GetPubElValByNumber(0x0008,0x0060); //0008 0060 CS ID Modality
-  if (StrModality != "gdcm::Unfound") {
-    if ( StrModality.find("CR") < StrModality.length())
-    {
-      return CR;
-    }
-    else if ( StrModality.find("CT") < StrModality.length() )
-    {
-      return CT;
-    }
-    else if ( StrModality.find("MR") < StrModality.length())
-    {
-      return MR;
-    }
-    else if ( StrModality.find("NM") < StrModality.length())
-    {
-      return NM;
-    }
-    else if ( StrModality.find("OT") < StrModality.length())
-    {
-      return OT;
-    }
-    else if ( StrModality.find("US") < StrModality.length())
-    {
-      return US;
-    }
-    else if ( StrModality.find("XA") < StrModality.length())
-    {
-      return XA;
-    }
+  if (StrModality != GDCM_UNFOUND) {
+         if ( StrModality.find("AU") < StrModality.length()) return AU;
+    else if ( StrModality.find("AS") < StrModality.length()) return AS;
+    else if ( StrModality.find("BI") < StrModality.length()) return BI;
+    else if ( StrModality.find("CF") < StrModality.length()) return CF;
+    else if ( StrModality.find("CP") < StrModality.length()) return CP;
+    else if ( StrModality.find("CR") < StrModality.length()) return CR;
+    else if ( StrModality.find("CT") < StrModality.length()) return CT;
+    else if ( StrModality.find("CS") < StrModality.length()) return CS;
+    else if ( StrModality.find("DD") < StrModality.length()) return DD;
+    else if ( StrModality.find("DF") < StrModality.length()) return DF;
+    else if ( StrModality.find("DG") < StrModality.length()) return DG;
+    else if ( StrModality.find("DM") < StrModality.length()) return DM;
+    else if ( StrModality.find("DS") < StrModality.length()) return DS;
+    else if ( StrModality.find("DX") < StrModality.length()) return DX;
+    else if ( StrModality.find("ECG") < StrModality.length()) return ECG;
+    else if ( StrModality.find("EPS") < StrModality.length()) return EPS;
+    else if ( StrModality.find("FA") < StrModality.length()) return FA;
+    else if ( StrModality.find("FS") < StrModality.length()) return FS;
+    else if ( StrModality.find("HC") < StrModality.length()) return HC;
+    else if ( StrModality.find("HD") < StrModality.length()) return HD;
+    else if ( StrModality.find("LP") < StrModality.length()) return LP;
+    else if ( StrModality.find("LS") < StrModality.length()) return LS;
+    else if ( StrModality.find("MA") < StrModality.length()) return MA;
+    else if ( StrModality.find("MR") < StrModality.length()) return MR;
+    else if ( StrModality.find("NM") < StrModality.length()) return NM;
+    else if ( StrModality.find("OT") < StrModality.length()) return OT;
+    else if ( StrModality.find("PT") < StrModality.length()) return PT;
+    else if ( StrModality.find("RF") < StrModality.length()) return RF;
+    else if ( StrModality.find("RG") < StrModality.length()) return RG;
+    else if ( StrModality.find("RTDOSE")   < StrModality.length()) return RTDOSE;
+    else if ( StrModality.find("RTIMAGE")  < StrModality.length()) return RTIMAGE;
+    else if ( StrModality.find("RTPLAN")   < StrModality.length()) return RTPLAN;
+    else if ( StrModality.find("RTSTRUCT") < StrModality.length()) return RTSTRUCT;
+    else if ( StrModality.find("SM") < StrModality.length()) return SM;
+    else if ( StrModality.find("ST") < StrModality.length()) return ST;
+    else if ( StrModality.find("TG") < StrModality.length()) return TG;
+    else if ( StrModality.find("US") < StrModality.length()) return US;
+    else if ( StrModality.find("VF") < StrModality.length()) return VF;
+    else if ( StrModality.find("XA") < StrModality.length()) return XA;
+    else if ( StrModality.find("XC") < StrModality.length()) return XC;
+
     else
     {
       //throw error return value ???
@@ -447,7 +463,7 @@ void gdcmHeaderHelper::GetImageOrientationPatient( float* iop ) {
   iop[0] = iop[1] = iop[2] = iop[3] = iop[4] = iop[5] = 0;
   
   string StrImOriPat = GetPubElValByNumber(0x0020,0x0037); // 0020 0037 DS REL Image Orientation (Patient)
-  if (StrImOriPat != "gdcm::Unfound") {
+  if (StrImOriPat != GDCM_UNFOUND) {
     if( sscanf( StrImOriPat.c_str(), "%f\\%f\\%f\\%f\\%f\\%f", 
             &iop[0], &iop[1], &iop[2], &iop[3], &iop[4], &iop[5]) != 6) {
          dbg.Verbose(0, "gdcmHeader::GetImageOrientationPatient: wrong Image Orientation Patient (0020,0037)");
@@ -459,7 +475,7 @@ void gdcmHeaderHelper::GetImageOrientationPatient( float* iop ) {
   
   //For ACR-NEMA
   StrImOriPat = GetPubElValByNumber(0x0020,0x0035); //0020 0035 DS REL Image Orientation (RET)
-  if (StrImOriPat != "gdcm::Unfound") {
+  if (StrImOriPat != GDCM_UNFOUND) {
     if( sscanf( StrImOriPat.c_str(), "%f\\%f\\%f\\%f\\%f\\%f", 
             &iop[0], &iop[1], &iop[2], &iop[3], &iop[4], &iop[5]) != 6) {
          dbg.Verbose(0, "gdcmHeader::GetImageOrientationPatient: wrong Image Orientation Patient (0020,0035)");