#include "vtkPointData.h"
#include "clitkCommon.h"
+//--------------------------------------------------------------------
vvLandmarks::vvLandmarks(int size)
{
mLandmarks.resize(0);
mPolyData = vtkPolyData::New();
mIds = vtkFloatArray::New();
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
vvLandmarks::~vvLandmarks()
{
for (unsigned int i = 0; i < mPoints.size(); i++) {
if (mPolyData)
mPolyData->Delete();
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
void vvLandmarks::AddLandmark(float x,float y,float z,float t,double value)
{
vvLandmark point;
//mIds->InsertTuple1(mLandmarks.size(),mLandmarks.size());
SetTime(int(t));
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
void vvLandmarks::RemoveLastLandmark()
{
mPoints[mLandmarks.back().coordinates[3]]->SetNumberOfPoints(
mLandmarks.pop_back();
mIds->RemoveLastTuple();
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
void vvLandmarks::ChangeComments(int index, std::string comments)
{
mLandmarks[index].comments = comments;
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
double vvLandmarks::GetPixelValue(int index)
{
return mLandmarks[index].pixel_value;
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
float* vvLandmarks::GetCoordinates(int index)
{
return mLandmarks[index].coordinates;
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
std::string vvLandmarks::GetComments(int index)
{
return mLandmarks[index].comments;
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
void vvLandmarks::LoadFile(std::string filename)
{
std::ifstream fp(filename.c_str(), std::ios::in|std::ios::binary);
mPoints[i]->SetNumberOfPoints(0);
bool first_line=true;
while (fp.getline(line,255)) {
+ // DD(line);
std::string stringline = line;
if (first_line) {
first_line=false;
continue;
}
point.coordinates[0] = atof(replace_dots(stringline.substr(previousSpace,space - previousSpace)).c_str());
+ // DD(point.coordinates[0]);
previousSpace = space;
space = stringline.find(" ", previousSpace+1);
if (space < -1 || space > (int)stringline.size()) {
continue;
}
point.coordinates[1] = atof(replace_dots(stringline.substr(previousSpace,space - previousSpace)).c_str());
+ // DD(point.coordinates[1]);
previousSpace = space;
space = stringline.find(" ", previousSpace+1);
if (space < -1 || space > (int)stringline.size()) {
continue;
}
point.pixel_value = atof(replace_dots(stringline.substr(previousSpace,space - previousSpace)).c_str());
+ // DD(point.pixel_value);
} else {
point.pixel_value=0.; //Not in file
point.coordinates[3]=0.;
previousSpace = space;
//this is the maximum size of comments
space = (stringline.find("\n", previousSpace+1) < 254 ? stringline.find("\n", previousSpace+1) : 254);
- point.comments = stringline.substr(previousSpace,space - (previousSpace)).c_str();
+ if (previousSpace != -1) {
+ point.comments = stringline.substr(previousSpace,space - (previousSpace)).c_str();
+ }
+ // DD(point.comments);
mLandmarks.push_back(point);
mIds->InsertNextTuple1(0.55);
mPoints[int(point.coordinates[3])]->InsertNextPoint(
}
SetTime(0);
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
bool vvLandmarks::ErrorMsg(int num,const char * text)
{
std::cerr << "error when loading point " << num << " at " << text << std::endl;
return false;
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
void vvLandmarks::SaveFile(std::string filename)
{
std::string fileContent = "LANDMARKS1\n"; //File format version identification
fp << fileContent.c_str()<< std::endl;
fp.close();
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
void vvLandmarks::SetTime(int time)
{
if (time >= 0 && time <= ((int)mPoints.size() -1)) {
mPolyData->Update();
}
}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
std::string vvLandmarks::replace_dots(std::string input)
{
///Replaces the dots used in the file with the decimal separator in use on the platform
}
return input;
}
+//--------------------------------------------------------------------