Introduce ImageViewManager

This commit is contained in:
Krad
2022-03-09 17:24:06 +08:00
parent 33fcdc79e3
commit a4b18a19dd
5 changed files with 117 additions and 47 deletions

View File

@@ -0,0 +1,55 @@
//
// Created by Krad on 2022/3/9.
//
#include "ImageViewManager.h"
#include "algorithm"
bool ImageViewManager::contains(DicomImageView *view) {
auto iter = std::find(vList.begin(),vList.end(),view);
return !(iter == vList.end());
}
void ImageViewManager::add(DicomImageView *view) {
if (view && !contains(view)){
vList.push_back(view);
}
}
void ImageViewManager::remove(DicomImageView *view) {
if (view && !contains(view)){
vList.removeOne(view);
}
}
void ImageViewManager::smartDo(ImageViewManager::SmartDoCallback cb, ImageViewManager::DoScope scope,DicomImageView* exceptView) {
switch (scope) {
case DoScope::Current:{
if (currentView)
cb(currentView);
break;
}
case DoScope::SameSeries:{
//TODO: need add same series and same direction check and do logic!
break;
}
case DoScope::SameSeriesExceptSelf:{
//TODO: need add same series and same direction check and do logic!
break;
}
case DoScope::AllExceptSelf:
std::for_each(vList.begin(),vList.end(),[=](auto v){
if (v == exceptView) return;
cb(v);
});
case DoScope::All:
default:
std::for_each(vList.begin(),vList.end(),[=](auto v){
cb(v);
});
}
}
void ImageViewManager::setCurrentView(DicomImageView* view) {
currentView = view;
}

View File

@@ -0,0 +1,39 @@
//
// Created by Krad on 2022/3/9.
//
#ifndef OMEGAV_IMAGEVIEWMANAGER_H
#define OMEGAV_IMAGEVIEWMANAGER_H
#include <QObject>
#include <QList>
#include "dicomimageview.h"
class ImageViewManager:public QObject {
Q_OBJECT
public:
ImageViewManager();
~ImageViewManager();
bool contains(DicomImageView* view);
void add(DicomImageView* view);
void remove(DicomImageView* view);
void setCurrentView(DicomImageView* view);
enum DoScope{
Current,
SameSeries,
SameSeriesExceptSelf,
AllExceptSelf,
All
};
typedef void(*SmartDoCallback)(DicomImageView*);
void smartDo(SmartDoCallback cb, DoScope scope = Current,DicomImageView* exceptView = nullptr );
private:
QList<DicomImageView*> vList;
DicomImageView *currentView = nullptr;
};
#endif //OMEGAV_IMAGEVIEWMANAGER_H

View File

@@ -1,7 +1,4 @@
#include "view/DicomImageView.h" #include "view/dicomimageview.h"
//#include <DcmFile.h>
//#include <DcmDataset.h>
//#include "view/subview/metaDataWindow.h"
#include <QMessageBox> #include <QMessageBox>
#include <QDebug> #include <QDebug>
#include <QMimeData> #include <QMimeData>
@@ -84,24 +81,6 @@ MyTitleBar * DicomImageView::createMyTitleBar()
return titleBar; return titleBar;
} }
void DicomImageView::ToggleNegativeMode()
{
if (HasSeries())
{
if (isNegative)
{
_ImageViewer->SetNegativeMode(false);
isNegative = false;
}
else
{
_ImageViewer->SetNegativeMode(true);
isNegative = true;
}
}
}
void DicomImageView::initScrollbar() void DicomImageView::initScrollbar()
{ {
//_MinSlice = _ImageViewer->GetSliceMin(); //_MinSlice = _ImageViewer->GetSliceMin();
@@ -161,7 +140,6 @@ void DicomImageView::Slot_ViewEmpty()
void DicomImageView::Slot_viewDoubleclicked() void DicomImageView::Slot_viewDoubleclicked()
{ {
//emit Signal_ViewClicked(this);
emit Signal_viewDoubleclicked(this); emit Signal_viewDoubleclicked(this);
} }
@@ -189,43 +167,27 @@ void DicomImageView::wheelEvent(QWheelEvent *event)
if (event->delta() > 0) if (event->delta() > 0)
{ {
//
//cout << "scroll forward" << endl;
if (_Slice > _MinSlice) if (_Slice > _MinSlice)
{ {
_Slice -= 1; _Slice -= 1;
//this->SetSlice(_Slice);
_scrollBar->setValue(_Slice); _scrollBar->setValue(_Slice);
//emit Signal_scrollValueChanged(this, _Slice);
//emit scroll_ValueChanged(_Slice);
//mySetSlice(_Slice);
} }
else else
{ {
_Slice = _MinSlice; _Slice = _MinSlice;
//this->SetSlice(_Slice);
_scrollBar->setValue(_Slice); _scrollBar->setValue(_Slice);
} }
} }
else else
{ {
//cout << "scroll backward" << endl;
if (_Slice < _MaxSlice) if (_Slice < _MaxSlice)
{ {
_Slice += 1; _Slice += 1;
//this->SetSlice(_Slice);
_scrollBar->setValue(_Slice); _scrollBar->setValue(_Slice);
//emit Signal_scrollValueChanged(this, _Slice);
//emit scroll_ValueChanged(_Slice);
//mySetSlice(_Slice);
} }
else else
{ {
_Slice = _MaxSlice; _Slice = _MaxSlice;
//this->SetSlice(_Slice);
_scrollBar->setValue(_Slice); _scrollBar->setValue(_Slice);
} }
} }
@@ -271,8 +233,6 @@ void DicomImageView::dropEvent(QDropEvent *e) {
thumbnailImage *tb = qobject_cast<thumbnailImage*>( thumbnailImage *tb = qobject_cast<thumbnailImage*>(
(QObject *)(e->mimeData()->text().toULongLong())); (QObject *)(e->mimeData()->text().toULongLong()));
if (tb) { if (tb) {
//SetSeriesInstance(s);
//this->UpdataSeriesInstance();
emit Signal_DragDropEvent(this, tb); emit Signal_DragDropEvent(this, tb);
} }
} }
@@ -342,7 +302,7 @@ void DicomImageView::SetFusionInput(DicomImageView *overlay)
} }
void DicomImageView::IncreFusionOpacity(double percent) { void DicomImageView::SetFusionOpacity(double percent) {
if (IsFusion()) { if (IsFusion()) {
_ImageViewer->IncreFusionOpacity(percent); _ImageViewer->IncreFusionOpacity(percent);
_ImageViewer->Render(); _ImageViewer->Render();
@@ -425,6 +385,7 @@ void DicomImageView::LoadSeries(SeriesImageSet *series)
style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb); style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb);
} }
//Callbacks------------------------------------------------------------------------------------
void DicomImageView::updateWindowLevelCb(vtkObject*caller, unsigned long eid, void *calldata) void DicomImageView::updateWindowLevelCb(vtkObject*caller, unsigned long eid, void *calldata)
{ {
_ImageViewer->updateCornerInfo(BOTTOM_RIGHT); _ImageViewer->updateCornerInfo(BOTTOM_RIGHT);
@@ -443,7 +404,7 @@ void DicomImageView::scalarEventCb(vtkObject* sender, unsigned long eventId, voi
break; break;
case(ActorDraggableInteractorStyle::ScalarOpacityEvent): case(ActorDraggableInteractorStyle::ScalarOpacityEvent):
qDebug() << "ScalarOpacityEvent" << r[0]; qDebug() << "ScalarOpacityEvent" << r[0];
IncreFusionOpacity(r[0]); SetFusionOpacity(r[0]);
break; break;
default: default:
@@ -626,6 +587,24 @@ void DicomImageView::SetWindowLevel(double level, double width)
} }
} }
void DicomImageView::ToggleNegativeMode()
{
if (HasSeries())
{
if (isNegative)
{
_ImageViewer->SetNegativeMode(false);
isNegative = false;
}
else
{
_ImageViewer->SetNegativeMode(true);
isNegative = true;
}
}
}
void DicomImageView::HFlip() void DicomImageView::HFlip()
{ {
if (HasSeries()) { if (HasSeries()) {

View File

@@ -80,7 +80,7 @@ public:
//Fusion //Fusion
bool IsFusion(); bool IsFusion();
void IncreFusionOpacity(double percent); void SetFusionOpacity(double percent);
void SetFusionInput(DicomImageView *overlap); void SetFusionInput(DicomImageView *overlap);
void removeViewWithFusion(); void removeViewWithFusion();

View File

@@ -34,7 +34,6 @@ QList<DicomImageView *> ViewContainerWidget::getViewList() const {
return view_list_; return view_list_;
} }
DicomImageView *ViewContainerWidget::getCurrentView() const { DicomImageView *ViewContainerWidget::getCurrentView() const {
return current_view_; return current_view_;
} }
@@ -58,7 +57,6 @@ DicomImageView* ViewContainerWidget::getNextView() const
return nullptr; return nullptr;
} }
void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMode, void* calldata) void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMode, void* calldata)
{ {
@@ -334,7 +332,6 @@ void ViewContainerWidget::emptyCurrentView()
} }
void ViewContainerWidget::Slot_ViewEmpty(DicomImageView *view) void ViewContainerWidget::Slot_ViewEmpty(DicomImageView *view)
{ {
if (view != nullptr) if (view != nullptr)