From f0869308f55704ef51422919287efa675e14a77e Mon Sep 17 00:00:00 2001
From: tbaudier <thomas.baudier@creatis.insa-lyon.fr>
Date: Tue, 23 Feb 2016 11:12:15 +0100
Subject: [PATCH] Landmarks move with the image during registration

---
 vv/vvSlicer.cxx | 23 +++++++++++++++++------
 vv/vvSlicer.h   |  2 ++
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx
index 2729bd6..314b58c 100644
--- a/vv/vvSlicer.cxx
+++ b/vv/vvSlicer.cxx
@@ -669,12 +669,24 @@ void vvSlicer::SetLandmarks(vvLandmarks* landmarks)
     mLandClipper->SetClipFunction(mClipBox);
     mLandClipper->InsideOutOn();
 #if VTK_MAJOR_VERSION <= 5
-    mLandClipper->SetInput(mLandmarks->GetOutput());
+    mLandmarkTransform = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
+    mLandmarkTransform->SetInput(mLandmarks->GetOutput());
+    mConcatenatedTransform->Identity();
+    mConcatenatedTransform->Concatenate(mImage->GetTransform()[0]);
+    mConcatenatedTransform->Concatenate(mSlicingTransform);
+    mLandmarkTransform->SetTransform(mConcatenatedTransform->GetInverse());
+    mLandClipper->SetInput(mLandmarkTransform->GetOutput());
 
     mLandGlyph->SetSource(mCross->GetOutput());
     mLandGlyph->SetInput(mLandClipper->GetOutput());
 #else
-    mLandClipper->SetInputData(mLandmarks->GetOutput());
+    mLandmarkTransform = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
+    mLandmarkTransform->SetInputData(mLandmarks->GetOutput());
+    mConcatenatedTransform->Identity();
+    mConcatenatedTransform->Concatenate(mImage->GetTransform()[0]);
+    mConcatenatedTransform->Concatenate(mSlicingTransform);
+    mLandmarkTransform->SetTransform(mConcatenatedTransform->GetInverse());
+    mLandClipper->SetInputConnection(mLandmarkTransform->GetOutputPort());
 
     mLandGlyph->SetSourceConnection(mCross->GetOutputPort());
     mLandGlyph->SetInputConnection(mLandClipper->GetOutputPort());
@@ -697,7 +709,6 @@ void vvSlicer::SetLandmarks(vvLandmarks* landmarks)
     mLandActor->SetPickable(0);
     mLandActor->SetVisibility(true);
     this->UpdateDisplayExtent();
-    this->GetRenderer()->AddActor(mLandActor);
   }
 }
 //------------------------------------------------------------------------------
@@ -1802,7 +1813,7 @@ void vvSlicer::UpdateCursorPosition()
 //----------------------------------------------------------------------------
 void vvSlicer::RemoveLandmarks()
 { 
-  vtkPolyData *pd = static_cast<vtkPolyData*>(mLandClipper->GetInput());
+  vtkPolyData *pd = static_cast<vtkPolyData*>(mLandmarks->GetOutput());
   if (pd->GetPoints()) {
 
     //First remove all captions:
@@ -1828,12 +1839,12 @@ void vvSlicer::DisplayLandmarks()
   mClipBox->SetBounds(bounds);
 
 
-  vtkPolyData *pd = static_cast<vtkPolyData*>(mLandClipper->GetInput());
+  vtkPolyData *pd = static_cast<vtkPolyData*>(mLandmarks->GetOutput());
   if (pd->GetPoints()) {
+    this->GetRenderer()->AddActor(mLandActor);
     //mLandGlyph->SetRange(0,1);
     //mLandGlyph->Modified();
     //mLandGlyph->Update();
-
     mClipBox->Modified();
     mLandClipper->Update();
     mLandMapper->Update();
diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h
index 4fadb3e..5027d16 100644
--- a/vv/vvSlicer.h
+++ b/vv/vvSlicer.h
@@ -35,6 +35,7 @@
 #include <vtkImageReslice.h>
 #include <vtkImageMapToColors.h>
 #include <vtkCaptionActor2D.h>
+#include <vtkTransformPolyDataFilter.h>
 
 class vtkActor;
 class vtkActor2D;
@@ -246,6 +247,7 @@ protected:
   //                         ___|__|___ VTK world coordinates (mm) (never displayed)            mCurrent
 
   vtkSmartPointer<vtkTransform> mSlicingTransform;
+  vtkSmartPointer<vtkTransformPolyDataFilter> mLandmarkTransform;
   vtkSmartPointer<vtkImageReslice> mImageReslice;
   vtkSmartPointer<vtkTransform> mConcatenatedTransform;
   vtkSmartPointer<vtkImageReslice> mOverlayReslice;
-- 
2.49.0