00001 #include <QtGui>
00002 #include "streampolyline.h"
00003 #include "../../pihmRasterLIBS/lsm.h"
00004 #include "../../pihmRasterLIBS/streamSegmentationShp.h"
00005
00006 #include "../../pihmLIBS/helpDialog/helpdialog.h"
00007
00008 #include <fstream>
00009 using namespace std;
00010
00011 StreamPolyLineDlg::StreamPolyLineDlg(QWidget *parent)
00012 {
00013 setupUi(this);
00014 connect(inputSTRBrowseButton, SIGNAL(clicked()), this, SLOT(inputSTRBrowse()));
00015 connect(inputFDRBrowseButton, SIGNAL(clicked()), this, SLOT(inputFDRBrowse()));
00016 connect(outputBrowseButton, SIGNAL(clicked()), this, SLOT(outputBrowse()));
00017 connect(runButton, SIGNAL(clicked()), this, SLOT(run()));
00018 connect(helpButton, SIGNAL(clicked()), this, SLOT(help()));
00019 connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
00020 }
00021
00022 void StreamPolyLineDlg::inputSTRBrowse()
00023 {
00024 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","Stream Grid File(*.adf *.asc)");
00025 inputSTRFileLineEdit->setText(str);
00026 }
00027
00028 void StreamPolyLineDlg::inputFDRBrowse()
00029 {
00030 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","Flow Dir Grid File(*.adf *.asc)");
00031 inputFDRFileLineEdit->setText(str);
00032 }
00033
00034 void StreamPolyLineDlg::outputBrowse()
00035 {
00036 QString temp = QFileDialog::getSaveFileName(this, "Choose File", "~/","Stream PolyLine File(*.shp)");
00037 QString tmp = temp;
00038 if(!(tmp.toLower()).endsWith(".shp")){
00039 tmp.append(".shp");
00040 temp = tmp;
00041 }
00042
00043 outputFileLineEdit->setText(temp);
00044 }
00045
00046
00047 void StreamPolyLineDlg::run()
00048 {
00049 QString logFileName("c:\log.html");
00050 ofstream log;
00051 log.open(logFileName.ascii());
00052 log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
00053 log.close();
00054 messageLog->setSource(logFileName);
00055 messageLog->setFocus();
00056 messageLog->setModified(TRUE);
00057
00058 QString inputSTRFileName((inputSTRFileLineEdit->text()));
00059 QString inputFDRFileName((inputFDRFileLineEdit->text()));
00060 QString outputShpFileName((outputFileLineEdit->text()));
00061 QString outputDbfFileName;
00062 outputDbfFileName = outputShpFileName;
00063 outputDbfFileName.truncate(outputDbfFileName.length()-3);
00064 outputDbfFileName.append("dbf");
00065
00066 ifstream STRinFile; STRinFile.open((inputSTRFileLineEdit->text()).ascii());
00067 ifstream FDRinFile; FDRinFile.open((inputFDRFileLineEdit->text()).ascii());
00068 ofstream outFile; outFile.open((outputFileLineEdit->text()).ascii());
00069 int runFlag = 1;
00070
00071 log.open(logFileName.ascii(), ios::app);
00072 if(inputSTRFileName.length()==0){
00073 log<<"<p><font size=3 color=red> Error! Please input Stream Grid Input File</p>";
00074 runFlag = 0;
00075 }
00076 else{
00077 log<<"<p>Checking... "<<inputSTRFileName.ascii()<<"... ";
00078 if(STRinFile == NULL){
00079 log<<"<font size=3 color=red> Error!</p>";
00080 qWarning("\n%s doesn't exist!", (inputSTRFileLineEdit->text()).ascii());
00081 runFlag = 0;
00082 }
00083 else
00084 log<<"Done!</p>";
00085 }
00086 log.close();
00087 messageLog->reload();
00088 QApplication::processEvents();
00089
00090 log.open(logFileName.ascii(), ios::app);
00091 if(inputFDRFileName.length()==0){
00092 log<<"<p><font size=3 color=red> Error! Please input Flow Dir. Grid Input File</p>";
00093 runFlag = 0;
00094 }
00095 else{
00096 log<<"<p>Checking... "<<inputFDRFileName.ascii()<<"... ";
00097 if(FDRinFile == NULL){
00098 log<<"<font size=3 color=red> Error!</p>";
00099 qWarning("\n%s doesn't exist!", (inputFDRFileLineEdit->text()).ascii());
00100 runFlag = 0;
00101 }
00102 else
00103 log<<"Done!</p>";
00104 }
00105 log.close();
00106 messageLog->reload();
00107 QApplication::processEvents();
00108
00109 log.open(logFileName.ascii(), ios::app);
00110 if(outputShpFileName.length()==0){
00111 log<<"<p><font size=3 color=red> Error! Please input Stream Output File</p>";
00112 runFlag = 0;
00113 }
00114 else{
00115 log<<"<p>Checking... "<<outputShpFileName.ascii()<<"... ";
00116 if(outFile == NULL){
00117 log<<"<font size=3 color=red> Error!</p>";
00118 qWarning("\nCan not open output file name");
00119 runFlag = 0;
00120 }
00121 else
00122 log<<"Done!</p>";
00123 }
00124 log.close();
00125 messageLog->reload();
00126 QApplication::processEvents();
00127
00128 if(runFlag == 1){
00129 log.open(logFileName.ascii(), ios::app);
00130 log<<"<p>Running...";
00131 log.close();
00132 messageLog->reload();
00133 QApplication::processEvents();
00134
00135 int err = streamSegmentationShp((char *)inputSTRFileName.ascii(), (char *)inputFDRFileName.ascii(), (char *)outputShpFileName.ascii(), (char *)outputDbfFileName.ascii());
00136
00137 log.open(logFileName.ascii(), ios::app);
00138 log<<" Done!</p>";
00139 log.close();
00140 messageLog->reload();
00141 QApplication::processEvents();
00142
00143 if(showSG_DFrame->isChecked() == 1){
00144 applicationPointer->addLayer(QStringList(outputShpFileName), NULL);
00145
00146 }
00147 }
00148 }
00149
00150 void StreamPolyLineDlg::help()
00151 {
00152 helpDialog* hlpDlg = new helpDialog(this, "Stream Polyline", 1, "helpFiles/streampolyline.html", "Help :: Stream Polyline");
00153 hlpDlg->show();
00154
00155 }
00156
00157 void StreamPolyLineDlg::setApplicationPointer(QgisApp* appPtr){
00158 applicationPointer = appPtr;
00159 }