Refactor Pan & zoom sync function

This commit is contained in:
Krad
2022-07-26 13:15:32 +08:00
parent 5a1d95a4f4
commit d9ad380d49
6 changed files with 27 additions and 29 deletions

View File

@@ -567,24 +567,24 @@ void infinitiViewer::ResetZoomScaleToFitWindowSize() {
}
// pan-------------------------------------------------------------------------
void infinitiViewer::SetPanOffset(const double *p) {
void infinitiViewer::applyPanOffset(const double *point) {
double fp[3] = {0.0, 0.0, 0.0};
Renderer->GetActiveCamera()->GetPosition(fp);
fp[0] = fp[0] + p[0];
fp[1] = fp[1] + p[1];
fp[2] = fp[2] + p[2];
fp[0] = fp[0] + point[0];
fp[1] = fp[1] + point[1];
fp[2] = fp[2] + point[2];
Renderer->GetActiveCamera()->SetPosition(fp);
Renderer->GetActiveCamera()->GetFocalPoint(fp);
fp[0] = fp[0] + p[0];
fp[1] = fp[1] + p[1];
fp[2] = fp[2] + p[2];
fp[0] = fp[0] + point[0];
fp[1] = fp[1] + point[1];
fp[2] = fp[2] + point[2];
Renderer->GetActiveCamera()->SetFocalPoint(fp);
}
void infinitiViewer::setPanFocalPoint(const double *p) {
void infinitiViewer::shiftCamera(const double *point) {
double fp[3] = {0.0, 0.0, 0.0};
double newP[3] = {p[0], p[1], p[2]};
double newP[3] = {point[0], point[1], point[2]};
Renderer->GetActiveCamera()->GetPosition(fp);
newP[SliceOrientation] = fp[2];
Renderer->GetActiveCamera()->SetPosition(newP);

View File

@@ -191,9 +191,9 @@ vtkTypeMacro(infinitiViewer, vtkObject);
void SetZoomScale(double scale);
void SetPanOffset(const double *point);
void applyPanOffset(const double *point);
void setPanFocalPoint(const double *point);
void shiftCamera(const double *point);
void ResetZoomScaleToFitWindowSize();
//@{

View File

@@ -43,15 +43,14 @@ void ImageViewManager::add(DicomImageView *view) {
viewReload(id);
});
// connect(view, &DicomImageView::onSync,
// this, &ImageViewManager::viewSynced);
connect(view, &DicomImageView::onSlice,
this, &ImageViewManager::viewSliced);
connect(view, &DicomImageView::onEndPan,
this, &ImageViewManager::viewPaned);
connect(view, &DicomImageView::onEndZoom,
this, &ImageViewManager::viewZoomed);
connect(view, &DicomImageView::onEndWindowLevel,
this, &ImageViewManager::viewEndWindowLeveL);
this, &ImageViewManager::viewEndWindowLevel);
vList.push_back(view);
}
}
@@ -75,6 +74,7 @@ DicomImageView * ImageViewManager::takeAt(int idx){
disconnect(view, &DicomImageView::onViewDoubleClick,nullptr,nullptr);
disconnect(view, &DicomImageView::afterViewCleared,nullptr,nullptr);
disconnect(view, &DicomImageView::onDragDrop,nullptr,nullptr);
disconnect(view, &DicomImageView::onSlice,nullptr,nullptr);
disconnect(view, &DicomImageView::onEndPan,nullptr,nullptr);
disconnect(view, &DicomImageView::onEndZoom,nullptr,nullptr);
disconnect(view, &DicomImageView::onEndWindowLevel,nullptr,nullptr);
@@ -213,7 +213,7 @@ void ImageViewManager::viewPaned(DicomImageView *src, void* offsetVector) {
if (v->hasSeries()) {
double *d = (double *) callData;
double vector[3] = {d[3] - d[0], d[4] - d[1], d[5] - d[2]};
v->setPanOffset(vector);
v->applyPanOffset(vector);
}
}, src, offsetVector, ImageViewManager::EStudyEBoundsSeries);
} else if (SyncHelper::getSyncState() == AUTO_SYNC) {
@@ -221,7 +221,7 @@ void ImageViewManager::viewPaned(DicomImageView *src, void* offsetVector) {
if (v->hasSeries()) {
double *d = (double *) callData;
double vector[3] = {d[3], d[4] , d[5]};
v->setPanFocalPoint(vector);
v->shiftCamera(vector);
}
}, src, offsetVector, ImageViewManager::EStudyEBoundsSeries);
}
@@ -239,7 +239,7 @@ void ImageViewManager::viewZoomed(DicomImageView *src, double scaleFactor) {
}
}
void ImageViewManager::viewEndWindowLeveL(DicomImageView *src, double level, double window) {
void ImageViewManager::viewEndWindowLevel(DicomImageView *src, double level, double window) {
double data[2] = {level, window};
if (SyncHelper::getSyncItem(WIDTH_LEVEL)) {
this->smartDo([](auto v, auto callData) {

View File

@@ -64,13 +64,13 @@ public:
void viewDoubleClicked(DicomImageView *view);
void viewSynced(DicomImageView *src, int interactionMode, void *data);
void viewSliced(DicomImageView *src, void *sliceData);
void viewPaned(DicomImageView *src, void* offsetVector);
void viewZoomed(DicomImageView *src, double scaleFactor);
void viewEndWindowLeveL(DicomImageView *src, double level, double window);
void viewEndWindowLevel(DicomImageView *src, double level, double window);
void viewReload(const std::string &unique_info);

View File

@@ -1,4 +1,4 @@
#include "dicomimageview.h"
#include "dicomimageview.h"
#include <QMessageBox>
#include <QDebug>
@@ -484,16 +484,16 @@ void DicomImageView::setZoomScale(double scale) {
}
}
void DicomImageView::setPanOffset(double *pan) {
void DicomImageView::applyPanOffset(double *pan) {
if (hasSeries()) {
mImageViewer->SetPanOffset(pan);
mImageViewer->applyPanOffset(pan);
mImageViewer->Render();
}
}
void DicomImageView::setPanFocalPoint(double *pan) {
void DicomImageView::shiftCamera(double *point) {
if (hasSeries()) {
mImageViewer->setPanFocalPoint(pan);
mImageViewer->shiftCamera(point);
mImageViewer->Render();
}
}

View File

@@ -114,9 +114,9 @@ public:
void setZoomScale(double scale);
void setPanOffset(double *p);
void applyPanOffset(double *p);
void setPanFocalPoint(double *p);
void shiftCamera(double *p);
void SyncScrollBar();
@@ -177,8 +177,6 @@ signals:
void onDragDrop(DicomImageView *view,const std::string& uniqueId);
void onSync(DicomImageView *view, int interactionMode, void *calldata);
void onSlice(DicomImageView *view, void *calldata);
void onEndPan(DicomImageView *view, void * offsetVector);