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]}; double vector[3] = {d[3] - d[0], d[4] - d[1], d[5] - d[2]};
v->applyPanOffset(vector); v->applyPanOffset(vector);
} }
}, src, offsetVector, ImageViewManager::SameStudySeries); }, src, offsetVector, ImageViewManager::SameOrientationSeries);
} else if (SyncHelper::getSyncState() == AUTO_SYNC) { } else if (SyncHelper::getSyncState() == AUTO_SYNC) {
this->smartDo([](auto v, auto callData) { this->smartDo([](auto v, auto callData) {
if (v->hasSeries()) { 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)) { if (SyncHelper::getSyncItem(ZOOM_PAN)) {
if (SyncHelper::getSyncState() == MANUAL_SYNC){
this->smartDo([](auto v, auto callData) { this->smartDo([](auto v, auto callData) {
if (v->hasSeries()) { if (v->hasSeries()) {
double d = *(double *) callData; 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); v->setZoomScale(d);
} }
}, src, &scaleFactor, ImageViewManager::SameStudySeries); }, src, scaleFactor, ImageViewManager::SameStudySeries);
}
} }
} }

View File

@@ -68,7 +68,7 @@ public:
void viewPaned(DicomImageView *src, void* offsetVector); 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); void viewEndWindowLevel(DicomImageView *src, double level, double window);

View File

@@ -415,8 +415,7 @@ void DicomImageView::dispatchEvent(vtkObject *, unsigned long eid, void *callDat
break; break;
} }
case (ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):{ case (ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):{
double newScaleFactor = ((double *) callData)[1]; emit onEndZoom(this, (double *) callData);
emit onEndZoom(this, newScaleFactor);
break; break;
} }
case (ActorDraggableInteractorStyle::DraggableStyleEvents::SlicedEvent): { 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) { void DicomImageView::applyPanOffset(double *pan) {
if (hasSeries()) { if (hasSeries()) {
mImageViewer->applyPanOffset(pan); mImageViewer->applyPanOffset(pan);

View File

@@ -113,6 +113,8 @@ public:
void setZoomScale(double scale); void setZoomScale(double scale);
void setZoomFactor(double factor);
void applyPanOffset(double *p); void applyPanOffset(double *p);
void shiftCamera(double *p); void shiftCamera(double *p);
@@ -190,7 +192,7 @@ signals:
void onEndPan(DicomImageView *view, void * offsetVector); 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); void onEndWindowLevel(DicomImageView *view, double level, double window);