From f1a18882ed5a1a879fd733593e0ea0ce52c36b86 Mon Sep 17 00:00:00 2001 From: Krad Date: Thu, 11 Aug 2022 14:57:27 +0800 Subject: [PATCH] Fix different orientation ImageData fusion bug. --- src/src/Rendering/Viewer/infinitiViewer.cxx | 8 +++++++- src/src/Rendering/Viewer/infinitiViewer.h | 2 +- src/src/UI/Widget/ImageView/dicomimageview.cpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/src/Rendering/Viewer/infinitiViewer.cxx b/src/src/Rendering/Viewer/infinitiViewer.cxx index ff4c501..ef3f4d5 100644 --- a/src/src/Rendering/Viewer/infinitiViewer.cxx +++ b/src/src/Rendering/Viewer/infinitiViewer.cxx @@ -691,7 +691,7 @@ bool simpleFusionableCheck(vtkImageData *a, vtkImageData *b) { return (origin1[0] == origin2[0]) && (origin1[1] == origin2[1]) && (origin1[2] == origin2[2]); } -void infinitiViewer::SetFusionInputData(vtkImageData *data) { +void infinitiViewer::SetFusionInputData(vtkImageData *data, vtkMatrix4x4* matrix) { if (!this->GetInput()) return; if (!simpleFusionableCheck(data, this->GetInput())) return; if (!this->FusionMapper) { @@ -702,6 +702,12 @@ void infinitiViewer::SetFusionInputData(vtkImageData *data) { FusionMapper->SetInputData(data); this->FusionActor = vtkImageSlice::New(); //must set fusion image slice layer to 1 to make main image is active layer of image stack + if (matrix){ + vtkNew userMatrix; + userMatrix->DeepCopy(matrix); + vtkMatrix4x4::Multiply4x4( WorldToModelMatrix,userMatrix, userMatrix); + FusionActor->SetUserMatrix(userMatrix); + } FusionActor->GetProperty()->SetLayerNumber(1); FusionActor->SetPickable(false); FusionActor->SetMapper(FusionMapper); diff --git a/src/src/Rendering/Viewer/infinitiViewer.h b/src/src/Rendering/Viewer/infinitiViewer.h index fd81556..5c8c1f4 100644 --- a/src/src/Rendering/Viewer/infinitiViewer.h +++ b/src/src/Rendering/Viewer/infinitiViewer.h @@ -312,7 +312,7 @@ public: /** * Set a imageData to fusion with current rendered image. */ - void SetFusionInputData(vtkImageData *); + void SetFusionInputData(vtkImageData * data, vtkMatrix4x4* matrix = nullptr); //@} //@{ diff --git a/src/src/UI/Widget/ImageView/dicomimageview.cpp b/src/src/UI/Widget/ImageView/dicomimageview.cpp index 78de0bd..166a414 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.cpp +++ b/src/src/UI/Widget/ImageView/dicomimageview.cpp @@ -338,7 +338,7 @@ void DicomImageView::setFusionInput(DicomImageView *overlay) { mOverlayView->OverlayOn(); mOverlayView->SetBaseView(this); - mImageViewer->SetFusionInputData(overlay_data); + mImageViewer->SetFusionInputData(overlay_data, overlay->getSeriesInstance()->GetProperty()->GetModelToWorldMatrix()); mImageViewer->SetFusionColorLeveL(level); mImageViewer->SetFusionColorWindow(window); mImageViewer->SetFusionOpacity(mImageViewer->GetFusionOpacity());