00001 /*========================================================================= 00002 00003 Program: gdcm 00004 Module: $RCSfile: gdcmDicomDirStudy.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 "gdcmDicomDirStudy.h" 00020 #include "gdcmDicomDirElement.h" 00021 #include "gdcmGlobal.h" 00022 #include "gdcmDicomDirSerie.h" 00023 #include "gdcmDicomDirVisit.h" 00024 #include "gdcmDebug.h" 00025 00026 namespace GDCM_NAME_SPACE 00027 { 00028 //----------------------------------------------------------------------------- 00029 // Constructor / Destructor 00034 DicomDirStudy::DicomDirStudy(bool empty) 00035 :DicomDirObject() 00036 { 00037 if ( !empty ) 00038 { 00039 ListDicomDirStudyElem const &elemList = 00040 Global::GetDicomDirElements()->GetDicomDirStudyElements(); 00041 FillObject(elemList); 00042 } 00043 } 00044 00048 DicomDirStudy::~DicomDirStudy() 00049 { 00050 ClearSerie(); 00051 } 00052 00053 //----------------------------------------------------------------------------- 00054 // Public 00061 void DicomDirStudy::WriteContent(std::ofstream *fp, FileType t, bool insideMetaElements) 00062 { 00063 DicomDirObject::WriteContent(fp, t, false); 00064 00065 for(ListDicomDirSerie::iterator cc = Series.begin(); 00066 cc!= Series.end(); 00067 ++cc ) 00068 { 00069 (*cc)->WriteContent( fp, t, false ); 00070 } 00071 00072 for(ListDicomDirVisit::iterator icc = Visits.begin(); 00073 icc!= Visits.end(); 00074 ++icc ) 00075 { 00076 (*icc)->WriteContent( fp, t, false ); 00077 } 00078 } 00079 00084 DicomDirSerie *DicomDirStudy::NewSerie() 00085 { 00086 DicomDirSerie *dd = DicomDirSerie::New(); 00087 Series.push_back(dd); 00088 return dd; 00089 } 00090 00094 void DicomDirStudy::ClearSerie() 00095 { 00096 for(ListDicomDirSerie::iterator cc = Series.begin(); 00097 cc != Series.end(); 00098 ++cc ) 00099 { 00100 (*cc)->Delete(); 00101 } 00102 Series.clear(); 00103 } 00104 00109 DicomDirSerie *DicomDirStudy::GetFirstSerie() 00110 { 00111 ItSerie = Series.begin(); 00112 if (ItSerie != Series.end()) 00113 return *ItSerie; 00114 return NULL; 00115 } 00116 00122 DicomDirSerie *DicomDirStudy::GetNextSerie() 00123 { 00124 gdcmAssertMacro (ItSerie != Series.end()); 00125 00126 ++ItSerie; 00127 if (ItSerie != Series.end()) 00128 return *ItSerie; 00129 return NULL; 00130 } 00131 00136 DicomDirSerie *DicomDirStudy::GetLastSerie() 00137 { 00138 ItSerie = Series.end(); 00139 if (ItSerie != Series.begin()) 00140 { 00141 --ItSerie; 00142 return *ItSerie; 00143 } 00144 return NULL; 00145 } 00146 00147 00152 DicomDirVisit *DicomDirStudy::NewVisit() 00153 { 00154 DicomDirVisit *dd = DicomDirVisit::New(); 00155 Visits.push_back(dd); 00156 dd->Delete(); 00157 return dd; 00158 } 00159 00163 void DicomDirStudy::ClearVisit() 00164 { 00165 for(ListDicomDirVisit::iterator cc = Visits.begin(); 00166 cc != Visits.end(); 00167 ++cc ) 00168 { 00169 (*cc)->Delete(); 00170 } 00171 Visits.clear(); 00172 } 00173 00178 DicomDirVisit *DicomDirStudy::GetFirstVisit() 00179 { 00180 ItVisit = Visits.begin(); 00181 if (ItVisit != Visits.end()) 00182 return *ItVisit; 00183 return NULL; 00184 } 00185 00191 DicomDirVisit *DicomDirStudy::GetNextVisit() 00192 { 00193 gdcmAssertMacro (ItVisit != Visits.end()); 00194 00195 ++ItVisit; 00196 if (ItVisit != Visits.end()) 00197 return *ItVisit; 00198 return NULL; 00199 } 00200 00205 DicomDirVisit *DicomDirStudy::GetLastVisit() 00206 { 00207 ItVisit = Visits.end(); 00208 if (ItVisit != Visits.begin()) 00209 { 00210 --ItVisit; 00211 return *ItVisit; 00212 } 00213 return NULL; 00214 } 00215 00221 void DicomDirStudy::Copy(DocEntrySet *set) 00222 { 00223 // Remove all previous childs 00224 ClearSerie(); 00225 ClearVisit(); 00226 00227 DicomDirObject::Copy(set); 00228 00229 DicomDirStudy *ddEntry = dynamic_cast<DicomDirStudy *>(set); 00230 if( ddEntry ) 00231 { 00232 Series = ddEntry->Series; 00233 for(ItSerie = Series.begin();ItSerie != Series.end();++ItSerie) 00234 (*ItSerie)->Register(); 00235 00236 Visits = ddEntry->Visits; 00237 for(ItVisit = Visits.begin();ItVisit != Visits.end();++ItVisit) 00238 (*ItVisit)->Register(); 00239 } 00240 } 00241 00242 //----------------------------------------------------------------------------- 00243 // Protected 00244 00245 //----------------------------------------------------------------------------- 00246 // Private 00247 00248 //----------------------------------------------------------------------------- 00249 // Print 00256 void DicomDirStudy::Print(std::ostream &os, std::string const & ) 00257 { 00258 os << "STUDY" << std::endl; 00259 DicomDirObject::Print(os); 00260 00261 for(ListDicomDirSerie::iterator cc = Series.begin(); 00262 cc != Series.end(); 00263 ++cc) 00264 { 00265 (*cc)->SetPrintLevel(PrintLevel); 00266 (*cc)->Print(os); 00267 } 00268 00269 for(ListDicomDirVisit::iterator cc2 = Visits.begin(); 00270 cc2 != Visits.end(); 00271 ++cc2) 00272 { 00273 (*cc2)->SetPrintLevel(PrintLevel); 00274 (*cc2)->Print(os); 00275 } 00276 00277 } 00278 00279 //----------------------------------------------------------------------------- 00280 } // end namespace gdcm