Refactor dicomimageview. 3
This commit is contained in:
@@ -1,20 +1,21 @@
|
|||||||
#include "dicomimageview.h"
|
#include "dicomimageview.h"
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "thumbnailImage.h"
|
|
||||||
#include <vtkRenderer.h>
|
#include <vtkRenderer.h>
|
||||||
#include <vtkCamera.h>
|
#include <vtkCamera.h>
|
||||||
#include <vtkInteractorStyleImage.h>
|
#include <vtkInteractorStyleImage.h>
|
||||||
#include <QVTKOpenGLNativeWidget.h>
|
#include <QVTKOpenGLNativeWidget.h>
|
||||||
#include <vtkGenericOpenGLRenderWindow.h>
|
#include <vtkGenericOpenGLRenderWindow.h>
|
||||||
#include "vtkImageProperty.h"
|
#include <vtkDiscretizableColorTransferFunction.h>
|
||||||
#include "UI/Widget/mytitlebar.h"
|
#include <vtkImageProperty.h>
|
||||||
|
|
||||||
#include "Interaction/ActorDraggableInteractorStyle.h"
|
#include "Interaction/ActorDraggableInteractorStyle.h"
|
||||||
|
#include "UI/Window/metaDataWindow.h"
|
||||||
|
#include "UI/Widget/mytitlebar.h"
|
||||||
#include "cine/pqVCRController.h"
|
#include "cine/pqVCRController.h"
|
||||||
#include "cine/pqVCRToolbar.h"
|
#include "cine/pqVCRToolbar.h"
|
||||||
#include "vtkDiscretizableColorTransferFunction.h"
|
#include "thumbnailImage.h"
|
||||||
#include "UI/Window/metaDataWindow.h"
|
|
||||||
#include "dcmtk/dcmdata/dcfilefo.h"
|
#include "dcmtk/dcmdata/dcfilefo.h"
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -90,19 +91,33 @@ void DicomImageView::initScrollbar() {
|
|||||||
mScrollBar->setMaximum(mImageViewer->GetSliceMax());
|
mScrollBar->setMaximum(mImageViewer->GetSliceMax());
|
||||||
mScrollBar->setSingleStep(1);
|
mScrollBar->setSingleStep(1);
|
||||||
mScrollBar->setVisible(true);
|
mScrollBar->setVisible(true);
|
||||||
|
if (!mIsSlotInited) {
|
||||||
|
connect(mScrollBar, &QScrollBar::valueChanged, this, &DicomImageView::scrollBarValueChanged);
|
||||||
|
connect(this, &DicomImageView::Signal_Transformation, this, &DicomImageView::imageTransformed);
|
||||||
|
mIsSlotInited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DicomImageView::initImageViewer() {
|
||||||
|
if (!mImageViewer) {
|
||||||
|
mImageViewer = infinitiViewer::New();
|
||||||
|
mImageViewer->SetRenderWindow(mGLRenWin);
|
||||||
|
mImageViewer->SetupInteractor(mGLRenWin->GetInteractor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::setHighlight(bool yes) {
|
void DicomImageView::setHighlight(bool yes) {
|
||||||
mTitleBar->SetHighlight(yes);
|
mTitleBar->SetHighlight(yes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// action----------------------------------------------------------------------
|
||||||
void DicomImageView::SyncScrollBar() {
|
void DicomImageView::SyncScrollBar() {
|
||||||
mScrollBar->SetValueSilently(mImageViewer->GetSlice());
|
mScrollBar->SetValueSilently(mImageViewer->GetSlice());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::resetView() {
|
void DicomImageView::resetView() {
|
||||||
if (hasSeries()) {
|
if (hasSeries()) {
|
||||||
removeViewWithFusion();
|
unloadFusion();
|
||||||
removeViewWithMeasure();
|
removeViewWithMeasure();
|
||||||
mImageViewer->GetRenderer()->RemoveAllViewProps();
|
mImageViewer->GetRenderer()->RemoveAllViewProps();
|
||||||
this->render();
|
this->render();
|
||||||
@@ -123,6 +138,7 @@ bool DicomImageView::hasSeries() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::loadSeries(SeriesImageSet *series) {
|
void DicomImageView::loadSeries(SeriesImageSet *series) {
|
||||||
|
initImageViewer();
|
||||||
mSeries = series;
|
mSeries = series;
|
||||||
mImageViewer->SetInputData(mSeries->GetData());
|
mImageViewer->SetInputData(mSeries->GetData());
|
||||||
mImageViewer->InitCornerInfo(series->GetProperty());
|
mImageViewer->InitCornerInfo(series->GetProperty());
|
||||||
@@ -139,6 +155,7 @@ void DicomImageView::loadSeries(SeriesImageSet *series) {
|
|||||||
style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb);
|
style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb);
|
||||||
style->AddObserver(ActorDraggableInteractorStyle::ScalarOpacityEvent, this, &DicomImageView::scalarEventCb);
|
style->AddObserver(ActorDraggableInteractorStyle::ScalarOpacityEvent, this, &DicomImageView::scalarEventCb);
|
||||||
style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb);
|
style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb);
|
||||||
|
initScrollbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
int DicomImageView::getSeriesNumber() {
|
int DicomImageView::getSeriesNumber() {
|
||||||
@@ -170,23 +187,6 @@ void DicomImageView::showMetaData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::resizeEvent(QResizeEvent *event) {
|
|
||||||
//auto size conner info
|
|
||||||
if (!mImageViewer) return;
|
|
||||||
if (mImageViewer->GetvtkCornerAnnotation()) {
|
|
||||||
mImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
|
|
||||||
mImageViewer->Render();
|
|
||||||
}
|
|
||||||
if (mIsCine) {
|
|
||||||
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 +
|
|
||||||
VCRHelper::getVCRXOffset();
|
|
||||||
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 +
|
|
||||||
VCRHelper::getVCRYOffset();
|
|
||||||
mVcrToolbar->move(ax, ay);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//SLOTS------------------------------------------------------------------------
|
//SLOTS------------------------------------------------------------------------
|
||||||
void DicomImageView::scrollBarValueChanged(int slice) {
|
void DicomImageView::scrollBarValueChanged(int slice) {
|
||||||
mImageViewer->SetSlice(slice);
|
mImageViewer->SetSlice(slice);
|
||||||
@@ -249,6 +249,23 @@ void DicomImageView::mousePressEvent(QMouseEvent *event) {
|
|||||||
emit Signal_ViewClicked(this);
|
emit Signal_ViewClicked(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DicomImageView::resizeEvent(QResizeEvent *event) {
|
||||||
|
//auto size conner info
|
||||||
|
if (!mImageViewer) return;
|
||||||
|
if (mImageViewer->GetvtkCornerAnnotation()) {
|
||||||
|
mImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
|
||||||
|
mImageViewer->Render();
|
||||||
|
}
|
||||||
|
if (mIsCine) {
|
||||||
|
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 +
|
||||||
|
VCRHelper::getVCRXOffset();
|
||||||
|
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 +
|
||||||
|
VCRHelper::getVCRYOffset();
|
||||||
|
mVcrToolbar->move(ax, ay);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// DND support-----------------------------------------------------------------
|
// DND support-----------------------------------------------------------------
|
||||||
void DicomImageView::dragEnterEvent(QDragEnterEvent *e) {
|
void DicomImageView::dragEnterEvent(QDragEnterEvent *e) {
|
||||||
if (e->mimeData()->hasFormat("text/plain")) {
|
if (e->mimeData()->hasFormat("text/plain")) {
|
||||||
@@ -322,13 +339,13 @@ void DicomImageView::setFusionOpacity(double percent) {
|
|||||||
/**
|
/**
|
||||||
* Remove Fusion no matter it is base or overlay
|
* Remove Fusion no matter it is base or overlay
|
||||||
*/
|
*/
|
||||||
void DicomImageView::removeViewWithFusion() {
|
void DicomImageView::unloadFusion() {
|
||||||
if (hasSeries()) {
|
if (hasSeries()) {
|
||||||
if (isFusion()) {
|
if (isFusion()) {
|
||||||
disconnect(mOverlayView, &DicomImageView::Signal_WindowLevelEventForFusion,
|
disconnect(mOverlayView, &DicomImageView::Signal_WindowLevelEventForFusion,
|
||||||
this, &DicomImageView::fusionWindowChanged);
|
this, &DicomImageView::fusionWindowChanged);
|
||||||
|
|
||||||
this->removeFusion();
|
this->clearFusionContext();
|
||||||
mOverlayView->SetBaseView(nullptr);
|
mOverlayView->SetBaseView(nullptr);
|
||||||
mOverlayView = nullptr;
|
mOverlayView = nullptr;
|
||||||
}
|
}
|
||||||
@@ -337,40 +354,20 @@ void DicomImageView::removeViewWithFusion() {
|
|||||||
disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion,
|
disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion,
|
||||||
mBaseView, &DicomImageView::fusionWindowChanged);
|
mBaseView, &DicomImageView::fusionWindowChanged);
|
||||||
|
|
||||||
mBaseView->removeFusion();
|
mBaseView->clearFusionContext();
|
||||||
mBaseView->SetOverlayView(nullptr);
|
mBaseView->SetOverlayView(nullptr);
|
||||||
mBaseView = nullptr;
|
mBaseView = nullptr;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::removeFusion() {
|
void DicomImageView::clearFusionContext() {
|
||||||
mImageViewer->RemoveFusionData();
|
mImageViewer->RemoveFusionData();
|
||||||
mImageViewer->FusionOff();
|
mImageViewer->FusionOff();
|
||||||
mImageViewer->Render();
|
mImageViewer->Render();
|
||||||
mOverlayView->OverlayOff();
|
mOverlayView->OverlayOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::setDicomImageView(SeriesImageSet *series) {
|
|
||||||
if (!mImageViewer) {
|
|
||||||
|
|
||||||
mImageViewer = infinitiViewer::New();
|
|
||||||
mImageViewer->SetRenderWindow(mGLRenWin);
|
|
||||||
mImageViewer->SetupInteractor(mGLRenWin->GetInteractor());
|
|
||||||
}
|
|
||||||
//series->setVTKOpenGLNativeWidget(this->_glView);
|
|
||||||
loadSeries(series);
|
|
||||||
//whenver change instance,set scroll value to zero
|
|
||||||
initScrollbar();
|
|
||||||
if (!mIsSlotInited) {
|
|
||||||
connect(mScrollBar, &QScrollBar::valueChanged, this, &DicomImageView::scrollBarValueChanged);
|
|
||||||
connect(this, &DicomImageView::Signal_Transformation, this, &DicomImageView::imageTransformed);
|
|
||||||
mIsSlotInited = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Callbacks------------------------------------------------------------------------------------
|
//Callbacks------------------------------------------------------------------------------------
|
||||||
void DicomImageView::updateWindowLevelCb() {
|
void DicomImageView::updateWindowLevelCb() {
|
||||||
mImageViewer->UpdateCornerInfo(BOTTOM_RIGHT);
|
mImageViewer->UpdateCornerInfo(BOTTOM_RIGHT);
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public:
|
|||||||
|
|
||||||
void setFusionInput(DicomImageView *overlay);
|
void setFusionInput(DicomImageView *overlay);
|
||||||
|
|
||||||
void removeViewWithFusion();
|
void unloadFusion();
|
||||||
|
|
||||||
|
|
||||||
//Measure
|
//Measure
|
||||||
@@ -159,7 +159,10 @@ public:
|
|||||||
mImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loadSeries(SeriesImageSet *series);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
void Signal_ViewEmpty(DicomImageView *view);
|
void Signal_ViewEmpty(DicomImageView *view);
|
||||||
|
|
||||||
void Signal_ViewClicked(DicomImageView *view);
|
void Signal_ViewClicked(DicomImageView *view);
|
||||||
@@ -188,8 +191,8 @@ public slots:
|
|||||||
void imageTransformed();
|
void imageTransformed();
|
||||||
|
|
||||||
void clicked();
|
void clicked();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 点击事件,用于激发当前选中
|
* 点击事件,用于激发当前选中
|
||||||
* @attention 只能捕获到titlebar区域的点击
|
* @attention 只能捕获到titlebar区域的点击
|
||||||
@@ -227,11 +230,11 @@ protected:
|
|||||||
*/
|
*/
|
||||||
void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
|
void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
|
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void removeFusion();
|
|
||||||
|
void clearFusionContext();
|
||||||
|
|
||||||
void OverlayOn() {
|
void OverlayOn() {
|
||||||
mIsOverlay = true;
|
mIsOverlay = true;
|
||||||
@@ -249,11 +252,11 @@ private:
|
|||||||
mBaseView = v;
|
mBaseView = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SetOverlayView(DicomImageView *v) {
|
void SetOverlayView(DicomImageView *v) {
|
||||||
mOverlayView = v;
|
mOverlayView = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Callback
|
//Callback
|
||||||
void doubleclickedEventCb();
|
void doubleclickedEventCb();
|
||||||
|
|
||||||
@@ -261,8 +264,8 @@ private:
|
|||||||
|
|
||||||
void updateWindowLevelCb();
|
void updateWindowLevelCb();
|
||||||
|
|
||||||
void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata);
|
|
||||||
|
|
||||||
|
void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata);
|
||||||
|
|
||||||
void initCineModeThread();
|
void initCineModeThread();
|
||||||
|
|
||||||
@@ -276,8 +279,6 @@ private:
|
|||||||
|
|
||||||
void initScrollbar();
|
void initScrollbar();
|
||||||
|
|
||||||
void loadSeries(SeriesImageSet *series);
|
|
||||||
|
|
||||||
vtkSmartPointer<vtkGenericOpenGLRenderWindow> mGLRenWin;
|
vtkSmartPointer<vtkGenericOpenGLRenderWindow> mGLRenWin;
|
||||||
|
|
||||||
infinitiViewer *mImageViewer;
|
infinitiViewer *mImageViewer;
|
||||||
@@ -297,6 +298,8 @@ private:
|
|||||||
bool mIsNegative;
|
bool mIsNegative;
|
||||||
bool mIsOverlay;
|
bool mIsOverlay;
|
||||||
bool mIsSlotInited;
|
bool mIsSlotInited;
|
||||||
|
|
||||||
|
void initImageViewer();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -327,9 +327,9 @@ void ViewContainerWidget::replaceViewWithSerie(const std::string& uniqueid, Dico
|
|||||||
{
|
{
|
||||||
curV= manager.getCurrentView();
|
curV= manager.getCurrentView();
|
||||||
}
|
}
|
||||||
curV->removeViewWithFusion();
|
curV->unloadFusion();
|
||||||
DicomLoader *helper = DicomLoader::GetInstance();
|
DicomLoader *helper = DicomLoader::GetInstance();
|
||||||
curV->setDicomImageView(helper->getSeriesImageSet(uniqueid));
|
curV->loadSeries(helper->getSeriesImageSet(uniqueid));
|
||||||
curV->render();
|
curV->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,7 +371,7 @@ void ViewContainerWidget::replaceViewWithFusion()
|
|||||||
void ViewContainerWidget::removeCurrentViewWithFusion()
|
void ViewContainerWidget::removeCurrentViewWithFusion()
|
||||||
{
|
{
|
||||||
if (manager.getCurrentView()) {
|
if (manager.getCurrentView()) {
|
||||||
manager.getCurrentView()->removeViewWithFusion();
|
manager.getCurrentView()->unloadFusion();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user