diff --git a/Modules/SegmentationUI/Qmitk/QmitkStaticDynamicSegmentationDialog.cpp b/Modules/SegmentationUI/Qmitk/QmitkStaticDynamicSegmentationDialog.cpp new file mode 100644 index 0000000000..280a3b5107 --- /dev/null +++ b/Modules/SegmentationUI/Qmitk/QmitkStaticDynamicSegmentationDialog.cpp @@ -0,0 +1,75 @@ +/*============================================================================ + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center (DKFZ) +All rights reserved. + +Use of this source code is governed by a 3-clause BSD license that can be +found in the LICENSE file. + +============================================================================*/ + +#include "QmitkStaticDynamicSegmentationDialog.h" + +#include +#include +#include + +#include + +QmitkStaticDynamicSegmentationDialog::QmitkStaticDynamicSegmentationDialog(QWidget *parent) + : QMessageBox(parent) +{ + this->setWindowModality(Qt::WindowModality::NonModal); + this->setIcon(QMessageBox::Question); + this->setWindowTitle(tr("Create a static or dynamic segmentation?")); + this->setText(tr("The selected image has multiple time steps.")); + this->setInformativeText(tr("Do you want to create a static " + "segmentation that is identical for all time steps or do you want to create a " + "dynamic segmentation to segment individual time steps?")); + + QAbstractButton* staticButton = this->addButton(tr("Create static segmentation"), QMessageBox::AcceptRole); + this->addButton(tr("Create dynamic segmentation"), QMessageBox::AcceptRole); + + // only the static button needs to be connected to take care of the special case, where + // the time steps of the 4D image are combined into a single time step of the 3D segmentation. + connect(staticButton, &QAbstractButton::clicked, this, &QmitkStaticDynamicSegmentationDialog::OnStaticButtonClicked); +} + +void QmitkStaticDynamicSegmentationDialog::SetReferenceImage(const mitk::Image* referenceImage) +{ + m_ReferenceImage = referenceImage; + m_SegmentationTemplate = referenceImage; + + const auto currentTimePoint = mitk::RenderingManager::GetInstance()->GetTimeNavigationController()->GetSelectedTimePoint(); + m_ImageTimeStep = 0; + if (m_ReferenceImage->GetTimeGeometry()->IsValidTimePoint(currentTimePoint)) + { + m_ImageTimeStep = m_ReferenceImage->GetTimeGeometry()->TimePointToTimeStep(currentTimePoint); + } +} + +mitk::Image::ConstPointer QmitkStaticDynamicSegmentationDialog::GetSegmentationTemplate() const +{ + return m_SegmentationTemplate; +} + +void QmitkStaticDynamicSegmentationDialog::OnStaticButtonClicked(bool /*checked*/) +{ + auto selector = mitk::ImageTimeSelector::New(); + selector->SetInput(m_ReferenceImage); + selector->SetTimeNr(m_ImageTimeStep); + selector->Update(); + mitk::Image::Pointer newImage = selector->GetOutput(); + + const auto referenceTimeGeometry = m_ReferenceImage->GetTimeGeometry(); + auto timeGeometry = mitk::ProportionalTimeGeometry::New(); + timeGeometry->SetFirstTimePoint(referenceTimeGeometry->GetMinimumTimePoint()); + timeGeometry->SetStepDuration(referenceTimeGeometry->GetMaximumTimePoint() - referenceTimeGeometry->GetMinimumTimePoint()); + timeGeometry->SetTimeStepGeometry(m_ReferenceImage->GetGeometry(m_ImageTimeStep), 0); + + newImage->SetTimeGeometry(timeGeometry); + + m_SegmentationTemplate = newImage; +} diff --git a/Modules/SegmentationUI/Qmitk/QmitkStaticDynamicSegmentationDialog.h b/Modules/SegmentationUI/Qmitk/QmitkStaticDynamicSegmentationDialog.h new file mode 100644 index 0000000000..28b933cf59 --- /dev/null +++ b/Modules/SegmentationUI/Qmitk/QmitkStaticDynamicSegmentationDialog.h @@ -0,0 +1,53 @@ +/*============================================================================ + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center (DKFZ) +All rights reserved. + +Use of this source code is governed by a 3-clause BSD license that can be +found in the LICENSE file. + +============================================================================*/ + +#ifndef QMITKSTATICDYNAMICSEGMENTATIONDIALOG_H +#define QMITKSTATICDYNAMICSEGMENTATIONDIALOG_H + +#include + +#include + +#include + +/** + * \brief Dialog for static / dynamic segmentation node creation. + * + * This dialog is used to ask a user about the dimensionality of a newly created segmentation. + * If the user wants to create a static / 3D segmentation image from a given 4D reference image, + * the time steps of the reference image are combined into a single time step, with a step duration + * that is as long as the step duration of all 4D time steps combined. + */ +class MITKSEGMENTATIONUI_EXPORT QmitkStaticDynamicSegmentationDialog : public QMessageBox +{ + Q_OBJECT + +public: + + QmitkStaticDynamicSegmentationDialog(QWidget* parent = nullptr); + + void SetReferenceImage(const mitk::Image* referenceImage); + mitk::Image::ConstPointer GetSegmentationTemplate() const; + +private Q_SLOTS: + + void OnStaticButtonClicked(bool checked = false); + +private: + + mitk::Image::ConstPointer m_SegmentationTemplate; + const mitk::Image* m_ReferenceImage; + unsigned int m_ImageTimeStep = 0; + +}; + +#endif // QMITKSTATICDYNAMICSEGMENTATIONDIALOG_H diff --git a/Modules/SegmentationUI/files.cmake b/Modules/SegmentationUI/files.cmake index 17e542219b..36584cbe80 100644 --- a/Modules/SegmentationUI/files.cmake +++ b/Modules/SegmentationUI/files.cmake @@ -1,85 +1,87 @@ set( CPP_FILES Qmitk/QmitkAdaptiveRegionGrowingToolGUI.cpp Qmitk/QmitkAutoSegmentationToolGUIBase.cpp Qmitk/QmitkAutoMLSegmentationToolGUIBase.cpp Qmitk/QmitkBinaryThresholdToolGUIBase.cpp Qmitk/QmitkBinaryThresholdToolGUI.cpp Qmitk/QmitkBinaryThresholdULToolGUI.cpp Qmitk/QmitkCalculateGrayValueStatisticsToolGUI.cpp Qmitk/QmitkConfirmSegmentationDialog.cpp Qmitk/QmitkCopyToClipBoardDialog.cpp Qmitk/QmitkDrawPaintbrushToolGUI.cpp Qmitk/QmitkErasePaintbrushToolGUI.cpp Qmitk/QmitkLiveWireTool2DGUI.cpp Qmitk/QmitkNewSegmentationDialog.cpp Qmitk/QmitkOtsuTool3DGUI.cpp Qmitk/QmitkPaintbrushToolGUI.cpp Qmitk/QmitkPickingToolGUI.cpp Qmitk/QmitkPixelManipulationToolGUI.cpp Qmitk/QmitkSlicesInterpolator.cpp Qmitk/QmitkToolGUI.cpp Qmitk/QmitkToolGUIArea.cpp Qmitk/QmitkToolSelectionBox.cpp Qmitk/QmitknnUNetToolGUI.cpp Qmitk/QmitknnUNetToolSlots.cpp #Added from ML Qmitk/QmitkLabelSetWidget.cpp Qmitk/QmitkSurfaceStampWidget.cpp Qmitk/QmitkMaskStampWidget.cpp Qmitk/QmitkSliceBasedInterpolatorWidget.cpp +Qmitk/QmitkStaticDynamicSegmentationDialog.cpp Qmitk/QmitkSurfaceBasedInterpolatorWidget.cpp Qmitk/QmitkSimpleLabelSetListWidget.cpp ) set(MOC_H_FILES Qmitk/QmitkAdaptiveRegionGrowingToolGUI.h Qmitk/QmitkAutoSegmentationToolGUIBase.h Qmitk/QmitkAutoMLSegmentationToolGUIBase.h Qmitk/QmitkBinaryThresholdToolGUIBase.h Qmitk/QmitkBinaryThresholdToolGUI.h Qmitk/QmitkBinaryThresholdULToolGUI.h Qmitk/QmitkCalculateGrayValueStatisticsToolGUI.h Qmitk/QmitkConfirmSegmentationDialog.h Qmitk/QmitkCopyToClipBoardDialog.h Qmitk/QmitkDrawPaintbrushToolGUI.h Qmitk/QmitkErasePaintbrushToolGUI.h Qmitk/QmitkLiveWireTool2DGUI.h Qmitk/QmitkNewSegmentationDialog.h Qmitk/QmitkOtsuTool3DGUI.h Qmitk/QmitkPaintbrushToolGUI.h Qmitk/QmitkPickingToolGUI.h Qmitk/QmitkPixelManipulationToolGUI.h Qmitk/QmitkSlicesInterpolator.h Qmitk/QmitkToolGUI.h Qmitk/QmitkToolGUIArea.h Qmitk/QmitkToolSelectionBox.h Qmitk/QmitknnUNetToolGUI.h Qmitk/QmitknnUNetGPU.h Qmitk/QmitknnUNetEnsembleLayout.h Qmitk/QmitknnUNetFolderParser.h #Added from ML Qmitk/QmitkLabelSetWidget.h Qmitk/QmitkSurfaceStampWidget.h Qmitk/QmitkMaskStampWidget.h Qmitk/QmitkSliceBasedInterpolatorWidget.h +Qmitk/QmitkStaticDynamicSegmentationDialog.h Qmitk/QmitkSurfaceBasedInterpolatorWidget.h Qmitk/QmitkSimpleLabelSetListWidget.h ) set(UI_FILES Qmitk/QmitkAdaptiveRegionGrowingToolGUIControls.ui Qmitk/QmitkConfirmSegmentationDialog.ui Qmitk/QmitkOtsuToolWidgetControls.ui Qmitk/QmitkLiveWireTool2DGUIControls.ui #Added from ML Qmitk/QmitkLabelSetWidgetControls.ui Qmitk/QmitkSurfaceStampWidgetGUIControls.ui Qmitk/QmitkMaskStampWidgetGUIControls.ui Qmitk/QmitkSliceBasedInterpolatorWidgetGUIControls.ui Qmitk/QmitkSurfaceBasedInterpolatorWidgetGUIControls.ui Qmitk/QmitknnUNetToolGUIControls.ui ) set(QRC_FILES resources/SegmentationUI.qrc )