// std
#include <iterator>
#include <sstream>
+#include <cctype>
+#include <functional>
//--------------------------------------------------------------------
clitk::AnatomicalFeatureDatabase::AnatomicalFeatureDatabase()
{
- SetFilename("noname.afdb");
+ SetFilename("default.afdb");
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
+//--------------------------------------------------------------------
+//http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
+// trim from start
+static inline std::string <rim(std::string &s) {
+ s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
+ return s;
+}
+// trim from end
+static inline std::string &rtrim(std::string &s) {
+ s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
+ return s;
+}
+// trim from both ends
+static inline std::string &trim(std::string &s) {
+ return ltrim(rtrim(s));
+}
+//--------------------------------------------------------------------
+
+
//--------------------------------------------------------------------
void clitk::AnatomicalFeatureDatabase::Load()
{
+ m_MapOfTag.clear();
// open file
std::ifstream is;
openFileForReading(is, GetFilename());
while (!is.fail()) {
std::string tag;
is >> tag;
- std::string value;
- std::getline(is,value,'\n');
- m_MapOfTag[tag] = value;
+ if (tag != "") {
+ std::string value;
+ std::getline(is,value,'\n');
+ ltrim(value); // remove leading space
+ m_MapOfTag[tag] = value;
+ }
}
+ is.close();
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
+//--------------------------------------------------------------------
+double clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, int dim)
+{
+ PointType3D p;
+ GetPoint3D(tag, p);
+ return p[dim];
+}
+//--------------------------------------------------------------------
+
+
//--------------------------------------------------------------------
void clitk::AnatomicalFeatureDatabase::GetPoint3D(std::string tag, PointType3D & p)
{
// parse the string into 3 doubles
for(int i=0; i<3; i++) {
- DD(results[i]);
- p[i] = atof(results[i].c_str());
- DD(p[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.");
+ }
+
+ // p[i] = atof(results[i].c_str());
}
/*
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++;
+ std::cout << t << "." << std::endl;
+ p[i] = atof(t.c_str());
+ i++;
}
*/
}
}
//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+void clitk::AnatomicalFeatureDatabase::SetImageFilename(std::string tag, std::string f)
+{
+ m_MapOfTag[tag] = f;
+}
+//--------------------------------------------------------------------
+
+
+