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