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