27 #include "../../../dataaccess/dataset/DataSet.h"
28 #include "../../../dataaccess/utils/Utils.h"
29 #include "../../../raster/Band.h"
30 #include "../../../raster/Raster.h"
31 #include "../../../raster/Utils.h"
32 #include "../charts/ChartDisplay.h"
33 #include "../charts/ChartStyle.h"
34 #include "../charts/Histogram.h"
35 #include "../charts/HistogramChart.h"
36 #include "../charts/HistogramStyle.h"
38 #include "ui_RasterHistogramWidgetForm.h"
41 #include <QGridLayout>
44 #include <qwt_legend.h>
51 m_ui(new Ui::RasterHistogramWidgetForm)
55 m_ui->m_applyToolButton->setIcon(QIcon::fromTheme(
"chart-bar"));
68 QGridLayout* layout =
new QGridLayout(
m_ui->m_widget);
77 layout->setContentsMargins(0,0,0,0);
94 m_chartDisplay->insertLegend(
new QwtLegend(), QwtPlot::RightLegend);
102 m_ui->m_frame->setVisible(
false);
116 m_inputRaster.reset(raster);
119 m_ui->m_bandComboBox->clear();
121 for(
unsigned int i = 0; i < m_inputRaster->getNumberOfBands(); ++i)
126 m_ui->m_bandComboBox->addItem(strBand);
132 m_outputRaster.reset(raster);
137 QString toFind = QString::number(band);
138 int idx = m_ui->m_bandComboBox->findText(toFind);
139 m_ui->m_bandComboBox->setCurrentIndex(idx);
141 if(m_inputRaster.get())
143 m_histogramInput->setValues(std::map<te::dt::AbstractData*, unsigned int>());
145 std::map<double, unsigned int> values = m_inputRaster->getBand(band)->getHistogramR();
147 for(std::map<double, unsigned int>::iterator it = values.begin(); it != values.end(); ++it)
149 m_histogramInput->insert(std::make_pair(
new te::dt::Double(it->first), it->second));
152 m_histogramInput->setMinValue(m_inputRaster->getBand(band)->getMinValue().real());
154 m_histogramChartInput->setData();
157 if(m_outputRaster.get())
159 m_histogramOutput->setValues(std::map<te::dt::AbstractData*, unsigned int>());
163 std::map<double, unsigned int> values = m_outputRaster->getBand(band)->getHistogramR();
165 for(std::map<double, unsigned int>::iterator it = values.begin(); it != values.end(); ++it)
167 m_histogramOutput->insert(std::make_pair(
new te::dt::Double(it->first), it->second));
173 m_histogramOutput->setMinValue(m_outputRaster->getBand(band)->getMinValue().real());
175 m_histogramChartOutput->setData();
178 m_chartDisplay->updateLayout();
180 m_chartDisplay->replot();
188 m_minValueLine->attach(m_chartDisplay);
190 m_minValueLine->detach();
198 m_minValueLine =
new QwtPlotMarker();
199 m_minValueLine->setLabel(QString::fromLatin1(
"Minimum"));
200 m_minValueLine->setLabelAlignment(Qt::AlignLeft | Qt::AlignVCenter);
201 m_minValueLine->setLabelOrientation(Qt::Vertical);
202 m_minValueLine->setLineStyle(QwtPlotMarker::VLine);
204 m_minValueLine->attach(m_chartDisplay);
207 m_minValueLine->setXValue(value);
211 m_chartDisplay->updateLayout();
213 m_chartDisplay->replot();
220 m_minValueLine->setLabel(value);
228 m_maxValueLine->attach(m_chartDisplay);
230 m_maxValueLine->detach();
238 m_maxValueLine =
new QwtPlotMarker();
239 m_maxValueLine->setLabel(QString::fromLatin1(
"Maximum"));
240 m_maxValueLine->setLabelAlignment(Qt::AlignLeft | Qt::AlignVCenter);
241 m_maxValueLine->setLabelOrientation(Qt::Vertical);
242 m_maxValueLine->setLineStyle(QwtPlotMarker::VLine);
244 m_maxValueLine->attach(m_chartDisplay);
247 m_maxValueLine->setXValue(value);
251 m_chartDisplay->updateLayout();
253 m_chartDisplay->replot();
260 m_maxValueLine->setLabel(value);
265 int index = m_ui->m_bandComboBox->currentIndex();
267 drawHistogram(index);
272 int xMin = (int)point.x();
274 emit minValueSelected(xMin, m_ui->m_bandComboBox->currentIndex());
279 int xMax = (int)point.x();
281 emit maxValueSelected(xMax, m_ui->m_bandComboBox->currentIndex());
An abstract class for raster data strucutures.
A template for atomic data types (integers, floats, strings and others).