27 #include "../../../common/progress/ProgressManager.h"
28 #include "../../../dataaccess/dataset/DataSet.h"
29 #include "../../../dataaccess/utils/Utils.h"
30 #include "../../../raster/Raster.h"
31 #include "../../../rp/Segmenter.h"
32 #include "../../../rp/SegmenterRegionGrowingStrategy.h"
33 #include "../../../rp/Module.h"
34 #include "../help/HelpPushButton.h"
35 #include "../layer/search/LayerSearchWidget.h"
36 #include "../layer/search/LayerSearchWizardPage.h"
37 #include "../progress/ProgressViewerDialog.h"
43 #include "ui_SegmenterAdvancedOptionsWizardPageForm.h"
50 #include <QMessageBox>
53 #include <boost/timer.hpp>
54 #include <boost/format.hpp>
61 this->setWizardStyle(QWizard::ModernStyle);
62 this->setWindowTitle(tr(
"Segmenter"));
65 this->setOption(QWizard::HaveHelpButton,
true);
66 this->setOption(QWizard::HelpButtonOnRight,
false);
70 this->setButton(QWizard::HelpButton, helpButton);
84 if(currentPage() == m_layerSearchPage.get())
86 std::list<te::map::AbstractLayerPtr> list = m_layerSearchPage->getSearchWidget()->getSelecteds();
88 if(list.empty() ==
false)
92 m_segmenterPage->set(l);
95 return m_layerSearchPage->isComplete();
97 else if(currentPage() == m_segmenterPage.get())
99 bool res = m_segmenterPage->isComplete();
102 QMessageBox::warning(
this, tr(
"Warning"), tr(
"Select at least one band."));
106 else if(currentPage() == m_rasterInfoPage.get())
116 m_layerSearchPage->getSearchWidget()->setList(layerList);
117 m_layerSearchPage->getSearchWidget()->filterOnlyByRaster();
122 removePage(m_layerSearchId);
124 m_segmenterPage->set(layer);
129 return m_outputLayer;
139 m_layerSearchId = addPage(m_layerSearchPage.get());
140 addPage(m_segmenterPage.get());
141 addPage(m_segmenterAdvOptPage.get());
142 addPage(m_rasterInfoPage.get());
145 m_layerSearchPage->getSearchWidget()->enableMultiSelection(
false);
150 if(m_rasterInfoPage->getWidget()->fileExists())
152 QMessageBox::warning(
this, tr(
"Segmenter"), tr(
"File already exists."));
158 std::auto_ptr<te::da::DataSet> ds(l->getData());
166 algoInputParams.
m_enableThreadedProcessing = m_segmenterAdvOptPage->getForm()->m_enableThreadedProcessingcheckBox->isChecked();
167 algoInputParams.
m_maxSegThreads = m_segmenterAdvOptPage->getForm()->m_maximumThreadsNumberLineEdit->text().toUInt();
168 algoInputParams.
m_enableBlockProcessing = m_segmenterAdvOptPage->getForm()->m_enableBlockProcessingcheckBox->isChecked();
169 algoInputParams.
m_maxBlockSize = m_segmenterAdvOptPage->getForm()->m_maximumBlockSizeLineEdit->text().toUInt();
170 algoInputParams.
m_blocksOverlapPercent = m_segmenterAdvOptPage->getForm()->m_blockOverlapPercentSpinBox->value();
173 algoOutputParams.
m_rType = m_rasterInfoPage->getWidget()->getType();
174 algoOutputParams.
m_rInfo = m_rasterInfoPage->getWidget()->getInfo();
180 QApplication::setOverrideCursor(Qt::WaitCursor);
184 if(algorithmInstance.initialize(algoInputParams))
188 if(algorithmInstance.execute(algoOutputParams))
190 algoOutputParams.
reset();
194 m_rasterInfoPage->getWidget()->getInfo());
195 std::string elapsedTimeStr = boost::str( boost::format(
"%.2f" ) % timer.elapsed() );
196 QMessageBox::information(
this, tr(
"Segmenter"), tr(
"Segmenter ended sucessfully") + (
" (" + elapsedTimeStr +
" " ).c_str() + tr(
"seconds") +
")" );
200 QMessageBox::critical(
this, tr(
"Segmenter"), tr(
"Segmenter execution error"));
204 QApplication::restoreOverrideCursor();
211 QMessageBox::critical(
this, tr(
"Segmenter"), tr(
"Segmenter initialization error") +
216 QApplication::restoreOverrideCursor();
221 catch(
const std::exception& e)
223 QMessageBox::warning(
this, tr(
"Segmenter"), e.what());
227 QApplication::restoreOverrideCursor();
233 QMessageBox::warning(
this, tr(
"Segmenter"), tr(
"An exception has occurred!"));
237 QApplication::restoreOverrideCursor();
244 QApplication::restoreOverrideCursor();
Utility functions for the data access module.
Segmenter Output Parameters.
std::string m_rType
Output raster data source type (as described in te::raster::RasterFactory ).
This file defines a class for a Segmenter Advanced Options Wizard page.
This file defines a class for a Raster Info Wizard page.
void reset()
Clear all internal allocated resources and reset the parameters instance to its initial state...
This class is GUI used to define the segmenter advanced options parameters for the RP constast operat...
static const std::string & getLastLogStr()
Returns the last log string generated by this module.
void removeViewer(int viewerId)
Dettach a progress viewer.
static ProgressManager & getInstance()
It returns a reference to the singleton instance.
This class is GUI used to define the segmenter parameters for the RP constast operation.
This class is GUI used to define the raster info parameters for raster factory.
A Qt dialog that allows users to run a segmenter operation defined by RP module.
int addViewer(AbstractProgressViewer *apv)
Attach a progress viewer.
std::map< std::string, std::string > m_rInfo
The necessary information to create the raster (as described in te::raster::RasterFactory).
This file defines a class for a Segmenter Wizard page.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr