Refactor dicomimageview. 3

This commit is contained in:
Krad
2022-07-01 17:40:22 +08:00
parent 8b4afe9e6d
commit 9625835814
3 changed files with 59 additions and 59 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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();
}
}