]> Creatis software - gdcm.git/blobdiff - Example/exPresentationState.cxx
Synchronize (fix comments, misstyping, re ident, etc)
[gdcm.git] / Example / exPresentationState.cxx
index 343deac8593837bd37b6ca6fe2b3328cfdbbc0bb..64e33e21a770cb042f446bd3085b309a4f631fbf 100644 (file)
@@ -4,8 +4,8 @@
   Program:   gdcm
   Module:    $RCSfile: exPresentationState.cxx,v $
   Language:  C++
-  Date:      $Date: 2009/05/20 09:45:30 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2010/09/01 14:41:48 $
+  Version:   $Revision: 1.5 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
 #include "gdcmSeqEntry.h"
 #include "gdcmSQItem.h"
 #include "gdcmDocEntrySet.h"
-#include "gdcmSerieHelper.h"
+//#include "gdcmSerieHelper.h"
 #include "gdcmDirList.h"
 #include "gdcmUtil.h"
 
 #include "gdcmArgMgr.h"
   
-  GDCM_NAME_SPACE::SeqEntry *CheckIfSequenceExists(GDCM_NAME_SPACE::File *fPR,  uint16_t gr, uint16_t el);
+  GDCM_NAME_SPACE::SeqEntry *CheckIfSequenceExists(GDCM_NAME_SPACE::File *fPS,  uint16_t gr, uint16_t el);
   GDCM_NAME_SPACE::SeqEntry *CheckIfSequenceExists(GDCM_NAME_SPACE::SQItem *si, uint16_t gr, uint16_t el);   
+  bool dealWithCurrentFile(const char *PSName);
   bool dealWithTopLevelItem(GDCM_NAME_SPACE::SQItem* currentItem);
   bool dealWithEndLevelItem(GDCM_NAME_SPACE::SQItem* currentItem);
   void displaySeekResult(GDCM_NAME_SPACE::SeqEntry* currentItem, uint16_t g, uint16_t e);
@@ -48,12 +49,16 @@ int main(int argc, char *argv[])
    "usage: exPresentationState {filein=inputFileName|dirin=inputDirectoryName}",
    "                       [ { [noshadowseq] | [noshadow][noseq] } ] [debug]  ",
    "       filein : Name of the image  file                                   ",
-   "       PRFile :   Name of the PresentationState  file :                   ", 
+   "       PSFile : Name of the PresentationState  file :                     ", 
    "       noshadowseq: user doesn't want to load Private Sequences           ",
    "       noshadow   : user doesn't want to load Private groups (odd number) ",
    "       noseq      : user doesn't want to load Sequences                   ",
    "       verbose    : developper wants to run the program in 'verbose mode' ",
    "       debug      : developper wants to run the program in 'debug mode'   ",
+   "                                                                          ",
+   " you can use it as :                                                      ",
+   " for i in `ls PS*`; do exPresentationState PSFile=$i; done                ",
+   " just to see ...                                                          ",
    FINISH_USAGE
 
    // ----- Initialize Arguments Manager ------
@@ -73,7 +78,7 @@ int main(int argc, char *argv[])
    bool verbose = am->ArgMgrDefined("verbose");
    
    const char *fileName = am->ArgMgrGetString("filein");
-   const char *PRName   = am->ArgMgrGetString("PRfile");  
+   const char *PSName   = am->ArgMgrGetString("PSfile");  
    
       /* if unused Param we give up */
    if ( am->ArgMgrPrintUnusedLabels() )
@@ -85,63 +90,55 @@ int main(int argc, char *argv[])
    delete am;  // ------ we don't need Arguments Manager any longer ------
 
 // ============================================================
-//   Read the input image.
+//   Read the input file.
 // ============================================================ 
 
    GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New( );
 
-/*
-   //f->SetLoadMode(GDCM_NAME_SPACE::LD_NOSEQ | GDCM_NAME_SPACE::LD_NOSHADOW);
-   f->SetFileName( fileName );
-   f->SetMaxSizeLoadEntry(0xffff);
-   bool res = f->Load();  
+// =================================================================================
 
-   if( GDCM_NAME_SPACE::Debug::GetDebugFlag())
-   {
-      std::cout << "---------------------------------------------" << std::endl;
-      f->Print();
-      std::cout << "---------------------------------------------" << std::endl;
-   }
-   if (!res) {
-       std::cerr << "Sorry, " << fileName << " not a gdcm-readable "
-           << "DICOM / ACR File"
-           << std::endl;
-      f->Delete();
-      return 1;
-   }
-   std::cout << " ... is readable " << std::endl;
-*/
+   bool resFile = dealWithCurrentFile(PSName);
+   std::cout << "\n\n"  <<std::endl;
+   std::cout << "=====================================================[" <<  PSName << "]==" << resFile << std::endl;
+   return resFile;
+}
 
-// =================================================================================
+//----------------------------------------------------------------------------------------------------
+bool dealWithCurrentFile(const char *PSName)
+{
 
-   GDCM_NAME_SPACE::File *fPR = GDCM_NAME_SPACE::File::New( );
-   fPR->SetFileName( PRName );
-   fPR->SetMaxSizeLoadEntry(0xffff);
-   bool res2 = fPR->Load();
+   GDCM_NAME_SPACE::File *fPS = GDCM_NAME_SPACE::File::New( );
+   fPS->SetFileName( PSName );
+   fPS->SetMaxSizeLoadEntry(0xffff);
+   bool res2 = fPS->Load();
            
    if (!res2) {
-       std::cout << "Sorry, " << PRName << " not a gdcm-readable "
+       std::cout << "Sorry, " << PSName << " not a gdcm-readable "
            << "DICOM / ACR File"
            << std::endl;
-      f->Delete();
-      return 1;
+      fPS->Delete();
+      return false;
    }
-   std::cout << " ... is readable " << std::endl;
    
    GDCM_NAME_SPACE::SeqEntry *se;
    
-
-   se = CheckIfSequenceExists( fPR, 0x0070, 0x0001);
+   se = CheckIfSequenceExists( fPS, 0x0070, 0x0001);
    //displaySeekResult(se, 0x0070, 0x0001);
    if (!se)
    {
-         std::cout << "Hopeless : " << std::hex <<  0x0070 << "|" << 0x0001 << std::dec << " doesn't exist..." <<std::endl;
-         exit (0);      
+         std::cout << "[" << PSName << "] : Hopeless (" << std::hex <<  0x0070 << "|" << 0x0001 << std::dec << " doesn't exist...)" <<std::endl;
+         return false;
    }
-       
-   std::cout << "[" << PRName << "] is a gdcm-readable PresentationState file, that holds one or more 'ROI'\n" <<std::endl; 
+   std::cout << "\n\n =========================================================================================" <<std::endl;       
+   std::cout << "[" << PSName << "] is a gdcm-readable PresentationState file, "
+             << "that (probabely?) holds one or more 'ROI' within [0070|0001] (Graphic Annotation Sequence)"   <<std::endl; 
+   std::cout << " =========================================================================================\n\n" <<std::endl;
 
    GDCM_NAME_SPACE::SQItem* currentItem = se->GetFirstSQItem(); // Get the first 'ROI'
+   if (currentItem == NULL)
+   {
+      std::cout << "======== Deal With NOTHING! (Sequence 0070|0001 [Graphic Annotation Sequence] has NO item ?!?)" << std::endl;
+   }
    int i =0;
    while (currentItem != NULL)
    {
@@ -156,29 +153,30 @@ int main(int argc, char *argv[])
    }
    
  /*         
-  bool res3 = TestPresentationState(f, fPR);
+  bool res3 = TestPresentationState(f, fPS);
   
   if (res3)
   {
-     std::cout << "[" << PRName << "] is a gdcm-readable PresentationState file" <<std::endl; 
+     std::cout << "[" << PSName << "] is a gdcm-readable PresentationState file" <<std::endl; 
   }
   else
   {
-     std::cout << "Sorry, [" << PRName << "] is not a gdcm-readable PresentationState file" <<std::endl; 
+     std::cout << "Sorry, [" << PSName << "] is not a gdcm-readable PresentationState file" <<std::endl; 
   }
 */
+
+   fPS->Delete();
    
-   
-   f->Delete();
-   fPR->Delete();
-return 0;
+   std::cout << "\n\n"  <<std::endl;
+   return true;
 }
 
 //----------------------------------------------------------------------------------------------------
  
 bool dealWithTopLevelItem(GDCM_NAME_SPACE::SQItem* currentItem)
 {
-
+  // probably this list should be cleaned up.
+  // (I didn't find the exact architecture of Presentation State)
    int tabElement[] = {         0x0008, 0x0009, 0x005a, 0x0060, 0x0086, 
                         0x0308, 0x0309, 0x030A, 0x030d, 0x0311, 0x0314, 
                         0x0318, 0x031c, 0x031e, 0x0402, 0x0404, 0x0000 };
@@ -197,7 +195,7 @@ bool dealWithTopLevelItem(GDCM_NAME_SPACE::SQItem* currentItem)
    for(int i=0; tabElement[i]!=0x0000; i++)
    {
       se = CheckIfSequenceExists(currentItem, 0x0070, tabElement[i]);
-      displaySeekResult(se, 0x0070, tabElement[i]);       
+      //displaySeekResult(se, 0x0070, tabElement[i]);       
       if (se != 0)
       {
          res = true;
@@ -212,7 +210,8 @@ bool dealWithTopLevelItem(GDCM_NAME_SPACE::SQItem* currentItem)
  
 bool dealWithEndLevelItem(GDCM_NAME_SPACE::SQItem* currentItem)
 {
-
+  // probably this list should be cleaned up, too.
+  // (I didn't find the exact architecture of Presentation State)
    int tabElement[] = {         0x0008, 0x0009, 0x005a, 0x0060, 0x0086, 
                         0x0308, 0x0309, 0x030A, 0x030d, 0x0311, 0x0314, 
                         0x0318, 0x031c, 0x031e, 0x0402, 0x0404, 0x0000 };
@@ -290,7 +289,7 @@ void displaySeekResult(GDCM_NAME_SPACE::SeqEntry* se, uint16_t g, uint16_t e)
       
 //----------------------------------------------------------------------------------------------------  
 
-bool TestPresentationState(GDCM_NAME_SPACE::File *f, GDCM_NAME_SPACE::File *fPR)
+bool TestPresentationState(GDCM_NAME_SPACE::File *f, GDCM_NAME_SPACE::File *fPS)
 {
 
 /*------------------------------------------------------
@@ -377,7 +376,7 @@ Relevant part of Dicom V3 Dict
 0070 0404 SQ 1 Referenced Spatial Registration Sequence
 0070 0405 CS 1 Blending Position
 ------------------------------------------------------- */
-
+return true;
 }
 
 
@@ -388,9 +387,9 @@ Relevant part of Dicom V3 Dict
 // ----------------------------------------------------------------------------------
 
 
-GDCM_NAME_SPACE::SeqEntry *CheckIfSequenceExists( GDCM_NAME_SPACE::File *fPR, uint16_t gr, uint16_t el)
+GDCM_NAME_SPACE::SeqEntry *CheckIfSequenceExists( GDCM_NAME_SPACE::File *fPS, uint16_t gr, uint16_t el)
 {
-   GDCM_NAME_SPACE::SeqEntry *se= fPR->GetSeqEntry(gr, el);
+   GDCM_NAME_SPACE::SeqEntry *se= fPS->GetSeqEntry(gr, el);
    return se;     
 }