diff --git a/src/src/UI/Manager/ImageViewManager.cpp b/src/src/UI/Manager/ImageViewManager.cpp index 026ca60..8ea3bec 100644 --- a/src/src/UI/Manager/ImageViewManager.cpp +++ b/src/src/UI/Manager/ImageViewManager.cpp @@ -236,7 +236,7 @@ void ImageViewManager::viewPaned(DicomImageView *src, void* offsetVector) { double vector[3] = {d[3] - d[0], d[4] - d[1], d[5] - d[2]}; v->applyPanOffset(vector); } - }, src, offsetVector, ImageViewManager::SameStudySeries); + }, src, offsetVector, ImageViewManager::SameOrientationSeries); } else if (SyncHelper::getSyncState() == AUTO_SYNC) { this->smartDo([](auto v, auto callData) { if (v->hasSeries()) { @@ -249,14 +249,24 @@ void ImageViewManager::viewPaned(DicomImageView *src, void* offsetVector) { } } -void ImageViewManager::viewZoomed(DicomImageView *src, double scaleFactor) { +void ImageViewManager::viewZoomed(DicomImageView *src, double* scaleFactor) { if (SyncHelper::getSyncItem(ZOOM_PAN)) { - this->smartDo([](auto v, auto callData) { - if (v->hasSeries()) { - double d = *(double *) callData; - v->setZoomScale(d); - } - }, src, &scaleFactor, ImageViewManager::SameStudySeries); + if (SyncHelper::getSyncState() == MANUAL_SYNC){ + this->smartDo([](auto v, auto callData) { + if (v->hasSeries()) { + double* d = ((double *) callData); + v->setZoomFactor(d[1]/d[0]); + } + }, src, scaleFactor, ImageViewManager::SameOrientationSeries); + } + else if (SyncHelper::getSyncState() == AUTO_SYNC) { + this->smartDo([](auto v, auto callData) { + if (v->hasSeries()) { + double d = ((double *) callData)[1]; + v->setZoomScale(d); + } + }, src, scaleFactor, ImageViewManager::SameStudySeries); + } } } diff --git a/src/src/UI/Manager/ImageViewManager.h b/src/src/UI/Manager/ImageViewManager.h index 88f4164..5160c47 100644 --- a/src/src/UI/Manager/ImageViewManager.h +++ b/src/src/UI/Manager/ImageViewManager.h @@ -68,7 +68,7 @@ public: void viewPaned(DicomImageView *src, void* offsetVector); - void viewZoomed(DicomImageView *src, double scaleFactor); + void viewZoomed(DicomImageView *src, double* scaleFactor); void viewEndWindowLevel(DicomImageView *src, double level, double window); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.cpp b/src/src/UI/Widget/ImageView/dicomimageview.cpp index 1968f77..6cfaa54 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.cpp +++ b/src/src/UI/Widget/ImageView/dicomimageview.cpp @@ -415,8 +415,7 @@ void DicomImageView::dispatchEvent(vtkObject *, unsigned long eid, void *callDat break; } case (ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):{ - double newScaleFactor = ((double *) callData)[1]; - emit onEndZoom(this, newScaleFactor); + emit onEndZoom(this, (double *) callData); break; } case (ActorDraggableInteractorStyle::DraggableStyleEvents::SlicedEvent): { @@ -483,6 +482,14 @@ void DicomImageView::setZoomScale(double scale) { } } +void DicomImageView::setZoomFactor(double factor) { + if (hasSeries()) { + double newScale = factor* mImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale(); + mImageViewer->SetZoomScale(newScale); + mImageViewer->Render(); + } +} + void DicomImageView::applyPanOffset(double *pan) { if (hasSeries()) { mImageViewer->applyPanOffset(pan); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.h b/src/src/UI/Widget/ImageView/dicomimageview.h index c41fe72..6cfa152 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.h +++ b/src/src/UI/Widget/ImageView/dicomimageview.h @@ -113,6 +113,8 @@ public: void setZoomScale(double scale); + void setZoomFactor(double factor); + void applyPanOffset(double *p); void shiftCamera(double *p); @@ -190,7 +192,7 @@ signals: void onEndPan(DicomImageView *view, void * offsetVector); - void onEndZoom(DicomImageView *view, double newScaleFactor); + void onEndZoom(DicomImageView *view, double* scaleFactor); void onEndWindowLevel(DicomImageView *view, double level, double window);