Add manual sync of pan and zoom.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user