00001 #include <QtGui>
00002 #include "simplifylinedialog.h"
00003 #include "../../pihmLIBS/helpDialog/helpdialog.h"
00004 #include "../../pihmLIBS/simplifyPolySHP.h"
00005 #include "../../pihmLIBS/shapefil.h"
00006
00007 #include <fstream>
00008 using namespace std;
00009
00010 simplifyLineDialogDlg::simplifyLineDialogDlg(QWidget *parent)
00011 {
00012 setupUi(this);
00013 connect(inputPolylineButton, SIGNAL(clicked()), this, SLOT(inputBrowse()));
00014 connect(addFileButton, SIGNAL(clicked()), this, SLOT(addBrowse()));
00015 connect(removeFileButton, SIGNAL(clicked()), this, SLOT(removeBrowse()));
00016 connect(removeAllButton, SIGNAL(clicked()), this, SLOT(removeAllBrowse()));
00017 connect(editToleranceButton, SIGNAL(clicked()), this, SLOT(editTolerance()));
00018 connect(okButton, SIGNAL(clicked()), this, SLOT(run()));
00019 connect(helpButton, SIGNAL(clicked()), this, SLOT(help()));
00020 connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
00021 }
00022
00023 void simplifyLineDialogDlg::inputBrowse()
00024 {
00025 QStringList temp = QFileDialog::getOpenFileNames(this, "Choose File", "~/","Internal Bounds File(*.shp *.SHP)");
00026
00027
00028 QString str = "";
00029 for(unsigned int i=0; i< temp.count();i++)
00030 {
00031 str.append(temp[i]);
00032 str.append(";");
00033 }
00034 InputPolylineEdit->setText(str);
00035 }
00036
00037 void simplifyLineDialogDlg::addBrowse()
00038 {
00039 QString fileNames(InputPolylineEdit->text());
00040 QString tolerance(toleranceEdit->text());
00041 int count=0;
00042 int index=0;
00043 while(fileNames.find(';',index)!=-1){
00044 count++;
00045 index=fileNames.find(';',index)+1;
00046 }
00047 int row=inputOutputTable->numRows();
00048 for(int i=0;i<count;i++){
00049 QString fileName = fileNames.section(';',i,i);
00050 QString simpFileName(fileName);
00051 simpFileName.truncate(simpFileName.length()-4);
00052 simpFileName.append("_Simp.shp");
00053 inputOutputTable->insertRows(row+i);
00054 Q3TableItem* tmpItem = new Q3TableItem(inputOutputTable, Q3TableItem::Always, fileName );
00055 inputOutputTable->setItem(row+i,0,tmpItem);
00056 tmpItem = new Q3TableItem(inputOutputTable, Q3TableItem::Always, tolerance );
00057 inputOutputTable->setItem(row+i,1,tmpItem);
00058 tmpItem = new Q3TableItem(inputOutputTable, Q3TableItem::Always, simpFileName );
00059 inputOutputTable->setItem(row+i,2,tmpItem);
00060 }
00061 }
00062
00063 void simplifyLineDialogDlg::removeBrowse()
00064 {
00065 int tmp = inputOutputTable->numRows();
00066
00067 Q3MemArray <int> rowArray(tmp);
00068 int j=0;
00069 for(int i=0; i<tmp;i++){
00070 if(inputOutputTable->isRowSelected(i))
00071 {
00072 rowArray[j]=i;
00073 qWarning("\n %d",rowArray[j]);
00074 j++;
00075 }
00076 }
00077 rowArray.truncate(j);
00078 inputOutputTable->removeRows(rowArray);
00079 }
00080
00081 void simplifyLineDialogDlg::removeAllBrowse()
00082 {
00083 int tmp = inputOutputTable->numRows();
00084 for(int i=0; i<= tmp;i++){
00085 inputOutputTable->removeRow(0);
00086 }
00087 }
00088
00089 void simplifyLineDialogDlg::editTolerance()
00090 {
00091 qWarning( "simplifyLineDialog::handleEditToleranceButton(): Not implemented yet" );
00092 }
00093
00094
00095 void simplifyLineDialogDlg::run()
00096 {
00097 QString logFileName("c:\log.html");
00098 ofstream log;
00099 log.open(logFileName.ascii());
00100 log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
00101 log.close();
00102 MessageLog->setSource(logFileName);
00103 MessageLog->setFocus();
00104 MessageLog->setModified(TRUE);
00105
00106 if(inputOutputTable->numRows() < 1){
00107 log.open(logFileName.ascii(), ios::app);
00108 log<<"<p><font size=3 color=red> First Please input Files</p>";
00109 log.close();
00110 MessageLog->reload();
00111 QApplication::processEvents();
00112 }
00113 else{
00114 int rows = inputOutputTable->numRows();
00115 QString shpFileName, dbfFileName, shpFileNameSimp, dbfFileNameSimp;
00116 double tol;
00117 for(int i=0; i<rows; i++){
00118 shpFileName = inputOutputTable->text(i, 0);
00119 dbfFileName = shpFileName;
00120 dbfFileName.truncate(dbfFileName.length()-3);
00121 dbfFileName.append("dbf");
00122
00123 tol = (inputOutputTable->text(i, 1)).toDouble();
00124
00125 shpFileNameSimp = inputOutputTable->text(i, 2);
00126 dbfFileNameSimp = shpFileNameSimp;
00127 dbfFileNameSimp.truncate(dbfFileNameSimp.length()-3);
00128 dbfFileNameSimp.append("dbf");
00129
00130 ifstream in;
00131 in.open(shpFileName.ascii());
00132 ofstream out;
00133 out.open(shpFileNameSimp.ascii());
00134
00135 int runFlag = 1;
00136 log.open(logFileName.ascii(), ios::app);
00137 log<<"<p>Checking... "<<shpFileName.ascii()<<"... ";
00138 if(in == NULL){
00139 log<<"<font size=3 color=red> Error!</p>";
00140 runFlag = 0;
00141 qWarning("\n %s doesn't exist!", shpFileName.ascii());
00142 }
00143 else
00144 log<<"Done!</p>";
00145
00146
00147 log<<"<p>Checking... "<<shpFileNameSimp.ascii()<<"... ";
00148 if(out == NULL){
00149 log<<"<font size=3 color=red> Error!</p>";
00150 runFlag = 0;
00151 qWarning("\n %s doesn't exist!", shpFileNameSimp.ascii());
00152 }
00153 else
00154 log<<"Done!</p>";
00155 log.close();
00156 MessageLog->reload();
00157 QApplication::processEvents();
00158
00159 if((inputOutputTable->text(i, 1)).length() == 0 || tol < 0){
00160 runFlag = 0;
00161 log.open(logFileName.ascii(), ios::app);
00162 log<<"<font size=3 color=red> Error! Please input a valid threshold value</p>";
00163 log.close();
00164 MessageLog->reload();
00165 QApplication::processEvents();
00166 }
00167
00168
00169 if(runFlag == 1){
00170 log.open(logFileName.ascii(), ios::app);
00171 log<<"<p>Simplifying "<<shpFileName.ascii()<<" to "<<shpFileNameSimp.ascii()<<" using "<<tol<<" unit tolerance...";
00172 log.close();
00173 MessageLog->reload();
00174 QApplication::processEvents();
00175
00176 simplifyPolySHP(shpFileName.ascii(), dbfFileName.ascii(), shpFileNameSimp.ascii(), dbfFileNameSimp.ascii(), tol);
00177 qWarning("Simplifying %s to %s using %f\n", shpFileName.ascii(), shpFileNameSimp.ascii(), tol);
00178
00179 log.open(logFileName.ascii(), ios::app);
00180 log<<" Done!</p>";
00181 log.close();
00182 MessageLog->reload();
00183 QApplication::processEvents();
00184 }
00185 }
00186 }
00187 }
00188
00189 void simplifyLineDialogDlg::help()
00190 {
00191 helpDialog* hlpDlg = new helpDialog(this, "Simplify Line", 1, "helpFiles/simplifyPolyLineDialog.html", "Help :: Simplify Line");
00192 hlpDlg->show();
00193 }