27 #include "../../../common/StringUtils.h"
28 #include "../../../dataaccess/dataset/DataSet.h"
29 #include "../../../dataaccess/utils/Utils.h"
30 #include "../../../raster/Grid.h"
31 #include "../../../raster/Raster.h"
34 #include "ui_ClippingWizardPageForm.h"
37 #include <QGridLayout>
39 #include <QDoubleValidator>
40 #include <QIntValidator>
41 #include <QMessageBox>
49 : QWizardPage(parent),
50 m_ui(new Ui::ClippingWizardPageForm),
59 QGridLayout* displayLayout =
new QGridLayout(
m_ui->m_frame);
67 displayLayout->setContentsMargins(0,0,0,0);
72 this->setTitle(tr(
"Clipping"));
73 this->setSubTitle(tr(
"Select the type of clipping and set their specific parameters."));
75 m_ui->m_llxLineEdit->setValidator(
new QDoubleValidator(
this));
76 m_ui->m_llyLineEdit->setValidator(
new QDoubleValidator(
this));
77 m_ui->m_urxLineEdit->setValidator(
new QDoubleValidator(
this));
78 m_ui->m_uryLineEdit->setValidator(
new QDoubleValidator(
this));
80 m_ui->m_startRowLineEdit->setValidator(
new QIntValidator(
this));
81 m_ui->m_startColumnLineEdit->setValidator(
new QIntValidator(
this));
82 m_ui->m_widthLineEdit->setValidator(
new QIntValidator(
this));
83 m_ui->m_heightLineEdit->setValidator(
new QIntValidator(
this));
89 connect(
m_ui->m_llxLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
90 connect(
m_ui->m_llyLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
91 connect(
m_ui->m_urxLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
92 connect(
m_ui->m_uryLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
94 connect(
m_ui->m_startRowLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
95 connect(
m_ui->m_startColumnLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
96 connect(
m_ui->m_widthLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
97 connect(
m_ui->m_heightLineEdit, SIGNAL(editingFinished()),
this, SIGNAL(completeChanged()));
106 int index = m_ui->m_strategyTypeComboBox->currentIndex();
107 int type = m_ui->m_strategyTypeComboBox->itemData(index).toInt();
109 if(type == CLIPPING_EXTENT)
111 if(m_ui->m_llxLineEdit->text().isEmpty() ||
112 m_ui->m_llyLineEdit->text().isEmpty() ||
113 m_ui->m_urxLineEdit->text().isEmpty() ||
114 m_ui->m_uryLineEdit->text().isEmpty()
120 else if(type == CLIPPING_DIMENSION)
122 if(m_ui->m_startRowLineEdit->text().isEmpty() ||
123 m_ui->m_startColumnLineEdit->text().isEmpty() ||
124 m_ui->m_widthLineEdit->text().isEmpty() ||
125 m_ui->m_heightLineEdit->text().isEmpty()
131 else if(type == CLIPPING_LAYER)
143 std::list<te::map::AbstractLayerPtr> list;
145 list.push_back(m_layer);
147 m_navigator->set(m_layer);
152 std::list<te::map::AbstractLayerPtr>::iterator it = layerList.begin();
154 while(it != layerList.end())
158 std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
160 if(dsType->hasGeom())
161 m_ui->m_layerComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
166 if(m_ui->m_layerComboBox->count() > 0)
167 onLayerComboBoxActivated(0);
177 int index = m_ui->m_strategyTypeComboBox->currentIndex();
178 int type = m_ui->m_strategyTypeComboBox->itemData(index).toInt();
180 return type == CLIPPING_EXTENT;
185 int index = m_ui->m_strategyTypeComboBox->currentIndex();
186 int type = m_ui->m_strategyTypeComboBox->itemData(index).toInt();
188 return type == CLIPPING_DIMENSION;
193 int index = m_ui->m_strategyTypeComboBox->currentIndex();
194 int type = m_ui->m_strategyTypeComboBox->itemData(index).toInt();
196 return type == CLIPPING_LAYER;
201 env.
m_llx = m_ui->m_llxLineEdit->text().toDouble();
202 env.
m_lly = m_ui->m_llyLineEdit->text().toDouble();
203 env.
m_urx = m_ui->m_urxLineEdit->text().toDouble();
204 env.
m_ury = m_ui->m_uryLineEdit->text().toDouble();
209 x = m_ui->m_startColumnLineEdit->text().toInt();
210 y = m_ui->m_startRowLineEdit->text().toInt();
211 width = m_ui->m_widthLineEdit->text().toInt();
212 height = m_ui->m_heightLineEdit->text().toInt();
217 emit completeChanged();
222 m_ui->m_layerAttrComboBox->clear();
224 QVariant varLayer = m_ui->m_layerComboBox->itemData(index, Qt::UserRole);
227 std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
229 for(std::size_t t = 0; t < dsType->getProperties().size(); ++t)
231 m_ui->m_layerAttrComboBox->addItem(dsType->getProperties()[t]->getName().c_str());
240 int index = m_ui->m_strategyTypeComboBox->currentIndex();
241 int type = m_ui->m_strategyTypeComboBox->itemData(index).toInt();
243 if(type == CLIPPING_EXTENT)
245 m_ui->m_llxLineEdit->setText(QString::number(env.
getLowerLeftX(),
'f', 5));
246 m_ui->m_llyLineEdit->setText(QString::number(env.
getLowerLeftY(),
'f', 5));
247 m_ui->m_urxLineEdit->setText(QString::number(env.
getUpperRightX(),
'f', 5));
248 m_ui->m_uryLineEdit->setText(QString::number(env.
getUpperRightY(),
'f', 5));
250 m_navigator->setExtent(env);
252 else if(type == CLIPPING_DIMENSION)
254 std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
259 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
267 m_ui->m_startRowLineEdit->setText(QString::number((
int)ul.
y));
268 m_ui->m_startColumnLineEdit->setText(QString::number((
int)ul.
x));
269 m_ui->m_heightLineEdit->setText(QString::number((
int)(lr.
y - ul.
y)));
270 m_ui->m_widthLineEdit->setText(QString::number((
int)(lr.
x - ul.
x)));
275 emit completeChanged();
280 m_ui->m_strategyTypeComboBox->clear();
282 m_ui->m_strategyTypeComboBox->addItem(tr(
"Extent"), CLIPPING_EXTENT);
283 m_ui->m_strategyTypeComboBox->addItem(tr(
"Dimension"), CLIPPING_DIMENSION);
void onEnvelopeAcquired(te::gm::Envelope env)
std::auto_ptr< Ui::ClippingWizardPageForm > m_ui
void getExtentClipping(te::gm::Envelope &env)
const double & getUpperRightX() const
It returns a constant refernce to the x coordinate of the upper right corner.
ClippingWizardPage(QWidget *parent=0)
double m_urx
Upper right corner x-coordinate.
const double & getLowerLeftY() const
It returns a constant refernce to the y coordinate of the lower left corner.
An utility struct for representing 2D coordinates.
const double & getUpperRightY() const
It returns a constant refernce to the x coordinate of the upper right corner.
void setList(std::list< te::map::AbstractLayerPtr > &layerList)
This file defines a class for a Clipping Wizard page.
te::map::AbstractLayerPtr get()
Q_DECLARE_METATYPE(te::map::AbstractLayerPtr)
double m_llx
Lower left corner x-coordinate.
An Envelope defines a 2D rectangular region.
double m_lly
Lower left corner y-coordinate.
double m_ury
Upper right corner y-coordinate.
const double & getLowerLeftX() const
It returns a constant reference to the x coordinate of the lower left corner.
void set(te::map::AbstractLayerPtr layer)
This method is used to set the selected layer for clipping operation.
std::auto_ptr< te::qt::widgets::RasterNavigatorWidget > m_navigator
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
bool isDimensionClipping()
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void onStrategyTypeComboBoxActivated(int index)
void onLayerComboBoxActivated(int index)
void getDimensionClipping(int &x, int &y, int &width, int &height)
bool isValid() const
It tells if the rectangle is valid or not.