From e149962cfe901eab463702d23985b32f278fd76d Mon Sep 17 00:00:00 2001 From: tbaudier Date: Tue, 21 Mar 2017 14:45:35 +0100 Subject: [PATCH] Taking into account VF Transform --- vv/vvSlicer.cxx | 37 +++++++++++++++++++++++++++++++------ vv/vvSlicer.h | 2 ++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index bb4791d..ce6d335 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -170,6 +170,7 @@ vvSlicer::vvSlicer() mConcatenatedTransform = vtkSmartPointer::New(); mConcatenatedFusionTransform = vtkSmartPointer::New(); mConcatenatedOverlayTransform = vtkSmartPointer::New(); + mConcatenatedVFTransform = vtkSmartPointer::New(); mFirstSetSliceOrientation = true; } //------------------------------------------------------------------------------ @@ -583,15 +584,31 @@ void vvSlicer::SetVF(vvImage::Pointer vf) mVFVisibility = true; if (!mAAFilter) { + mVFReslice = vtkSmartPointer::New(); + mVFReslice->SetInterpolationModeToLinear(); + mVFReslice->AutoCropOutputOn(); + mVFReslice->SetBackgroundColor(-1000,-1000,-1000,1); mAAFilter= vtkSmartPointer::New(); mVOIFilter = vtkSmartPointer::New(); mVOIFilter->SetSampleRate(mSubSampling,mSubSampling,mSubSampling); } + + mConcatenatedVFTransform->Identity(); + mConcatenatedVFTransform->Concatenate(mVF->GetTransform()[0]); + mConcatenatedVFTransform->Concatenate(mSlicingTransform); + mVFReslice->SetResliceTransform(mConcatenatedVFTransform); #if VTK_MAJOR_VERSION <= 5 - mVOIFilter->SetInput(vf->GetFirstVTKImageData()); + mVFReslice->SetInput(0, mVF->GetFirstVTKImageData()); +#else + mVFReslice->SetInputData(0, mVF->GetFirstVTKImageData()); +#endif + mVFReslice->Update(); + +#if VTK_MAJOR_VERSION <= 5 + mVOIFilter->SetInput(mVFReslice->GetOutput()); mAAFilter->SetInput(mVOIFilter->GetOutput()); #else - mVOIFilter->SetInputData(vf->GetFirstVTKImageData()); + mVOIFilter->SetInputConnection(mVFReslice->GetOutputPort()); mAAFilter->SetInputConnection(mVOIFilter->GetOutputPort()); #endif ///This tells VTK to use the scalar (pixel) data of the image to draw the little arrows @@ -846,10 +863,14 @@ void vvSlicer::SetTSlice(int t, bool updateLinkedImages) if (mVF && mVFActor->GetVisibility()) { if (mVF->GetVTKImages().size() > (unsigned int)mCurrentTSlice) #if VTK_MAJOR_VERSION <= 5 - mVOIFilter->SetInput(mVF->GetVTKImages()[mCurrentTSlice]); + mVFReslice->SetInput(mVF->GetVTKImages()[mCurrentTSlice]); #else - mVOIFilter->SetInputData(mVF->GetVTKImages()[mCurrentTSlice]); + mVFReslice->SetInputData(mVF->GetVTKImages()[mCurrentTSlice]); #endif + // Update overlay transform + mConcatenatedVFTransform->Identity(); + mConcatenatedVFTransform->Concatenate(mVF->GetTransform()[mCurrentTSlice]); + mConcatenatedVFTransform->Concatenate(mSlicingTransform); } //update the overlay if (mOverlay && mOverlayActor->GetVisibility()) { @@ -976,6 +997,9 @@ void vvSlicer::SetSliceOrientation(int orientation) if(mOverlay) AdjustResliceToSliceOrientation(mOverlayReslice); + if(mVF) + AdjustResliceToSliceOrientation(mVFReslice); + // Update the viewer // Go to current cursor position @@ -1193,14 +1217,15 @@ void vvSlicer::UpdateDisplayExtent() offset = -1; if (mVF && mVFVisibility) { + AdjustResliceToSliceOrientation(mVFReslice); int vfExtent[6]; #if VTK_MAJOR_VERSION <= 5 mVF->GetVTKImages()[0]->UpdateInformation(); - this->ConvertImageToImageDisplayExtent(input, w_ext, mVF->GetVTKImages()[0], vfExtent); + this->ConvertImageToImageDisplayExtent(input, w_ext, mVFReslice->GetOutput(), vfExtent); bool out = ClipDisplayedExtent(vfExtent, mVOIFilter->GetInput()->GetWholeExtent()); #else mVOIFilter->Update(); - this->ConvertImageToImageDisplayExtent(mImageReslice->GetOutputInformation(0), w_ext, mVF->GetVTKImages()[0], vfExtent); + this->ConvertImageToImageDisplayExtent(mImageReslice->GetOutputInformation(0), w_ext, mVFReslice->GetOutput(), vfExtent); bool out = ClipDisplayedExtent(vfExtent, mVOIFilter->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())); #endif mVFActor->SetVisibility(!out); diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h index 23c1959..3beab6e 100644 --- a/vv/vvSlicer.h +++ b/vv/vvSlicer.h @@ -270,6 +270,8 @@ protected: vtkSmartPointer mVFMapper; vtkSmartPointer mVFColorLUT; vtkSmartPointer mVFActor; + vtkSmartPointer mVFReslice; + vtkSmartPointer mConcatenatedVFTransform; vtkSmartPointer mLandGlyph; vtkSmartPointer mCross; vtkSmartPointer mLandClipper; -- 2.45.1