diff --git a/Plugins/org.mitk.gui.qt.measurementtoolbox/src/internal/QmitkImageStatisticsView.cpp b/Plugins/org.mitk.gui.qt.measurementtoolbox/src/internal/QmitkImageStatisticsView.cpp index 6d55abdcf9..a37e4f210b 100644 --- a/Plugins/org.mitk.gui.qt.measurementtoolbox/src/internal/QmitkImageStatisticsView.cpp +++ b/Plugins/org.mitk.gui.qt.measurementtoolbox/src/internal/QmitkImageStatisticsView.cpp @@ -1,753 +1,509 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkImageStatisticsView.h" #include // berry includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mitkImageStatisticsContainerManager.h" #include const std::string QmitkImageStatisticsView::VIEW_ID = "org.mitk.views.imagestatistics"; QmitkImageStatisticsView::QmitkImageStatisticsView(QObject * /*parent*/, const char * /*name*/) { this->m_CalculationJob = new QmitkImageStatisticsCalculationJob(); } QmitkImageStatisticsView::~QmitkImageStatisticsView() { if (m_selectedPlanarFigure) { m_selectedPlanarFigure->RemoveObserver(m_PlanarFigureObserverTag); } if (!m_CalculationJob->isFinished()) { m_CalculationJob->terminate(); m_CalculationJob->wait(); } this->m_CalculationJob->deleteLater(); } void QmitkImageStatisticsView::CreateQtPartControl(QWidget *parent) { m_Controls.setupUi(parent); m_Controls.widget_histogram->SetTheme(this->GetColorTheme()); m_Controls.widget_intensityProfile->SetTheme(this->GetColorTheme()); m_Controls.groupBox_histogram->setVisible(true); m_Controls.groupBox_intensityProfile->setVisible(false); m_Controls.label_currentlyComputingStatistics->setVisible(false); m_Controls.sliderWidget_histogram->setPrefix("Time: "); m_Controls.sliderWidget_histogram->setDecimals(0); m_Controls.sliderWidget_histogram->setVisible(false); m_Controls.sliderWidget_intensityProfile->setPrefix("Time: "); m_Controls.sliderWidget_intensityProfile->setDecimals(0); m_Controls.sliderWidget_intensityProfile->setVisible(false); ResetGUI(); //PrepareDataStorageComboBoxes(); m_Controls.widget_statistics->SetDataStorage(this->GetDataStorage()); CreateConnections(); } void QmitkImageStatisticsView::CreateConnections() { connect(this->m_Controls.checkBox_ignoreZero, &QCheckBox::stateChanged, this, &QmitkImageStatisticsView::OnCheckBoxIgnoreZeroStateChanged); - /*connect(this->m_Controls.sliderWidget_histogram, - &ctkSliderWidget::valueChanged, - this, - &QmitkImageStatisticsView::OnSliderWidgetHistogramChanged); - connect(this->m_Controls.sliderWidget_intensityProfile, - &ctkSliderWidget::valueChanged, - this, - &QmitkImageStatisticsView::OnSliderWidgetIntensityProfileChanged); - connect(this->m_Controls.imageSelector, - static_cast(&QComboBox::currentIndexChanged), - this, - &QmitkImageStatisticsView::OnImageSelectorChanged); - connect(this->m_Controls.maskImageSelector, - static_cast(&QComboBox::currentIndexChanged), - this, - &QmitkImageStatisticsView::OnMaskSelectorChanged);*/ - connect(this->m_Controls.buttonSelection, &QAbstractButton::clicked, this, &QmitkImageStatisticsView::OnButtonSelectionPressed); + connect(this->m_Controls.buttonSelection, + &QAbstractButton::clicked, + this, + &QmitkImageStatisticsView::OnButtonSelectionPressed); } void QmitkImageStatisticsView::OnButtonSelectionPressed() { m_SelectionDialog = new QmitkNodeSelectionDialog(); m_SelectionDialog->SetDataStorage(GetDataStorage()); //set predicates auto isPlanarFigurePredicate = mitk::GetImageStatisticsPlanarFigurePredicate(); auto isMaskPredicate = mitk::GetImageStatisticsMaskPredicate(); auto isImagePredicate = mitk::GetImageStatisticsImagePredicate(); auto isMaskOrPlanarFigurePredicate = mitk::NodePredicateOr::New(isPlanarFigurePredicate, isMaskPredicate); auto isImageOrMaskOrPlanarFigurePredicate = mitk::NodePredicateOr::New(isMaskOrPlanarFigurePredicate, isImagePredicate); m_SelectionDialog->SetNodePredicate(isImageOrMaskOrPlanarFigurePredicate); m_SelectionDialog->SetSelectionMode(QAbstractItemView::MultiSelection); connect(m_SelectionDialog, &QmitkNodeSelectionDialog::accepted, this, &QmitkImageStatisticsView::OnDialogSelectionChanged); m_SelectionDialog->show(); } void QmitkImageStatisticsView::OnDialogSelectionChanged() { m_selectedImageNodes.resize(0); m_selectedMaskNodes.resize(0); QList selectedNodeList = m_SelectionDialog->GetSelectedNodes(); std::vector selectedNodes(selectedNodeList.toVector().toStdVector()); auto isImagePredicate = mitk::GetImageStatisticsImagePredicate(); for (int i = 0; i < selectedNodes.size(); i++) { if (isImagePredicate->CheckNode(selectedNodes[i])) { m_selectedImageNodes.push_back(selectedNodes[i]); } else { m_selectedMaskNodes.push_back(selectedNodes[i]); } } std::vector selectedImageNodesConst(m_selectedImageNodes.size(), 0); for (int i = 0; i < m_selectedImageNodes.size(); i++) { selectedImageNodesConst[i] = m_selectedImageNodes[i]; } std::vector selectedMaskNodesConst(m_selectedMaskNodes.size(), 0); for (int i = 0; i < m_selectedMaskNodes.size(); i++) { selectedMaskNodesConst[i] = m_selectedMaskNodes[i]; } if(!selectedImageNodesConst.empty()) m_Controls.widget_statistics->SetImageNodes(selectedImageNodesConst); if (!selectedMaskNodesConst.empty()) m_Controls.widget_statistics->SetMaskNodes(selectedMaskNodesConst); CalculateOrGetStatisticsNew(); } void QmitkImageStatisticsView::OnCheckBoxIgnoreZeroStateChanged(int state) { m_ForceRecompute = true; if (state != Qt::Unchecked) { this->m_CalculationJob->SetIgnoreZeroValueVoxel(true); } else { this->m_CalculationJob->SetIgnoreZeroValueVoxel(false); } CalculateOrGetStatisticsNew(); } -/*void QmitkImageStatisticsView::OnSliderWidgetHistogramChanged(double value) -{ - unsigned int timeStep = static_cast(value); - auto mask = m_selectedMaskNode ? m_selectedMaskNode->GetData() : nullptr; - auto imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics( - this->GetDataStorage(), m_selectedImageNode->GetData(), mask); - HistogramType::ConstPointer histogram = nullptr; - if (imageStatistics->TimeStepExists(timeStep)) - { - histogram = imageStatistics->GetStatisticsForTimeStep(timeStep).m_Histogram; - } - - if(this->m_CalculationJob->GetStatisticsUpdateSuccessFlag()) - { - if (histogram.IsNotNull()) - { - this->FillHistogramWidget({histogram}, {m_selectedImageNode->GetName()}); - } - else { - HistogramType::Pointer emptyHistogram = HistogramType::New(); - this->FillHistogramWidget({emptyHistogram}, {m_selectedImageNode->GetName()}); - } - } -} - -void QmitkImageStatisticsView::OnSliderWidgetIntensityProfileChanged() -{ - // intensity profile is always computed on request, not stored as node in DataStorage - auto image = dynamic_cast(m_selectedImageNode->GetData()); - auto planarFigure = dynamic_cast(m_selectedMaskNode->GetData()); - - if (image && planarFigure && this->m_CalculationJob->GetStatisticsUpdateSuccessFlag()) - { - this->ComputeAndDisplayIntensityProfile(image, planarFigure); - } -}*/ - void QmitkImageStatisticsView::PartClosed(const berry::IWorkbenchPartReference::Pointer &) {} void QmitkImageStatisticsView::FillHistogramWidget(const std::vector &histogram, const std::vector &dataLabels) { m_Controls.groupBox_histogram->setVisible(true); m_Controls.widget_histogram->SetTheme(this->GetColorTheme()); m_Controls.widget_histogram->Reset(); m_Controls.widget_histogram->SetHistogram(histogram.front(), dataLabels.front()); connect(m_Controls.widget_histogram, &QmitkHistogramVisualizationWidget::RequestHistogramUpdate, this, &QmitkImageStatisticsView::OnRequestHistogramUpdate); } QmitkChartWidget::ColorTheme QmitkImageStatisticsView::GetColorTheme() const { ctkPluginContext *context = berry::WorkbenchPlugin::GetDefault()->GetPluginContext(); ctkServiceReference styleManagerRef = context->getServiceReference(); if (styleManagerRef) { auto styleManager = context->getService(styleManagerRef); if (styleManager->GetStyle().name == "Dark") { return QmitkChartWidget::ColorTheme::darkstyle; } else { return QmitkChartWidget::ColorTheme::lightstyle; } } return QmitkChartWidget::ColorTheme::darkstyle; } -/*void QmitkImageStatisticsView::OnImageSelectorChanged() -{ - auto selectedImageNode = m_Controls.imageSelector->GetSelectedNode(); - if (selectedImageNode != m_selectedImageNode) - { - m_selectedImageNode = selectedImageNode; - if (m_selectedImageNode.IsNotNull()) - { - ResetGUIDefault(); - - auto isPlanarFigurePredicate = mitk::GetImageStatisticsPlanarFigurePredicate(); - auto isMaskPredicate = mitk::GetImageStatisticsMaskPredicate(); - auto hasSameGeometry = mitk::NodePredicateGeometry::New(m_selectedImageNode->GetData()->GetGeometry()); - hasSameGeometry->SetCheckPrecision(1e-10); - auto isMaskWithGeometryPredicate = mitk::NodePredicateAnd::New(isMaskPredicate, hasSameGeometry); - auto isMaskOrPlanarFigureWithGeometryPredicate = - mitk::NodePredicateOr::New(isPlanarFigurePredicate, isMaskWithGeometryPredicate); - // prevent triggering of computation as the predicate triggers a signalChanged event - m_Controls.maskImageSelector->disconnect(); - m_Controls.maskImageSelector->SetPredicate(isMaskOrPlanarFigureWithGeometryPredicate); - // reset mask to - m_Controls.maskImageSelector->SetZeroEntryText(""); - m_Controls.checkBox_ignoreZero->setEnabled(true); - m_selectedMaskNode = nullptr; - m_Controls.widget_statistics->SetMaskNodes({}); - CalculateOrGetStatistics(); - m_Controls.widget_statistics->SetImageNodes({m_selectedImageNode}); - connect(this->m_Controls.maskImageSelector, - static_cast(&QComboBox::currentIndexChanged), - this, - &QmitkImageStatisticsView::OnMaskSelectorChanged); - } - else - { - m_Controls.widget_statistics->SetImageNodes({}); - m_Controls.widget_statistics->SetMaskNodes({}); - m_Controls.widget_statistics->Reset(); - m_Controls.widget_histogram->Reset(); - ResetGUI(); - } - } -} - -void QmitkImageStatisticsView::OnMaskSelectorChanged() -{ - auto selectedMaskNode = m_Controls.maskImageSelector->GetSelectedNode(); - if (selectedMaskNode != m_selectedMaskNode) - { - m_selectedMaskNode = selectedMaskNode; - if (m_selectedMaskNode.IsNotNull()) - { - m_Controls.widget_statistics->SetMaskNodes({m_selectedMaskNode}); - } - else - { - m_Controls.widget_statistics->SetMaskNodes({}); - } - CalculateOrGetStatistics(); - } -}*/ - void QmitkImageStatisticsView::CalculateOrGetStatisticsNew() { MITK_INFO << "Into the function check"; if (this->m_selectedPlanarFigure) { this->m_selectedPlanarFigure->RemoveObserver(this->m_PlanarFigureObserverTag); this->m_selectedPlanarFigure = nullptr; } m_Controls.groupBox_intensityProfile->setVisible(false); m_Controls.widget_statistics->setEnabled(!m_selectedImageNodes.empty()); std::vector statisticsVector; if (!m_selectedImageNodes.empty()) { - MITK_INFO << "PictureNode check"; for (auto imageNode : m_selectedImageNodes) { m_selectedImageNode = imageNode; auto image = dynamic_cast(imageNode->GetData()); mitk::ImageStatisticsContainer::ConstPointer imageStatistics; if (image->GetDimension() == 4) { m_Controls.sliderWidget_histogram->setVisible(true); unsigned int maxTimestep = image->GetTimeSteps(); m_Controls.sliderWidget_histogram->setMaximum(maxTimestep - 1); } else { m_Controls.sliderWidget_histogram->setVisible(false); } for (int i = 0; i < m_selectedMaskNodes.size() + 1; i++) { - MITK_INFO << "Mask function check"; mitk::Image* mask = nullptr; mitk::PlanarFigure* maskPF = nullptr; mitk::DataNode::Pointer maskNode; mitk::BaseGeometry* imageGeometry; - if (m_selectedMaskNodes.size())//do this if there is any mask selected + if (m_selectedMaskNodes.size()) { maskNode = m_selectedMaskNodes[i]; - MITK_INFO << "Mask recognized check"; mask = dynamic_cast(maskNode->GetData()); imageGeometry = image->GetGeometry(); if ((i+1) == m_selectedMaskNodes.size()) i++; } - if (m_selectedMaskNodes.size()&&mask == nullptr) //do this if there is a mask selected but itīs a planar figure + if (m_selectedMaskNodes.size()&&mask == nullptr) { - MITK_INFO << "Planar Figure recognized check"; maskPF = dynamic_cast(maskNode->GetData()); auto maskPFGeometry = maskPF->GetGeometry(); //if (imageGeometry == maskPFGeometry) //doesnt activate //{ m_selectedPlanarFigure = maskPF; ITKCommandType::Pointer changeListener = ITKCommandType::New(); changeListener->SetCallbackFunction(this, &QmitkImageStatisticsView::CalculateOrGetStatisticsNew); this->m_PlanarFigureObserverTag = m_selectedPlanarFigure->AddObserver(mitk::EndInteractionPlanarFigureEvent(), changeListener); if (!maskPF->IsClosed()) { ComputeAndDisplayIntensityProfile(image, maskPF); } imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image, maskPF); //} } else if (mask) //do this if the mask is a binary mask (no need for selected: either is PF(case above) or still nullptr from before) { - MITK_INFO << "Mask not PF check"; m_selectedMaskNode = maskNode; auto maskGeometry = mask->GetGeometry(); - MITK_INFO << "Mask geometry found check"; //if (imageGeometry == maskGeometry) //doesnt activate //{ - MITK_INFO << "Mask fits image check"; imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image, mask); //} } - else //do this if there is no mask selected + else { - MITK_INFO<<"Only image check"; imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image); } bool imageStatisticsOlderThanInputs = false; if (imageStatistics && (imageStatistics->GetMTime() < image->GetMTime() || (mask && imageStatistics->GetMTime() < mask->GetMTime()) || (maskPF && imageStatistics->GetMTime() < maskPF->GetMTime()))) { imageStatisticsOlderThanInputs = true; } if (imageStatistics) { - MITK_INFO << "Bins recalculated check"; // triggers recomputation when switched between images and the newest one has not 100 bins (default) auto calculatedBins = imageStatistics->GetStatisticsForTimeStep(0).m_Histogram.GetPointer()->Size(); if (calculatedBins != 100) { OnRequestHistogramUpdate(m_Controls.widget_histogram->GetBins()); } } // statistics need to be computed if (!imageStatistics || imageStatisticsOlderThanInputs || m_ForceRecompute) { CalculateStatistics(image, mask, maskPF); - MITK_INFO << "Statistics computed check"; m_selectedMaskNode = nullptr; m_selectedPlanarFigure = nullptr; } // statistics already computed else { - MITK_INFO << "Statistics already computed check"; // Not an open planar figure: show histogram (intensity profile already shown) if (!(maskPF && !maskPF->IsClosed())) { if (imageStatistics->TimeStepExists(0)) { auto histogram = imageStatistics->GetStatisticsForTimeStep(0).m_Histogram.GetPointer(); std::string imageNodeName = imageNode->GetName(); //this->FillHistogramWidget({ histogram }, { imageNodeName }); } } } } } } else { ResetGUI(); } m_ForceRecompute = false; } -/*void QmitkImageStatisticsView::CalculateOrGetStatistics() -{ - if (this->m_selectedPlanarFigure) - { - this->m_selectedPlanarFigure->RemoveObserver(this->m_PlanarFigureObserverTag); - this->m_selectedPlanarFigure = nullptr; - } - - m_Controls.groupBox_intensityProfile->setVisible(false); - m_Controls.widget_statistics->setEnabled(m_selectedImageNode.IsNotNull()); - - if (m_selectedImageNode != nullptr) - { - auto image = dynamic_cast(m_selectedImageNode->GetData()); - mitk::Image *mask = nullptr; - mitk::PlanarFigure *maskPlanarFigure = nullptr; - - if (image->GetDimension() == 4) - { - m_Controls.sliderWidget_histogram->setVisible(true); - unsigned int maxTimestep = image->GetTimeSteps(); - m_Controls.sliderWidget_histogram->setMaximum(maxTimestep - 1); - } - else - { - m_Controls.sliderWidget_histogram->setVisible(false); - } - - if (m_selectedMaskNode != nullptr) - { - mask = dynamic_cast(m_selectedMaskNode->GetData()); - if (mask == nullptr) - { - maskPlanarFigure = dynamic_cast(m_selectedMaskNode->GetData()); - } - } - - mitk::ImageStatisticsContainer::ConstPointer imageStatistics; - if (mask) - { - imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image, mask); - } - else if (maskPlanarFigure) - { - m_selectedPlanarFigure = maskPlanarFigure; - ITKCommandType::Pointer changeListener = ITKCommandType::New(); - changeListener->SetCallbackFunction(this, &QmitkImageStatisticsView::CalculateOrGetStatistics); - this->m_PlanarFigureObserverTag = - m_selectedPlanarFigure->AddObserver(mitk::EndInteractionPlanarFigureEvent(), changeListener); - if (!maskPlanarFigure->IsClosed()) - { - ComputeAndDisplayIntensityProfile(image, maskPlanarFigure); - } - imageStatistics = - mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image, maskPlanarFigure); - } - else - { - imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image); - } - - bool imageStatisticsOlderThanInputs = false; - if (imageStatistics && - (imageStatistics->GetMTime() < image->GetMTime() || (mask && imageStatistics->GetMTime() < mask->GetMTime()) || - (maskPlanarFigure && imageStatistics->GetMTime() < maskPlanarFigure->GetMTime()))) - { - imageStatisticsOlderThanInputs = true; - } - - if (imageStatistics) - { - // triggers recomputation when switched between images and the newest one has not 100 bins (default) - auto calculatedBins = imageStatistics->GetStatisticsForTimeStep(0).m_Histogram.GetPointer()->Size(); - if (calculatedBins != 100) - { - OnRequestHistogramUpdate(m_Controls.widget_histogram->GetBins()); - } - } - - // statistics need to be computed - if (!imageStatistics || imageStatisticsOlderThanInputs || m_ForceRecompute) - { - CalculateStatistics(image, mask, maskPlanarFigure); - } - // statistics already computed - else - { - // Not an open planar figure: show histogram (intensity profile already shown) - if (!(maskPlanarFigure && !maskPlanarFigure->IsClosed())) - { - if (imageStatistics->TimeStepExists(0)) - { - auto histogram = imageStatistics->GetStatisticsForTimeStep(0).m_Histogram.GetPointer(); - std::string imageNodeName = m_selectedImageNode->GetName(); - this->FillHistogramWidget({histogram}, {imageNodeName}); - } - } - } - } - else - { - ResetGUI(); - } - m_ForceRecompute = false; -}*/ - void QmitkImageStatisticsView::ComputeAndDisplayIntensityProfile(mitk::Image *image, mitk::PlanarFigure *maskPlanarFigure) { mitk::Image::Pointer inputImage; if (image->GetDimension() == 4) { m_Controls.sliderWidget_intensityProfile->setVisible(true); unsigned int maxTimestep = image->GetTimeSteps(); m_Controls.sliderWidget_intensityProfile->setMaximum(maxTimestep - 1); // Intensity profile can only be calculated on 3D, so extract if 4D mitk::ImageTimeSelector::Pointer timeSelector = mitk::ImageTimeSelector::New(); int currentTimestep = static_cast(m_Controls.sliderWidget_intensityProfile->value()); timeSelector->SetInput(image); timeSelector->SetTimeNr(currentTimestep); timeSelector->Update(); inputImage = timeSelector->GetOutput(); } else { m_Controls.sliderWidget_intensityProfile->setVisible(false); inputImage = image; } auto intensityProfile = mitk::ComputeIntensityProfile(inputImage, maskPlanarFigure); // Don't show histogram for intensity profiles m_Controls.groupBox_histogram->setVisible(false); m_Controls.groupBox_intensityProfile->setVisible(true); m_Controls.widget_intensityProfile->Reset(); m_Controls.widget_intensityProfile->SetIntensityProfile(intensityProfile.GetPointer(), "Intensity Profile of " + m_selectedImageNode->GetName()); } void QmitkImageStatisticsView::ResetGUI() { m_Controls.widget_statistics->Reset(); m_Controls.widget_statistics->setEnabled(false); m_Controls.widget_histogram->Reset(); m_Controls.widget_histogram->setEnabled(false); m_Controls.checkBox_ignoreZero->setEnabled(false); } void QmitkImageStatisticsView::ResetGUIDefault() { m_Controls.widget_histogram->ResetDefault(); m_Controls.checkBox_ignoreZero->setChecked(false); } void QmitkImageStatisticsView::OnStatisticsCalculationEnds() { mitk::StatusBar::GetInstance()->Clear(); auto runnable = m_Runnables[0]; m_Runnables.erase(m_Runnables.begin()); if (runnable->GetStatisticsUpdateSuccessFlag()) { auto statistic = runnable->GetStatisticsData(); auto image = runnable->GetStatisticsImage(); mitk::BaseData::ConstPointer mask = nullptr; auto imageRule = mitk::StatisticsToImageRelationRule::New(); imageRule->Connect(statistic, image); if (runnable->GetMaskImage()) { auto maskRule = mitk::StatisticsToMaskRelationRule::New(); mask = runnable->GetMaskImage(); maskRule->Connect(statistic, mask); } else if (runnable->GetPlanarFigure()) { auto planarFigureRule = mitk::StatisticsToMaskRelationRule::New(); mask = runnable->GetPlanarFigure(); planarFigureRule->Connect(statistic, mask); } auto imageStatistics = mitk::ImageStatisticsContainerManager::GetImageStatistics(this->GetDataStorage(), image, mask); // if statistics base data already exist: add to existing node if (imageStatistics) { auto allDataNodes = this->GetDataStorage()->GetAll()->CastToSTLConstContainer(); for (auto node : allDataNodes) { auto nodeData = node->GetData(); if (nodeData && nodeData->GetUID() == imageStatistics->GetUID()) { node->SetData(statistic); } } } // statistics base data does not exist: add new node else { auto statisticsNodeName = m_selectedImageNode->GetName(); if (m_selectedMaskNode) { statisticsNodeName += "_" + m_selectedMaskNode->GetName(); } statisticsNodeName += "_statistics"; auto statisticsNode = mitk::CreateImageStatisticsNode(statistic, statisticsNodeName); this->GetDataStorage()->Add(statisticsNode); } if (!m_selectedPlanarFigure || m_selectedPlanarFigure->IsClosed()) { //this->FillHistogramWidget({m_CalculationJob->GetTimeStepHistogram()}, {m_selectedImageNode->GetName()}); } } { mitk::StatusBar::GetInstance()->DisplayErrorText(runnable->GetLastErrorMessage().c_str()); m_Controls.widget_histogram->setEnabled(false); } m_Controls.label_currentlyComputingStatistics->setVisible(false); } void QmitkImageStatisticsView::OnRequestHistogramUpdate(unsigned int nBins) { m_CalculationJob->SetHistogramNBins(nBins); m_CalculationJob->start(); } void QmitkImageStatisticsView::CalculateStatistics(const mitk::Image *image, const mitk::Image *mask, const mitk::PlanarFigure *maskPlanarFigure) { auto runnable = new QmitkImageStatisticsCalculationRunnable(); runnable->Initialize(image, mask, maskPlanarFigure); runnable->setAutoDelete(false); m_Runnables.push_back(runnable); connect(runnable, &QmitkImageStatisticsCalculationRunnable::finished, this, &QmitkImageStatisticsView::OnStatisticsCalculationEnds, Qt::QueuedConnection); try { // Compute statistics QThreadPool::globalInstance()->start(runnable); m_Controls.label_currentlyComputingStatistics->setVisible(true); } catch (const mitk::Exception &e) { mitk::StatusBar::GetInstance()->DisplayErrorText(e.GetDescription()); m_Controls.label_currentlyComputingStatistics->setVisible(false); } catch (const std::runtime_error &e) { mitk::StatusBar::GetInstance()->DisplayErrorText(e.what()); m_Controls.label_currentlyComputingStatistics->setVisible(false); } catch (const std::exception &e) { mitk::StatusBar::GetInstance()->DisplayErrorText(e.what()); m_Controls.label_currentlyComputingStatistics->setVisible(false); } } void QmitkImageStatisticsView::OnSelectionChanged(berry::IWorkbenchPart::Pointer part, const QList &nodes) { Q_UNUSED(part); Q_UNUSED(nodes); } -/*void QmitkImageStatisticsView::PrepareDataStorageComboBoxes() -{ - auto isPlanarFigurePredicate = mitk::GetImageStatisticsPlanarFigurePredicate(); - auto isMaskPredicate = mitk::GetImageStatisticsMaskPredicate(); - auto isImagePredicate = mitk::GetImageStatisticsImagePredicate(); - auto isMaskOrPlanarFigurePredicate = mitk::NodePredicateOr::New(isPlanarFigurePredicate, isMaskPredicate); - - m_Controls.imageSelector->SetDataStorage(GetDataStorage()); - m_Controls.imageSelector->SetPredicate(isImagePredicate); - - m_Controls.maskImageSelector->SetDataStorage(GetDataStorage()); - - m_Controls.maskImageSelector->SetPredicate(isMaskOrPlanarFigurePredicate); - m_Controls.maskImageSelector->SetZeroEntryText(""); -}*/ - void QmitkImageStatisticsView::Activated() {} void QmitkImageStatisticsView::Deactivated() {} void QmitkImageStatisticsView::Visible() { /*connect(this->m_Controls.imageSelector, static_cast(&QComboBox::currentIndexChanged), this, &QmitkImageStatisticsView::OnImageSelectorChanged); connect(this->m_Controls.maskImageSelector, static_cast(&QComboBox::currentIndexChanged), this, &QmitkImageStatisticsView::OnMaskSelectorChanged); OnImageSelectorChanged(); OnMaskSelectorChanged();*/ } void QmitkImageStatisticsView::Hidden() { //m_Controls.imageSelector->disconnect(); //m_Controls.maskImageSelector->disconnect(); } void QmitkImageStatisticsView::SetFocus() {} \ No newline at end of file