VectorProcessing/simplifyLineDialog/simplifylinedialog.cpp

Go to the documentation of this file.
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         //QStringList shpFilesInputDialog::externalBoundsFiles = temp;
00027         //QString* str = new QString();
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                 //qWarning("\n %d",tmp);
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 }

Generated on Sun Aug 5 17:34:00 2007 for PIHMgis by  doxygen 1.5.2