diff --git a/src/src/view/dicomimageview.cpp b/src/src/view/dicomimageview.cpp index 56f669a..c2c9685 100644 --- a/src/src/view/dicomimageview.cpp +++ b/src/src/view/dicomimageview.cpp @@ -76,42 +76,6 @@ DicomImageView::~DicomImageView() } } - -bool DicomImageView::isVCRVisible() -{ - if (!_vcr_toolbar) return false; - return _vcr_toolbar->isVisible(); -} - -void DicomImageView::setVCRVisible(bool visible) -{ - if (!_vcr_toolbar) return ; - _vcr_toolbar->setVisible(visible); -} -void DicomImageView::cineModeOn() -{ - if (!_vcr_toolbar) return; - //updateVCRToolbarPos(); - 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(); - _vcr_toolbar->move(ax, ay); - - _vcr_toolbar->show(); - this->initCineModeThread(); - _vcr_toolbar->reConnectController(_vcr_ctrl); - -} - -void DicomImageView::initCineModeThread() -{ - _vcr_ctrl = new pqVCRController(nullptr, this); - _vcr_ctrl->moveToThread(&_thread); - connect(&_thread, &QThread::finished, _vcr_ctrl, &QObject::deleteLater); - _thread.start(); - isCine = true; -} - - MyTitleBar * DicomImageView::createMyTitleBar() { MyTitleBar *titleBar = new MyTitleBar(this); @@ -120,117 +84,102 @@ MyTitleBar * DicomImageView::createMyTitleBar() return titleBar; } - -void DicomImageView::AddSlice(int step) +void DicomImageView::ToggleNegativeMode() { - if (_ImageViewer == nullptr) - { - return; - } - if (HasSeries()) - { - int curSlice = _ImageViewer->GetSlice() + step; - _ImageViewer->SetSlice(curSlice); - _scrollBar->setValue(curSlice); - } + if (HasSeries()) + { + if (isNegative) + { + _ImageViewer->SetNegativeMode(false); + isNegative = false; + } + else + { + _ImageViewer->SetNegativeMode(true); + isNegative = true; + } + + } } -void DicomImageView::onFirstFrame() +void DicomImageView::initScrollbar() { - if (HasSeries()) { - _scrollBar->setValue(_ImageViewer->GetSliceMin()); - } -} -void DicomImageView::onPreviousFrame() -{ - if (HasSeries()) { - int slice = _ImageViewer->GetSlice(); - slice = slice--; - int min_slice = _ImageViewer->GetSliceMin(); - if (slice < min_slice) - { - slice = _ImageViewer->GetSliceMax(); - } - _scrollBar->setValue(slice); - } -} -void DicomImageView::onNextFrame() -{ - if (HasSeries()) { - int slice = _ImageViewer->GetSlice(); - slice = slice++; - int max_slice = _ImageViewer->GetSliceMax(); - if (slice > max_slice) - { - slice = _ImageViewer->GetSliceMin(); - } - _scrollBar->setValue(slice); - } -} -void DicomImageView::onLastFrame() -{ - if (HasSeries()) { - _scrollBar->setValue(_ImageViewer->GetSliceMax()); - } + //_MinSlice = _ImageViewer->GetSliceMin(); + //_MaxSlice = _ImageViewer->GetSliceMax(); + _scrollBar->setValue(_ImageViewer->GetSliceMin()); + _scrollBar->setMaximum(_ImageViewer->GetSliceMax()); + _scrollBar->setSingleStep(1); + _scrollBar->setVisible(true); } -void DicomImageView::SetSlice(int slice) -{ - if (_ImageViewer == nullptr) - { - return; - } - if (HasSeries()) - { +//NOTE: not working +void DicomImageView::setHighlight(bool yes) { + _titleBar->SetHighlight(yes); - _ImageViewer->SetSlice(slice); - //_ImageViewer->updateCornerInfo(TOP_LEFT); - _scrollBar->setValue(slice); - } } - +//SLOTS------------------------------------------------------------------------ void DicomImageView::Slot_scrollValueChanged(int slice) { - //if the scroll bar is activated by user, emit - //if the scroll bar is activated by program, no emit - switch (_ScrollTriggerType) - { - case(scrollScope::TriggerType::USER_TRIGGER): - { - _ImageViewer->SetSlice(slice); //for interactor style use, reduce duplicate - // no break; - } - case(scrollScope::TriggerType::STYLE_TRIGGER): - { - _ImageViewer->updateCornerInfo(TOP_LEFT); - //invoke event - _SliceStep = slice - _PrevSlice; - _PrevSlice = slice; - //emit Signal_scrollValueChanged(this, slice); - int sliceArray[2]; - sliceArray[0] = slice; - sliceArray[1] = _SliceStep; + //if the scroll bar is activated by user, emit + //if the scroll bar is activated by program, no emit + switch (_ScrollTriggerType) + { + case(scrollScope::TriggerType::USER_TRIGGER): + { + _ImageViewer->SetSlice(slice); //for interactor style use, reduce duplicate + // no break; + } + case(scrollScope::TriggerType::STYLE_TRIGGER): + { + _ImageViewer->updateCornerInfo(TOP_LEFT); + //invoke event + _SliceStep = slice - _PrevSlice; + _PrevSlice = slice; + //emit Signal_scrollValueChanged(this, slice); + int sliceArray[2]; + sliceArray[0] = slice; + sliceArray[1] = _SliceStep; - this->Signal_SyncEvent(this, VTKIS_IMAGE_SLICING, sliceArray); - break; - } - case(scrollScope::TriggerType::SYNC_ONLY): - { - _PrevSlice = slice; - break; - } - default: - break; - } + this->Signal_SyncEvent(this, VTKIS_IMAGE_SLICING, sliceArray); + break; + } + case(scrollScope::TriggerType::SYNC_ONLY): + { + _PrevSlice = slice; + break; + } + default: + break; + } } -void DicomImageView::updateCornerInfoPrivacy() + +void DicomImageView::Slot_ViewEmpty() { - if (HasSeries()) - { - _ImageViewer->updateCornerInfo(TOP_RIGHT); - } + emit Signal_ViewEmpty(this); } + +void DicomImageView::Slot_viewDoubleclicked() +{ + //emit Signal_ViewClicked(this); + emit Signal_viewDoubleclicked(this); +} + +void DicomImageView::Slot_WindowLevelEventForFusion(double level, double width) +{ + if (IsFusion()) { + _ImageViewer->SetFusionColorLeveL(level); + _ImageViewer->SetFusionColorWindow(width); + _ImageViewer->Render(); + } +} + +void DicomImageView::Slot_UpdateOrienInfo(TransFormType operation) +{ + _ImageViewer->updateOrienInfo(operation); +} + +//Widget event---------------------------------------------------------------- void DicomImageView::wheelEvent(QWheelEvent *event) { if (HasSeries()) { @@ -283,26 +232,12 @@ void DicomImageView::wheelEvent(QWheelEvent *event) } } - -void DicomImageView::Slot_ViewEmpty() -{ - emit Signal_ViewEmpty(this); -} - - -////----------------------------------------------------------------------------- void DicomImageView::mousePressEvent(QMouseEvent* event) { emit Signal_ViewClicked(this); } -void DicomImageView::Slot_viewDoubleclicked() -{ - //emit Signal_ViewClicked(this); - emit Signal_viewDoubleclicked(this); -} -//------------------------------------------------------- /** * @brief DicomImageView::dragEnterEvent * 拖拽进入 @@ -314,7 +249,6 @@ void DicomImageView::dragEnterEvent(QDragEnterEvent *e) { } } -//------------------------------------------------------- /** * @brief DicomImageView::dragMoveEvent * 拖拽移动 @@ -326,7 +260,6 @@ void DicomImageView::dragMoveEvent(QDragMoveEvent *e) { } } -//------------------------------------------------------- /** * @brief DicomImageView::dropEvent * 拖拽松开 @@ -344,7 +277,7 @@ void DicomImageView::dropEvent(QDropEvent *e) { } } } -//------------------------------------------------------- + /** * @brief DicomImageView::dragLeaveEvent * 离开事件 @@ -354,167 +287,31 @@ void DicomImageView::dragLeaveEvent(QDragLeaveEvent *) { return; } -void DicomImageView::getWindowLevel(double &level, double &width) +void DicomImageView::resizeEvent(QResizeEvent *event) { - if (HasSeries()) { - //_Series->getWindowLevel(level, width); - level = _ImageViewer->GetColorLevel(); - width = _ImageViewer->GetColorWindow(); - } + //auto size conner info + if (!_ImageViewer) return; + if (_ImageViewer->GetvtkCornerAnnotation()) { + _ImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size())); + _ImageViewer->Render(); + } + if (isCine) { + 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();; + _vcr_toolbar->move(ax, ay); + } } -void DicomImageView::ToggleNegativeMode() -{ - if (HasSeries()) - { - if (isNegative) - { - _ImageViewer->SetNegativeMode(false); - isNegative = false; - } - else - { - _ImageViewer->SetNegativeMode(true); - isNegative = true; - } - - } -} - -void DicomImageView::setWindowLevel(double level, double width) -{ - if (HasSeries()) - { - - _ImageViewer->SetColorLevel(level); - _ImageViewer->SetColorWindow(width); - //You have to call updateConerInfo manually - //only mouse event can rely on callback - _ImageViewer->updateCornerInfo(BOTTOM_RIGHT); - emit Signal_WindowLevelEventForFusion(level, width); - - } -} - -void DicomImageView::initScrollbar() -{ - //_MinSlice = _ImageViewer->GetSliceMin(); - //_MaxSlice = _ImageViewer->GetSliceMax(); - _scrollBar->setValue(_ImageViewer->GetSliceMin()); - _scrollBar->setMaximum(_ImageViewer->GetSliceMax()); - _scrollBar->setSingleStep(1); - _scrollBar->setVisible(true); -} - - - - -void DicomImageView::ResetPanZoom() -{ - if (HasSeries()) - { - //necessary to reset pan - _ImageViewer->GetRenderer()->ResetCamera(); - //necessary to reset zoom - _ImageViewer->GetRenderer()->GetActiveCamera()->SetParallelScale(_Series->GetExtent()); - - } - -} - -void DicomImageView::ClearTransformations() -{ - if (HasSeries()) - { - int slice = _ImageViewer->GetSlice(); - ResetPanZoom(); - - double cameraPosition[3]; - double vup[3]; - _Series->getCameraCfg(vup, cameraPosition); - - //necessary to reset flip and rotate - _ImageViewer->GetRenderer()->GetActiveCamera()->SetPosition(cameraPosition); - _ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(vup); - //avoid black out problem - _ImageViewer->GetRenderer()->ResetCameraClippingRange(); - _ImageViewer->SetSlice(slice); - //Render - _ImageViewer->GetRenderWindow()->Render(); - emit Signal_Transformation(CLEAR); - } -} - -void DicomImageView::HFlip() -{ - if (HasSeries()) { - int slice = _ImageViewer->GetSlice(); - ResetPanZoom(); - //HFlip - //_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0); - _ImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180); - FlipExportHelper::toggleFlip(); - //to avoid black out problem during slicing - //slicing is related with rotation, you have to recalculate to get it right - _ImageViewer->GetRenderer()->ResetCameraClippingRange(); - _ImageViewer->SetSlice(slice); - - _ImageViewer->GetRenderWindow()->Render(); - emit Signal_Transformation(H_FLIP); - } -} - - -void DicomImageView::VFlip() -{ - if (HasSeries()) { - //double scale = _ImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale(); - - int slice = _ImageViewer->GetSlice(); - ResetPanZoom(); - //Method 2: Order matters - _ImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180); - _ImageViewer->GetRenderer()->GetActiveCamera()->Roll(180); - //_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0,-1,0); - FlipExportHelper::toggleFlip(); - //to avoid black out problem during slicing - //slicing is related with rotation, you have to recalculate to get it right - - _ImageViewer->GetRenderer()->ResetCameraClippingRange(); - _ImageViewer->SetSlice(slice); - _ImageViewer->GetRenderWindow()->Render(); - emit Signal_Transformation(V_FLIP); - } - -} -void DicomImageView::Rotate(double angle, TransFormType operation) -{ - if (HasSeries()) { - int slice = _ImageViewer->GetSlice(); - ResetPanZoom(); - _ImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle); - //to avoid black out problem during slicing - //slcing is related with rotation, you have to recalculate to get it right - _ImageViewer->GetRenderer()->ResetCameraClippingRange(); - _ImageViewer->SetSlice(slice); - _ImageViewer->GetRenderWindow()->Render(); - emit Signal_Transformation(operation); - } - -} - - -//NOTE: not working -void DicomImageView::setHighlight(bool yes) { - _titleBar->SetHighlight(yes); - -} +//Fusion about ------------------------------------------------------------- bool DicomImageView::IsFusion() { return _ImageViewer->GetFusion(); } + void DicomImageView::SetFusionInput(DicomImageView *overlay) { _overlay = overlay; @@ -523,7 +320,7 @@ void DicomImageView::SetFusionInput(DicomImageView *overlay) double window; double level; - _overlay->getWindowLevel(level, window); + _overlay->GetWindowLevel(level, window); _ImageViewer->FusionOn(); _overlay->OverlayOn(); @@ -545,15 +342,6 @@ void DicomImageView::SetFusionInput(DicomImageView *overlay) } -void DicomImageView::Slot_WindowLevelEventForFusion(double level, double width) -{ - if (IsFusion()) { - _ImageViewer->SetFusionColorLeveL(level); - _ImageViewer->SetFusionColorWindow(width); - _ImageViewer->Render(); - } -} - void DicomImageView::IncreFusionOpacity(double percent) { if (IsFusion()) { _ImageViewer->IncreFusionOpacity(percent); @@ -561,7 +349,6 @@ void DicomImageView::IncreFusionOpacity(double percent) { } } -//@{ /** * Remove Fusion no matter it is base or overlay */ @@ -598,43 +385,6 @@ void DicomImageView::removeFusion() _overlay->OverlayOff(); } -void DicomImageView::ActiveMeasure(Measure *m) -{ - if (nullptr != _Series) - { - _ImageViewer->ActiveMeasure(m); - } -} - -void DicomImageView::DeleteSelectedMeasure() -{ - if (nullptr != _Series) - { - _ImageViewer->DeleteSelectedMeasure(); - } -} -void DicomImageView::DeleteCurrentSliceMeasure() -{ - if (nullptr != _Series) - { - _ImageViewer->DeleteCurrentSliceMeasure(); - } -} -void DicomImageView::DeleteCurrentSeriesMeasure() -{ - if (nullptr != _Series) - { - _ImageViewer->DeleteCurrentSeriesMeasure(); - } -} -void DicomImageView::removeViewWithMeasure() -{ - _ImageViewer->UnActiveMeasure(); - _ImageViewer->DeleteCurrentSeriesMeasure(); -} - - - void DicomImageView::setDicomImageView(SeriesImageSet *series) { if (!_ImageViewer){ @@ -644,7 +394,7 @@ void DicomImageView::setDicomImageView(SeriesImageSet *series) _ImageViewer->SetupInteractor(m_glrenWin->GetInteractor()); } //series->setVTKOpenGLNativeWidget(this->_glView); - CopyFromSeries(series); + LoadSeries(series); //whenver change instance,set scroll value to zero initScrollbar(); @@ -657,29 +407,12 @@ bool DicomImageView::HasSeries() return _Series ; } -void DicomImageView::Render() +void DicomImageView::LoadSeries(SeriesImageSet *series) { - if (HasSeries()) - { - if (_ImageViewer->GetvtkCornerAnnotation()) { - _ImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size())); - } - _ImageViewer->Render(); - } - -} - - -void DicomImageView::CopyFromSeries(SeriesImageSet *series) -{ - _Series = series; - _ImageViewer->SetInputData(_Series->GetData()); _ImageViewer->initCornerInfo(series->GetProperty()); _ImageViewer->setUpImageViewer(); - - //以下是一些转接函数 //TODO: 考虑使用connect 替代 AddObserver,避免出现多种事件机制架构 connect(_ImageViewer->GetSignalRaiser(),&vtkSignalRaiser::raiseEvent, this, &DicomImageView::syncEventFunc); @@ -698,8 +431,6 @@ void DicomImageView::updateWindowLevelCb(vtkObject*caller, unsigned long eid, vo emit Signal_WindowLevelEventForFusion(_ImageViewer->GetColorLevel(), _ImageViewer->GetColorWindow()); } - - void DicomImageView::scalarEventCb(vtkObject* sender, unsigned long eventId, void* calldata) { double* r = (double*)calldata; @@ -719,6 +450,7 @@ void DicomImageView::scalarEventCb(vtkObject* sender, unsigned long eventId, voi break; } } + void DicomImageView::doubleclickedEventCb(vtkObject* sender, unsigned long eventId, void* calldata) { emit Signal_viewDoubleclicked(this); } @@ -781,14 +513,6 @@ int DicomImageView::getSeriesNumber() return -1; } -void DicomImageView::updateCornerInfoAll() -{ - if (HasSeries()) - { - _ImageViewer->updateCornerInfoAll(); - } -} - void DicomImageView::ShowMetaData() { @@ -813,25 +537,47 @@ void DicomImageView::ShowMetaData() } } -void DicomImageView::resizeEvent(QResizeEvent *event) -{ - //auto size conner info - if (!_ImageViewer) return; - if (_ImageViewer->GetvtkCornerAnnotation()) { - _ImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size())); - _ImageViewer->Render(); - } - if (isCine) - { - //if (_vcr_toolbar->isVisible()) - //we see the mountains as moutains,hh - { - 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();; - _vcr_toolbar->move(ax, ay); - } - } +//--view about-------------------------------------------------------------------------------------- +void DicomImageView::Render() +{ + if (HasSeries()) + { + if (_ImageViewer->GetvtkCornerAnnotation()) { + _ImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size())); + } + _ImageViewer->Render(); + } + +} + +void DicomImageView::SetSlice(int slice) +{ + if (_ImageViewer == nullptr) + { + return; + } + if (HasSeries()) + { + + _ImageViewer->SetSlice(slice); + //_ImageViewer->updateCornerInfo(TOP_LEFT); + _scrollBar->setValue(slice); + } +} + +void DicomImageView::AddSlice(int step) +{ + if (_ImageViewer == nullptr) + { + return; + } + if (HasSeries()) + { + int curSlice = _ImageViewer->GetSlice() + step; + _ImageViewer->SetSlice(curSlice); + _scrollBar->setValue(curSlice); + } } void DicomImageView::SetZoomScale(double scale) @@ -853,8 +599,243 @@ void DicomImageView::SetPanOffset(double * pan) } } - -void DicomImageView::Slot_UpdateOrienInfo(TransFormType operation) +void DicomImageView::ResetPanZoom() { - _ImageViewer->updateOrienInfo(operation); + if (HasSeries()) + { + //necessary to reset pan + _ImageViewer->GetRenderer()->ResetCamera(); + //necessary to reset zoom + _ImageViewer->GetRenderer()->GetActiveCamera()->SetParallelScale(_Series->GetExtent()); + + } +} + +void DicomImageView::SetWindowLevel(double level, double width) +{ + if (HasSeries()) + { + + _ImageViewer->SetColorLevel(level); + _ImageViewer->SetColorWindow(width); + //You have to call updateConerInfo manually + //only mouse event can rely on callback + _ImageViewer->updateCornerInfo(BOTTOM_RIGHT); + emit Signal_WindowLevelEventForFusion(level, width); + + } +} + +void DicomImageView::HFlip() +{ + if (HasSeries()) { + int slice = _ImageViewer->GetSlice(); + ResetPanZoom(); + //HFlip + //_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0); + _ImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180); + FlipExportHelper::toggleFlip(); + //to avoid black out problem during slicing + //slicing is related with rotation, you have to recalculate to get it right + _ImageViewer->GetRenderer()->ResetCameraClippingRange(); + _ImageViewer->SetSlice(slice); + + _ImageViewer->GetRenderWindow()->Render(); + emit Signal_Transformation(H_FLIP); + } +} + +void DicomImageView::VFlip() +{ + if (HasSeries()) { + //double scale = _ImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale(); + + int slice = _ImageViewer->GetSlice(); + ResetPanZoom(); + //Method 2: Order matters + _ImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180); + _ImageViewer->GetRenderer()->GetActiveCamera()->Roll(180); + //_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0,-1,0); + FlipExportHelper::toggleFlip(); + //to avoid black out problem during slicing + //slicing is related with rotation, you have to recalculate to get it right + + _ImageViewer->GetRenderer()->ResetCameraClippingRange(); + _ImageViewer->SetSlice(slice); + _ImageViewer->GetRenderWindow()->Render(); + emit Signal_Transformation(V_FLIP); + } + +} + +void DicomImageView::Rotate(double angle, TransFormType operation) +{ + if (HasSeries()) { + int slice = _ImageViewer->GetSlice(); + ResetPanZoom(); + _ImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle); + //to avoid black out problem during slicing + //slcing is related with rotation, you have to recalculate to get it right + _ImageViewer->GetRenderer()->ResetCameraClippingRange(); + _ImageViewer->SetSlice(slice); + _ImageViewer->GetRenderWindow()->Render(); + emit Signal_Transformation(operation); + } + +} + +void DicomImageView::ClearTransformations() +{ + if (HasSeries()) + { + int slice = _ImageViewer->GetSlice(); + ResetPanZoom(); + + double cameraPosition[3]; + double vup[3]; + _Series->getCameraCfg(vup, cameraPosition); + + //necessary to reset flip and rotate + _ImageViewer->GetRenderer()->GetActiveCamera()->SetPosition(cameraPosition); + _ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(vup); + //avoid black out problem + _ImageViewer->GetRenderer()->ResetCameraClippingRange(); + _ImageViewer->SetSlice(slice); + //Render + _ImageViewer->GetRenderWindow()->Render(); + emit Signal_Transformation(CLEAR); + } +} + +void DicomImageView::updateCornerInfoAll() +{ + if (HasSeries()) + { + _ImageViewer->updateCornerInfoAll(); + } +} + +void DicomImageView::updateCornerInfoPrivacy() +{ + if (HasSeries()) + { + _ImageViewer->updateCornerInfo(TOP_RIGHT); + } +} + +//--VCR about------------------------------------------------------------------ +bool DicomImageView::isVCRVisible() +{ + if (!_vcr_toolbar) return false; + return _vcr_toolbar->isVisible(); +} + +void DicomImageView::setVCRVisible(bool visible) +{ + if (!_vcr_toolbar) return ; + _vcr_toolbar->setVisible(visible); +} + +void DicomImageView::cineModeOn() +{ + if (!_vcr_toolbar) return; + //updateVCRToolbarPos(); + 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(); + _vcr_toolbar->move(ax, ay); + + _vcr_toolbar->show(); + this->initCineModeThread(); + _vcr_toolbar->reConnectController(_vcr_ctrl); + +} + +void DicomImageView::initCineModeThread() +{ + _vcr_ctrl = new pqVCRController(nullptr, this); + _vcr_ctrl->moveToThread(&_thread); + connect(&_thread, &QThread::finished, _vcr_ctrl, &QObject::deleteLater); + _thread.start(); + isCine = true; +} + +void DicomImageView::onFirstFrame() +{ + if (HasSeries()) { + _scrollBar->setValue(_ImageViewer->GetSliceMin()); + } +} + +void DicomImageView::onPreviousFrame() +{ + if (HasSeries()) { + int slice = _ImageViewer->GetSlice(); + slice = slice--; + int min_slice = _ImageViewer->GetSliceMin(); + if (slice < min_slice) + { + slice = _ImageViewer->GetSliceMax(); + } + _scrollBar->setValue(slice); + } +} + +void DicomImageView::onNextFrame() +{ + if (HasSeries()) { + int slice = _ImageViewer->GetSlice(); + slice = slice++; + int max_slice = _ImageViewer->GetSliceMax(); + if (slice > max_slice) + { + slice = _ImageViewer->GetSliceMin(); + } + _scrollBar->setValue(slice); + } +} + +void DicomImageView::onLastFrame() +{ + if (HasSeries()) { + _scrollBar->setValue(_ImageViewer->GetSliceMax()); + } +} + +//-- Measure about-------------------------------------------------------------------------------------- +void DicomImageView::ActiveMeasure(Measure *m) +{ + if (nullptr != _Series) + { + _ImageViewer->ActiveMeasure(m); + } +} + +void DicomImageView::DeleteSelectedMeasure() +{ + if (nullptr != _Series) + { + _ImageViewer->DeleteSelectedMeasure(); + } +} + +void DicomImageView::DeleteCurrentSliceMeasure() +{ + if (nullptr != _Series) + { + _ImageViewer->DeleteCurrentSliceMeasure(); + } +} + +void DicomImageView::DeleteCurrentSeriesMeasure() +{ + if (nullptr != _Series) + { + _ImageViewer->DeleteCurrentSeriesMeasure(); + } +} + +void DicomImageView::removeViewWithMeasure() +{ + _ImageViewer->UnActiveMeasure(); + _ImageViewer->DeleteCurrentSeriesMeasure(); } \ No newline at end of file diff --git a/src/src/view/dicomimageview.h b/src/src/view/dicomimageview.h index 6655868..5700e12 100644 --- a/src/src/view/dicomimageview.h +++ b/src/src/view/dicomimageview.h @@ -68,8 +68,8 @@ public: void updateCornerInfoPrivacy(); //Window level - void getWindowLevel(double &level, double &width); - void setWindowLevel(double level, double width); + void GetWindowLevel(double &level, double &width); + void SetWindowLevel(double level, double width); //Transformation void ClearTransformations(); @@ -208,7 +208,7 @@ private: void ResetPanZoom(); void initScrollbar(); - void CopyFromSeries(SeriesImageSet *series); + void LoadSeries(SeriesImageSet *series); vtkSmartPointer m_glrenWin; diff --git a/src/src/view/subview/customwindow.cpp b/src/src/view/subview/customwindow.cpp index 706eaa4..8117dc4 100644 --- a/src/src/view/subview/customwindow.cpp +++ b/src/src/view/subview/customwindow.cpp @@ -30,7 +30,7 @@ void Customwindow::setCurrentView(DicomImageView *cur) } double width = 0; double level = 0; - m_curV->getWindowLevel(level, width); + m_curV->GetWindowLevel(level, width); ui.led_WL->setText(QString("%1").arg(level)); ui.led_WW->setText(QString("%1").arg(width)); } @@ -38,6 +38,6 @@ void Customwindow::setCurrentView(DicomImageView *cur) void Customwindow::onBtnOKClicked() { - m_curV->setWindowLevel(ui.led_WL->text().toDouble(), ui.led_WW->text().toDouble()); + m_curV->SetWindowLevel(ui.led_WL->text().toDouble(), ui.led_WW->text().toDouble()); this->close(); } \ No newline at end of file diff --git a/src/src/view/viewcontainerwidget.cpp b/src/src/view/viewcontainerwidget.cpp index 399f2d6..f6b1fb6 100644 --- a/src/src/view/viewcontainerwidget.cpp +++ b/src/src/view/viewcontainerwidget.cpp @@ -164,7 +164,7 @@ void ViewContainerWidget::Slot_SyncEvent(DicomImageView *view, int interactionMo { double *d = (double *)calldata; printf("EndWindowLevel, scale param:%f,%f \r\n", d[0], d[1]); - v->setWindowLevel(d[1], d[0]); + v->SetWindowLevel(d[1], d[0]); } } }