From: Simon Rit Date: Mon, 13 Aug 2012 09:48:12 +0000 (+0200) Subject: Fix for UpdateLinkedNavigation with transforms. This also simplifies the X-Git-Tag: v1.4.0~281^2~20 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=829804e1d859fb09ffd87e0b735e86a53ed6f7fb;p=clitk.git Fix for UpdateLinkedNavigation with transforms. This also simplifies the previous code. --- diff --git a/vv/vvSlicerManager.cxx b/vv/vvSlicerManager.cxx index ee1c084..8411f03 100644 --- a/vv/vvSlicerManager.cxx +++ b/vv/vvSlicerManager.cxx @@ -698,14 +698,15 @@ void vvSlicerManager::UpdateLinked(int slicer) void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *refSlicer, bool bPropagate) { vtkCamera *refCam = refSlicer->GetRenderer()->GetActiveCamera(); - double refPosition[3], refFocal[3]; + + double refPosition[3]; refCam->GetPosition(refPosition); - refCam->GetFocalPoint(refFocal); - - refSlicer->GetSlicingTransform()->TransformPoint(refPosition); - refSlicer->GetSlicingTransform()->TransformPoint(refFocal); - mSlicers[0]->GetSlicingTransform()->GetInverse()->TransformPoint(refPosition); - mSlicers[0]->GetSlicingTransform()->GetInverse()->TransformPoint(refFocal); + refPosition[refSlicer->GetSliceOrientation()] = refSlicer->GetSlice() * + refSlicer->GetInput()->GetSpacing()[refSlicer->GetSliceOrientation()] + + refSlicer->GetInput()->GetOrigin()[refSlicer->GetSliceOrientation()]; + + refSlicer->GetSlicingTransform()->TransformPoint(refPosition, refPosition); + mSlicers[0]->GetSlicingTransform()->GetInverse()->TransformPoint(refPosition, refPosition); for ( unsigned int i = 0; i < mSlicers.size(); i++) { vtkCamera *camera = mSlicers[i]->GetRenderer()->GetActiveCamera(); @@ -715,51 +716,15 @@ void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *refSlicer, bool bPropagat camera->GetPosition(position); camera->GetFocalPoint(focal); - if(refSlicer->GetSliceOrientation()==mSlicers[i]->GetSliceOrientation()) { - for(int i=0; i<3; i++) { - position[i] = refPosition[i]; - focal[i] = refFocal[i]; - } - } - - if(refSlicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XY) { - if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XZ) { - position[0] = refPosition[0]; - focal[0] = refFocal[0]; - } - if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_YZ) { - position[1] = refPosition[1]; - focal[1] = refFocal[1]; - } - } - - if(refSlicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XZ) { - if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_YZ) { - position[2] = refPosition[2]; - focal[2] = refFocal[2]; - } - if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XY) { - position[0] = refPosition[0]; - focal[0] = refFocal[0]; + for(int j=0; j<3; j++) { + if(j!=mSlicers[i]->GetSliceOrientation()) { + position[j] = refPosition[j]; + focal[j] = refPosition[j]; } } - if(refSlicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_YZ) { - if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XY) { - position[1] = refPosition[1]; - focal[1] = refFocal[1]; - } - if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XZ) { - position[2] = refPosition[2]; - focal[2] = refFocal[2]; - } - } -DD(camera->GetFocalPoint()[0] << ' ' << camera->GetFocalPoint()[1] << ' ' << camera->GetFocalPoint()[2]) camera->SetFocalPoint(focal); -DD(camera->GetFocalPoint()[0] << ' ' << camera->GetFocalPoint()[1] << ' ' << camera->GetFocalPoint()[2]) -DD(camera->GetPosition()[0] << ' ' << camera->GetPosition()[1] << ' ' << camera->GetPosition()[2]) camera->SetPosition(position); -DD(camera->GetPosition()[0] << ' ' << camera->GetPosition()[1] << ' ' << camera->GetPosition()[2]) //Fix for bug #243 mSlicers[i]->ForceUpdateDisplayExtent();