From: Frederic Cervenansky Date: Mon, 27 Apr 2009 14:38:23 +0000 (+0000) Subject: Utilisation d'un fichier de config pour la création de la BD et des AttributeDescript... X-Git-Tag: EED.02Oct2009~93 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=36a4ac578a165ab010663055b433aef6d9248e22;p=creaImageIO.git Utilisation d'un fichier de config pour la création de la BD et des AttributeDescriptor (pour le moment copier localdatabase_Descriptor de src2 dans user\.gimmick\) --- diff --git a/src2/creaImageIOGimmick.cpp b/src2/creaImageIOGimmick.cpp index 5ae8438..01e49bd 100644 --- a/src2/creaImageIOGimmick.cpp +++ b/src2/creaImageIOGimmick.cpp @@ -49,7 +49,8 @@ namespace creaImageIO GimmickMessage(1,mess<GetTree().GetDescriptor().CreateDefault(); +// mLocalDatabase->GetTree().GetDescriptor().CreateDefault(); + mLocalDatabase->GetTree().GetDescriptor().createDescriptorfromFile(mCurrentDirectory + "\\.gimmick\\localdatabase_Descriptor.txt"); if ( ! mLocalDatabase->Create(true) ) { diff --git a/src2/creaImageIOTreeDescriptor.cpp b/src2/creaImageIOTreeDescriptor.cpp index 602ffab..6849b10 100644 --- a/src2/creaImageIOTreeDescriptor.cpp +++ b/src2/creaImageIOTreeDescriptor.cpp @@ -1,4 +1,10 @@ #include +#include +#include +#include + + + namespace creaImageIO @@ -132,6 +138,82 @@ namespace creaImageIO } + + ////////////////////////////////////////////////////////////// + // create a descriptor (name, attributes...) from a file) // + // @param : file path // + // return : - // + ////////////////////////////////////////////////////////////// + void Descriptor::createDescriptorfromFile(std::string &i_name) + { + Clear(); + + // read file and put in buffer + std::ifstream i_file(i_name.c_str()); + std::stringstream buffer; + buffer << i_file.rdbuf(); + std::string line; + bool bname; + int ilevel = -1; + + + while(std::getline(buffer, line)) + { + if(line =="") + { //increment levels. + ilevel++; + bname = true; + } + else if(bname) + { + // For each level, a name to describe it + Add(LevelDescriptor(line)); + bname = false; + } + else + { + // split line to find all tags + std::vector descriptors; + std::string separator = " "; + std::string::size_type last_pos = line.find_first_not_of(separator); + //find first separator + std::string::size_type pos = line.find_first_of(separator, last_pos); + while(std::string::npos != pos || std::string::npos != last_pos) + { + descriptors.push_back(line.substr(last_pos, pos - last_pos)); + last_pos = line.find_first_not_of(separator, pos); + pos = line.find_first_of(separator, last_pos); + } + + // By default, the last tag is at zero and not recorded but if take in count + unsigned int flag = 0; + if(descriptors.size() == 4) + { + std::stringstream val; + val << std::dec << descriptors[3]; + val>> flag; + } + + // if Dicom tag, use "group" and "element" descriptor + if(descriptors[0] == "D") + { std::stringstream val, val2; + unsigned short group; + unsigned short element; + val << std::dec << descriptors[1] ; + val >> std::hex >> group; + val2 << std::dec << descriptors[2]; + val2 >> std::hex >> element; + Add(AttributeDescriptor( group,element,flag), ilevel); + } + else // "O" means if user's own tag. + { + Add(AttributeDescriptor( descriptors[1].c_str(),descriptors[2].c_str(),flag), ilevel); + } + } + } + } + + //================================================================== //================================================================== diff --git a/src2/creaImageIOTreeDescriptor.h b/src2/creaImageIOTreeDescriptor.h index 26bbc5e..c2fb7ae 100644 --- a/src2/creaImageIOTreeDescriptor.h +++ b/src2/creaImageIOTreeDescriptor.h @@ -7,7 +7,7 @@ namespace creaImageIO { - + using namespace std; namespace tree { @@ -63,6 +63,9 @@ namespace creaImageIO /// Clears the Descriptor void Clear(); + //Create Attribute Descriptors from a file + void createDescriptorfromFile(std::string &i_file); + private: LevelDescriptorListType mLevelDescriptorList; /// Creates the mandatory level 0 descriptor called "Root"