ExtractData/rivFile/rivfile.cpp

Go to the documentation of this file.
00001 #include <QtGui>
00002 #include "rivfile.h"
00003 
00004 #include <iomanip>
00005 
00006 #include <fstream>
00007 using namespace std;
00008 
00009 #include "../../pihmLIBS/extractRiver4mTIN.h"
00010 #include "../../pihmLIBS/addFID.h"
00011 #include "../../pihmLIBS/addToFromNode.h"
00012 #include "../../pihmLIBS/addSOrder.h"
00013 #include "../../pihmLIBS/calDownSegment.h"
00014 
00015 #include "../../pihmLIBS/helpDialog/helpdialog.h"
00016 #include "../../pihmLIBS/shapefil.h"
00017 
00018 rivFileDlg::rivFileDlg(QWidget *parent)
00019 {
00020         setupUi(this);
00021         connect(riverFileButton, SIGNAL(clicked()), this, SLOT(riverBrowse()));
00022         connect(eleFileButton, SIGNAL(clicked()), this, SLOT(eleBrowse()));
00023         connect(nodeFileButton, SIGNAL(clicked()), this, SLOT(nodeBrowse()));
00024         connect(neighFileButton, SIGNAL(clicked()), this, SLOT(neighBrowse()));
00025         connect(rivFileButton, SIGNAL(clicked()), this, SLOT(rivBrowse()));
00026         connect(runButton, SIGNAL(clicked()), this, SLOT(run()));
00027         connect(helpButton, SIGNAL(clicked()), this, SLOT(help()));
00028         connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
00029 }
00030 
00031 void rivFileDlg::riverBrowse()
00032 {
00033         QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","shp File(*.shp *.SHP)");
00034         riverLineEdit->setText(str);
00035 }
00036 
00037 
00038 void rivFileDlg::eleBrowse()
00039 {
00040         QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","ele File(*.ele *.ELE)");
00041         eleLineEdit->setText(str);
00042 }
00043 
00044 void rivFileDlg::nodeBrowse()
00045 {
00046         QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","node File(*.node *.NODE)");
00047         nodeLineEdit->setText(str);
00048 }
00049 
00050 void rivFileDlg::neighBrowse()
00051 {
00052         QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","neigh File(*.neigh *.NEIGH)");
00053         neighLineEdit->setText(str);
00054 }
00055 
00056 
00057 void rivFileDlg::rivBrowse()
00058 {
00059         QString temp = QFileDialog::getSaveFileName(this, "Choose File", "~/", "riv File(*.riv *RIV)");
00060         QString tmp  = temp;
00061         if(!(tmp.lower()).endsWith(".riv")){
00062                 tmp.append(".riv");
00063                 temp = tmp;
00064         }
00065         rivLineEdit->setText(temp);
00066 }
00067 
00068 void rivFileDlg::run()
00069 {
00070 
00071         QString logFileName("c:\log.html");
00072         ofstream log;
00073         log.open(logFileName.ascii());
00074         log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
00075         log.close();
00076         messageLog->setSource(logFileName);
00077         messageLog->setFocus();
00078         messageLog->setModified(TRUE);
00079 
00080         ifstream ele, node, neigh, river;
00081         ofstream riv;
00082 
00083         ele.open((eleLineEdit->text()).ascii());
00084         node.open((nodeLineEdit->text()).ascii());
00085         neigh.open((neighLineEdit->text()).ascii());
00086         river.open((riverLineEdit->text()).ascii());
00087 
00088         riv.open((rivLineEdit->text()).ascii(), ios::out);
00089 
00090         int runFlag = 1;
00091 
00092         log.open(logFileName.ascii(), ios::app);
00093         if((eleLineEdit->text()).length()==0){
00094                 log<<"<p><font size=3 color=red> Error! Please input .ele Input File</p>";
00095                 runFlag = 0;
00096         }
00097         else{
00098                 log<<"<p>Checking... "<<(eleLineEdit->text()).ascii()<<"... ";
00099                 if(ele == NULL){
00100                         log<<"<font size=3 color=red> Error!</p>";
00101                         //qWarning("\n%s doesn't exist!", (inputFileLineEdit->text()).ascii());
00102                         runFlag = 0;
00103                 }
00104                 else
00105                         log<<"Done!</p>";
00106         }
00107         log.close();
00108         messageLog->reload();
00109         QApplication::processEvents();
00110 
00111 
00112         log.open(logFileName.ascii(), ios::app);
00113         if((nodeLineEdit->text()).length()==0){
00114                 log<<"<p><font size=3 color=red> Error! Please input .node Input File</p>";
00115                 runFlag = 0;
00116         }
00117         else{
00118                 log<<"<p>Checking... "<<(nodeLineEdit->text()).ascii()<<"... ";
00119                 if(node == NULL){
00120                         log<<"<font size=3 color=red> Error!</p>";
00121                         //qWarning("\n%s doesn't exist!", (inputFileLineEdit->text()).ascii());
00122                         runFlag = 0;
00123                 }
00124                 else
00125                         log<<"Done!</p>";
00126         }
00127         log.close();
00128         messageLog->reload();
00129         QApplication::processEvents();
00130 
00131         
00132         log.open(logFileName.ascii(), ios::app);
00133         if((neighLineEdit->text()).length()==0){
00134                 log<<"<p><font size=3 color=red> Error! Please input .neigh Input File</p>";
00135                 runFlag = 0;
00136         }
00137         else{
00138                 log<<"<p>Checking... "<<(neighLineEdit->text()).ascii()<<"... ";
00139                 if(neigh == NULL){
00140                         log<<"<font size=3 color=red> Error!</p>";
00141                         //qWarning("\n%s doesn't exist!", (inputFileLineEdit->text()).ascii());
00142                         runFlag = 0;
00143                 }
00144                 else
00145                         log<<"Done!</p>";
00146         }
00147         log.close();
00148         messageLog->reload();
00149         QApplication::processEvents();
00150 
00151 
00152         log.open(logFileName.ascii(), ios::app);
00153         if((riverLineEdit->text()).length()==0){
00154                 log<<"<p><font size=3 color=red> Error! Please input Split River File File</p>";
00155                 runFlag = 0;
00156         }
00157         else{
00158                 log<<"<p>Checking... "<<(riverLineEdit->text()).ascii()<<"... ";
00159                 if(river == NULL){
00160                         log<<"<font size=3 color=red> Error!</p>";
00161                         //qWarning("\n%s doesn't exist!", (inputFileLineEdit->text()).ascii());
00162                         runFlag = 0;
00163                 }
00164                 else
00165                         log<<"Done!</p>";
00166         }
00167         log.close();
00168         messageLog->reload();
00169         QApplication::processEvents();
00170 
00171 
00172         log.open(logFileName.ascii(), ios::app);
00173         if((rivLineEdit->text()).length()==0){
00174                 log<<"<p><font size=3 color=red> Error! Please input Output River File</p>";
00175                 runFlag = 0;
00176         }
00177         else{
00178                 log<<"<p>Checking... "<<(rivLineEdit->text()).ascii()<<"... ";
00179                 if(riv == NULL){
00180                         log<<"<font size=3 color=red> Error!</p>";
00181                         //qWarning("\nCan not open output file name");
00182                         runFlag = 0;
00183                 }
00184                 else
00185                         log<<"Done!</p>";
00186         }
00187         log.close();
00188         messageLog->reload();
00189         QApplication::processEvents();
00190 
00191 /*
00192         if(ele==NULL){
00193                 qWarning("\n%s doesn't exist!", (eleLineEdit->text()).ascii());
00194                 runFlag=0;
00195         }
00196         if(node==NULL){
00197                 qWarning("\n%s doesn't exist!", (nodeLineEdit->text()).ascii());
00198                 runFlag=0;
00199         }
00200         if(neigh==NULL){
00201                 qWarning("\n%s doesn't exist!", (neighLineEdit->text()).ascii());
00202                 runFlag=0;
00203         }
00204         if(river==NULL){
00205                 qWarning("\n%s doesn't exist!", (riverLineEdit->text()).ascii());
00206                 runFlag=0;
00207         }
00208         if(riv==NULL){
00209                 qWarning("\nPlease Enter .riv file name");
00210                 runFlag=0;
00211         }
00212 */
00213         if(runFlag == 1){
00214 
00215                                 
00216 
00217 
00218                 QString shpFileName((riverLineEdit->text()).ascii());
00219                 QString dbfFileName(shpFileName);
00220                         dbfFileName.truncate(dbfFileName.length()-3);
00221                         dbfFileName.append("dbf");
00222                 
00223                 QString newshp(shpFileName);
00224                 QString newdbf(shpFileName);
00225         
00226                 int slashPos = newshp.findRev("/");
00227                 newshp.truncate(slashPos);
00228                 newdbf.truncate(slashPos);
00229                 
00230                 newshp.append("/temp.shp");
00231                 newdbf.append("/temp.dbf");
00232 
00233                 qWarning("\n%s", newshp.ascii());
00234                 qWarning("\n%s", newdbf.ascii());       
00235         
00236                 QString eleFileName((eleLineEdit->text()).ascii());
00237                 QString nodeFileName((nodeLineEdit->text()).ascii());
00238                 QString neighFileName((neighLineEdit->text()).ascii());
00239                 
00240                 log.open(logFileName.ascii(), ios::app);
00241                 log<<"<p>Extracting River from TIN (MESH)...";
00242                 log.close();
00243                 messageLog->reload();
00244                 QApplication::processEvents();
00245                 
00246                 extractRiver4mTIN(shpFileName.ascii(),dbfFileName.ascii(),eleFileName.ascii(),nodeFileName.ascii(),neighFileName.ascii(), newshp.ascii(), newdbf.ascii());
00247                 
00248                 log.open(logFileName.ascii(), ios::app);
00249                 log<<" Done!</p>";
00250                 log.close();
00251                 messageLog->reload();
00252                 QApplication::processEvents();
00253 
00254 
00255                 log.open(logFileName.ascii(), ios::app);
00256                 log<<"<p>Adding FID...";
00257                 log.close();
00258                 messageLog->reload();
00259                 QApplication::processEvents();
00260  
00261                 addFID(newdbf.ascii());
00262 
00263                 log.open(logFileName.ascii(), ios::app);
00264                 log<<" Done!</p>";
00265                 log.close();
00266                 messageLog->reload();
00267                 QApplication::processEvents();
00268 
00269 
00270 
00271                 log.open(logFileName.ascii(), ios::app);
00272                 log<<"<p>Computing To and From Node information...";
00273                 log.close();
00274                 messageLog->reload();
00275                 QApplication::processEvents();
00276 
00277                 addToFromNode(newdbf.ascii(), newshp.ascii());
00278                 
00279                 log.open(logFileName.ascii(), ios::app);
00280                 log<<" Done!</p>";
00281                 log.close();
00282                 messageLog->reload();
00283                 QApplication::processEvents();
00284 
00285 
00286 
00287                 log.open(logFileName.ascii(), ios::app);
00288                 log<<"<p>Computing Stream Order...";
00289                 log.close();
00290                 messageLog->reload();
00291                 QApplication::processEvents();
00292 
00293                 addSOrder(newdbf.ascii(), newshp.ascii());
00294 
00295                 log.open(logFileName.ascii(), ios::app);
00296                 log<<" Done!</p>";
00297                 log.close();
00298                 messageLog->reload();
00299                 QApplication::processEvents();
00300 
00301 
00302 
00303                 log.open(logFileName.ascii(), ios::app);
00304                 log<<"<p>Calculating Down Segments...";
00305                 log.close();
00306                 messageLog->reload();
00307                 QApplication::processEvents();
00308 
00309                 calDownSegment(newdbf.ascii());
00310 
00311                 log.open(logFileName.ascii(), ios::app);
00312                 log<<" Done!</p>";
00313                 log.close();
00314                 messageLog->reload();
00315                 QApplication::processEvents();
00316 
00317 
00318 
00319                 log.open(logFileName.ascii(), ios::app);
00320                 log<<"<p>Writing .riv file...";
00321                 log.close();
00322                 messageLog->reload();
00323                 QApplication::processEvents();
00324 
00325 
00326                 DBFHandle dbf = DBFOpen(newdbf.ascii(), "rb");
00327 
00328                 int fid         = DBFGetFieldIndex(dbf, "FID");
00329                 int fromTriNode = DBFGetFieldIndex(dbf, "FromTriNode");
00330                 int toTriNode   = DBFGetFieldIndex(dbf, "ToTriNode");
00331                 int downSeg     = DBFGetFieldIndex(dbf, "DownSegmt");
00332                 int leftEle     = DBFGetFieldIndex(dbf, "LeftEle");
00333                 int rightEle    = DBFGetFieldIndex(dbf, "RightEle");
00334                 int order       = DBFGetFieldIndex(dbf, "S_Order");
00335 
00336                 int totCount = DBFGetRecordCount(dbf);
00337                 riv<<totCount<<"\n";
00338                 int orderVal;
00339                 int maxOrder = -1;
00340                 for (int c=0; c<totCount; c++){
00341                         riv<<DBFReadIntegerAttribute(dbf, c, fid)        <<"\t";
00342                         riv<<DBFReadIntegerAttribute(dbf, c, fromTriNode)<<"\t";
00343                         riv<<DBFReadIntegerAttribute(dbf, c, toTriNode)  <<"\t";
00344                         riv<<DBFReadIntegerAttribute(dbf, c, downSeg)    <<"\t";
00345                         riv<<DBFReadIntegerAttribute(dbf, c, leftEle)    <<"\t";
00346                         riv<<DBFReadIntegerAttribute(dbf, c, rightEle)   <<"\t";
00347                         orderVal = DBFReadIntegerAttribute(dbf, c, order);
00348                         riv<<orderVal                                    <<"\t"; //Shape
00349                         riv<<orderVal                                    <<"\t"; //Material
00350                         riv<<orderVal                                    <<"\t"; //IC
00351                         riv<<"0"                                         <<"\t"; //BC
00352                         riv<<"0"                                         <<"\n"; //Res
00353                         
00354                         if(maxOrder < orderVal)
00355                                 maxOrder = orderVal;
00356                 }
00357                 riv<<"Shape\t"   <<maxOrder<<"\n";
00358                 riv<<"Material\t"<<maxOrder<<"\n";
00359                 riv<<"IC\t"      <<maxOrder<<"\n";
00360                 riv<<"BC\t"      <<"0"     <<"\n";
00361                 riv<<"RES\t"     <<"0"     <<"\n";
00362                 
00363 
00364                 log.open(logFileName.ascii(), ios::app);
00365                 log<<" Done!</p>";
00366                 log.close();
00367                 messageLog->reload();
00368                 QApplication::processEvents();
00369 
00370         }
00371         riv.close();
00372 
00373         log.open(logFileName.ascii(), ios::app);
00374         log<<"<p><font size=3 color=red>Note: Please add SHAPE, MATERIAL, INITIAL AND BOUNDARY CONDITION at the end of the .riv file MANUALLY</p>";
00375         log.close();
00376         messageLog->reload();
00377         QApplication::processEvents();
00378 
00379 }
00380                         
00381 void rivFileDlg::help()
00382 {
00383         helpDialog* hlpDlg = new helpDialog(this, "Riv File", 1, "helpFiles/rivfile.html", "Help :: Riv File");
00384         hlpDlg->show(); 
00385 }

Generated on Sun Aug 5 17:33:58 2007 for PIHMgis by  doxygen 1.5.2