28 #include "../../../color/ColorBar.h"
29 #include "../../../common/STLUtils.h"
30 #include "../../../dataaccess/dataset/DataSet.h"
31 #include "../../../dataaccess/dataset/DataSetType.h"
32 #include "../../../dataaccess/utils/Utils.h"
33 #include "../../../datatype.h"
34 #include "../../../maptools/DataSetLayer.h"
35 #include "../../../maptools/GroupingAlgorithms.h"
36 #include "../../../maptools/RasterLayer.h"
37 #include "../../../fe/Literal.h"
38 #include "../../../raster.h"
39 #include "../../../raster/RasterSummary.h"
40 #include "../../../raster/RasterSummaryManager.h"
41 #include "../../../se/ColorMap.h"
42 #include "../../../se/Categorize.h"
43 #include "../../../se/Enums.h"
44 #include "../../../se/Interpolate.h"
45 #include "../../../se/InterpolationPoint.h"
46 #include "../../../se/ParameterValue.h"
47 #include "../../../se/RasterSymbolizer.h"
48 #include "../../../se/Utils.h"
49 #include "../../widgets/colorbar/ColorBar.h"
50 #include "../../widgets/colorbar/ColorCatalogWidget.h"
52 #include "ui_ColorMapWidgetForm.h"
55 #include <QColorDialog>
56 #include <QMessageBox>
67 m_ui(new Ui::ColorMapWidgetForm),
74 QGridLayout* l =
new QGridLayout(
m_ui->m_colorBarWidget);
75 l->setContentsMargins(0,0,0,0);
79 m_ui->m_minValueLineEdit->setValidator(
new QDoubleValidator(
this));
80 m_ui->m_maxValueLineEdit->setValidator(
new QDoubleValidator(
this));
86 connect(
m_ui->m_bandComboBox, SIGNAL(activated(QString)),
this, SLOT(
onBandSelected(QString)));
107 m_ui->m_bandComboBox->clear();
109 for(
int i = 0; i < nBands; ++i)
114 m_ui->m_bandComboBox->addItem(strBand);
118 onBandSelected(m_ui->m_bandComboBox->itemText(0));
132 int index = m_ui->m_transformComboBox->currentIndex();
134 int type = m_ui->m_transformComboBox->itemData(index).toInt();
138 buildCategorizationMap();
142 buildInterpolationMap();
149 return m_cm->clone();
154 if(m_ui->m_bandComboBox->count() != 0)
156 return m_ui->m_bandComboBox->currentText().toStdString();
164 m_colorBar->getColorBar()->setHeight(20);
165 m_colorBar->getColorBar()->setScaleVisible(
false);
167 m_ui->m_transformComboBox->clear();
176 m_ui->m_tableWidget->setRowCount(0);
185 if(m_cm->getCategorize())
187 for(
int i = 0; i < m_ui->m_transformComboBox->count(); ++i)
190 m_ui->m_transformComboBox->setCurrentIndex(i);
193 std::vector<te::se::ParameterValue*> t = m_cm->getCategorize()->getThresholds();
194 std::vector<te::se::ParameterValue*> tV = m_cm->getCategorize()->getThresholdValues();
196 m_ui->m_slicesSpinBox->setValue(tV.size() - 2);
198 m_ui->m_tableWidget->setRowCount(tV.size() - 2);
208 for(
size_t i = 1; i < tV.size() - 1; ++i)
211 std::string lowerLimit =
"";
212 std::string upperLimit =
"";
220 else if(i == tV.size() - 1)
235 if(count != 0 && count != tV.size() - 2)
237 double pos = (1. / (tV.size() - 2)) * count;
251 p.fillRect(0,0,24, 24, color);
252 p.setBrush(Qt::transparent);
254 p.drawRect(0, 0, 23, 23);
258 QTableWidgetItem* item =
new QTableWidgetItem(pix,
"");
259 item->setFlags(Qt::ItemIsEnabled);
260 m_ui->m_tableWidget->setItem(i - 1, 0, item);
263 std::string rangeLower = lowerLimit;
264 QTableWidgetItem* itemRangeLower =
new QTableWidgetItem();
265 itemRangeLower->setText(rangeLower.c_str());
266 itemRangeLower->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
267 m_ui->m_tableWidget->setItem(i - 1, 1, itemRangeLower);
270 std::string rangeUpper = upperLimit;
271 QTableWidgetItem* itemRangeUpper =
new QTableWidgetItem();
272 itemRangeUpper->setText(rangeUpper.c_str());
273 itemRangeUpper->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
274 m_ui->m_tableWidget->setItem(i - 1, 2, itemRangeUpper);
284 else if(m_cm->getInterpolate())
286 for(
int i = 0; i < m_ui->m_transformComboBox->count(); ++i)
289 m_ui->m_transformComboBox->setCurrentIndex(i);
292 std::vector<te::se::InterpolationPoint*> ip = m_cm->getInterpolate()->getInterpolationPoints();
294 m_ui->m_slicesSpinBox->setValue(ip.size() - 1);
296 m_ui->m_tableWidget->setRowCount(ip.size() - 1);
306 for(
size_t i = 0; i < ip.size() - 1; ++i)
319 valStrBegin.setNum(ipItem->
getData());
320 valStrEnd.setNum(ipItem2->
getData());
323 valStr.append(valStrBegin);
324 valStr.append(
" - ");
325 valStr.append(valStrEnd);
329 if(count != 0 && count != ip.size() - 1)
331 double pos = (1. / (ip.size() - 1)) * count;
345 p.fillRect(0,0,12, 24, color1);
346 p.fillRect(12,0,12, 24, color2);
347 p.setBrush(Qt::transparent);
349 p.drawRect(0, 0, 23, 23);
353 QTableWidgetItem* item =
new QTableWidgetItem(icon,
"");
355 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
356 m_ui->m_tableWidget->setItem(i, 0, item);
359 QTableWidgetItem* itemRangeLower =
new QTableWidgetItem();
360 itemRangeLower->setText(valStrBegin);
361 itemRangeLower->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
362 m_ui->m_tableWidget->setItem(i, 1, itemRangeLower);
365 QTableWidgetItem* itemRangeUpper =
new QTableWidgetItem();
366 itemRangeUpper->setText(valStrEnd);
367 itemRangeUpper->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
368 m_ui->m_tableWidget->setItem(i, 2, itemRangeUpper);
380 disconnect(m_colorBar, SIGNAL(colorBarChanged()),
this, SLOT(onApplyPushButtonClicked()));
385 connect(m_colorBar, SIGNAL(colorBarChanged()),
this, SLOT(onApplyPushButtonClicked()));
388 m_ui->m_tableWidget->resizeColumnsToContents();
389 #if (QT_VERSION >= 0x050000)
390 m_ui->m_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
392 m_ui->m_tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
403 QColor cWhite(Qt::white);
404 std::string colorWhiteStr = cWhite.name().toLatin1().data();
409 for(
int i = 0; i < m_ui->m_tableWidget->rowCount(); ++i)
411 QColor color = QColor::fromRgb(m_ui->m_tableWidget->item(i, 0)->icon().pixmap(24, 24).toImage().pixel(1,1));
413 std::string rangeStr = m_ui->m_tableWidget->item(i, 1)->text().toStdString();
414 std::string colorStr = color.name().toStdString();
419 if(i == m_ui->m_tableWidget->rowCount() - 1)
421 rangeStr = m_ui->m_tableWidget->item(i, 2)->text().toStdString();
433 m_cm->setCategorize(c);
434 m_cm->setInterpolate(0);
505 for(
int i = 0; i < m_ui->m_tableWidget->rowCount(); ++i)
507 QColor color = QColor::fromRgb(m_ui->m_tableWidget->item(i, 0)->icon().pixmap(24, 24).toImage().pixel(1,1));
509 if(i == m_ui->m_tableWidget->rowCount() - 1)
512 QString rangeStr = m_ui->m_tableWidget->item(i, 1)->text();
513 std::string colorStr = color.name().toLatin1().data();
517 ip->
setData(rangeStr.toDouble());
520 interpolate->
add(ip);
524 color = QColor::fromRgb(m_ui->m_tableWidget->item(i, 0)->icon().pixmap(24, 24).toImage().pixel(22,1));
526 QString rangeStr = m_ui->m_tableWidget->item(i, 2)->text();
527 std::string colorStr = color.name().toLatin1().data();
531 ip->
setData(rangeStr.toDouble());
534 interpolate->
add(ip);
540 QString rangeStr = m_ui->m_tableWidget->item(i, 1)->text();
541 std::string colorStr = color.name().toLatin1().data();
545 ip->
setData(rangeStr.toDouble());
548 interpolate->
add(ip);
554 m_cm->setInterpolate(interpolate);
555 m_cm->setCategorize(0);
634 m_cb = m_colorBar->getColorBar()->getColorBar();
636 int sliceValue = m_ui->m_slicesSpinBox->value();
638 std::vector<te::color::RGBAColor> colorVec;
640 int index = m_ui->m_transformComboBox->currentIndex();
642 int type = m_ui->m_transformComboBox->itemData(index).toInt();
646 colorVec = m_cb->getSlices(sliceValue);
650 colorVec = m_cb->getSlices(sliceValue + 1);
653 std::vector<te::map::GroupingItem*> legVec;
655 std::vector<double> vec;
656 vec.push_back(m_ui->m_minValueLineEdit->text().toDouble());
657 vec.push_back(m_ui->m_maxValueLineEdit->text().toDouble());
661 m_ui->m_tableWidget->setRowCount(legVec.size());
663 for(std::size_t t = 0; t < legVec.size(); ++t)
668 QColor color(colorVec[t].getRed(), colorVec[t].getGreen(), colorVec[t].getBlue(), colorVec[t].getAlpha());
673 p.fillRect(0,0,24, 24, color);
674 p.setBrush(Qt::transparent);
676 p.drawRect(0, 0, 23, 23);
680 QTableWidgetItem* item =
new QTableWidgetItem(icon,
"");
681 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
682 m_ui->m_tableWidget->setItem(t, 0, item);
686 QColor color1(colorVec[t].getRed(), colorVec[t].getGreen(), colorVec[t].getBlue(), colorVec[t].getAlpha());
687 QColor color2(colorVec[t + 1].getRed(), colorVec[t + 1].getGreen(), colorVec[t + 1].getBlue(), colorVec[t + 1].getAlpha());
692 p.fillRect(0,0,12, 24, color1);
693 p.fillRect(12,0,12, 24, color2);
695 p.setBrush(Qt::transparent);
697 p.drawRect(0, 0, 23, 23);
701 QTableWidgetItem* item =
new QTableWidgetItem(icon,
"");
702 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
703 m_ui->m_tableWidget->setItem(t, 0, item);
707 std::string rangeStrLower = legVec[t]->getLowerLimit();
709 QTableWidgetItem* itemRangeLower =
new QTableWidgetItem();
710 itemRangeLower->setText(rangeStrLower.c_str());
711 itemRangeLower->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
712 m_ui->m_tableWidget->setItem(t, 1, itemRangeLower);
715 std::string rangeStrUpper = legVec[t]->getUpperLimit();
717 QTableWidgetItem* itemRangeUpper =
new QTableWidgetItem();
718 itemRangeUpper->setText(rangeStrUpper.c_str());
719 itemRangeUpper->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
720 m_ui->m_tableWidget->setItem(t, 2, itemRangeUpper);
731 m_ui->m_tableWidget->resizeColumnsToContents();
732 #if (QT_VERSION >= 0x050000)
733 m_ui->m_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
735 m_ui->m_tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
738 emit applyPushButtonClicked();
750 const std::complex<double>* cmin = rsMin->at(0).m_minVal;
751 const std::complex<double>* cmax = rsMax->at(0).m_maxVal;
752 double min = cmin->real();
753 double max = cmax->real();
757 m_ui->m_minValueLineEdit->setText(strMin);
761 m_ui->m_maxValueLineEdit->setText(strMax);
763 emit applyPushButtonClicked();
768 int curCol = m_ui->m_tableWidget->currentColumn();
770 int index = m_ui->m_transformComboBox->currentIndex();
772 int type = m_ui->m_transformComboBox->itemData(index).toInt();
778 QColor bgColor = QColor::fromRgb(item->icon().pixmap(24, 24).toImage().pixel(1,1));
780 QColor newBgColor = QColorDialog::getColor(bgColor, m_ui->m_tableWidget);
782 if(newBgColor.isValid())
783 bgColor = newBgColor;
793 QMessageBox::information(
this, tr(
"Classification"),
794 tr(
"Set the colors for the min and max values of this range. Also necessary to change the colors equivalents at another level to maintain consistency."));
796 QColor color1 = QColor::fromRgb(item->icon().pixmap(24, 24).toImage().pixel(1,1));
798 QColor newBgColor = QColorDialog::getColor(color1, m_ui->m_tableWidget);
800 if(newBgColor.isValid())
803 QColor color2 = QColor::fromRgb(item->icon().pixmap(24, 24).toImage().pixel(22,1));
805 newBgColor = QColorDialog::getColor(color2, m_ui->m_tableWidget);
807 if(newBgColor.isValid())
813 p.fillRect(0,0,12, 24, color1);
814 p.fillRect(12,0,12, 24, color2);
822 emit applyPushButtonClicked();
829 if(layer->getType() ==
"DATASETLAYER")
838 else if(layer->getType() ==
"RASTERLAYER")
861 if(layer->getType() ==
"DATASETLAYER")
867 std::auto_ptr<te::da::DataSet> ds = layer->
getData();
872 return ds->getRaster(rpos).release();
876 else if(layer->getType() ==
"RASTERLAYER")
891 for(std::size_t i = 0; i < allLayers.size(); ++i)
893 std::auto_ptr<te::da::DataSetType> dt(allLayers[i]->getSchema());
895 if(dt->hasRaster() &&
getLayerColorMap(allLayers[i]) && allLayers[i]->getId() != selectedLayer->getId())
897 m_ui->m_layersComboBox->addItem(allLayers[i]->getTitle().c_str(), QVariant::fromValue(allLayers[i]));
904 if(m_ui->m_layersComboBox->currentText() ==
"")
906 QMessageBox::warning(
this, tr(
"Grouping"), tr(
"There are no other layers with Grouping!"));
910 QVariant varLayer = m_ui->m_layersComboBox->itemData(m_ui->m_layersComboBox->currentIndex(), Qt::UserRole);
920 emit applyPushButtonClicked();
ParameterValue * getValue() const
The transformation of continuous values to distinct values (Categorize function). ...
void setData(const double &d)
void setMethodType(MethodType t)
TESEEXPORT RasterSymbolizer * GetRasterSymbolizer(Style *s)
Try to get raster symbolizer from a style.
te::rst::Raster * getRaster() const
void addColor(const RGBAColor &color, const double &pos)
It adds a color in the color bar.
void setLookupValue(ParameterValue *v)
void GroupingByEqualSteps(iterator begin, iterator end, int nSteps, std::vector< te::map::GroupingItem * > &legend, int precision=0, bool countElements=true)
It groups the values defined by a range of iterators using the equal steps algorithm.
The transformation of continuous values to a number of values (Interpolate function).
The "ParameterValueType" uses WFS-Filter expressions to give values for SE graphic parameters...
void setValue(ParameterValue *v)
std::auto_ptr< te::da::DataSet > getData(te::common::TraverseType travType=te::common::FORWARDONLY, const te::common::AccessPolicy accessPolicy=te::common::RAccess) const
It gets the dataset identified by the layer name.
void setLookupValue(ParameterValue *v)
A layer with reference to a raster.
static RasterSummaryManager & getInstance()
It returns a reference to the singleton instance.
void add(InterpolationPoint *i)
An abstract class for raster data strucutures.
virtual te::se::Style * getStyle() const
It returns the Style associated to the layer.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
boost::ptr_vector< BandSummary > RasterSummary
RasterSummary is just a typedef of a boost::ptr_vector.
The RasterSymbolizer describes how to render raster/matrix-coverage data (e.g., satellite photos...
They are used to define a graph of points.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
It models the concept of color bar.
te::se::ColorMap * getColorMap() const
A layer with reference to a dataset.
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void setThresholdsBelongTo(ThresholdsBelongToType t)
void addThreshold(ParameterValue *v)
TESEEXPORT std::string GetString(const te::se::ParameterValue *param)
It gets the parameter value as a string.
A ColorMap defines either the colors of a pallette-type raster source or the mapping of numeric pixel...
void addValue(ParameterValue *v)
void setFallbackValue(const std::string &v)