19 m_Controls.setupUi(
this);
20 m_Controls.checkBoxShowSubchart->setChecked(
false);
21 m_Controls.spinBoxNBins->setValue(m_DefaultNBins);
22 m_Controls.spinBoxNBins->setMinimum(m_MinNBins);
23 m_Controls.spinBoxNBins->setMaximum(m_MaxNBins);
24 SetGUIElementsEnabled(
false);
30 if (histogram ==
nullptr)
33 m_Histogram = histogram;
34 m_Controls.chartWidget->AddData2D(ConvertHistogramToPairList(m_Histogram), dataLabel);
36 m_Controls.chartWidget->SetXAxisLabel(
"Gray value");
37 m_Controls.chartWidget->SetYAxisLabel(
"Frequency");
38 m_Controls.chartWidget->Show(m_Controls.checkBoxShowSubchart->isChecked());
39 SetGUIElementsEnabled(
true);
44 m_Controls.chartWidget->Clear();
45 SetGUIElementsEnabled(
false);
49 return m_Controls.spinBoxNBins->value();
54 m_Controls.checkBoxUseDefaultNBins->setChecked(
true);
55 m_Controls.spinBoxNBins->setEnabled(
false);
56 m_Controls.spinBoxNBins->setValue(100);
57 m_Controls.checkBoxShowSubchart->setChecked(
false);
62 m_Controls.chartWidget->SetTheme(style);
65 void QmitkHistogramVisualizationWidget::CreateConnections()
67 connect(m_Controls.buttonCopyHistogramToClipboard, &QPushButton::clicked,
this, &QmitkHistogramVisualizationWidget::OnClipboardButtonClicked);
68 connect(m_Controls.checkBoxUseDefaultNBins, &QCheckBox::clicked,
this, &QmitkHistogramVisualizationWidget::OnDefaultNBinsCheckBoxChanged);
69 connect(m_Controls.spinBoxNBins, &QSpinBox::editingFinished,
this, &QmitkHistogramVisualizationWidget::OnNBinsSpinBoxValueChanged);
70 connect(m_Controls.checkBoxShowSubchart, &QCheckBox::clicked,
this, &QmitkHistogramVisualizationWidget::OnShowSubchartCheckBoxChanged);
71 connect(m_Controls.checkBoxViewMinMax, &QCheckBox::clicked,
this, &QmitkHistogramVisualizationWidget::OnViewMinMaxCheckBoxChanged);
72 connect(m_Controls.doubleSpinBoxMaxValue, &QSpinBox::editingFinished,
this, &QmitkHistogramVisualizationWidget::OnMaxValueSpinBoxValueChanged);
73 connect(m_Controls.doubleSpinBoxMinValue, &QSpinBox::editingFinished,
this, &QmitkHistogramVisualizationWidget::OnMinValueSpinBoxValueChanged);
76 void QmitkHistogramVisualizationWidget::SetGUIElementsEnabled(
bool enabled)
78 this->setEnabled(enabled);
79 m_Controls.tabWidgetPlot->setEnabled(enabled);
80 m_Controls.checkBoxShowSubchart->setEnabled(enabled);
81 m_Controls.checkBoxUseDefaultNBins->setEnabled(enabled);
82 m_Controls.spinBoxNBins->setEnabled(!m_Controls.checkBoxUseDefaultNBins->isChecked());
83 m_Controls.buttonCopyHistogramToClipboard->setEnabled(enabled);
84 m_Controls.checkBoxViewMinMax->setEnabled(enabled);
85 m_Controls.doubleSpinBoxMaxValue->setEnabled(m_Controls.checkBoxViewMinMax->isChecked());
86 m_Controls.doubleSpinBoxMinValue->setEnabled(m_Controls.checkBoxViewMinMax->isChecked());
89 std::vector< std::pair<double, double> > QmitkHistogramVisualizationWidget::ConvertHistogramToPairList(itk::Statistics::Histogram<double>::ConstPointer histogram)
const 91 std::map<double, double> histogramMap;
94 auto endIt = histogram->End();
95 auto it = histogram->Begin();
98 for (; it != endIt; ++it)
100 double frequency = it.GetFrequency();
101 double measurement = it.GetMeasurementVector()[0];
102 histogramMap.emplace(measurement, frequency);
106 std::vector< std::pair<double, double> > histogram_list;
107 for(
auto iter = histogramMap.begin(); iter != histogramMap.end(); ++iter)
108 histogram_list.emplace_back( iter->first, iter->second );
110 return histogram_list;
113 void QmitkHistogramVisualizationWidget::OnClipboardButtonClicked()
117 QApplication::clipboard()->clear();
118 QString clipboard(
"Measurement \t Frequency\n");
119 auto iter = m_Histogram->Begin();
120 auto iterEnd = m_Histogram->End();
121 for (; iter != iterEnd; ++iter)
123 clipboard = clipboard.append(
"%L1 \t %L2\n")
124 .arg(iter.GetMeasurementVector()[0], 0,
'f', 2)
125 .arg(iter.GetFrequency());
128 QApplication::clipboard()->setText(clipboard, QClipboard::Clipboard);
132 void QmitkHistogramVisualizationWidget::OnDefaultNBinsCheckBoxChanged()
134 if (m_Controls.checkBoxUseDefaultNBins->isChecked())
136 m_Controls.spinBoxNBins->setEnabled(
false);
137 if (m_Controls.spinBoxNBins->value() !=
static_cast<int>(m_DefaultNBins) ) {
138 m_Controls.spinBoxNBins->setValue(m_DefaultNBins);
139 OnNBinsSpinBoxValueChanged();
144 m_Controls.spinBoxNBins->setEnabled(
true);
148 void QmitkHistogramVisualizationWidget::OnNBinsSpinBoxValueChanged()
153 void QmitkHistogramVisualizationWidget::OnShowSubchartCheckBoxChanged()
155 m_Controls.chartWidget->Show(m_Controls.checkBoxShowSubchart->isChecked());
158 void QmitkHistogramVisualizationWidget::OnViewMinMaxCheckBoxChanged()
160 double min = m_Histogram->GetBinMin(0, 0);
161 auto maxVector = m_Histogram->GetDimensionMaxs(0);
163 if (m_Controls.checkBoxUseDefaultNBins->isChecked())
164 max = maxVector[m_DefaultNBins - 1];
166 max = maxVector[m_Controls.spinBoxNBins->value() - 1];
168 if (!m_Controls.checkBoxViewMinMax->isChecked())
170 m_Controls.doubleSpinBoxMaxValue->setEnabled(
false);
171 m_Controls.doubleSpinBoxMinValue->setEnabled(
false);
172 m_Controls.chartWidget->Reload();
176 m_Controls.doubleSpinBoxMinValue->setMinimum(min);
177 m_Controls.doubleSpinBoxMinValue->setValue(min);
178 m_Controls.doubleSpinBoxMaxValue->setMaximum(max);
179 m_Controls.doubleSpinBoxMaxValue->setValue(max);
180 m_Controls.doubleSpinBoxMaxValue->setEnabled(
true);
181 m_Controls.doubleSpinBoxMinValue->setEnabled(
true);
185 void QmitkHistogramVisualizationWidget::OnMinValueSpinBoxValueChanged()
187 m_Controls.doubleSpinBoxMaxValue->setMinimum(m_Controls.doubleSpinBoxMinValue->value()+1);
188 m_Controls.chartWidget->SetMinMaxValueXView(m_Controls.doubleSpinBoxMinValue->value(),m_Controls.doubleSpinBoxMaxValue->value());
189 m_Controls.chartWidget->Show();
192 void QmitkHistogramVisualizationWidget::OnMaxValueSpinBoxValueChanged()
194 m_Controls.doubleSpinBoxMinValue->setMaximum(m_Controls.doubleSpinBoxMaxValue->value()-1);
195 m_Controls.chartWidget->SetMinMaxValueXView(m_Controls.doubleSpinBoxMinValue->value(),m_Controls.doubleSpinBoxMaxValue->value());
196 m_Controls.chartWidget->Show();