Refactor dicomimageview. Change SyncScrollBar by use SetValueSilently function.
This commit is contained in:
@@ -28,8 +28,8 @@ DicomImageView::DicomImageView(QWidget* parent)
|
|||||||
QGridLayout *view_layout = new QGridLayout(this);
|
QGridLayout *view_layout = new QGridLayout(this);
|
||||||
|
|
||||||
//add container and title bar
|
//add container and title bar
|
||||||
_titleBar = createMyTitleBar();
|
mTitleBar = createMyTitleBar();
|
||||||
view_layout->addWidget(_titleBar, 0, 0);
|
view_layout->addWidget(mTitleBar, 0, 0);
|
||||||
view_layout->addWidget(wrapper, 1, 0);
|
view_layout->addWidget(wrapper, 1, 0);
|
||||||
view_layout->setContentsMargins(0, 0, 0, 0);
|
view_layout->setContentsMargins(0, 0, 0, 0);
|
||||||
view_layout->setSpacing(0);
|
view_layout->setSpacing(0);
|
||||||
@@ -37,20 +37,21 @@ DicomImageView::DicomImageView(QWidget* parent)
|
|||||||
|
|
||||||
// create layout for main container
|
// create layout for main container
|
||||||
QGridLayout* controlLayout = new QGridLayout(wrapper);
|
QGridLayout* controlLayout = new QGridLayout(wrapper);
|
||||||
_glWidt = new QVTKOpenGLNativeWidget(wrapper);
|
mGLWidget = new QVTKOpenGLNativeWidget(wrapper);
|
||||||
|
|
||||||
//add QVTKOpenGLNativeWidget to container
|
//add QVTKOpenGLNativeWidget to container
|
||||||
m_glrenWin = vtkSmartPointer <vtkGenericOpenGLRenderWindow>::New();
|
mGLRenWin = vtkSmartPointer <vtkGenericOpenGLRenderWindow>::New();
|
||||||
_glWidt->SetRenderWindow(m_glrenWin);//set up interacte
|
mGLWidget->SetRenderWindow(mGLRenWin);//set up interacte
|
||||||
controlLayout->addWidget(_glWidt, 0, 0);
|
controlLayout->addWidget(mGLWidget, 0, 0);
|
||||||
|
|
||||||
//add scrollbar to container
|
//add scrollbar to container
|
||||||
_scrollBar = new ClickableScrollBar(Qt::Orientation::Vertical, this);
|
mScrollBar = new ClickableScrollBar(Qt::Orientation::Vertical, this);
|
||||||
_scrollBar->setFocusPolicy(Qt::StrongFocus);
|
mScrollBar->setSingleStep(1);
|
||||||
_scrollBar->setVisible(false);
|
mScrollBar->setFocusPolicy(Qt::StrongFocus);
|
||||||
_scrollBar->setObjectName("scrollbar");
|
mScrollBar->setVisible(false);
|
||||||
controlLayout->addWidget(_scrollBar, 0, 1);
|
mScrollBar->setObjectName("scrollbar");
|
||||||
connect(_scrollBar, &ClickableScrollBar::clicked,this,&DicomImageView::viewerClicked);
|
controlLayout->addWidget(mScrollBar, 0, 1);
|
||||||
|
connect(mScrollBar, &ClickableScrollBar::clicked, this, &DicomImageView::viewerClicked);
|
||||||
|
|
||||||
//config container UI
|
//config container UI
|
||||||
controlLayout->setContentsMargins(0, 0, 0, 0);
|
controlLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
@@ -66,14 +67,14 @@ DicomImageView::DicomImageView(QWidget* parent)
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
DicomImageView::~DicomImageView()
|
DicomImageView::~DicomImageView()
|
||||||
{
|
{
|
||||||
if (_ImageViewer){
|
if (mImageViewer){
|
||||||
_ImageViewer->Delete();
|
mImageViewer->Delete();
|
||||||
_ImageViewer = nullptr;
|
mImageViewer = nullptr;
|
||||||
}
|
}
|
||||||
_thread.quit();//event loop
|
mVcrControlThread.quit();//event loop
|
||||||
_thread.wait(); //wait until return,block mode
|
mVcrControlThread.wait(); //wait until return,block mode
|
||||||
if (_vcr_toolbar){
|
if (mVcrToolbar){
|
||||||
_vcr_toolbar->deleteLater();
|
mVcrToolbar->deleteLater();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,50 +88,23 @@ MyTitleBar * DicomImageView::createMyTitleBar()
|
|||||||
|
|
||||||
void DicomImageView::initScrollbar()
|
void DicomImageView::initScrollbar()
|
||||||
{
|
{
|
||||||
//_MinSlice = _ImageViewer->GetSliceMin();
|
//_MinSlice = mImageViewer->GetSliceMin();
|
||||||
//_MaxSlice = _ImageViewer->GetSliceMax();
|
//_MaxSlice = mImageViewer->GetSliceMax();
|
||||||
_scrollBar->setValue(_ImageViewer->GetSliceMin());
|
mScrollBar->setValue(mImageViewer->GetSliceMin());
|
||||||
_scrollBar->setMaximum(_ImageViewer->GetSliceMax());
|
mScrollBar->setMaximum(mImageViewer->GetSliceMax());
|
||||||
_scrollBar->setSingleStep(1);
|
mScrollBar->setSingleStep(1);
|
||||||
_scrollBar->setVisible(true);
|
mScrollBar->setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//NOTE: not working
|
//NOTE: not working
|
||||||
void DicomImageView::setHighlight(bool yes) {
|
void DicomImageView::setHighlight(bool yes) {
|
||||||
_titleBar->SetHighlight(yes);
|
mTitleBar->SetHighlight(yes);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//SLOTS------------------------------------------------------------------------
|
//SLOTS------------------------------------------------------------------------
|
||||||
void DicomImageView::Slot_scrollValueChanged(int slice)
|
void DicomImageView::Slot_scrollValueChanged(int slice)
|
||||||
{
|
{
|
||||||
//if the scroll bar is activated by user, emit
|
mImageViewer->SetSlice(slice);
|
||||||
//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):
|
|
||||||
{
|
|
||||||
qDebug()<<"======>>";
|
|
||||||
_ImageViewer->updateCornerInfo(TOP_LEFT);
|
|
||||||
//invoke event
|
|
||||||
double focusPoint[3] = {.0, .0, .0};
|
|
||||||
_ImageViewer->GetSlicePoint(focusPoint);
|
|
||||||
this->Signal_SyncEvent(this, VTKIS_IMAGE_SLICING, focusPoint);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case(scrollScope::TriggerType::SYNC_ONLY):
|
|
||||||
{
|
|
||||||
_PrevSlice = slice;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::Slot_ViewEmpty()
|
void DicomImageView::Slot_ViewEmpty()
|
||||||
@@ -146,37 +120,37 @@ void DicomImageView::Slot_viewDoubleclicked()
|
|||||||
void DicomImageView::Slot_WindowLevelEventForFusion(double level, double width)
|
void DicomImageView::Slot_WindowLevelEventForFusion(double level, double width)
|
||||||
{
|
{
|
||||||
if (IsFusion()) {
|
if (IsFusion()) {
|
||||||
_ImageViewer->SetFusionColorLeveL(level);
|
mImageViewer->SetFusionColorLeveL(level);
|
||||||
_ImageViewer->SetFusionColorWindow(width);
|
mImageViewer->SetFusionColorWindow(width);
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::Slot_Transformation()
|
void DicomImageView::Slot_Transformation()
|
||||||
{
|
{
|
||||||
_ImageViewer->updateOrienInfo();
|
mImageViewer->updateOrienInfo();
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Widget event----------------------------------------------------------------
|
//Widget event----------------------------------------------------------------
|
||||||
void DicomImageView::wheelEvent(QWheelEvent *event)
|
void DicomImageView::wheelEvent(QWheelEvent *event)
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int _Slice = _ImageViewer->GetSlice();
|
int _Slice = mImageViewer->GetSlice();
|
||||||
int _MinSlice = _ImageViewer->GetSliceMin();
|
int _MinSlice = mImageViewer->GetSliceMin();
|
||||||
int _MaxSlice = _ImageViewer->GetSliceMax();
|
int _MaxSlice = mImageViewer->GetSliceMax();
|
||||||
|
|
||||||
if (event->delta() > 0)
|
if (event->delta() > 0)
|
||||||
{
|
{
|
||||||
if (_Slice > _MinSlice)
|
if (_Slice > _MinSlice)
|
||||||
{
|
{
|
||||||
_Slice -= 1;
|
_Slice -= 1;
|
||||||
_scrollBar->setValue(_Slice);
|
mImageViewer->SetSlice(_Slice);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_Slice = _MinSlice;
|
_Slice = _MinSlice;
|
||||||
_scrollBar->setValue(_Slice);
|
mImageViewer->SetSlice(_Slice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -184,12 +158,12 @@ void DicomImageView::wheelEvent(QWheelEvent *event)
|
|||||||
if (_Slice < _MaxSlice)
|
if (_Slice < _MaxSlice)
|
||||||
{
|
{
|
||||||
_Slice += 1;
|
_Slice += 1;
|
||||||
_scrollBar->setValue(_Slice);
|
mImageViewer->SetSlice(_Slice);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_Slice = _MaxSlice;
|
_Slice = _MaxSlice;
|
||||||
_scrollBar->setValue(_Slice);
|
mImageViewer->SetSlice(_Slice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,33 +175,19 @@ void DicomImageView::mousePressEvent(QMouseEvent* event)
|
|||||||
emit Signal_ViewClicked(this);
|
emit Signal_ViewClicked(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// DND support-----------------------------------------------------------------
|
||||||
* @brief DicomImageView::dragEnterEvent
|
|
||||||
* 拖拽进入
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
void DicomImageView::dragEnterEvent(QDragEnterEvent *e) {
|
void DicomImageView::dragEnterEvent(QDragEnterEvent *e) {
|
||||||
if (e->mimeData()->hasFormat("text/plain")) {
|
if (e->mimeData()->hasFormat("text/plain")) {
|
||||||
e->acceptProposedAction();
|
e->acceptProposedAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DicomImageView::dragMoveEvent
|
|
||||||
* 拖拽移动
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
void DicomImageView::dragMoveEvent(QDragMoveEvent *e) {
|
void DicomImageView::dragMoveEvent(QDragMoveEvent *e) {
|
||||||
if (e->mimeData()->hasFormat("text/plain")) {
|
if (e->mimeData()->hasFormat("text/plain")) {
|
||||||
e->acceptProposedAction();
|
e->acceptProposedAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DicomImageView::dropEvent
|
|
||||||
* 拖拽松开
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
void DicomImageView::dropEvent(QDropEvent *e) {
|
void DicomImageView::dropEvent(QDropEvent *e) {
|
||||||
if (e->mimeData()->hasFormat("text/plain")) {
|
if (e->mimeData()->hasFormat("text/plain")) {
|
||||||
e->acceptProposedAction();
|
e->acceptProposedAction();
|
||||||
@@ -239,29 +199,25 @@ void DicomImageView::dropEvent(QDropEvent *e) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DicomImageView::dragLeaveEvent
|
|
||||||
* 离开事件
|
|
||||||
* @param e
|
|
||||||
*/
|
|
||||||
void DicomImageView::dragLeaveEvent(QDragLeaveEvent *) {
|
void DicomImageView::dragLeaveEvent(QDragLeaveEvent *) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// layout resize---------------------------------------------------------------
|
||||||
void DicomImageView::resizeEvent(QResizeEvent *event)
|
void DicomImageView::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
//auto size conner info
|
//auto size conner info
|
||||||
if (!_ImageViewer) return;
|
if (!mImageViewer) return;
|
||||||
if (_ImageViewer->GetvtkCornerAnnotation()) {
|
if (mImageViewer->GetvtkCornerAnnotation()) {
|
||||||
_ImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
|
mImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
if (isCine) {
|
if (mIsCine) {
|
||||||
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 +
|
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 +
|
||||||
VCRHelper::getVCRXOffset();
|
VCRHelper::getVCRXOffset();
|
||||||
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 +
|
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 +
|
||||||
VCRHelper::getVCRYOffset();
|
VCRHelper::getVCRYOffset();
|
||||||
_vcr_toolbar->move(ax, ay);
|
mVcrToolbar->move(ax, ay);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -269,28 +225,28 @@ void DicomImageView::resizeEvent(QResizeEvent *event)
|
|||||||
//Fusion about -------------------------------------------------------------
|
//Fusion about -------------------------------------------------------------
|
||||||
bool DicomImageView::IsFusion()
|
bool DicomImageView::IsFusion()
|
||||||
{
|
{
|
||||||
return _ImageViewer->GetFusion();
|
return mImageViewer->GetFusion();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::SetFusionInput(DicomImageView *overlay)
|
void DicomImageView::SetFusionInput(DicomImageView *overlay)
|
||||||
{
|
{
|
||||||
_overlay = overlay;
|
mOverlayView = overlay;
|
||||||
|
|
||||||
vtkImageData *overlay_data = _overlay->getSeriesInstance()->GetData();
|
vtkImageData *overlay_data = mOverlayView->getSeriesInstance()->GetData();
|
||||||
|
|
||||||
double window;
|
double window;
|
||||||
double level;
|
double level;
|
||||||
_overlay->GetWindowLevel(level, window);
|
mOverlayView->GetWindowLevel(level, window);
|
||||||
|
|
||||||
_ImageViewer->FusionOn();
|
mImageViewer->FusionOn();
|
||||||
_overlay->OverlayOn();
|
mOverlayView->OverlayOn();
|
||||||
_overlay->SetBaseView(this);
|
mOverlayView->SetBaseView(this);
|
||||||
|
|
||||||
_ImageViewer->SetFusionInputData(overlay_data);
|
mImageViewer->SetFusionInputData(overlay_data);
|
||||||
_ImageViewer->SetFusionColorLeveL(level);
|
mImageViewer->SetFusionColorLeveL(level);
|
||||||
_ImageViewer->SetFusionColorWindow(window);
|
mImageViewer->SetFusionColorWindow(window);
|
||||||
_ImageViewer->SetFusionOpacity(_ImageViewer->GetFusionOpacity());
|
mImageViewer->SetFusionOpacity(mImageViewer->GetFusionOpacity());
|
||||||
|
|
||||||
// Example for vtkDiscretizableColorTransferFunction
|
// Example for vtkDiscretizableColorTransferFunction
|
||||||
vtkNew< vtkDiscretizableColorTransferFunction> table;
|
vtkNew< vtkDiscretizableColorTransferFunction> table;
|
||||||
@@ -299,14 +255,14 @@ void DicomImageView::SetFusionInput(DicomImageView *overlay)
|
|||||||
table->AddRGBPoint(0.33, 1.0, 0.0, 0.0);
|
table->AddRGBPoint(0.33, 1.0, 0.0, 0.0);
|
||||||
table->AddRGBPoint(0.66, 1.0, 1.0, 0.0);
|
table->AddRGBPoint(0.66, 1.0, 1.0, 0.0);
|
||||||
table->AddRGBPoint(1.0, 1.0, 1.0, 1.0);
|
table->AddRGBPoint(1.0, 1.0, 1.0, 1.0);
|
||||||
_ImageViewer->SetFusionColorTable(table);
|
mImageViewer->SetFusionColorTable(table);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::SetFusionOpacity(double percent) {
|
void DicomImageView::SetFusionOpacity(double percent) {
|
||||||
if (IsFusion()) {
|
if (IsFusion()) {
|
||||||
_ImageViewer->IncreFusionOpacity(percent);
|
mImageViewer->IncreFusionOpacity(percent);
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,21 +274,21 @@ void DicomImageView::removeViewWithFusion()
|
|||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
if (IsFusion()) {
|
if (IsFusion()) {
|
||||||
disconnect(_overlay, &DicomImageView::Signal_WindowLevelEventForFusion,
|
disconnect(mOverlayView, &DicomImageView::Signal_WindowLevelEventForFusion,
|
||||||
this, &DicomImageView::Slot_WindowLevelEventForFusion);
|
this, &DicomImageView::Slot_WindowLevelEventForFusion);
|
||||||
|
|
||||||
this->removeFusion();
|
this->removeFusion();
|
||||||
_overlay->SetBaseView(nullptr);
|
mOverlayView->SetBaseView(nullptr);
|
||||||
_overlay = nullptr;
|
mOverlayView = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsOverlay()) {
|
if (IsOverlay()) {
|
||||||
disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion,
|
disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion,
|
||||||
_base, &DicomImageView::Slot_WindowLevelEventForFusion);
|
mBaseView, &DicomImageView::Slot_WindowLevelEventForFusion);
|
||||||
|
|
||||||
_base->removeFusion();
|
mBaseView->removeFusion();
|
||||||
_base->SetOverlayView(nullptr);
|
mBaseView->SetOverlayView(nullptr);
|
||||||
_base = nullptr;
|
mBaseView = nullptr;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -340,50 +296,50 @@ void DicomImageView::removeViewWithFusion()
|
|||||||
|
|
||||||
void DicomImageView::removeFusion()
|
void DicomImageView::removeFusion()
|
||||||
{
|
{
|
||||||
_ImageViewer->RemoveFusionData();
|
mImageViewer->RemoveFusionData();
|
||||||
_ImageViewer->FusionOff();
|
mImageViewer->FusionOff();
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
_overlay->OverlayOff();
|
mOverlayView->OverlayOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::setDicomImageView(SeriesImageSet *series)
|
void DicomImageView::setDicomImageView(SeriesImageSet *series)
|
||||||
{
|
{
|
||||||
if (!_ImageViewer){
|
if (!mImageViewer){
|
||||||
|
|
||||||
_ImageViewer = infinitiViewer::New();
|
mImageViewer = infinitiViewer::New();
|
||||||
_ImageViewer->SetRenderWindow(m_glrenWin);
|
mImageViewer->SetRenderWindow(mGLRenWin);
|
||||||
_ImageViewer->SetupInteractor(m_glrenWin->GetInteractor());
|
mImageViewer->SetupInteractor(mGLRenWin->GetInteractor());
|
||||||
}
|
}
|
||||||
//series->setVTKOpenGLNativeWidget(this->_glView);
|
//series->setVTKOpenGLNativeWidget(this->_glView);
|
||||||
LoadSeries(series);
|
LoadSeries(series);
|
||||||
//whenver change instance,set scroll value to zero
|
//whenver change instance,set scroll value to zero
|
||||||
initScrollbar();
|
initScrollbar();
|
||||||
if (!slotInited){
|
if (!mIsSlotInited){
|
||||||
connect(_scrollBar, &QScrollBar::valueChanged, this, &DicomImageView::Slot_scrollValueChanged);
|
connect(mScrollBar, &QScrollBar::valueChanged, this, &DicomImageView::Slot_scrollValueChanged);
|
||||||
connect(this, &DicomImageView::Signal_Transformation, this, &DicomImageView::Slot_Transformation);
|
connect(this, &DicomImageView::Signal_Transformation, this, &DicomImageView::Slot_Transformation);
|
||||||
slotInited = true;
|
mIsSlotInited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DicomImageView::HasSeries()
|
bool DicomImageView::HasSeries()
|
||||||
{
|
{
|
||||||
return _Series ;
|
return mSeries ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::LoadSeries(SeriesImageSet *series)
|
void DicomImageView::LoadSeries(SeriesImageSet *series)
|
||||||
{
|
{
|
||||||
_Series = series;
|
mSeries = series;
|
||||||
_ImageViewer->SetInputData(_Series->GetData());
|
mImageViewer->SetInputData(mSeries->GetData());
|
||||||
_ImageViewer->initCornerInfo(series->GetProperty());
|
mImageViewer->initCornerInfo(series->GetProperty());
|
||||||
_ImageViewer->setUpImageViewer();
|
mImageViewer->setUpImageViewer();
|
||||||
_ImageViewer->updateOrienInfo();
|
mImageViewer->updateOrienInfo();
|
||||||
//以下是一些转接函数
|
//以下是一些转接函数
|
||||||
//使用connect 替代 AddObserver,避免出现多种事件机制架构
|
//使用connect 替代 AddObserver,避免出现多种事件机制架构
|
||||||
connect(_ImageViewer->GetSignalRaiser(),&vtkSignalRaiser::raiseEvent, this, &DicomImageView::syncEventFunc);
|
connect(mImageViewer->GetSignalRaiser(),&vtkSignalRaiser::raiseEvent, this, &DicomImageView::syncEventFunc);
|
||||||
//目前 替换了一部分包括SlicedEvent,EndDollyEvent,EndWindowLevelEvent,EndPanEvent,主要关联到sync
|
//目前 替换了一部分包括SlicedEvent,EndDollyEvent,EndWindowLevelEvent,EndPanEvent,主要关联到sync
|
||||||
|
|
||||||
ActorDraggableInteractorStyle *style = _ImageViewer->GetInteractorStyle();
|
ActorDraggableInteractorStyle *style = mImageViewer->GetInteractorStyle();
|
||||||
style->AddObserver(ActorDraggableInteractorStyle::AfterViewerClicked, this, &DicomImageView::viewerClicked);
|
style->AddObserver(ActorDraggableInteractorStyle::AfterViewerClicked, this, &DicomImageView::viewerClicked);
|
||||||
style->AddObserver(vtkCommand::EventIds::WindowLevelEvent, this, &DicomImageView::updateWindowLevelCb);
|
style->AddObserver(vtkCommand::EventIds::WindowLevelEvent, this, &DicomImageView::updateWindowLevelCb);
|
||||||
style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb);
|
style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb);
|
||||||
@@ -394,8 +350,8 @@ void DicomImageView::LoadSeries(SeriesImageSet *series)
|
|||||||
//Callbacks------------------------------------------------------------------------------------
|
//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);
|
mImageViewer->updateCornerInfo(BOTTOM_RIGHT);
|
||||||
emit Signal_WindowLevelEventForFusion(_ImageViewer->GetColorLevel(), _ImageViewer->GetColorWindow());
|
emit Signal_WindowLevelEventForFusion(mImageViewer->GetColorLevel(), mImageViewer->GetColorWindow());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::scalarEventCb(vtkObject* sender, unsigned long eventId, void* calldata)
|
void DicomImageView::scalarEventCb(vtkObject* sender, unsigned long eventId, void* calldata)
|
||||||
@@ -405,7 +361,7 @@ void DicomImageView::scalarEventCb(vtkObject* sender, unsigned long eventId, voi
|
|||||||
{
|
{
|
||||||
case(ActorDraggableInteractorStyle::ScalarShiftEvent):
|
case(ActorDraggableInteractorStyle::ScalarShiftEvent):
|
||||||
qDebug() << "ScalarShiftEvent";
|
qDebug() << "ScalarShiftEvent";
|
||||||
_ImageViewer->SwitchToNextPreset();
|
mImageViewer->SwitchToNextPreset();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case(ActorDraggableInteractorStyle::ScalarOpacityEvent):
|
case(ActorDraggableInteractorStyle::ScalarOpacityEvent):
|
||||||
@@ -439,9 +395,14 @@ void DicomImageView::syncEventFunc(vtkObject* caller, unsigned long eid, void *c
|
|||||||
case(ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):
|
case(ActorDraggableInteractorStyle::DraggableStyleEvents::EndDollyEvent):
|
||||||
this->Signal_SyncEvent(this, VTKIS_IMAGE_ZOOM, calldata);
|
this->Signal_SyncEvent(this, VTKIS_IMAGE_ZOOM, calldata);
|
||||||
break;
|
break;
|
||||||
case(ActorDraggableInteractorStyle::DraggableStyleEvents::SlicedEvent):
|
case(ActorDraggableInteractorStyle::DraggableStyleEvents::SlicedEvent):{
|
||||||
_scrollBar->setValue(r[0]);
|
mScrollBar->SetValueSilently(r[0]);
|
||||||
break;
|
//invoke event
|
||||||
|
double focusPoint[3] = {.0, .0, .0};
|
||||||
|
mImageViewer->GetSlicePoint(focusPoint);
|
||||||
|
this->Signal_SyncEvent(this, VTKIS_IMAGE_SLICING, focusPoint);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -453,21 +414,17 @@ void DicomImageView::ResetView()
|
|||||||
{
|
{
|
||||||
removeViewWithFusion();
|
removeViewWithFusion();
|
||||||
removeViewWithMeasure();
|
removeViewWithMeasure();
|
||||||
_ImageViewer->GetRenderer()->RemoveAllViewProps();
|
mImageViewer->GetRenderer()->RemoveAllViewProps();
|
||||||
this->Render();
|
this->Render();
|
||||||
|
|
||||||
_ImageViewer->Delete();
|
mImageViewer->Delete();
|
||||||
_ImageViewer = nullptr;
|
mImageViewer = nullptr;
|
||||||
//don't delete series!!! It's belong to data cache
|
//don't delete series!!! It's belong to data cache
|
||||||
_Series = nullptr;
|
mSeries = nullptr;
|
||||||
|
|
||||||
_ScrollTriggerType = scrollScope::TriggerType::USER_TRIGGER;
|
|
||||||
_PrevSlice = 0;
|
|
||||||
_SliceStep = 0;
|
|
||||||
}
|
}
|
||||||
_scrollBar->setVisible(false);
|
mScrollBar->setVisible(false);
|
||||||
if (isCine)
|
if (mIsCine)
|
||||||
_vcr_toolbar->setVisible(false);
|
mVcrToolbar->setVisible(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -475,7 +432,7 @@ int DicomImageView::getSeriesNumber()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
return _Series->GetSeriesNumber();
|
return mSeries->GetSeriesNumber();
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -483,7 +440,7 @@ int DicomImageView::getSeriesNumber()
|
|||||||
void DicomImageView::ShowMetaData()
|
void DicomImageView::ShowMetaData()
|
||||||
{
|
{
|
||||||
|
|
||||||
QString fileName = QString::fromLatin1(this->_Series->getCurImageName());
|
QString fileName = QString::fromLatin1(this->mSeries->getCurImageName());
|
||||||
if (!fileName.isEmpty()) {
|
if (!fileName.isEmpty()) {
|
||||||
DcmFileFormat dcmFile;
|
DcmFileFormat dcmFile;
|
||||||
if (!dcmFile.loadFile(fileName.toStdString()).good())
|
if (!dcmFile.loadFile(fileName.toStdString()).good())
|
||||||
@@ -510,40 +467,36 @@ void DicomImageView::Render()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
if (_ImageViewer->GetvtkCornerAnnotation()) {
|
if (mImageViewer->GetvtkCornerAnnotation()) {
|
||||||
_ImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
|
mImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
|
||||||
}
|
}
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::SetSlice(int slice)
|
void DicomImageView::SetSlice(int slice)
|
||||||
{
|
{
|
||||||
if (_ImageViewer == nullptr)
|
if (mImageViewer == nullptr)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
|
mImageViewer->SetSlice(slice);
|
||||||
_ImageViewer->SetSlice(slice);
|
|
||||||
//_ImageViewer->updateCornerInfo(TOP_LEFT);
|
|
||||||
_scrollBar->setValue(slice);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::AddSlice(int step)
|
void DicomImageView::AddSlice(int step)
|
||||||
{
|
{
|
||||||
if (_ImageViewer == nullptr)
|
if (mImageViewer == nullptr)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
int curSlice = _ImageViewer->GetSlice() + step;
|
int curSlice = mImageViewer->GetSlice() + step;
|
||||||
_ImageViewer->SetSlice(curSlice);
|
mImageViewer->SetSlice(curSlice);
|
||||||
_scrollBar->setValue(curSlice);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,8 +504,8 @@ void DicomImageView::SetZoomScale(double scale)
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
_ImageViewer->SetZoomScale(scale);
|
mImageViewer->SetZoomScale(scale);
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,8 +514,8 @@ void DicomImageView::SetPanOffset(double * pan)
|
|||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
|
|
||||||
_ImageViewer->SetPanOffset(pan);
|
mImageViewer->SetPanOffset(pan);
|
||||||
_ImageViewer->Render();
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -571,7 +524,7 @@ void DicomImageView::ResetPanZoom()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
_ImageViewer->ResetZoomScaleToFitWindowSize();
|
mImageViewer->ResetZoomScaleToFitWindowSize();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -581,11 +534,11 @@ void DicomImageView::SetWindowLevel(double level, double width)
|
|||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
|
|
||||||
_ImageViewer->SetColorLevel(level);
|
mImageViewer->SetColorLevel(level);
|
||||||
_ImageViewer->SetColorWindow(width);
|
mImageViewer->SetColorWindow(width);
|
||||||
//You have to call updateConerInfo manually
|
//You have to call updateConerInfo manually
|
||||||
//only mouse event can rely on callback
|
//only mouse event can rely on callback
|
||||||
_ImageViewer->updateCornerInfo(BOTTOM_RIGHT);
|
mImageViewer->updateCornerInfo(BOTTOM_RIGHT);
|
||||||
emit Signal_WindowLevelEventForFusion(level, width);
|
emit Signal_WindowLevelEventForFusion(level, width);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -594,8 +547,8 @@ void DicomImageView::SetWindowLevel(double level, double width)
|
|||||||
void DicomImageView::GetWindowLevel(double &level, double &width) {
|
void DicomImageView::GetWindowLevel(double &level, double &width) {
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
level = _ImageViewer->GetColorLevel();
|
level = mImageViewer->GetColorLevel();
|
||||||
width = _ImageViewer->GetColorWindow();
|
width = mImageViewer->GetColorWindow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -603,15 +556,15 @@ void DicomImageView::ToggleNegativeMode()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
if (isNegative)
|
if (mIsNegative)
|
||||||
{
|
{
|
||||||
_ImageViewer->SetNegativeMode(false);
|
mImageViewer->SetNegativeMode(false);
|
||||||
isNegative = false;
|
mIsNegative = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_ImageViewer->SetNegativeMode(true);
|
mImageViewer->SetNegativeMode(true);
|
||||||
isNegative = true;
|
mIsNegative = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -620,17 +573,17 @@ void DicomImageView::ToggleNegativeMode()
|
|||||||
void DicomImageView::HFlip()
|
void DicomImageView::HFlip()
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = mImageViewer->GetSlice();
|
||||||
//HFlip
|
//HFlip
|
||||||
//_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
|
//mImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0, 1, 0);
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
|
mImageViewer->GetRenderer()->GetActiveCamera()->Azimuth(180);
|
||||||
FlipExportHelper::toggleFlip();
|
FlipExportHelper::toggleFlip();
|
||||||
//to avoid black out problem during slicing
|
//to avoid black out problem during slicing
|
||||||
//slicing is related with rotation, you have to recalculate to get it right
|
//slicing is related with rotation, you have to recalculate to get it right
|
||||||
_ImageViewer->GetRenderer()->ResetCameraClippingRange();
|
mImageViewer->GetRenderer()->ResetCameraClippingRange();
|
||||||
_ImageViewer->SetSlice(slice);
|
mImageViewer->SetSlice(slice);
|
||||||
|
|
||||||
_ImageViewer->GetRenderWindow()->Render();
|
mImageViewer->GetRenderWindow()->Render();
|
||||||
emit Signal_Transformation(H_FLIP);
|
emit Signal_Transformation(H_FLIP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -638,20 +591,20 @@ void DicomImageView::HFlip()
|
|||||||
void DicomImageView::VFlip()
|
void DicomImageView::VFlip()
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
//double scale = _ImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
|
//double scale = mImageViewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
|
||||||
|
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = mImageViewer->GetSlice();
|
||||||
//Method 2: Order matters
|
//Method 2: Order matters
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
|
mImageViewer->GetRenderer()->GetActiveCamera()->Elevation(-180);
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
|
mImageViewer->GetRenderer()->GetActiveCamera()->Roll(180);
|
||||||
//_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0,-1,0);
|
//mImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(0,-1,0);
|
||||||
FlipExportHelper::toggleFlip();
|
FlipExportHelper::toggleFlip();
|
||||||
//to avoid black out problem during slicing
|
//to avoid black out problem during slicing
|
||||||
//slicing is related with rotation, you have to recalculate to get it right
|
//slicing is related with rotation, you have to recalculate to get it right
|
||||||
|
|
||||||
_ImageViewer->GetRenderer()->ResetCameraClippingRange();
|
mImageViewer->GetRenderer()->ResetCameraClippingRange();
|
||||||
_ImageViewer->SetSlice(slice);
|
mImageViewer->SetSlice(slice);
|
||||||
_ImageViewer->GetRenderWindow()->Render();
|
mImageViewer->GetRenderWindow()->Render();
|
||||||
emit Signal_Transformation(V_FLIP);
|
emit Signal_Transformation(V_FLIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -660,13 +613,13 @@ void DicomImageView::VFlip()
|
|||||||
void DicomImageView::Rotate(double angle, TransFormType operation)
|
void DicomImageView::Rotate(double angle, TransFormType operation)
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = mImageViewer->GetSlice();
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle);
|
mImageViewer->GetRenderer()->GetActiveCamera()->Roll(angle);
|
||||||
//to avoid black out problem during slicing
|
//to avoid black out problem during slicing
|
||||||
//slcing is related with rotation, you have to recalculate to get it right
|
//slcing is related with rotation, you have to recalculate to get it right
|
||||||
_ImageViewer->GetRenderer()->ResetCameraClippingRange();
|
mImageViewer->GetRenderer()->ResetCameraClippingRange();
|
||||||
_ImageViewer->SetSlice(slice);
|
mImageViewer->SetSlice(slice);
|
||||||
// _ImageViewer->GetRenderWindow()->Render();
|
// mImageViewer->GetRenderWindow()->Render();
|
||||||
emit Signal_Transformation(operation);
|
emit Signal_Transformation(operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -676,21 +629,21 @@ void DicomImageView::ClearTransformations()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = mImageViewer->GetSlice();
|
||||||
ResetPanZoom();
|
ResetPanZoom();
|
||||||
|
|
||||||
double cameraPosition[3];
|
double cameraPosition[3];
|
||||||
double vup[3];
|
double vup[3];
|
||||||
_Series->getCameraCfg(vup, cameraPosition);
|
mSeries->getCameraCfg(vup, cameraPosition);
|
||||||
|
|
||||||
//necessary to reset flip and rotate
|
//necessary to reset flip and rotate
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->SetPosition(cameraPosition);
|
mImageViewer->GetRenderer()->GetActiveCamera()->SetPosition(cameraPosition);
|
||||||
_ImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(vup);
|
mImageViewer->GetRenderer()->GetActiveCamera()->SetViewUp(vup);
|
||||||
//avoid black out problem
|
//avoid black out problem
|
||||||
_ImageViewer->GetRenderer()->ResetCameraClippingRange();
|
mImageViewer->GetRenderer()->ResetCameraClippingRange();
|
||||||
_ImageViewer->SetSlice(slice);
|
mImageViewer->SetSlice(slice);
|
||||||
//Render
|
//Render
|
||||||
_ImageViewer->GetRenderWindow()->Render();
|
mImageViewer->GetRenderWindow()->Render();
|
||||||
emit Signal_Transformation(CLEAR);
|
emit Signal_Transformation(CLEAR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -699,7 +652,7 @@ void DicomImageView::updateCornerInfoAll()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
_ImageViewer->updateCornerInfoAll();
|
mImageViewer->updateCornerInfoAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -707,141 +660,141 @@ void DicomImageView::updateCornerInfoPrivacy()
|
|||||||
{
|
{
|
||||||
if (HasSeries())
|
if (HasSeries())
|
||||||
{
|
{
|
||||||
_ImageViewer->updateCornerInfo(TOP_RIGHT);
|
mImageViewer->updateCornerInfo(TOP_RIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--VCR about------------------------------------------------------------------
|
//--VCR about------------------------------------------------------------------
|
||||||
bool DicomImageView::isVCRVisible()
|
bool DicomImageView::isVCRVisible()
|
||||||
{
|
{
|
||||||
if (!_vcr_toolbar) return false;
|
if (!mVcrToolbar) return false;
|
||||||
return _vcr_toolbar->isVisible();
|
return mVcrToolbar->isVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::setVCRVisible(bool visible)
|
void DicomImageView::setVCRVisible(bool visible)
|
||||||
{
|
{
|
||||||
if (!_vcr_toolbar) return ;
|
if (!mVcrToolbar) return ;
|
||||||
_vcr_toolbar->setVisible(visible);
|
mVcrToolbar->setVisible(visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::cineModeOn()
|
void DicomImageView::cineModeOn()
|
||||||
{
|
{
|
||||||
if (!_vcr_toolbar) return;
|
if (!mVcrToolbar) return;
|
||||||
//updateVCRToolbarPos();
|
//updateVCRToolbarPos();
|
||||||
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 + VCRHelper::getVCRXOffset();
|
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();
|
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 + VCRHelper::getVCRYOffset();
|
||||||
_vcr_toolbar->move(ax, ay);
|
mVcrToolbar->move(ax, ay);
|
||||||
|
|
||||||
_vcr_toolbar->show();
|
mVcrToolbar->show();
|
||||||
this->initCineModeThread();
|
this->initCineModeThread();
|
||||||
_vcr_toolbar->reConnectController(_vcr_ctrl);
|
mVcrToolbar->reConnectController(mVcrController);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::initCineModeThread()
|
void DicomImageView::initCineModeThread()
|
||||||
{
|
{
|
||||||
_vcr_ctrl = new pqVCRController(nullptr, this);
|
mVcrController = new pqVCRController(nullptr, this);
|
||||||
_vcr_ctrl->moveToThread(&_thread);
|
mVcrController->moveToThread(&mVcrControlThread);
|
||||||
connect(&_thread, &QThread::finished, _vcr_ctrl, &QObject::deleteLater);
|
connect(&mVcrControlThread, &QThread::finished, mVcrController, &QObject::deleteLater);
|
||||||
_thread.start();
|
mVcrControlThread.start();
|
||||||
isCine = true;
|
mIsCine = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::onFirstFrame()
|
void DicomImageView::onFirstFrame()
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
_scrollBar->setValue(_ImageViewer->GetSliceMin());
|
mScrollBar->setValue(mImageViewer->GetSliceMin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::onPreviousFrame()
|
void DicomImageView::onPreviousFrame()
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = mImageViewer->GetSlice();
|
||||||
slice = --slice;
|
slice = --slice;
|
||||||
int min_slice = _ImageViewer->GetSliceMin();
|
int min_slice = mImageViewer->GetSliceMin();
|
||||||
if (slice < min_slice)
|
if (slice < min_slice)
|
||||||
{
|
{
|
||||||
slice = _ImageViewer->GetSliceMax();
|
slice = mImageViewer->GetSliceMax();
|
||||||
}
|
}
|
||||||
_scrollBar->setValue(slice);
|
mScrollBar->setValue(slice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::onNextFrame()
|
void DicomImageView::onNextFrame()
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
int slice = _ImageViewer->GetSlice();
|
int slice = mImageViewer->GetSlice();
|
||||||
slice = ++slice;
|
slice = ++slice;
|
||||||
int max_slice = _ImageViewer->GetSliceMax();
|
int max_slice = mImageViewer->GetSliceMax();
|
||||||
if (slice > max_slice)
|
if (slice > max_slice)
|
||||||
{
|
{
|
||||||
slice = _ImageViewer->GetSliceMin();
|
slice = mImageViewer->GetSliceMin();
|
||||||
}
|
}
|
||||||
_scrollBar->setValue(slice);
|
mScrollBar->setValue(slice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::onLastFrame()
|
void DicomImageView::onLastFrame()
|
||||||
{
|
{
|
||||||
if (HasSeries()) {
|
if (HasSeries()) {
|
||||||
_scrollBar->setValue(_ImageViewer->GetSliceMax());
|
mScrollBar->setValue(mImageViewer->GetSliceMax());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-- Measure about--------------------------------------------------------------------------------------
|
//-- Measure about--------------------------------------------------------------------------------------
|
||||||
void DicomImageView::ActiveMeasure(Measure *m)
|
void DicomImageView::ActiveMeasure(Measure *m)
|
||||||
{
|
{
|
||||||
if (nullptr != _Series)
|
if (nullptr != mSeries)
|
||||||
{
|
{
|
||||||
_ImageViewer->ActiveMeasure(m);
|
mImageViewer->ActiveMeasure(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::DeleteSelectedMeasure()
|
void DicomImageView::DeleteSelectedMeasure()
|
||||||
{
|
{
|
||||||
if (nullptr != _Series)
|
if (nullptr != mSeries)
|
||||||
{
|
{
|
||||||
_ImageViewer->DeleteSelectedMeasure();
|
mImageViewer->DeleteSelectedMeasure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::DeleteCurrentSliceMeasure()
|
void DicomImageView::DeleteCurrentSliceMeasure()
|
||||||
{
|
{
|
||||||
if (nullptr != _Series)
|
if (nullptr != mSeries)
|
||||||
{
|
{
|
||||||
_ImageViewer->DeleteCurrentSliceMeasure();
|
mImageViewer->DeleteCurrentSliceMeasure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::DeleteCurrentSeriesMeasure()
|
void DicomImageView::DeleteCurrentSeriesMeasure()
|
||||||
{
|
{
|
||||||
if (nullptr != _Series)
|
if (nullptr != mSeries)
|
||||||
{
|
{
|
||||||
_ImageViewer->DeleteCurrentSeriesMeasure();
|
mImageViewer->DeleteCurrentSeriesMeasure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::removeViewWithMeasure()
|
void DicomImageView::removeViewWithMeasure()
|
||||||
{
|
{
|
||||||
_ImageViewer->UnActiveMeasure();
|
mImageViewer->UnActiveMeasure();
|
||||||
_ImageViewer->DeleteCurrentSeriesMeasure();
|
mImageViewer->DeleteCurrentSeriesMeasure();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::SetSliceOrientation(int orientation) {
|
void DicomImageView::SetSliceOrientation(int orientation) {
|
||||||
slice_orientation = orientation;
|
mSliceOrientation = orientation;
|
||||||
_ImageViewer->SetSliceOrientation(orientation);
|
mImageViewer->SetSliceOrientation(orientation);
|
||||||
int max = 0;
|
int max = 0;
|
||||||
int min = 0;
|
int min = 0;
|
||||||
_ImageViewer->GetSliceRange(min, max);
|
mImageViewer->GetSliceRange(min, max);
|
||||||
_scrollBar->setValue(min);
|
mScrollBar->setValue(min);
|
||||||
_scrollBar->setMaximum(max);
|
mScrollBar->setMaximum(max);
|
||||||
_scrollBar->setValue(0);
|
mScrollBar->setValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int DicomImageView::GetSliceOrientation() {
|
int DicomImageView::GetSliceOrientation() {
|
||||||
return slice_orientation;
|
return mSliceOrientation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::viewerClicked() {
|
void DicomImageView::viewerClicked() {
|
||||||
@@ -849,8 +802,8 @@ void DicomImageView::viewerClicked() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DicomImageView::SyncScrollBar() {
|
void DicomImageView::SyncScrollBar() {
|
||||||
setScrollChangedType(scrollScope::TriggerType::SYNC_ONLY);
|
// setScrollChangedType(scrollScope::TriggerType::SYNC_ONLY);
|
||||||
_scrollBar->setValue(_ImageViewer->GetSlice());
|
mScrollBar->SetValueSilently(mImageViewer->GetSlice());
|
||||||
_ImageViewer->updateCornerInfo(TOP_LEFT);
|
mImageViewer->updateCornerInfo(TOP_LEFT);
|
||||||
setScrollChangedType(scrollScope::TriggerType::USER_TRIGGER);
|
// setScrollChangedType(scrollScope::TriggerType::USER_TRIGGER);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,163 +1,192 @@
|
|||||||
#pragma once
|
#ifndef OMEGAV_DICOM_IMAGE_VIEW_H
|
||||||
|
#define OMEGAV_DICOM_IMAGE_VIEW_H
|
||||||
|
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
#include <QOpenGLWidget>
|
#include <QOpenGLWidget>
|
||||||
#include "UI/Widget/ClickableScrollBar.h"
|
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
#include "Common/SeriesImageSet.h"
|
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
|
||||||
|
#include "Common/SeriesImageSet.h"
|
||||||
|
#include "UI/Widget/ClickableScrollBar.h"
|
||||||
#include "Rendering/infinitiViewer.h"
|
#include "Rendering/infinitiViewer.h"
|
||||||
|
|
||||||
class vtkCornerAnnotation;
|
class vtkCornerAnnotation;
|
||||||
|
|
||||||
class vtkGenericOpenGLRenderWindow;
|
class vtkGenericOpenGLRenderWindow;
|
||||||
|
|
||||||
class MyTitleBar;
|
class MyTitleBar;
|
||||||
|
|
||||||
class pqVCRController;
|
class pqVCRController;
|
||||||
|
|
||||||
class pqVCRToolbar;
|
class pqVCRToolbar;
|
||||||
|
|
||||||
class QVTKOpenGLNativeWidget;
|
class QVTKOpenGLNativeWidget;
|
||||||
|
|
||||||
class Measure;
|
class Measure;
|
||||||
|
|
||||||
namespace scrollScope {
|
class DicomImageView : public QFrame {
|
||||||
enum TriggerType
|
Q_OBJECT
|
||||||
{
|
|
||||||
USER_TRIGGER, //a,b,c
|
|
||||||
STYLE_TRIGGER,//b,c
|
|
||||||
SYNC_ONLY,//do nothing
|
|
||||||
};
|
|
||||||
}
|
|
||||||
class DicomImageView : public QFrame
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
//a:real effect
|
|
||||||
//b:corner info update
|
|
||||||
//c:scroll value sync
|
|
||||||
explicit DicomImageView(QWidget* parent = Q_NULLPTR);
|
|
||||||
~DicomImageView() override;
|
|
||||||
|
|
||||||
|
|
||||||
void ShowMetaData();
|
explicit DicomImageView(QWidget *parent = Q_NULLPTR);
|
||||||
QVTKOpenGLNativeWidget* getGLWidget()
|
|
||||||
{
|
|
||||||
return _glWidt;
|
|
||||||
}
|
|
||||||
infinitiViewer* getImageViewer()
|
|
||||||
{
|
|
||||||
return _ImageViewer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setScrollChangedType(int type)
|
~DicomImageView() override;
|
||||||
{
|
|
||||||
_ScrollTriggerType = type;
|
|
||||||
}
|
|
||||||
void setHighlight(bool yes);
|
|
||||||
void Render();
|
|
||||||
|
|
||||||
//Series
|
void ShowMetaData();
|
||||||
void setDicomImageView(SeriesImageSet *series);
|
|
||||||
bool HasSeries();
|
|
||||||
int getSeriesNumber();
|
|
||||||
SeriesImageSet* getSeriesInstance()
|
|
||||||
{
|
|
||||||
return _Series;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Reset
|
QVTKOpenGLNativeWidget *getGLWidget() {
|
||||||
void ResetView();
|
return mGLWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
infinitiViewer *getImageViewer() {
|
||||||
|
return mImageViewer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setHighlight(bool yes);
|
||||||
|
|
||||||
|
void Render();
|
||||||
|
|
||||||
|
//Series
|
||||||
|
void setDicomImageView(SeriesImageSet *series);
|
||||||
|
|
||||||
|
bool HasSeries();
|
||||||
|
|
||||||
|
int getSeriesNumber();
|
||||||
|
|
||||||
|
SeriesImageSet *getSeriesInstance() {
|
||||||
|
return mSeries;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Reset
|
||||||
|
void ResetView();
|
||||||
|
|
||||||
|
|
||||||
//Corner Info
|
//Corner Info
|
||||||
void updateCornerInfoAll();
|
void updateCornerInfoAll();
|
||||||
void updateCornerInfoPrivacy();
|
|
||||||
|
|
||||||
//Window level
|
void updateCornerInfoPrivacy();
|
||||||
void GetWindowLevel(double &level, double &width);
|
|
||||||
void SetWindowLevel(double level, double width);
|
|
||||||
|
|
||||||
//Transformation
|
//Window level
|
||||||
void ClearTransformations();
|
void GetWindowLevel(double &level, double &width);
|
||||||
void HFlip();
|
|
||||||
void VFlip();
|
void SetWindowLevel(double level, double width);
|
||||||
void Rotate(double angle, TransFormType operation);
|
|
||||||
|
//Transformation
|
||||||
|
void ClearTransformations();
|
||||||
|
|
||||||
|
void HFlip();
|
||||||
|
|
||||||
|
void VFlip();
|
||||||
|
|
||||||
|
void Rotate(double angle, TransFormType operation);
|
||||||
|
|
||||||
|
|
||||||
//Fusion
|
//Fusion
|
||||||
bool IsFusion();
|
bool IsFusion();
|
||||||
void SetFusionOpacity(double percent);
|
|
||||||
void SetFusionInput(DicomImageView *overlap);
|
void SetFusionOpacity(double percent);
|
||||||
void removeViewWithFusion();
|
|
||||||
|
void SetFusionInput(DicomImageView *overlap);
|
||||||
|
|
||||||
|
void removeViewWithFusion();
|
||||||
|
|
||||||
|
|
||||||
//Measure
|
//Measure
|
||||||
void ActiveMeasure(Measure *m);
|
void ActiveMeasure(Measure *m);
|
||||||
void DeleteSelectedMeasure();
|
|
||||||
void DeleteCurrentSliceMeasure();
|
void DeleteSelectedMeasure();
|
||||||
void DeleteCurrentSeriesMeasure();
|
|
||||||
void removeViewWithMeasure();
|
void DeleteCurrentSliceMeasure();
|
||||||
|
|
||||||
|
void DeleteCurrentSeriesMeasure();
|
||||||
|
|
||||||
|
void removeViewWithMeasure();
|
||||||
|
|
||||||
|
|
||||||
//Sync slice
|
//Sync slice
|
||||||
void AddSlice(int step);
|
void AddSlice(int step);
|
||||||
void SetSlice(int slice);
|
|
||||||
void SetZoomScale(double scale);
|
|
||||||
void SetPanOffset(double * p);
|
|
||||||
void SyncScrollBar();
|
|
||||||
|
|
||||||
//CineMode
|
void SetSlice(int slice);
|
||||||
void onFirstFrame();
|
|
||||||
void onPreviousFrame();
|
|
||||||
void onNextFrame();
|
|
||||||
void onLastFrame();
|
|
||||||
bool IsCine() { return isCine; }
|
|
||||||
void cineModeOn();
|
|
||||||
bool isVCRVisible();
|
|
||||||
void setVCRVisible(bool);
|
|
||||||
void setVCRToolbar(pqVCRToolbar* toolbar)
|
|
||||||
{
|
|
||||||
_vcr_toolbar = toolbar;
|
|
||||||
}
|
|
||||||
pqVCRToolbar* getVCRToolbar()
|
|
||||||
{
|
|
||||||
return _vcr_toolbar;
|
|
||||||
}
|
|
||||||
pqVCRController* getVCRController()
|
|
||||||
{
|
|
||||||
return _vcr_ctrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Negative
|
void SetZoomScale(double scale);
|
||||||
void ToggleNegativeMode();
|
|
||||||
|
void SetPanOffset(double *p);
|
||||||
|
|
||||||
|
void SyncScrollBar();
|
||||||
|
|
||||||
|
//CineMode
|
||||||
|
void onFirstFrame();
|
||||||
|
|
||||||
|
void onPreviousFrame();
|
||||||
|
|
||||||
|
void onNextFrame();
|
||||||
|
|
||||||
|
void onLastFrame();
|
||||||
|
|
||||||
|
bool IsCine() { return mIsCine; }
|
||||||
|
|
||||||
|
void cineModeOn();
|
||||||
|
|
||||||
|
bool isVCRVisible();
|
||||||
|
|
||||||
|
void setVCRVisible(bool);
|
||||||
|
|
||||||
|
void setVCRToolbar(pqVCRToolbar *toolbar) {
|
||||||
|
mVcrToolbar = toolbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
pqVCRToolbar *getVCRToolbar() {
|
||||||
|
return mVcrToolbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
pqVCRController *getVCRController() {
|
||||||
|
return mVcrController;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Negative
|
||||||
|
void ToggleNegativeMode();
|
||||||
|
|
||||||
|
void SetSliceOrientation(int orientation);
|
||||||
|
|
||||||
void SetSliceOrientation(int orientation);
|
|
||||||
int GetSliceOrientation();
|
int GetSliceOrientation();
|
||||||
|
|
||||||
bool CompareWorldSliceOrientation(DicomImageView* view){
|
bool CompareWorldSliceOrientation(DicomImageView *view) {
|
||||||
return this->_ImageViewer->GetWorldSliceOrientation() == view->_ImageViewer->GetWorldSliceOrientation();
|
return this->mImageViewer->GetWorldSliceOrientation() == view->mImageViewer->GetWorldSliceOrientation();
|
||||||
}
|
}
|
||||||
void SyncSlicePoint(double* point){
|
|
||||||
_ImageViewer->SyncSlicePoint(point);
|
void SyncSlicePoint(double *point) {
|
||||||
_ImageViewer->Render();
|
mImageViewer->SyncSlicePoint(point);
|
||||||
|
mImageViewer->Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/**
|
void Signal_ViewEmpty(DicomImageView *view);
|
||||||
* This signal will be emitted whenever a mouse event occurs within the QVTK window.
|
|
||||||
*/
|
void Signal_ViewClicked(DicomImageView *view);
|
||||||
|
|
||||||
void scroll_ValueChanged(int);
|
void Signal_viewDoubleclicked(DicomImageView *view);
|
||||||
void Signal_ViewEmpty(DicomImageView *view);
|
|
||||||
void Signal_ViewClicked(DicomImageView *view);
|
void Signal_DragDropEvent(DicomImageView *view, thumbnailImage *tb);
|
||||||
void Signal_viewDoubleclicked(DicomImageView *view);
|
|
||||||
void Signal_scrollValueChanged(DicomImageView *view, int slice);
|
void Signal_SyncEvent(DicomImageView *view, int interactionMode, void *calldata);
|
||||||
void Signal_DragDropEvent(DicomImageView *view,thumbnailImage* tb);
|
|
||||||
void Signal_SyncEvent(DicomImageView *view, int interactionMode,void* calldata);
|
void Signal_WindowLevelEventForFusion(double level, double width);
|
||||||
void Signal_WindowLevelEventForFusion(double level,double width);
|
|
||||||
void Signal_Transformation(TransFormType);
|
void Signal_Transformation(TransFormType);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
//for title bar use
|
|
||||||
void Slot_viewDoubleclicked();
|
//for title bar use
|
||||||
void Slot_ViewEmpty();
|
void Slot_viewDoubleclicked();
|
||||||
void Slot_scrollValueChanged(int);
|
|
||||||
void Slot_WindowLevelEventForFusion(double level, double width);
|
void Slot_ViewEmpty();
|
||||||
void Slot_Transformation();
|
|
||||||
|
void Slot_scrollValueChanged(int);
|
||||||
|
|
||||||
|
void Slot_WindowLevelEventForFusion(double level, double width);
|
||||||
|
|
||||||
|
void Slot_Transformation();
|
||||||
|
|
||||||
void viewerClicked();
|
void viewerClicked();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -166,82 +195,108 @@ protected:
|
|||||||
* @attention 只能捕获到titlebar区域的点击
|
* @attention 只能捕获到titlebar区域的点击
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
void mousePressEvent(QMouseEvent* event) Q_DECL_OVERRIDE;
|
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
|
||||||
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
|
|
||||||
|
|
||||||
void dragEnterEvent(QDragEnterEvent *e);
|
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
|
||||||
void dragMoveEvent(QDragMoveEvent *e);
|
|
||||||
void dropEvent(QDropEvent *e);
|
/**
|
||||||
void dragLeaveEvent(QDragLeaveEvent *e);
|
* @brief DicomImageView::dragEnterEvent
|
||||||
void resizeEvent(QResizeEvent *event);
|
* 拖拽进入
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DicomImageView::dragMoveEvent
|
||||||
|
* 拖拽移动
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DicomImageView::dropEvent
|
||||||
|
* 拖拽松开
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DicomImageView::dragLeaveEvent
|
||||||
|
* 离开事件
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void removeFusion();
|
void removeFusion();
|
||||||
|
|
||||||
void OverlayOn()
|
void OverlayOn() {
|
||||||
{
|
mIsOverlay = true;
|
||||||
isOverlay = true;
|
}
|
||||||
}
|
|
||||||
void OverlayOff()
|
void OverlayOff() {
|
||||||
{
|
mIsOverlay = false;
|
||||||
isOverlay = false;
|
}
|
||||||
}
|
|
||||||
bool IsOverlay()
|
bool IsOverlay() {
|
||||||
{
|
return mIsOverlay;
|
||||||
return isOverlay;
|
}
|
||||||
}
|
|
||||||
void SetBaseView(DicomImageView *v)
|
void SetBaseView(DicomImageView *v) {
|
||||||
{
|
mBaseView = v;
|
||||||
_base = v;
|
}
|
||||||
}
|
|
||||||
void SetOverlayView(DicomImageView *v)
|
void SetOverlayView(DicomImageView *v) {
|
||||||
{
|
mOverlayView = v;
|
||||||
_overlay = v;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
//Callback
|
||||||
//Callback
|
void doubleclickedEventCb(vtkObject *sender, unsigned long eventId, void *calldata = nullptr);
|
||||||
void doubleclickedEventCb(vtkObject* sender, unsigned long eventId, void* calldata = nullptr);
|
|
||||||
void scalarEventCb(vtkObject* sender, unsigned long eventId, void* calldata = nullptr);
|
void scalarEventCb(vtkObject *sender, unsigned long eventId, void *calldata = nullptr);
|
||||||
void updateWindowLevelCb(vtkObject*caller, unsigned long eid, void *calldata);
|
|
||||||
void syncEventFunc(vtkObject*caller, unsigned long eid, void *calldata);
|
void updateWindowLevelCb(vtkObject *caller, unsigned long eid, void *calldata);
|
||||||
|
|
||||||
|
void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata);
|
||||||
|
|
||||||
|
|
||||||
void initCineModeThread();
|
void initCineModeThread();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create a TitleBar for this widget
|
* create a TitleBar for this widget
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
MyTitleBar* createMyTitleBar();
|
MyTitleBar *createMyTitleBar();
|
||||||
|
|
||||||
void ResetPanZoom();
|
void ResetPanZoom();
|
||||||
|
|
||||||
void initScrollbar();
|
void initScrollbar();
|
||||||
void LoadSeries(SeriesImageSet *series);
|
|
||||||
|
|
||||||
vtkSmartPointer <vtkGenericOpenGLRenderWindow> m_glrenWin;
|
|
||||||
|
|
||||||
infinitiViewer* _ImageViewer = nullptr;
|
void LoadSeries(SeriesImageSet *series);
|
||||||
SeriesImageSet* _Series = nullptr;
|
|
||||||
ClickableScrollBar* _scrollBar =nullptr;
|
|
||||||
MyTitleBar *_titleBar =nullptr;
|
|
||||||
QVTKOpenGLNativeWidget* _glWidt = nullptr;
|
|
||||||
pqVCRToolbar* _vcr_toolbar = nullptr;
|
|
||||||
pqVCRController *_vcr_ctrl = nullptr;
|
|
||||||
QThread _thread;
|
|
||||||
DicomImageView *_overlay = nullptr;
|
|
||||||
DicomImageView *_base = nullptr;
|
|
||||||
|
|
||||||
int _SliceStep =0;
|
vtkSmartPointer<vtkGenericOpenGLRenderWindow> mGLRenWin;
|
||||||
int _PrevSlice =0;
|
|
||||||
int _ScrollTriggerType = scrollScope::TriggerType::USER_TRIGGER;
|
|
||||||
int slice_orientation = 2;
|
|
||||||
|
|
||||||
bool isCine = false;
|
infinitiViewer *mImageViewer = nullptr;
|
||||||
bool isNegative = false;
|
SeriesImageSet *mSeries = nullptr;
|
||||||
bool isOverlay = false;
|
ClickableScrollBar *mScrollBar = nullptr;
|
||||||
bool slotInited = false;
|
MyTitleBar *mTitleBar = nullptr;
|
||||||
|
QVTKOpenGLNativeWidget *mGLWidget = nullptr;
|
||||||
|
pqVCRToolbar *mVcrToolbar = nullptr;
|
||||||
|
pqVCRController *mVcrController = nullptr;
|
||||||
|
QThread mVcrControlThread;
|
||||||
|
DicomImageView *mOverlayView = nullptr;
|
||||||
|
DicomImageView *mBaseView = nullptr;
|
||||||
|
|
||||||
|
int mSliceOrientation = 2;
|
||||||
|
|
||||||
|
bool mIsCine = false;
|
||||||
|
bool mIsNegative = false;
|
||||||
|
bool mIsOverlay = false;
|
||||||
|
bool mIsSlotInited = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user