diff --git a/src/src/view/ImageViewManager.cpp b/src/src/view/ImageViewManager.cpp index 2df6337..fecf05c 100644 --- a/src/src/view/ImageViewManager.cpp +++ b/src/src/view/ImageViewManager.cpp @@ -40,7 +40,11 @@ void ImageViewManager::smartDo(SmartDoCallback cb, DicomImageView *sourceView, v case DoScope::SameSeries:{ std::for_each(vList.begin(),vList.end(),[=](auto v){ //check series - cb(v, callData); + auto series = sourceView->getSeriesInstance(); + if (v->getSeriesInstance()==series && v->GetSliceOrientation() == sourceView->GetSliceOrientation()){ + cb(v, callData); + } + }); break; } @@ -48,7 +52,10 @@ void ImageViewManager::smartDo(SmartDoCallback cb, DicomImageView *sourceView, v std::for_each(vList.begin(),vList.end(),[=](auto v){ if (v == sourceView) return; //check series - cb(v, callData); + auto series = sourceView->getSeriesInstance(); + if (v->getSeriesInstance()==series && v->GetSliceOrientation() == sourceView->GetSliceOrientation()){ + cb(v, callData); + } }); break; } diff --git a/src/src/view/viewcontainerwidget.cpp b/src/src/view/viewcontainerwidget.cpp index 5496acc..a345f1b 100644 --- a/src/src/view/viewcontainerwidget.cpp +++ b/src/src/view/viewcontainerwidget.cpp @@ -1,4 +1,4 @@ -#include "viewcontainerwidget.h" +#include "viewcontainerwidget.h" #include "thumbnailImage.h" #include "DicomLoader.h" #include @@ -75,7 +75,7 @@ void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMo v->SetSlice(r[0]); v->setScrollChangedType(scrollScope::TriggerType::USER_TRIGGER); } - },view, calldata,ImageViewManager::AllExceptSelf); + },view, calldata,ImageViewManager::SameSeriesExceptSelf); } if (SyncHelper::getSyncState() == MANUAL_SYNC) { @@ -87,7 +87,7 @@ void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMo v->AddSlice(r[1]); v->setScrollChangedType(scrollScope::TriggerType::USER_TRIGGER); } - },view, calldata,ImageViewManager::AllExceptSelf); + },view, calldata,ImageViewManager::SameSeriesExceptSelf); } } @@ -101,7 +101,7 @@ void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMo double vector[3] = { d[3] - d[0],d[4] - d[1],d[5] - d[2] }; v->SetPanOffset(vector); } - },view, calldata,ImageViewManager::AllExceptSelf); + },view, calldata,ImageViewManager::SameSeriesExceptSelf); } break; case VTKIS_IMAGE_ZOOM: @@ -112,7 +112,7 @@ void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMo double *d = (double *)callData; v->SetZoomScale(d[1]); } - },view, calldata,ImageViewManager::AllExceptSelf); + },view, calldata,ImageViewManager::SameSeriesExceptSelf); } break; case VTKIS_IMAGE_WINDOWLEVEL: @@ -123,7 +123,7 @@ void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMo double *d = (double *)callData; v->SetWindowLevel(d[1], d[0]); } - },view, calldata,ImageViewManager::AllExceptSelf); + },view, calldata,ImageViewManager::SameSeriesExceptSelf); } break; default: @@ -354,20 +354,21 @@ void ViewContainerWidget::toggleViewWithFusion() void ViewContainerWidget::replaceViewWithFusion() { - //Temporal: automatically fusion with next image - DicomImageView * overlap_view = this->getNextView(); - if (checkFusionStatus(manager.getCurrentView(), overlap_view)) - { - connect(overlap_view, &DicomImageView::Signal_WindowLevelEventForFusion, - manager.getCurrentView(), &DicomImageView::Slot_WindowLevelEventForFusion); + for (int i = 0; i < manager.getViewCount(); ++i) { + if (manager.getView(i) == manager.getCurrentView()) continue; + DicomImageView * overlap_view = manager.getView(i); + if (checkFusionStatus(manager.getCurrentView(), overlap_view)) + { + connect(overlap_view, &DicomImageView::Signal_WindowLevelEventForFusion, + manager.getCurrentView(), &DicomImageView::Slot_WindowLevelEventForFusion); + + manager.getCurrentView()->SetFusionInput(overlap_view); + manager.getCurrentView()->Render(); + return; + } + } + QMessageBox::information(this, "Warning", "Invalid Fusion!"); - manager.getCurrentView()->SetFusionInput(overlap_view); - manager.getCurrentView()->Render(); - } - else - { - QMessageBox::information(this, "Warning", "Invalid Fusion!"); - } } void ViewContainerWidget::removeCurrentViewWithFusion() {