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------------------------------------------------------------------------- // pan-------------------------------------------------------------------------
void infinitiViewer::SetPanOffset(const double *p) { void infinitiViewer::applyPanOffset(const double *point) {
double fp[3] = {0.0, 0.0, 0.0}; double fp[3] = {0.0, 0.0, 0.0};
Renderer->GetActiveCamera()->GetPosition(fp); Renderer->GetActiveCamera()->GetPosition(fp);
fp[0] = fp[0] + p[0]; fp[0] = fp[0] + point[0];
fp[1] = fp[1] + p[1]; fp[1] = fp[1] + point[1];
fp[2] = fp[2] + p[2]; fp[2] = fp[2] + point[2];
Renderer->GetActiveCamera()->SetPosition(fp); Renderer->GetActiveCamera()->SetPosition(fp);
Renderer->GetActiveCamera()->GetFocalPoint(fp); Renderer->GetActiveCamera()->GetFocalPoint(fp);
fp[0] = fp[0] + p[0]; fp[0] = fp[0] + point[0];
fp[1] = fp[1] + p[1]; fp[1] = fp[1] + point[1];
fp[2] = fp[2] + p[2]; fp[2] = fp[2] + point[2];
Renderer->GetActiveCamera()->SetFocalPoint(fp); 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 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); Renderer->GetActiveCamera()->GetPosition(fp);
newP[SliceOrientation] = fp[2]; newP[SliceOrientation] = fp[2];
Renderer->GetActiveCamera()->SetPosition(newP); Renderer->GetActiveCamera()->SetPosition(newP);

View File

@@ -191,9 +191,9 @@ vtkTypeMacro(infinitiViewer, vtkObject);
void SetZoomScale(double scale); 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(); void ResetZoomScaleToFitWindowSize();
//@{ //@{

View File

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

View File

@@ -64,13 +64,13 @@ public:
void viewDoubleClicked(DicomImageView *view); 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 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);
void viewReload(const std::string &unique_info); void viewReload(const std::string &unique_info);

View File

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

View File

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