diff --git a/Modules/ImageStatisticsUI/CMakeLists.txt b/Modules/ImageStatisticsUI/CMakeLists.txt index e485f5c3d3..dae8b9505b 100644 --- a/Modules/ImageStatisticsUI/CMakeLists.txt +++ b/Modules/ImageStatisticsUI/CMakeLists.txt @@ -1,5 +1,5 @@ MITK_CREATE_MODULE( INCLUDE_DIRS Qmitk - DEPENDS MitkCore MitkChart + DEPENDS MitkCore MitkChart MitkImageStatistics PACKAGE_DEPENDS PRIVATE Qt5|WebEngineWidgets ) \ No newline at end of file diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.cpp new file mode 100644 index 0000000000..cfe1a21d7c --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.cpp @@ -0,0 +1,104 @@ +/*=================================================================== + +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 "QmitkIntensityProfileVisualizationWidget.h" + +#include + +QmitkIntensityProfileVisualizationWidget::QmitkIntensityProfileVisualizationWidget(QWidget* parent) : QWidget(parent) +{ + m_Controls.setupUi(this); + CreateConnections(); +} + +void QmitkIntensityProfileVisualizationWidget::SetIntensityProfile(mitk::IntensityProfile::ConstPointer intensityProfile, const std::string& dataLabel) +{ + if (intensityProfile == nullptr) + return; + + m_IntensityProfileList = mitk::CreateVectorFromIntensityProfile(intensityProfile); + if (m_IntensityProfileList.empty()) + return; + + m_Controls.chartWidget->AddData1D(m_IntensityProfileList, dataLabel); + m_Controls.chartWidget->SetChartType(dataLabel, QmitkChartWidget::ChartType::line); + m_Controls.chartWidget->SetXAxisLabel("Distance"); + m_Controls.chartWidget->SetYAxisLabel("Intensity"); + m_Controls.chartWidget->Show(m_Controls.checkBoxShowSubchart->isChecked()); + + SetGUIElementsEnabled(true); +} + +void QmitkIntensityProfileVisualizationWidget::Reset() +{ + m_Controls.chartWidget->Clear(); + SetGUIElementsEnabled(false); +} + +void QmitkIntensityProfileVisualizationWidget::CreateConnections() +{ + connect(m_Controls.checkBoxShowSubchart, &QCheckBox::clicked, this, &QmitkIntensityProfileVisualizationWidget::OnShowSubchartCheckBoxChanged); + connect(m_Controls.buttonCopyToClipboard, &QPushButton::clicked, this, &QmitkIntensityProfileVisualizationWidget::OnClipboardButtonClicked); +} + +void QmitkIntensityProfileVisualizationWidget::SetGUIElementsEnabled(bool enabled) +{ + this->setEnabled(enabled); + m_Controls.groupBoxIntensityProfile->setEnabled(enabled); + m_Controls.groupBoxPlot->setEnabled(enabled); + m_Controls.buttonCopyToClipboard->setEnabled(enabled); + m_Controls.checkBoxShowSubchart->setEnabled(enabled); + m_Controls.chartWidget->setEnabled(enabled); + m_Controls.labelIntensityProfileIsInvisibleWarning->setEnabled(enabled); + m_Controls.labelInfo->setEnabled(enabled); +} + +std::vector QmitkIntensityProfileVisualizationWidget::ConvertIntensityProfileToVector(mitk::IntensityProfile::ConstPointer intensityProfile) const +{ + std::vector intensityProfileList; + if (intensityProfile != nullptr) + { + auto end = intensityProfile->End(); + + for (auto it = intensityProfile->Begin(); it != end; ++it) + { + intensityProfileList.push_back(it.GetMeasurementVector()[0]); + } + } + return intensityProfileList; +} + +void QmitkIntensityProfileVisualizationWidget::OnClipboardButtonClicked() +{ + if (m_IntensityProfileList.empty()) + return; + + QApplication::clipboard()->clear(); + + QString clipboard("Pixel \t Intensity\n"); + for (unsigned int i = 0; i < m_IntensityProfileList.size(); i++) + { + clipboard = clipboard.append("%L1 \t %L2\n") + .arg(QString::number(i)) + .arg(QString::number(m_IntensityProfileList.at(i))); + } + QApplication::clipboard()->setText(clipboard, QClipboard::Clipboard); +} + +void QmitkIntensityProfileVisualizationWidget::OnShowSubchartCheckBoxChanged() +{ + m_Controls.chartWidget->Show(m_Controls.checkBoxShowSubchart->isChecked()); +} diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.h b/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.h new file mode 100644 index 0000000000..5844885f3e --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.h @@ -0,0 +1,63 @@ +/*=================================================================== + +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. + +===================================================================*/ +#ifndef QmitkIntensityProfileVisualizationWidget_H__INCLUDED +#define QmitkIntensityProfileVisualizationWidget_H__INCLUDED + +//Qt +#include + +#include +#include + +//mitk +#include + +/** +* \brief Widget for displaying intensity profiles. +*/ + +class MITKIMAGESTATISTICSUI_EXPORT QmitkIntensityProfileVisualizationWidget : public QWidget +{ + Q_OBJECT + +public: + QmitkIntensityProfileVisualizationWidget(QWidget* parent = nullptr); + + void SetIntensityProfile(mitk::IntensityProfile::ConstPointer intensityProfile, const std::string& dataLabel); + /** \brief Clears the intensity profile and disables all GUI elements. */ + void Reset(); + +private: + + void CreateConnections(); + + void SetGUIElementsEnabled(bool enabled); + + std::vector ConvertIntensityProfileToVector(mitk::IntensityProfile::ConstPointer intensityProfile) const; + +//slots + /** \brief Saves the intensity profile to the clipboard. */ + void OnClipboardButtonClicked(); + /** \brief Shows / Hides the subchart. */ + void OnShowSubchartCheckBoxChanged(); + +private: + Ui::QmitkIntensityProfileControls m_Controls; + + std::vector m_IntensityProfileList; +}; + +#endif //QmitkIntensityProfileVisualizationWidget_H__INCLUDED \ No newline at end of file diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.ui b/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.ui new file mode 100644 index 0000000000..69e1974d51 --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkIntensityProfileVisualizationWidget.ui @@ -0,0 +1,257 @@ + + + QmitkIntensityProfileControls + + + + 0 + 0 + 540 + 460 + + + + + 540 + 460 + + + + Form + + + + false + + + + 0 + 0 + 530 + 450 + + + + + 400 + 450 + + + + + + + false + + + + + + false + + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 120 + 120 + 120 + + + + + + + 120 + 120 + 120 + + + + + + + 120 + 120 + 120 + + + + + + + + + + + + + + + false + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Plot + + + + + + Show Subchart + + + true + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Copy to Clipboard + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + QmitkChartWidget + QWidget +
QmitkChartWidget.h
+
+
+ + +
diff --git a/Modules/ImageStatisticsUI/files.cmake b/Modules/ImageStatisticsUI/files.cmake index 29fbf68799..5ba8a957ec 100644 --- a/Modules/ImageStatisticsUI/files.cmake +++ b/Modules/ImageStatisticsUI/files.cmake @@ -1,17 +1,20 @@ set(CPP_FILES Qmitk/QmitkHistogramVisualizationWidget.cpp + Qmitk/QmitkIntensityProfileVisualizationWidget.cpp ) set(H_FILES ) set(TPP_FILES ) set(UI_FILES Qmitk/QmitkHistogramVisualizationWidget.ui + Qmitk/QmitkIntensityProfileVisualizationWidget.ui ) set(MOC_H_FILES Qmitk/QmitkHistogramVisualizationWidget.h + Qmitk/QmitkIntensityProfileVisualizationWidget.h )