X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvLandmarks.cxx;h=528669d0768977144760d2e8e77895087e186f22;hb=dd52aaffdda312ae9a4b8028fe1e94ac7a0e1b89;hp=d0f2c916daa2fcc6224f248740e26e3436631cfb;hpb=3a823a03d4a2217e41e4dd3b05a8ea825bb762a5;p=clitk.git diff --git a/vv/vvLandmarks.cxx b/vv/vvLandmarks.cxx index d0f2c91..528669d 100644 --- a/vv/vvLandmarks.cxx +++ b/vv/vvLandmarks.cxx @@ -35,11 +35,13 @@ 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; timeTransformPoint(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(); @@ -118,6 +143,42 @@ void vvLandmarks::RemoveLastLandmark() //-------------------------------------------------------------------- +//-------------------------------------------------------------------- +void vvLandmarks::RemoveLandmarkWithLabel(vtkStdString label, int time) +{ + if (label != "P1" && label != "P2") + return; + // erase a vtkPoint by shifiting the array . + // not a problem here because there are no + // pologyons linking the points + int t = time;//mLandmarks[index].coordinates[3]; + int npoints = mPoints[t]->GetNumberOfPoints(); + + //search of the index corresponding to the label + int index(0); + while (mLabels[t]->GetValue(index) != label) + ++index; + + for (int i = index; i < npoints - 1; i++) { + mPoints[t]->InsertPoint(i, mPoints[t]->GetPoint(i+1)); + std::string str_i; // string which will contain the result + std::ostringstream convert; // stream used for the conversion + convert << i; // insert the textual representation of 'i' in the characters in the stream + str_i = convert.str(); // set 'str_i' to the contents of the stream + mLabels[t]->SetValue(i,mLabels[t]->GetValue(i+1)); + } + mPoints[t]->SetNumberOfPoints(npoints-1); + mLabels[t]->SetNumberOfValues(npoints-1); + mLabels[t]->Modified(); + mPolyData->Modified(); + + mLandmarks[t].erase(mLandmarks[t].begin() + index); + mLandmarksInitial[t].erase(mLandmarksInitial[t].begin() + index); + mIds[t]->RemoveLastTuple(); +} +//-------------------------------------------------------------------- + + //-------------------------------------------------------------------- void vvLandmarks::RemoveLandmark(int index) { @@ -140,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(); } //-------------------------------------------------------------------- @@ -149,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); @@ -160,6 +223,7 @@ void vvLandmarks::RemoveAll() void vvLandmarks::ChangeComments(int index, std::string comments) { mLandmarks[mTime][index].comments = comments; + mLandmarksInitial[mTime][index].comments = comments; } //-------------------------------------------------------------------- @@ -207,6 +271,7 @@ bool vvLandmarks::LoadTxtFile(std::vector filenames) mFilenames = filenames; for (unsigned int i = 0; i < mPoints.size(); i++) { mLandmarks[i].clear(); + mLandmarksInitial[i].clear(); mPoints[i]->SetNumberOfPoints(0); } @@ -298,6 +363,7 @@ bool vvLandmarks::LoadTxtFile(std::vector 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]); @@ -326,6 +392,7 @@ bool vvLandmarks::LoadPtsFile(std::vector filenames) for (unsigned int i = 0; i < mPoints.size(); i++) { mPoints[i]->SetNumberOfPoints(0); mLandmarks[i].clear(); + mLandmarksInitial[i].clear(); } int err = 0; @@ -380,6 +447,7 @@ bool vvLandmarks::LoadPtsFile(std::vector 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]); @@ -420,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"; } }