00001 #include <QtGui>
00002 #include "flowgrid.h"
00003 #include "../../pihmRasterLIBS/lsm.h"
00004 #include "../../pihmRasterLIBS/flood.h"
00005 #include "../../pihmRasterLIBS/setdir.h"
00006 #include "../../pihmRasterLIBS/aread8.h"
00007 #include "../../pihmLIBS/helpDialog/helpdialog.h"
00008
00009 #include <fstream>
00010 using namespace std;
00011
00012 FlowGridDlg::FlowGridDlg(QWidget *parent)
00013 {
00014 setupUi(this);
00015 connect(inputBrowseButton, SIGNAL(clicked()), this, SLOT(inputBrowse()));
00016 connect(outputFDRBrowseButton, SIGNAL(clicked()), this, SLOT(outputFDRBrowse()));
00017 connect(outputFAGBrowseButton, SIGNAL(clicked()), this, SLOT(outputFAGBrowse()));
00018 connect(runButton, SIGNAL(clicked()), this, SLOT(run()));
00019 connect(helpButton, SIGNAL(clicked()), this, SLOT(help()));
00020 connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
00021 }
00022
00023 void FlowGridDlg::inputBrowse()
00024 {
00025 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","DEM/Fill Grid File(*.adf *.asc)");
00026 inputFileLineEdit->setText(str);
00027 }
00028
00029 void FlowGridDlg::outputFDRBrowse()
00030 {
00031 QString temp = QFileDialog::getSaveFileName(this, "Choose File", "~/","Flow Dir Grid File(*.adf *.asc)");
00032 QString tmp = temp;
00033 if(!(tmp.toLower()).endsWith(".asc")){
00034 tmp.append(".asc");
00035 temp = tmp;
00036 }
00037
00038 outputFDRFileLineEdit->setText(temp);
00039 }
00040
00041 void FlowGridDlg::outputFAGBrowse()
00042 {
00043 QString temp = QFileDialog::getSaveFileName(this, "Choose File", "~/","Flow Acc Grid File(*.adf *.asc)");
00044 QString tmp = temp;
00045 if(!(tmp.toLower()).endsWith(".asc")){
00046 tmp.append(".asc");
00047 temp = tmp;
00048 }
00049
00050 outputFAGFileLineEdit->setText(temp);
00051 }
00052
00053 void FlowGridDlg::run()
00054 {
00055 QString logFileName("c:\log.html");
00056 ofstream log;
00057 log.open(logFileName.ascii());
00058 log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
00059 log.close();
00060 messageLog->setSource(logFileName);
00061 messageLog->setFocus();
00062 messageLog->setModified(TRUE);
00063
00064 QString inputFileName((inputFileLineEdit->text()));
00065 QString outputFDRFileName((outputFDRFileLineEdit->text()));
00066 QString outputFAGFileName((outputFAGFileLineEdit->text()));
00067
00068 ifstream inFile; inFile.open((inputFileLineEdit->text()).ascii());
00069 ofstream FDRoutFile; FDRoutFile.open((outputFDRFileLineEdit->text()).ascii());
00070 ofstream FAGoutFile; FAGoutFile.open((outputFAGFileLineEdit->text()).ascii());
00071 int runFlag = 1;
00072
00073 log.open(logFileName.ascii(), ios::app);
00074 if(inputFileName.length()==0){
00075 log<<"<p><font size=3 color=red> Error! Please input Fill Grid Input File</p>";
00076 runFlag = 0;
00077 }
00078 else{
00079 log<<"</p>Checking... "<<inputFileName.ascii()<<"... ";
00080 if(inFile == NULL){
00081 log<<"<font size=3 color=red> Error!";
00082 qWarning("\n%s doesn't exist!", (inputFileLineEdit->text()).ascii());
00083 runFlag = 0;
00084 }
00085 else
00086 log<<"Done!";
00087 }
00088 log.close();
00089 messageLog->reload();
00090 QApplication::processEvents();
00091
00092 log.open(logFileName.ascii(), ios::app);
00093 if(outputFDRFileName.length()==0){
00094 log<<"<p><font size=3 color=red> Error! Please input FDR Output File</p>";
00095 runFlag = 0;
00096 }
00097 else{
00098 log<<"</p><p>Checking... "<<outputFDRFileName.ascii()<<"... ";
00099 if(FDRoutFile == NULL){
00100 log<<"<font size=3 color=red> Error!";
00101 qWarning("\nCan not open output file");
00102 runFlag = 0;
00103 }
00104 else
00105 log<<"Done!";
00106 }
00107 log.close();
00108 messageLog->reload();
00109 QApplication::processEvents();
00110
00111 log.open(logFileName.ascii(), ios::app);
00112 if(outputFAGFileName.length()==0){
00113 log<<"<p><font size=3 color=red> Error! Please input FAG Output File</p>";
00114 runFlag = 0;
00115 }
00116 else{
00117 log<<"</p><p>Checking... "<<outputFAGFileName.ascii()<<"... ";
00118 if(FAGoutFile == NULL){
00119 log<<"<font size=3 color=red> Error!";
00120 qWarning("\nCan not open output file name");
00121 runFlag = 0;
00122 }
00123 else
00124 log<<"Done!";
00125 }
00126 log.close();
00127 messageLog->reload();
00128 QApplication::processEvents();
00129
00130 if(runFlag == 1){
00131 log.open(logFileName.ascii(), ios::app);
00132 log<<"<p>Running Flow Direction...";
00133 log.close();
00134 messageLog->reload();
00135 QApplication::processEvents();
00136
00137 int err1 = setdird8((char *)inputFileName.ascii(), (char *)outputFDRFileName.ascii(), "dummy" );
00138
00139 log.open(logFileName.ascii(), ios::app);
00140 log<<" Done!</p>";
00141 log.close();
00142 messageLog->reload();
00143 QApplication::processEvents();
00144
00145 log.open(logFileName.ascii(), ios::app);
00146 log<<"<p>Running Flow Accumulation...";
00147 log.close();
00148 messageLog->reload();
00149 QApplication::processEvents();
00150
00151 int err2 = aread8((char *)outputFDRFileName.ascii(), (char *)outputFAGFileName.ascii(), 0.0, 0.0, 1 );
00152
00153 log.open(logFileName.ascii(), ios::app);
00154 log<<" Done!</p>";
00155 log.close();
00156 messageLog->reload();
00157 QApplication::processEvents();
00158
00159
00160 if(showFDR_DFrame->isChecked() == 1){
00161
00162 applicationPointer->addRasterLayer(QStringList(outputFDRFileName));
00163 }
00164 if(showFAG_DFrame->isChecked() == 1){
00165
00166 applicationPointer->addRasterLayer(QStringList(outputFAGFileName));
00167 }
00168 }
00169 }
00170
00171 void FlowGridDlg::help()
00172 {
00173 helpDialog* hlpDlg = new helpDialog(this, "Flow Grid", 1, "helpFiles/flowgrid.html", "Help :: Flow Grid");
00174 hlpDlg->show();
00175 }
00176
00177 void FlowGridDlg::setApplicationPointer(QgisApp* appPtr){
00178 applicationPointer = appPtr;
00179 }