00001 #include <QtGui>
00002 #include "mshfile.h"
00003
00004 #include <iomanip>
00005 #include <fstream>
00006 using namespace std;
00007
00008 #include "../../pihmLIBS/pickGridValue.h"
00009 #include "../../pihmLIBS/helpDialog/helpdialog.h"
00010
00011 mshFileDlg::mshFileDlg(QWidget *parent)
00012 {
00013 setupUi(this);
00014 connect(eleFileButton, SIGNAL(clicked()), this, SLOT(eleBrowse()));
00015 connect(nodeFileButton, SIGNAL(clicked()), this, SLOT(nodeBrowse()));
00016 connect(neighFileButton, SIGNAL(clicked()), this, SLOT(neighBrowse()));
00017 connect(sElevFileButton, SIGNAL(clicked()), this, SLOT(sEleBrowse()));
00018 connect(bElevFileButton, SIGNAL(clicked()), this, SLOT(bEleBrowse()));
00019 connect(mshFileButton, SIGNAL(clicked()), this, SLOT(mshBrowse()));
00020 connect(runButton, SIGNAL(clicked()), this, SLOT(run()));
00021 connect(helpButton, SIGNAL(clicked()), this, SLOT(help()));
00022 connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
00023 }
00024
00025 void mshFileDlg::eleBrowse()
00026 {
00027 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","ele File(*.ele *.ELE)");
00028 eleFileLineEdit->setText(str);
00029 }
00030
00031 void mshFileDlg::nodeBrowse()
00032 {
00033 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","node File(*.node *.NODE)");
00034 nodeFileLineEdit->setText(str);
00035 }
00036
00037 void mshFileDlg::neighBrowse()
00038 {
00039 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","neigh File(*.neigh *.NEIGH)");
00040 neighFileLineEdit->setText(str);
00041 }
00042
00043 void mshFileDlg::sEleBrowse()
00044 {
00045 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","Surface Elev File(*.adf *.ADF)");
00046 sElevFileLineEdit->setText(str);
00047 }
00048
00049 void mshFileDlg::bEleBrowse()
00050 {
00051 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","Bed Elev File(*.adf *.ADF)");
00052 bElevFileLineEdit->setText(str);
00053 }
00054
00055 void mshFileDlg::mshBrowse()
00056 {
00057 QString temp = QFileDialog::getSaveFileName(this, "Choose File", "~/","mesh File(*.mesh *.MESH)");
00058 QString tmp = temp;
00059 if(!(tmp.toLower()).endsWith(".mesh")){
00060 tmp.append(".mesh");
00061 temp = tmp;
00062 }
00063 mshFileLineEdit->setText(temp);
00064 }
00065
00066 void mshFileDlg::run()
00067 {
00068
00069 QString logFileName("c:\log.html");
00070 ofstream log;
00071 log.open(logFileName.ascii());
00072 log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
00073 log.close();
00074 MessageLog->setSource(logFileName);
00075 MessageLog->setFocus();
00076 MessageLog->setModified(TRUE);
00077
00078 ifstream ele, node, neigh, sele, bele;
00079 ofstream mesh;
00080
00081 ele.open((eleFileLineEdit->text()).ascii());
00082 node.open((nodeFileLineEdit->text()).ascii());
00083 neigh.open((neighFileLineEdit->text()).ascii());
00084 sele.open((sElevFileLineEdit->text()).ascii());
00085 bele.open((bElevFileLineEdit->text()).ascii());
00086 mesh.open((mshFileLineEdit->text()).ascii(), ios::out);
00087
00088 int runFlag = 1;
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 log.open(logFileName.ascii(), ios::app);
00117 if((eleFileLineEdit->text()).length()==0){
00118 log<<"<p><font size=3 color=red> Error! Please input .ele Input File</p>";
00119 runFlag = 0;
00120 }
00121 else{
00122 log<<"<p>Checking... "<<(eleFileLineEdit->text()).ascii()<<"... ";
00123 if(ele == NULL){
00124 log<<"<font size=3 color=red> Error!</p>";
00125
00126 runFlag = 0;
00127 }
00128 else
00129 log<<"Done!</p>";
00130 }
00131 log.close();
00132 MessageLog->reload();
00133 QApplication::processEvents();
00134
00135
00136 log.open(logFileName.ascii(), ios::app);
00137 if((nodeFileLineEdit->text()).length()==0){
00138 log<<"<p><font size=3 color=red> Error! Please input .node Input File</p>";
00139 runFlag = 0;
00140 }
00141 else{
00142 log<<"<p>Checking... "<<(nodeFileLineEdit->text()).ascii()<<"... ";
00143 if(ele == NULL){
00144 log<<"<font size=3 color=red> Error!</p>";
00145
00146 runFlag = 0;
00147 }
00148 else
00149 log<<"Done!</p>";
00150 }
00151 log.close();
00152 MessageLog->reload();
00153 QApplication::processEvents();
00154
00155
00156 log.open(logFileName.ascii(), ios::app);
00157 if((neighFileLineEdit->text()).length()==0){
00158 log<<"<p><font size=3 color=red> Error! Please input .neigh Input File</p>";
00159 runFlag = 0;
00160 }
00161 else{
00162 log<<"<p>Checking... "<<(neighFileLineEdit->text()).ascii()<<"... ";
00163 if(neigh == NULL){
00164 log<<"<font size=3 color=red> Error!</p>";
00165
00166 runFlag = 0;
00167 }
00168 else
00169 log<<"Done!</p>";
00170 }
00171 log.close();
00172 MessageLog->reload();
00173 QApplication::processEvents();
00174
00175
00176 log.open(logFileName.ascii(), ios::app);
00177 if((sElevFileLineEdit->text()).length()==0){
00178 log<<"<p><font size=3 color=red> Error! Please input Surface Elev. Input File</p>";
00179 runFlag = 0;
00180 }
00181 else{
00182 log<<"<p>Checking... "<<(sElevFileLineEdit->text()).ascii()<<"... ";
00183 if(sele == NULL){
00184 log<<"<font size=3 color=red> Error!</p>";
00185
00186 runFlag = 0;
00187 }
00188 else
00189 log<<"Done!</p>";
00190 }
00191 log.close();
00192 MessageLog->reload();
00193 QApplication::processEvents();
00194
00195
00196 log.open(logFileName.ascii(), ios::app);
00197 if((bElevFileLineEdit->text()).length()==0){
00198 log<<"<p><font size=3 color=red> Error! Please input Bed Elev. Input File</p>";
00199 runFlag = 0;
00200 }
00201 else{
00202 log<<"<p>Checking... "<<(bElevFileLineEdit->text()).ascii()<<"... ";
00203 if(bele == NULL){
00204 log<<"<font size=3 color=red> Error!</p>";
00205
00206 runFlag = 0;
00207 }
00208 else
00209 log<<"Done!</p>";
00210 }
00211 log.close();
00212 MessageLog->reload();
00213 QApplication::processEvents();
00214
00215
00216 log.open(logFileName.ascii(), ios::app);
00217 if((mshFileLineEdit->text()).length()==0){
00218 log<<"<p><font size=3 color=red> Error! Please input .mesh Output File</p>";
00219 runFlag = 0;
00220 }
00221 else{
00222 log<<"<p>Checking... "<<(mshFileLineEdit->text()).ascii()<<"... ";
00223 if(mesh == NULL){
00224 log<<"<font size=3 color=red> Error!</p>";
00225 qWarning("\nCan not open output file name");
00226 runFlag = 0;
00227 }
00228 else
00229 log<<"Done!</p>";
00230 }
00231 log.close();
00232 MessageLog->reload();
00233 QApplication::processEvents();
00234
00235
00236 if(runFlag == 1){
00237
00238 log.open(logFileName.ascii(), ios::app);
00239 log<<"<p>Running...";
00240 log.close();
00241 MessageLog->reload();
00242 QApplication::processEvents();
00243
00244 GDALDataset *sElev, *bElev;
00245 double sRanges[6], bRanges[6];
00246 GDALAllRegister();
00247 sElev = (GDALDataset *)GDALOpen((sElevFileLineEdit->text()).ascii(), GA_ReadOnly);
00248 bElev = (GDALDataset *)GDALOpen((bElevFileLineEdit->text()).ascii(), GA_ReadOnly);
00249 getExtent(sElev, sRanges);
00250 getExtent(bElev, bRanges);
00251
00252
00253 int temp;
00254 int numEle, numNode, numNeigh;
00255 ele>>numEle; ele>>temp; ele>>temp;
00256 node>>numNode; node>>temp; node>>temp; node>>temp;
00257 neigh>>numNeigh; neigh>>temp;
00258
00259 mesh<<numEle<<"\t"<<numNode;
00260 int index;
00261 int node0, node1, node2, nabr0, nabr1, nabr2;
00262 for(int i=0; i<numEle; i++){
00263 ele>>index; ele>>node0; ele>>node1; ele>>node2;
00264 neigh>>temp; neigh>>nabr0; neigh>>nabr1; neigh>>nabr2;
00265 mesh<<"\n"<<index<<"\t"<<node0<<"\t"<<node1<<"\t"<<node2<<"\t"<<(nabr0<0?0:nabr0)<<"\t"<<(nabr1<0?0:nabr1)<<"\t"<<(nabr2<0?0:nabr2);
00266 }
00267 double X, Y, Zmin, Zmax;
00268 for(int i=0; i<numNode; i++){
00269 node>>index; node>>X; node>>Y; node>>temp;
00270 Zmin = getRasterValue(bElev, 1, X, Y, bRanges);
00271 Zmax = getRasterValue(sElev, 1, X, Y, sRanges);
00272 mesh<<"\n"<<index<<"\t"<<setprecision(20)<<X<<"\t"<<setprecision(20)<<Y<<"\t"<<setprecision(15)<<Zmin<<"\t"<<setprecision(15)<<Zmax;
00273 }
00274
00275 log.open(logFileName.ascii(), ios::app);
00276 log<<" Done!</p>";
00277 log.close();
00278 MessageLog->reload();
00279 QApplication::processEvents();
00280
00281 }
00282 }
00283
00284 void mshFileDlg::help()
00285 {
00286 helpDialog* hlpDlg = new helpDialog(this, "Mesh File", 1, "helpFiles/meshfile.html", "Help :: Mesh File");
00287 hlpDlg->show();
00288 }