]> Creatis software - clitk.git/blobdiff - vv/vvLandmarks.cxx
Merge branch 'master' into GammaIndex3D
[clitk.git] / vv / vvLandmarks.cxx
index dc38cd228f69b27981960e24b220bf3fafa5c4eb..528669d0768977144760d2e8e77895087e186f22 100644 (file)
 vvLandmarks::vvLandmarks(int size)
 {
   mLandmarks.resize(size);
+  mLandmarksInitial.resize(size);
   mFilenames.resize(0);
   mTime = 0;
 
   for (int i = 0; i < size; i++) {
     mLandmarks[i].resize(0);
+    mLandmarksInitial[i].resize(0);
     vtkPoints *points = vtkPoints::New();
     mPoints.push_back(points);
     mIds.push_back(vtkFloatArray::New());
@@ -79,6 +81,7 @@ void vvLandmarks::AddLandmark(float x,float y,float z,float t,double value)
   point.coordinates[3] = t;
   point.pixel_value=value;
   mLandmarks[mTime].push_back(point);
+  mLandmarksInitial[mTime].push_back(point);
 
   idPoint = mPoints[int(t)]->InsertNextPoint(x,y,z);
   std::string str_vtkIdType;       // string which will contain the result
@@ -103,6 +106,27 @@ void vvLandmarks::AddLandmark(float x,float y,float z,float t,double value)
 }
 //--------------------------------------------------------------------
 
+//--------------------------------------------------------------------
+void vvLandmarks::TransformUpdate(vtkAbstractTransform* transform)
+{
+  //For all Time, For all landmarks, I apply the transform
+  for(int time=0; time<mLandmarks.size(); ++time)
+  {
+    for(int landmark=0; landmark<mLandmarks[time].size(); ++landmark)
+    {
+      double ptBeforeTransform[3], ptAfterTransform[3];
+      ptBeforeTransform[0]= mLandmarksInitial[time][landmark].coordinates[0];
+      ptBeforeTransform[1]= mLandmarksInitial[time][landmark].coordinates[1];
+      ptBeforeTransform[2]= mLandmarksInitial[time][landmark].coordinates[2];
+      transform->TransformPoint(ptBeforeTransform, ptAfterTransform);
+
+      mLandmarks[time][landmark].coordinates[0]= ptAfterTransform[0];
+      mLandmarks[time][landmark].coordinates[1]= ptAfterTransform[1];
+      mLandmarks[time][landmark].coordinates[2]= ptAfterTransform[2];
+    }
+  }
+}
+//--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
 void vvLandmarks::RemoveLastLandmark()
@@ -110,6 +134,7 @@ void vvLandmarks::RemoveLastLandmark()
   mPoints[mTime]->SetNumberOfPoints(mPoints[mTime]->GetNumberOfPoints()-1);
   //  mText.pop_back();
   mLandmarks[mTime].pop_back();
+  mLandmarksInitial[mTime].pop_back();
   mIds[mTime]->RemoveLastTuple();
   mLabels[mTime]->SetNumberOfValues(mLabels[mTime]->GetNumberOfValues()-1);
   mLabels[mTime]->Modified();
@@ -148,6 +173,7 @@ void vvLandmarks::RemoveLandmarkWithLabel(vtkStdString label, int time)
   mPolyData->Modified();
 
   mLandmarks[t].erase(mLandmarks[t].begin() + index);
+  mLandmarksInitial[t].erase(mLandmarksInitial[t].begin() + index);
   mIds[t]->RemoveLastTuple();
 }
 //--------------------------------------------------------------------
@@ -175,6 +201,7 @@ void vvLandmarks::RemoveLandmark(int index)
   mPolyData->Modified();
 
   mLandmarks[t].erase(mLandmarks[t].begin() + index);
+  mLandmarksInitial[t].erase(mLandmarksInitial[t].begin() + index);
   mIds[t]->RemoveLastTuple();
 }
 //--------------------------------------------------------------------
@@ -184,6 +211,7 @@ void vvLandmarks::RemoveAll()
 {
   for (unsigned int i = 0; i < mLandmarks.size(); i++) {
     mLandmarks[i].clear();
+    mLandmarksInitial[i].clear();
     mPoints[i]->SetNumberOfPoints(0);
     mLabels[i]->SetNumberOfValues(0);
     mIds[i]->SetNumberOfValues(0);
@@ -195,6 +223,7 @@ void vvLandmarks::RemoveAll()
 void vvLandmarks::ChangeComments(int index, std::string comments)
 {
   mLandmarks[mTime][index].comments = comments;
+  mLandmarksInitial[mTime][index].comments = comments;
 }
 //--------------------------------------------------------------------
 
@@ -242,6 +271,7 @@ bool vvLandmarks::LoadTxtFile(std::vector<std::string> filenames)
   mFilenames = filenames;
   for (unsigned int i = 0; i < mPoints.size(); i++) {
     mLandmarks[i].clear();
+    mLandmarksInitial[i].clear();
     mPoints[i]->SetNumberOfPoints(0);
   }
 
@@ -333,6 +363,7 @@ bool vvLandmarks::LoadTxtFile(std::vector<std::string> filenames)
         }
         //      DD(point.comments);
         mLandmarks[int(point.coordinates[3])].push_back(point);
+        mLandmarksInitial[int(point.coordinates[3])].push_back(point);
         mIds[int(point.coordinates[3])]->InsertNextTuple1(0.55);
         idPoint = mPoints[int(point.coordinates[3])]->InsertNextPoint(
                                                             point.coordinates[0],point.coordinates[1],point.coordinates[2]);
@@ -361,6 +392,7 @@ bool vvLandmarks::LoadPtsFile(std::vector<std::string> filenames)
   for (unsigned int i = 0; i < mPoints.size(); i++) {
     mPoints[i]->SetNumberOfPoints(0);
     mLandmarks[i].clear();
+    mLandmarksInitial[i].clear();
   }
 
   int err = 0;
@@ -415,6 +447,7 @@ bool vvLandmarks::LoadPtsFile(std::vector<std::string> filenames)
 
         //      DD(point.comments);
         mLandmarks[int(point.coordinates[3])].push_back(point);
+        mLandmarksInitial[int(point.coordinates[3])].push_back(point);
         mIds[int(point.coordinates[3])]->InsertNextTuple1(0.55);
         idPoint = mPoints[int(point.coordinates[3])]->InsertNextPoint(
                                                             point.coordinates[0],point.coordinates[1],point.coordinates[2]);
@@ -455,16 +488,16 @@ void vvLandmarks::SaveFile(std::string filename)
       std::stringstream out;
       out.imbue(std::locale("C")); //This is to specify that the dot is to be used as the decimal separator
       out << i << " "
-          << mLandmarks[t][i].coordinates[0] << " "
-          << mLandmarks[t][i].coordinates[1] << " "
-          << mLandmarks[t][i].coordinates[2] << " "
-          << mLandmarks[t][i].coordinates[3] << " "
-          << mLandmarks[t][i].pixel_value << " ";
+          << mLandmarksInitial[t][i].coordinates[0] << " "
+          << mLandmarksInitial[t][i].coordinates[1] << " "
+          << mLandmarksInitial[t][i].coordinates[2] << " "
+          << mLandmarksInitial[t][i].coordinates[3] << " "
+          << mLandmarksInitial[t][i].pixel_value << " ";
       fileContent += out.str();
-      if (mLandmarks[t][i].comments.size() == 0)
+      if (mLandmarksInitial[t][i].comments.size() == 0)
         fileContent += " ";
       else
-        fileContent += mLandmarks[t][i].comments;
+        fileContent += mLandmarksInitial[t][i].comments;
       fileContent += "\n";
     }
   }