Refactor Pan & zoom sync function
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
//@{
|
//@{
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user