Refactor sync event.1

This commit is contained in:
Krad
2022-07-25 16:13:42 +08:00
parent e1a7614e7c
commit 169e0ea2a2
5 changed files with 56 additions and 23 deletions

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Common/QGlobals.h"
#include <memory>
#include <vtkImageData.h>
@@ -38,10 +38,7 @@ public:
bool IntersectWorldBounds(SeriesImageSet* imageSet);
private:
vtkSmartPointer <vtkImageData> m_image;
ExtendMedicalImageProperties* m_property = nullptr;
std::string m_pUniqueID;
};

View File

@@ -582,6 +582,18 @@ void infinitiViewer::SetPanOffset(const double *p) {
}
void infinitiViewer::setPanFocalPoint(const double *p) {
double fp[3] = {0.0, 0.0, 0.0};
double newP[3] = {p[0], p[1], p[2]};
Renderer->GetActiveCamera()->GetPosition(fp);
newP[SliceOrientation] = fp[2];
Renderer->GetActiveCamera()->SetPosition(newP);
Renderer->GetActiveCamera()->GetFocalPoint(fp);
newP[SliceOrientation] = fp[2];
Renderer->GetActiveCamera()->SetFocalPoint(newP);
}
// window----------------------------------------------------------------------
double infinitiViewer::GetColorWindow() {
return this->ImageActor->GetProperty()->GetColorWindow();

View File

@@ -193,6 +193,8 @@ vtkTypeMacro(infinitiViewer, vtkObject);
void SetPanOffset(const double *point);
void setPanFocalPoint(const double *point);
void ResetZoomScaleToFitWindowSize();
//@{
/**

View File

@@ -1,4 +1,4 @@
#include "dicomimageview.h"
#include "dicomimageview.h"
#include <QMessageBox>
#include <QDebug>
@@ -372,12 +372,12 @@ void DicomImageView::clearFusionContext() {
}
//Callbacks------------------------------------------------------------------------------------
void DicomImageView::updateWindowLevelCb() {
void DicomImageView::windowLevelHandle() {
mImageViewer->UpdateCornerInfo(BOTTOM_RIGHT);
emit onFusionWindowChange(mImageViewer->GetColorLevel(), mImageViewer->GetColorWindow());
}
void DicomImageView::scalarEventCb(vtkObject *, unsigned long eventId, void *calldata) {
void DicomImageView::scalarEventHandle(vtkObject *, unsigned long eventId, void *calldata) {
double *r = (double *) calldata;
switch (eventId) {
case (ActorDraggableInteractorStyle::ScalarShiftEvent):
@@ -395,31 +395,36 @@ void DicomImageView::scalarEventCb(vtkObject *, unsigned long eventId, void *cal
}
}
void DicomImageView::doubleclickedEventCb() {
void DicomImageView::doubleClickHandle() {
emit onViewDoubleClick(this);
}
//TODO重新匹配该函数部分逻辑可以直接保留需要注意Endxxx系列事件不是仅仅为了sync设计的
void DicomImageView::syncEventFunc(vtkObject *, unsigned long eid, void *calldata) {
void DicomImageView::dispatchEvent(vtkObject *, unsigned long eid, void *callData) {
int *r = (int *) calldata;
int *r = (int *) callData;
switch (eid) {
case (vtkCommand::EventIds::EndPanEvent):
emit onSync(this, VTKIS_IMAGE_PAN, calldata);
case (vtkCommand::EventIds::EndPanEvent):{
emit onEndPan(this, callData);
break;
case (vtkCommand::EventIds::EndWindowLevelEvent):
}
case (vtkCommand::EventIds::EndWindowLevelEvent):{
//update corner info through callback
emit onSync(this, VTKIS_IMAGE_WINDOWLEVEL, calldata);
emit onEndWindowLevel(this,
mImageViewer->GetColorLevel(),
mImageViewer->GetColorWindow());
break;
case (ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):
emit onSync(this, VTKIS_IMAGE_ZOOM, calldata);
}
case (ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):{
double newScaleFactor = ((double *) callData)[1];
emit onEndZoom(this, newScaleFactor);
break;
}
case (ActorDraggableInteractorStyle::DraggableStyleEvents::SlicedEvent): {
mScrollBar->SetValueSilently(r[0]);
//invoke event
double focusPoint[3] = {.0, .0, .0};
mImageViewer->GetSlicePoint(focusPoint);
emit onSync(this, VTKIS_IMAGE_SLICING, focusPoint);
emit onSlice(this, focusPoint);
break;
}
default:
@@ -481,12 +486,18 @@ void DicomImageView::setZoomScale(double scale) {
void DicomImageView::setPanOffset(double *pan) {
if (hasSeries()) {
mImageViewer->SetPanOffset(pan);
mImageViewer->Render();
}
}
void DicomImageView::setPanFocalPoint(double *pan) {
if (hasSeries()) {
mImageViewer->setPanFocalPoint(pan);
mImageViewer->Render();
}
}
void DicomImageView::resetPanZoom() {
if (hasSeries()) {
mImageViewer->GetRenderer()->ResetCamera();
@@ -582,6 +593,7 @@ void DicomImageView::rotateImage(double angle, TransFormType operation) {
void DicomImageView::ClearTransformations() {
if (hasSeries()) {
int slice = mImageViewer->GetSlice();
//reset flip and rotation
mImageViewer->UpdateOrientation();
resetPanZoom();
//avoid black out problem

View File

@@ -116,6 +116,8 @@ public:
void setPanOffset(double *p);
void setPanFocalPoint(double *p);
void SyncScrollBar();
//CineMode
@@ -177,6 +179,14 @@ signals:
void onSync(DicomImageView *view, int interactionMode, void *calldata);
void onSlice(DicomImageView *view, void *calldata);
void onEndPan(DicomImageView *view, void * offsetVector);
void onEndZoom(DicomImageView *view, double newScaleFactor);
void onEndWindowLevel(DicomImageView *view, double level, double window);
void onFusionWindowChange(double level, double width);
void onTransform(TransFormType);
@@ -262,14 +272,14 @@ private:
}
//Callback
void doubleclickedEventCb();
void doubleClickHandle();
void scalarEventCb(vtkObject *sender, unsigned long eventId, void *calldata = nullptr);
void scalarEventHandle(vtkObject *sender, unsigned long eventId, void *calldata = nullptr);
void updateWindowLevelCb();
void windowLevelHandle();
void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata);
void dispatchEvent(vtkObject *caller, unsigned long eid, void *callData);
void initCineModeThread();