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   return m_cm->
clone();
 
  137   if(m_ui->m_bandComboBox->count() != 0)
 
  139     return m_ui->m_bandComboBox->currentText().toStdString();
 
  147   m_colorBar->getColorBar()->setHeight(20);
 
  148   m_colorBar->getColorBar()->setScaleVisible(
false);
 
  150   m_ui->m_transformComboBox->clear();
 
  159   m_ui->m_tableWidget->setRowCount(0);
 
  168   if(m_cm->getCategorize())
 
  170     for(
int i = 0; i < m_ui->m_transformComboBox->count(); ++i)
 
  173         m_ui->m_transformComboBox->setCurrentIndex(i);
 
  176     std::vector<te::se::ParameterValue*> t = m_cm->getCategorize()->getThresholds();
 
  177     std::vector<te::se::ParameterValue*> tV = m_cm->getCategorize()->getThresholdValues();
 
  179     m_ui->m_slicesSpinBox->setValue(tV.size() - 2);
 
  181     m_ui->m_tableWidget->setRowCount(tV.size() - 2);
 
  191     for(
size_t i = 1; i < tV.size() - 1; ++i)
 
  194       std::string lowerLimit = 
"";
 
  195       std::string upperLimit = 
"";
 
  203       else if(i == tV.size() - 1)
 
  218         if(count != 0 && count != tV.size() - 2)
 
  220           double pos = (1. / (tV.size() - 2)) * count;
 
  231       QTableWidgetItem* item = 
new QTableWidgetItem();
 
  232       item->setBackgroundColor(color);
 
  233       item->setFlags(Qt::ItemIsEnabled);
 
  234       item->setData(Qt::UserRole, QVariant((
int)i));
 
  235       m_ui->m_tableWidget->setItem(i - 1, 1, item);
 
  238       std::string range = lowerLimit + 
" - " + upperLimit;
 
  239       QTableWidgetItem* itemRange = 
new QTableWidgetItem();
 
  240       itemRange->setText(range.c_str());
 
  241       itemRange->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
 
  242       m_ui->m_tableWidget->setItem(i - 1, 0, itemRange);
 
  245       std::string rangeStr = lowerLimit + 
" to " + upperLimit;
 
  246       QTableWidgetItem* itemRangeStr = 
new QTableWidgetItem();
 
  247       itemRangeStr->setText(rangeStr.c_str());
 
  248       itemRangeStr->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
 
  249       m_ui->m_tableWidget->setItem(i - 1, 2, itemRangeStr);
 
  252   else if(m_cm->getInterpolate())
 
  254     for(
int i = 0; i < m_ui->m_transformComboBox->count(); ++i)
 
  257         m_ui->m_transformComboBox->setCurrentIndex(i);
 
  260     std::vector<te::se::InterpolationPoint*> ip = m_cm->getInterpolate()->getInterpolationPoints();
 
  262     m_ui->m_slicesSpinBox->setValue(ip.size() - 1);
 
  264     m_ui->m_tableWidget->setRowCount(ip.size() - 1);
 
  274     for(
size_t i = 0; i < ip.size() - 1; ++i)
 
  284       valStrBegin.setNum(ipItem->
getData());
 
  285       valStrEnd.setNum(ip[i+1]->getData());
 
  288       valStr.append(valStrBegin);
 
  289       valStr.append(
" - ");
 
  290       valStr.append(valStrEnd);
 
  294         if(count != 0 && count != ip.size() - 1)
 
  296           double pos = (1. / (ip.size() - 1)) * count;
 
  307       QTableWidgetItem* item = 
new QTableWidgetItem();
 
  308       item->setBackgroundColor(color);
 
  309       item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
 
  310       item->setData(Qt::UserRole, QVariant((
int)i));
 
  311       m_ui->m_tableWidget->setItem(i, 1, item);
 
  314       QTableWidgetItem* itemRange = 
new QTableWidgetItem();
 
  315       itemRange->setText(valStr);
 
  316       itemRange->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
 
  317       m_ui->m_tableWidget->setItem(i, 0, itemRange);
 
  320       QTableWidgetItem* itemRangeStr = 
new QTableWidgetItem();
 
  321       itemRangeStr->setText(valStr);
 
  322       itemRangeStr->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
 
  323       m_ui->m_tableWidget->setItem(i, 2, itemRangeStr);
 
  329     disconnect(m_colorBar, SIGNAL(colorBarChanged()), 
this, SLOT(onApplyPushButtonClicked()));
 
  334     connect(m_colorBar, SIGNAL(colorBarChanged()), 
this, SLOT(onApplyPushButtonClicked()));
 
  337   m_ui->m_tableWidget->resizeColumnToContents(0);
 
  338   m_ui->m_tableWidget->resizeColumnToContents(1);
 
  345   m_cb = m_colorBar->getColorBar()->getColorBar();
 
  347   int sliceValue = m_ui->m_slicesSpinBox->value();
 
  349   std::vector<te::color::RGBAColor> colorVec = m_cb->getSlices(sliceValue);
 
  351   std::vector<te::map::GroupingItem*> legVec;
 
  353   std::vector<double> vec;
 
  354   vec.push_back(m_ui->m_minValueLineEdit->text().toDouble());
 
  355   vec.push_back(m_ui->m_maxValueLineEdit->text().toDouble());
 
  361   c->setFallbackValue(
"#000000");
 
  364   QColor cWhite(Qt::white);
 
  365   std::string colorWhiteStr = cWhite.name().toLatin1().data();
 
  370   for(
size_t i = 0; i < colorVec.size(); ++i)
 
  372     QColor color(colorVec[i].getRed(), colorVec[i].getGreen(), colorVec[i].getBlue(), colorVec[i].getAlpha());
 
  374     std::string rangeStr = legVec[i]->getLowerLimit();
 
  375     std::string colorStr = color.name().toStdString();
 
  380     if(i == colorVec.size() - 1)
 
  382       rangeStr = legVec[i]->getUpperLimit();
 
  394     m_cm->setCategorize(c);
 
  395     m_cm->setInterpolate(0);
 
  403   m_cb = m_colorBar->getColorBar()->getColorBar();
 
  405   int sliceValue = m_ui->m_slicesSpinBox->value();
 
  407   std::vector<te::color::RGBAColor> colorVec = m_cb->getSlices(sliceValue + 1);
 
  409   std::vector<te::map::GroupingItem*> legVec;
 
  411   std::vector<double> vec;
 
  412   vec.push_back(m_ui->m_minValueLineEdit->text().toDouble());
 
  413   vec.push_back(m_ui->m_maxValueLineEdit->text().toDouble());
 
  420   interpolate->setFallbackValue(
"#000000");
 
  425   for(
size_t i = 0; i < colorVec.size(); ++i)
 
  427     QColor color(colorVec[i].getRed(), colorVec[i].getGreen(), colorVec[i].getBlue(), colorVec[i].getAlpha());
 
  429     if(i == colorVec.size() - 1)
 
  431       QString rangeStr = legVec[i - 1]->getUpperLimit().c_str();
 
  432       std::string colorStr = color.name().toLatin1().data();
 
  436       ip->
setData(rangeStr.toDouble());
 
  439       interpolate->add(ip);
 
  443       QString rangeStr = legVec[i]->getLowerLimit().c_str();
 
  444       std::string colorStr = color.name().toLatin1().data();
 
  448       ip->
setData(rangeStr.toDouble());
 
  451       interpolate->add(ip);
 
  457     m_cm->setInterpolate(interpolate);
 
  458     m_cm->setCategorize(0);
 
  470   int index = m_ui->m_transformComboBox->currentIndex();
 
  472   int type = m_ui->m_transformComboBox->itemData(index).toInt();
 
  476     buildCategorizationMap();
 
  480     buildInterpolationMap();
 
  487   emit applyPushButtonClicked();
 
  501   const std::complex<double>* cmin = rsMin->at(0).m_minVal;
 
  502   const std::complex<double>* cmax = rsMax->at(0).m_maxVal;
 
  503   double min = cmin->real();
 
  504   double max = cmax->real();
 
  508   m_ui->m_minValueLineEdit->setText(strMin);
 
  512   m_ui->m_maxValueLineEdit->setText(strMax);
 
  517   int curCol = m_ui->m_tableWidget->currentColumn();
 
  518   int curRow = m_ui->m_tableWidget->currentRow();
 
  522     int index = item->data(Qt::UserRole).toInt();
 
  524     QColor bgColor = item->backgroundColor();
 
  526     QColor newBgColor = QColorDialog::getColor(bgColor, m_ui->m_tableWidget);
 
  528     if(newBgColor.isValid())
 
  529       bgColor = newBgColor;
 
  533     int type = m_ui->m_transformComboBox->itemData(m_ui->m_transformComboBox->currentIndex()).toInt();
 
  541       litExp->
setValue(bgColor.name().toStdString());
 
  545       std::vector<te::se::InterpolationPoint*> ip = m_cm->getInterpolate()->getInterpolationPoints();
 
  552     item->setBackgroundColor(bgColor);
 
  554     emit applyPushButtonClicked();
 
  562   if(layer->getType() == 
"DATASETLAYER")
 
  571   else if(layer->getType() == 
"RASTERLAYER")
 
  596   if(layer->getType() == 
"DATASETLAYER")
 
  602       std::auto_ptr<te::da::DataSet> ds = layer->
getData();
 
  607         return ds->getRaster(rpos).release();
 
  611   else if(layer->getType() == 
"RASTERLAYER")
 
  626   for(std::size_t i = 0; i < allLayers.size(); ++i)
 
  628     std::auto_ptr<te::da::DataSetType> dt(allLayers[i]->getSchema());
 
  630     if(dt->hasRaster() && 
getLayerColorMap(allLayers[i]) && allLayers[i]->getId() != selectedLayer->getId())
 
  632       m_ui->m_layersComboBox->addItem(allLayers[i]->getTitle().c_str(), QVariant::fromValue(allLayers[i]));
 
  639   if(m_ui->m_layersComboBox->currentText() == 
"")
 
  641     QMessageBox::warning(
this, tr(
"Grouping"), tr(
"There are no other layers with Grouping!"));
 
  645   QVariant varLayer = m_ui->m_layersComboBox->itemData(m_ui->m_layersComboBox->currentIndex(), Qt::UserRole);
 
  653   if(cm->getCategorize())
 
  655     buildCategorizationMap();
 
  657   else if(cm->getInterpolate())
 
  659     buildInterpolationMap();
 
  662   emit applyPushButtonClicked();
 
ParameterValue * getValue() const 
 
The transformation of continuous values to distinct values (Categorize function). ...
 
void setData(const double &d)
 
te::fe::Expression * m_expression
Parameter from an expression. 
 
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 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)
 
void setValue(const std::string &v)
It sets the literal value. 
 
const Parameter * getParameter(size_t i) const 
 
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. 
 
A layer with reference to a raster. 
 
static RasterSummaryManager & getInstance()
It returns a reference to the singleton instance. 
 
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...
 
This class can be used to represent literal values. 
 
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
 
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...
 
const std::vector< ParameterValue * > & getThresholdValues() const