Add manual sync of pan and zoom.

This commit is contained in:
Krad
2022-08-03 14:13:33 +08:00
parent 280bb1a052
commit 787b9745b7
4 changed files with 31 additions and 12 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);