Program: gdcm
Module: $RCSfile: gdcmDicomDir.cxx,v $
Language: C++
- Date: $Date: 2004/07/17 22:36:55 $
- Version: $Revision: 1.56 $
+ Date: $Date: 2004/07/21 14:02:10 $
+ Version: $Revision: 1.58 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
//-----------------------------------------------------------------------------
// Constructor / Destructor
-void gdcmDicomDir::Initialize()
-{
- startMethod = NULL;
- progressMethod = NULL;
- endMethod = NULL;
- startMethodArgDelete = NULL;
- progressMethodArgDelete = NULL;
- endMethodArgDelete = NULL;
- startArg = NULL;
- progressArg = NULL;
- endArg = NULL;
-
- progress = 0.0;
- abort = false;
+/**
+ * \ingroup gdcmDicomDir
+ * \brief Constructor : creates an empty gdcmDicomDir
+ * @param exception_on_error whether we want to throw an exception or not
+ */
+gdcmDicomDir::gdcmDicomDir(bool exception_on_error):
+ gdcmDocument( exception_on_error )
+{
+ Initialize();
- metaElems = (gdcmDicomDirMeta *)0;
+ std::string pathBidon = "Bidon"; // Sorry, NULL not allowed ...
+ SetElement(pathBidon, GDCM_DICOMDIR_META, NULL); // Set the META elements
+ AddDicomDirMeta();
}
-
/**
* \brief Constructor Parses recursively the directory and creates the DicomDir
* or uses an already built DICOMDIR, depending on 'parseDir' value.
// gdcmDocument already executed
// if user passed a root directory, sure we didn't get anything
- if( GetEntry().begin() == GetEntry().end() )
+ if ( TagHT.begin() == TagHT.end() )
{
dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir : entry HT empty");
- if( fileName.size() == 1 && fileName[0] == '.' )
+ if ( fileName.size() == 1 && fileName[0] == '.' )
{
// user passed '.' as Name
// we get current directory name
char* dummy = new char[1000];
getcwd(dummy, (size_t)1000);
+ std::cout << "Directory to parse : [" << dummy << "]" << std::endl;
SetFileName( dummy ); // will be converted into a string
- delete[] dummy; // no longer needed
+ delete[] dummy; // no longer needed
}
- if( parseDir )
+ if ( parseDir )
{
dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir : Parse directory"
" and create the DicomDir");
else
{
/// \todo if parseDir == false, it should be tagged as an error
+ // NON ! il suffit d'appeler ParseDirectory()
+ // apres le constructeur
}
}
else
}
}
-/**
- * \ingroup gdcmDicomDir
- * \brief Constructor : creates an empty gdcmDicomDir
- * @param exception_on_error whether we want to throw an exception or not
- */
-gdcmDicomDir::gdcmDicomDir(bool exception_on_error):
- gdcmDocument( exception_on_error )
-{
- Initialize();
-
- std::string pathBidon = "Bidon"; // Sorry, NULL not allowed ...
- SetElement(pathBidon, GDCM_DICOMDIR_META, NULL); // Set the META elements
- AddDicomDirMeta();
-}
-
/**
* \brief Canonical destructor
*/
SetProgressMethod(NULL);
SetEndMethod(NULL);
- if( metaElems )
+ if ( metaElems )
{
delete metaElems;
}
{
if(metaElems)
{
- metaElems->SetPrintLevel(printLevel);
+ metaElems->SetPrintLevel(PrintLevel);
metaElems->Print(os);
}
for(ListDicomDirPatient::iterator cc = patients.begin();
cc != patients.end();
++cc)
{
- (*cc)->SetPrintLevel( printLevel );
+ (*cc)->SetPrintLevel( PrintLevel );
(*cc)->Print( os );
}
}
return true;
}
+/**
+ * \brief Sets all fields to NULL
+ */
+
+void gdcmDicomDir::Initialize()
+{
+ startMethod = NULL;
+ progressMethod = NULL;
+ endMethod = NULL;
+ startMethodArgDelete = NULL;
+ progressMethodArgDelete = NULL;
+ endMethodArgDelete = NULL;
+ startArg = NULL;
+ progressArg = NULL;
+ endArg = NULL;
+
+ progress = 0.0;
+ abort = false;
+
+ metaElems = (gdcmDicomDirMeta *)0;
+}
+
+
/**
* \ingroup gdcmDicomDir
* \brief fills the whole structure, starting from a root Directory
VectDocument list;
gdcmHeader *header;
- tagHT.clear();
+ TagHT.clear();
patients.clear();
for( gdcmDirList::iterator it = fileList.begin();
header = new gdcmHeader(it->c_str(),false,true);
if(!header) {
- std::cout << "echec new Header " << it->c_str() << std::endl; // JPR
+ std::cout << "failure in new Header " << it->c_str() << std::endl; // JPR
}
if(header->IsReadable()) {
list.push_back(header); // adds the file header to the chained list
gdcmDicomDirMeta * gdcmDicomDir::NewMeta()
{
- gdcmDicomDirMeta *m = new gdcmDicomDirMeta( &tagHT );
- for ( TagDocEntryHT::iterator cc = tagHT.begin();
- cc != tagHT.end(); ++cc)
+ gdcmDicomDirMeta *m = new gdcmDicomDirMeta( &TagHT );
+ for ( TagDocEntryHT::iterator cc = TagHT.begin();
+ cc != TagHT.end(); ++cc)
{
m->AddDocEntry( cc->second );
}
uint16_t tmpGr,tmpEl;
gdcmDictEntry *dictEntry;
gdcmValEntry *entry;
-
+
+ std::list<gdcmElement> elemList;
+ elemList=gdcmGlobal::GetDicomDirElements()->GetDicomDirPatientElements();
+// Looks nice, but gdcmDicomDir IS NOT a gdcmObject ...
+// gdcmDicomDirPatient *p = new gdcmDicomDirPatient(ptagHT);
+// FillObject(elemList);
+// patients.push_front( p );
+// return p;
+/// \todo TODO : find a trick to use FillObject !!!
+
gdcmSQItem *s = new gdcmSQItem(0);
-
- std::list<gdcmElement> elemList =
- gdcmGlobal::GetDicomDirElements()->GetDicomDirPatientElements();
-
- /// \todo TODO : use FillObject !!!
- // for all the DicomDirPatient Elements
-
+ // for all the DicomDirPatient Elements
for( it = elemList.begin(); it != elemList.end(); ++it )
{
tmpGr = it->group;
s->AddDocEntry( entry );
}
- gdcmDicomDirPatient *p = new gdcmDicomDirPatient(s, &tagHT);
+ gdcmDicomDirPatient *p = new gdcmDicomDirPatient(s, &TagHT);
patients.push_front( p );
return p;
gdcmDictEntry *dictEntry;
gdcmValEntry *entry;
std::string val;
-
+ gdcmObject *o;
switch( type )
{
- case GDCM_DICOMDIR_PATIENT:
- elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirPatientElements();
- break;
- case GDCM_DICOMDIR_STUDY:
- elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirStudyElements();
+ case GDCM_DICOMDIR_IMAGE:
+ elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirImageElements();
break;
+
case GDCM_DICOMDIR_SERIE:
elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirSerieElements();
break;
- case GDCM_DICOMDIR_IMAGE:
- elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirImageElements();
+
+ case GDCM_DICOMDIR_STUDY:
+ elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirStudyElements();
break;
+
+ case GDCM_DICOMDIR_PATIENT:
+ elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirPatientElements();
+ break;
+
case GDCM_DICOMDIR_META:
elemList = gdcmGlobal::GetDicomDirElements()->GetDicomDirMetaElements();
break;
+
default:
return;
}
entry->SetOffset(0); // just to avoid further missprinting
- if( header )
+ if( header ) // NULL when we Build Up (ex nihilo) a DICOMDIR
+ // or when we add the META elems
{
val = header->GetEntryByNumber(tmpGr, tmpEl);
}
{
if( dictEntry->GetGroup() == 0xfffe )
{
- entry->SetLength( entry->GetValue().length() );
+ entry->SetLength( entry->GetValue().length() ); // FIXME
}
else if( dictEntry->GetVR() == "UL" || dictEntry->GetVR() == "SL" )
{
entry->SetLength( entry->GetValue().length() );
}
}
- //AddDocEntry(entry); // both in H Table and in chained list
- tagHT[entry->GetKey()] = entry; // FIXME : use a SEQUENCE !
+ std::cout << " was TagHT[entry->GetKey()] = entry " << std::endl;
+ if ( type == GDCM_DICOMDIR_META ) {
+ std::cout << " special Treatment for GDCM_DICOMDIR_META" << std::endl;
+
+ }
+ //TagHT[entry->GetKey()] = entry; // FIXME : use a SEQUENCE !
}
}
// + we create the object for the precedent tag
// + loop to 1 -
- gdcmDicomDirType type = gdcmDicomDir::GDCM_DICOMDIR_META;
-
// Directory record sequence
gdcmDocEntry *e = GetDocEntryByNumber(0x0004, 0x1220);
if ( !e )
if ( !s )
{
dbg.Verbose(0, "gdcmDicomDir::CreateDicomDir: no SeqEntry present");
+ // useless : (0x0004,0x1220) IS a Sequence !
return;
}
+ gdcmDicomDirType type = gdcmDicomDir::GDCM_DICOMDIR_META;
+ metaElems = NewMeta();
+
ListSQItem listItems = s->GetSQItems();
- gdcmDicomDirMeta *m = new gdcmDicomDirMeta(&tagHT);
- (void)m; //??
gdcmDocEntry * d;
std::string v;
{
delete metaElems;
}
- metaElems = new gdcmDicomDirMeta( &tagHT );
+ metaElems = new gdcmDicomDirMeta( &TagHT );
}
/**
*/
void gdcmDicomDir::AddDicomDirPatientToEnd(gdcmSQItem *s)
{
- patients.push_back(new gdcmDicomDirPatient(s, &tagHT));
+ patients.push_back(new gdcmDicomDirPatient(s, &TagHT));
}
/**
{
ListDicomDirPatient::iterator itp = patients.end();
itp--;
- (*itp)->AddDicomDirStudy(new gdcmDicomDirStudy(s, &tagHT));
+ (*itp)->AddDicomDirStudy(new gdcmDicomDirStudy(s, &TagHT));
}
}
{
ListDicomDirStudy::iterator itst=(*itp)->GetDicomDirStudies().end();
itst--;
- (*itst)->AddDicomDirSerie(new gdcmDicomDirSerie(s, &tagHT));
+ (*itst)->AddDicomDirSerie(new gdcmDicomDirSerie(s, &TagHT));
}
}
}
{
ListDicomDirSerie::iterator its = (*itst)->GetDicomDirSeries().end();
its--;
- (*its)->AddDicomDirImage(new gdcmDicomDirImage(s, &tagHT));
+ (*its)->AddDicomDirImage(new gdcmDicomDirImage(s, &TagHT));
}
}
}