]> Creatis software - clitk.git/blobdiff - segmentation/clitkAnatomicalFeatureDatabase.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / segmentation / clitkAnatomicalFeatureDatabase.cxx
index 8bf17fbb57873f6f37150363512a7675ad9b7455..13fb26960ad2e29e20dd7c8124806c885609304e 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to: 
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-  ======================================================================-====*/
+  ===========================================================================**/
 
 // clitk
 #include "clitkAnatomicalFeatureDatabase.h"
 //--------------------------------------------------------------------
 clitk::AnatomicalFeatureDatabase::AnatomicalFeatureDatabase() 
 { 
-  SetFilename("default.afdb"); 
+  SetFilename("default.afdb");
+  SetPath("./");
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+clitk::AnatomicalFeatureDatabase::Pointer clitk::AnatomicalFeatureDatabase::New(std::string filename) 
+{ 
+  Pointer a = AnatomicalFeatureDatabase::New();
+  a->SetFilename(filename);
+  a->Load();
+  return a;
 }
 //--------------------------------------------------------------------
 
@@ -94,7 +106,7 @@ void clitk::AnatomicalFeatureDatabase::Load()
 //--------------------------------------------------------------------
 void clitk::AnatomicalFeatureDatabase::SetPoint3D(std::string tag, PointType3D & p)
 {
-  ::itk::OStringStream value;
+  std::ostringstream value;
   value << p[0] << " " << p[1] << " " << p[2];
   m_MapOfTag[tag] = value.str();
 }
@@ -111,49 +123,45 @@ double clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, int dim)
 //--------------------------------------------------------------------
 
 
+//--------------------------------------------------------------------
+std::string clitk::AnatomicalFeatureDatabase::GetTagValue(std::string tag)
+{
+  if (!TagExist(tag)) {
+    clitkExceptionMacro("Could not find the tag <" << tag << "> in the DB");
+    return "";
+  }
+  std::string s = m_MapOfTag[tag];
+  return s;
+}
+//--------------------------------------------------------------------
+
+
 //--------------------------------------------------------------------
 void clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, PointType3D & p)
 {
-  if (m_MapOfTag.find(tag) == m_MapOfTag.end()) {
+  if (!TagExist(tag)) {
     clitkExceptionMacro("Could not find the tag <" << tag << "> of type Point3D in the DB");
+    return;
   }
-  else {
-    std::string s = m_MapOfTag[tag];
-    
-    // construct a stream from the string
-    std::stringstream strstr(s);
 
-    // use stream iterators to copy the stream to the vector as
-    // whitespace separated strings
-    std::istream_iterator<std::string> it(strstr);
-    std::istream_iterator<std::string> end;
-    std::vector<std::string> results(it, end);
-
-    // parse the string into 3 doubles
-    for(int i=0; i<3; i++) {
+  std::string s = m_MapOfTag[tag];
+    
+  // construct a stream from the string
+  std::stringstream strstr(s);
 
-      if (!clitk::fromString<double>(p[i], results[i].c_str())) {
-        clitkExceptionMacro("Error while reading Point3D, could not convert '" 
-                            << results[i].c_str() << "' into double.");
-      }
+  // use stream iterators to copy the stream to the vector as
+  // whitespace separated strings
+  std::istream_iterator<std::string> it(strstr);
+  std::istream_iterator<std::string> end;
+  std::vector<std::string> results(it, end);
 
-        //      p[i] = atof(results[i].c_str());
-    }
+  // parse the string into 3 doubles
+  for(int i=0; i<3; i++) {
 
-    /*
-    // boost 
-    #include <boost/foreach.hpp>
-    #include <boost/tokenizer.hpp>
-    // parse the string into 3 doubles
-    boost::char_separator<char> sep(", ");
-    boost::tokenizer<boost::char_separator<char> > tokens(s, sep);
-    int i=0;
-    BOOST_FOREACH(std::string t, tokens) {
-    std::cout << t << "." << std::endl;
-    p[i] = atof(t.c_str());
-    i++;
+    if (!clitk::fromString<double>(p[i], results[i].c_str())) {
+      clitkExceptionMacro("Error while reading Point3D, could not convert '" 
+                          << results[i].c_str() << "' into double.");
     }
-    */
   }
 }
 //--------------------------------------------------------------------
@@ -167,4 +175,45 @@ void clitk::AnatomicalFeatureDatabase::SetImageFilename(std::string tag, std::st
 //--------------------------------------------------------------------
 
 
+//--------------------------------------------------------------------
+bool clitk::AnatomicalFeatureDatabase::TagExist(std::string tag)
+{
+  return (m_MapOfTag.find(tag) != m_MapOfTag.end());
+}
+//--------------------------------------------------------------------
+
+
+//-------------------------------------------------------------------- 
+void clitk::AnatomicalFeatureDatabase::SetDouble(std::string tag, double value)
+{
+  m_MapOfTag[tag] = clitk::toString(value);
+}
+//-------------------------------------------------------------------- 
+
+
+//-------------------------------------------------------------------- 
+double clitk::AnatomicalFeatureDatabase::GetDouble(std::string tag)
+{
+  if (!TagExist(tag)) {
+    clitkExceptionMacro("Could not find the tag <" << tag << "> of type Double in the DB");
+    return -1;
+  }
+
+  double a;
+  if (!clitk::fromString<double>(a, m_MapOfTag[tag])) {
+    clitkExceptionMacro("Error while reading Double (tag='" << tag << "'), could not convert '" 
+                        << m_MapOfTag[tag] << "' into double.");
+  }
+  return a;  
+}
+//-------------------------------------------------------------------- 
 
+
+//-------------------------------------------------------------------- 
+void clitk::AnatomicalFeatureDatabase::RemoveTag(TagType tag)
+{
+  if (TagExist(tag)) {
+    m_MapOfTag.erase(m_MapOfTag.find(tag));
+  }
+}
+//--------------------------------------------------------------------