gdcmDicomDirSerie.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002                                                                                 
00003   Program:   gdcm
00004   Module:    $RCSfile: gdcmDicomDirSerie.cxx,v $
00005   Language:  C++
00006   Date:      $Date: 2007/07/26 08:36:49 $
00007   Version:   $Revision: 1.44 $
00008                                                                                 
00009   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
00010   l'Image). All rights reserved. See Doc/License.txt or
00011   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
00012                                                                                 
00013      This software is distributed WITHOUT ANY WARRANTY; without even
00014      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00015      PURPOSE.  See the above copyright notices for more information.
00016                                                                                 
00017 =========================================================================*/
00018 
00019 #include "gdcmDicomDirSerie.h"
00020 #include "gdcmDicomDirElement.h"
00021 #include "gdcmDicomDirImage.h"
00022 #include "gdcmDicomDirPrivate.h"
00023 #include "gdcmGlobal.h"
00024 #include "gdcmDebug.h"
00025 
00026 namespace GDCM_NAME_SPACE 
00027 {
00028 //-----------------------------------------------------------------------------
00029 // Constructor / Destructor
00034 DicomDirSerie::DicomDirSerie(bool empty):
00035    DicomDirObject()
00036 {
00037    if ( !empty )
00038    {
00039       ListDicomDirSerieElem const &elemList = 
00040          Global::GetDicomDirElements()->GetDicomDirSerieElements();   
00041       FillObject(elemList);
00042    }
00043 }
00044 
00048 DicomDirSerie::~DicomDirSerie() 
00049 {
00050    ClearImage();
00051    ClearPrivate();  // For SIEMENS 'CSA non image'
00052 }
00053 
00054 //-----------------------------------------------------------------------------
00055 // Public
00061 void DicomDirSerie::WriteContent(std::ofstream *fp, FileType t, bool insideMetaElements)
00062 {
00063    DicomDirObject::WriteContent(fp, t, false);
00064 
00065    for(ListDicomDirImage::iterator cc = Images.begin();
00066                                    cc!= Images.end();
00067                                  ++cc )
00068    {
00069       (*cc)->WriteContent( fp, t, false );
00070    } 
00071    for(ListDicomDirPrivate::iterator cc2 = Privates.begin();
00072                                      cc2!= Privates.end();
00073                                    ++cc2 )
00074    {
00075       (*cc2)->WriteContent( fp, t, false);
00076    }   
00077 }
00078 
00083 DicomDirImage *DicomDirSerie::NewImage()
00084 {
00085    DicomDirImage *dd = DicomDirImage::New();
00086    Images.push_back(dd);
00087    return dd;   
00088 }
00089 
00095 DicomDirPrivate *DicomDirSerie::NewPrivate()
00096 {
00097    DicomDirPrivate *dd = DicomDirPrivate::New();
00098    Privates.push_back(dd);
00099    return dd;   
00100 }
00101 
00105 void DicomDirSerie::ClearPrivate()
00106 {
00107    for(ListDicomDirPrivate::iterator cc = Privates.begin();
00108                                      cc!= Privates.end();
00109                                    ++cc)
00110    {
00111       (*cc)->Delete();
00112    }
00113    Privates.clear();
00114 }
00115 
00119 void DicomDirSerie::ClearImage()
00120 {
00121    for(ListDicomDirImage::iterator cc = Images.begin();
00122                                    cc!= Images.end();
00123                                  ++cc)
00124    {
00125       (*cc)->Delete();
00126    }
00127    Images.clear();
00128 }
00129 
00134 DicomDirImage *DicomDirSerie::GetFirstImage()
00135 {
00136    ItImage = Images.begin();
00137    if (ItImage != Images.end())
00138       return *ItImage;
00139    return NULL;
00140 }
00141 
00147 DicomDirImage *DicomDirSerie::GetNextImage()
00148 {
00149    gdcmAssertMacro (ItImage != Images.end());
00150 
00151    ++ItImage;
00152    if (ItImage != Images.end())      
00153       return *ItImage;
00154    return NULL;
00155 }
00156 
00161 DicomDirPrivate *DicomDirSerie::GetFirstPrivate()
00162 {
00163    ItPrivate = Privates.begin();
00164    if (ItPrivate != Privates.end())
00165       return *ItPrivate;
00166    return NULL;
00167 }
00168 
00174 DicomDirPrivate *DicomDirSerie::GetNextPrivate()
00175 {
00176    gdcmAssertMacro (ItPrivate != Privates.end());
00177 
00178    ++ItPrivate;
00179    if (ItPrivate != Privates.end())      
00180       return *ItPrivate;
00181    return NULL;
00182 }
00183 
00189 void DicomDirSerie::Copy(DocEntrySet *set)
00190 {
00191    // Remove all previous childs
00192    ClearImage();
00193    ClearPrivate();
00194    
00195    DicomDirObject::Copy(set);
00196 
00197    DicomDirSerie *ddEntry = dynamic_cast<DicomDirSerie *>(set);
00198    if( ddEntry )
00199    {
00200       Images = ddEntry->Images;
00201       for(ItImage = Images.begin();ItImage != Images.end();++ItImage)
00202          (*ItImage)->Register();
00203 
00204       Privates = ddEntry->Privates;
00205       for(ItPrivate = Privates.begin();ItPrivate != Privates.end();++ItPrivate)
00206          (*ItPrivate)->Register();
00207    }   
00208 }
00209 
00210 //-----------------------------------------------------------------------------
00211 // Protected
00212 
00213 //-----------------------------------------------------------------------------
00214 // Private
00215 
00216 //-----------------------------------------------------------------------------
00217 // Print
00223 void DicomDirSerie::Print(std::ostream &os, std::string const &)
00224 {
00225    os << "SERIE" << std::endl;
00226    DicomDirObject::Print(os);
00227 
00228    for(ListDicomDirImage::iterator cc = Images.begin();
00229                                    cc != Images.end();
00230                                    ++cc)
00231    {
00232       (*cc)->SetPrintLevel(PrintLevel);
00233       (*cc)->Print(os);
00234    }
00235 
00236    for(ListDicomDirPrivate::iterator cc2 = Privates.begin();
00237                                      cc2 != Privates.end();
00238                                    ++cc2)
00239    {
00240       (*cc2)->SetPrintLevel(PrintLevel);
00241       (*cc2)->Print(os);
00242    }   
00243    
00244 }
00245 
00246 //-----------------------------------------------------------------------------
00247 } // end namespace gdcm

Generated on Fri Aug 24 12:59:30 2007 for gdcm by  doxygen 1.4.6