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