DLA-Fire-Prediction-Thesis 1.0
|
00001 //---------------------------------------------------------------------------------------------------------------------- 00004 //---------------------------------------------------------------------------------------------------------------------- 00005 00006 #include "MainWindow.h" 00007 #include "GLWindow.h" 00008 #include "ui_MainWindow.h" 00009 00010 //---------------------------------------------------------------------------------------------------------------------- 00011 MainWindow::MainWindow( 00012 QWidget *_parent 00013 ): 00014 QMainWindow(_parent), 00015 m_ui(new Ui::MainWindow) 00016 { 00017 // setup the user interface 00018 m_ui->setupUi(this); 00019 // create our GL window for drawing the scene 00020 m_gl=new GLWindow(this); 00021 // add the glWindow to the UI 00022 m_ui->s_mainWindowGridLayout->addWidget(m_gl,0,0,2,1); 00023 00024 m_previousTemp = m_ui->m_sceneTemp->value(); 00025 00026 // ----- wireframe and appearance of the scene 00027 connect(m_ui->m_wireframe,SIGNAL(toggled(bool)),m_gl,SLOT(toggleWireframe(bool))); 00028 connect(m_ui->m_showMark, SIGNAL(toggled(bool)), m_gl, SLOT(toggleShowMark(bool))); 00029 connect(m_ui->m_lineShowingOnly,SIGNAL(toggled(bool)),m_gl,SLOT(toggleShowLine(bool))); 00030 00031 00032 // ----- camera 00033 connect(m_ui->m_cameraSelection,SIGNAL(currentIndexChanged(int)),m_gl,SLOT(pickCamera(int))); 00034 connect(m_ui->m_zoomIn, SIGNAL(clicked()),m_gl,SLOT(zoomIn())); 00035 connect(m_ui->m_zoomOut,SIGNAL(clicked()),m_gl,SLOT(zoomOut())); 00036 // ----- terrain 00037 connect(m_ui->m_mountain, SIGNAL(toggled(bool)),m_gl,SLOT(toggleTerrain(bool))); 00038 connect(m_ui->m_mountain, SIGNAL(toggled(bool)),this,SLOT(toggleTerrainButton())); 00039 if(m_ui->m_mountain->isChecked()) 00040 { 00041 m_ui->m_heightDown->setEnabled(true); 00042 m_ui->m_heightUp->setEnabled(true); 00043 m_ui->m_mountainReset->setEnabled(true); 00044 m_ui->m_mountainIterationsNumber->setEnabled(true); 00045 m_ui->m_originAmount->setEnabled(true); 00046 m_ui->m_originIndex->setEnabled(true); 00047 00048 connect(m_ui->m_mountainReset, SIGNAL(clicked()),m_gl,SLOT(resetMountain())); 00049 connect(m_ui->m_heightUp, SIGNAL(clicked()),m_gl,SLOT(increaseTerrainHeight())); 00050 connect(m_ui->m_heightDown, SIGNAL(clicked()),m_gl,SLOT(decreaseTerrainHeight())); 00051 connect(m_ui->m_mountainIterationsNumber, SIGNAL(valueChanged(int)),m_gl,SLOT(setNewMountainIterations(int))); 00052 connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), m_gl, SLOT(assignNewOrigin(int))); 00053 connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), this, SLOT(setNewMaximum(int))); 00054 } 00055 else 00056 { 00057 m_ui->m_heightDown->setEnabled(false); 00058 m_ui->m_heightUp->setEnabled(false); 00059 m_ui->m_mountainReset->setEnabled(false); 00060 m_ui->m_mountainIterationsNumber->setEnabled(false); 00061 } 00062 00063 // ----- fire origin 00064 connect(m_ui->m_originIndex, SIGNAL(valueChanged(int)), m_gl, SLOT(selectMovingOrigin(int))); 00065 connect(m_ui->m_moveLeft, SIGNAL(clicked()),m_gl,SLOT(moveOriginLeft())); 00066 connect(m_ui->m_moveRight, SIGNAL(clicked()),m_gl,SLOT(moveOriginRight())); 00067 connect(m_ui->m_moveUp, SIGNAL(clicked()),m_gl,SLOT(moveOriginUp())); 00068 connect(m_ui->m_moveDown, SIGNAL(clicked()),m_gl,SLOT(moveOriginDown())); 00069 00070 // ----- fire obstacle (non-flammable and flammable fuel) 00071 connect(m_ui->m_obstacleNumber, SIGNAL(valueChanged(int)), m_gl, SLOT(adjustObstacleAmount(int))); 00072 connect(m_ui->m_fuelObjectAmount, SIGNAL(valueChanged(int)), m_gl, SLOT(adjustFuelAmount(int))); 00073 connect(m_ui->m_fuelMoisture, SIGNAL(valueChanged(double)), m_gl, SLOT(changeObjMoisture(double))); 00074 connect(m_ui->m_fuelObjectAmount, SIGNAL(valueChanged(int)), this, SLOT(setNewObjMaximum(int))); 00075 connect(m_ui->m_fuelIndex, SIGNAL(valueChanged(int)), m_gl, SLOT(selectObjIndexToAdjustSize(int))); 00076 // size adjust 00077 connect(m_ui->m_increaseFuelLength, SIGNAL(clicked()), this, SLOT(increaseFuelLength())); 00078 connect(m_ui->m_decreaseFuelLength, SIGNAL(clicked()), this, SLOT(decreaseFuelLength())); 00079 connect(m_ui->m_increaseFuel, SIGNAL(clicked()), this, SLOT(increaseFuelHeight())); 00080 connect(m_ui->m_decreaseFuel, SIGNAL(clicked()), this, SLOT(decreaseFuelHeight())); 00081 00082 // ----- play, pause, generate and edit button 00083 connect(m_ui->m_generateToggle, SIGNAL(clicked()), this, SLOT(toggleGenerateButton())); 00084 connect(m_ui->m_editSceneToggle, SIGNAL(clicked()), this, SLOT(toggleEditButton())); 00085 connect(m_ui->m_generateToggle, SIGNAL(clicked()), m_gl, SLOT(generateNewFirePath())); 00086 connect(m_ui->m_editSceneToggle, SIGNAL(clicked()), m_gl, SLOT(editDLA())); 00087 connect(m_ui->m_pause, SIGNAL(clicked()), m_gl, SLOT(pauseAnimation())); 00088 connect(m_ui->m_play, SIGNAL(clicked()), m_gl, SLOT(playAnimation())); 00089 00090 // ----- wind 00091 connect(m_ui->m_windCheckBox, SIGNAL(toggled(bool)), m_gl, SLOT(enableWind(bool))); 00092 connect(m_ui->m_windCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleWind())); 00093 00094 if(m_ui->m_windCheckBox->isChecked()) 00095 { 00096 m_ui->m_windArrowShow->setEnabled(true); 00097 m_ui->m_windDialDir->setEnabled(true); 00098 m_ui->m_windSpeed->setEnabled(true); 00099 00100 // label 00101 m_ui->m_winddirlabel->setEnabled(true); 00102 m_ui->m_windspeedlabel->setEnabled(true); 00103 00104 if(m_ui->m_windArrowShow->isChecked()) 00105 m_gl->showWindDir(true); 00106 00107 connect(m_ui->m_windSpeed, SIGNAL(valueChanged(int)), m_gl, SLOT(assignWindSpeed(int))); 00108 connect(m_ui->m_windArrowShow, SIGNAL(toggled(bool)), m_gl, SLOT(showWindDir(bool))); 00109 connect(m_ui->m_windDialDir, SIGNAL(sliderMoved(int)), m_gl, SLOT(changeWindDirection(int))); 00110 } 00111 else 00112 { 00113 m_ui->m_windArrowShow->setEnabled(false); 00114 m_ui->m_windDialDir->setEnabled(false); 00115 m_ui->m_windSpeed->setEnabled(false); 00116 00117 // label 00118 m_ui->m_winddirlabel->setEnabled(false); 00119 m_ui->m_windspeedlabel->setEnabled(false); 00120 } 00121 00122 // Weather 00123 connect(m_ui->m_sceneMoisture, SIGNAL(valueChanged(double)), m_gl, SLOT(changeMoistureOfTheScene(double))); 00124 connect(m_ui->m_sceneTemp, SIGNAL(valueChanged(double)), m_gl, SLOT(changeTemperature(double))); 00125 connect(m_ui->m_sceneTemp, SIGNAL(valueChanged(double)), this, SLOT(setNewMoisture(double))); 00126 00127 } 00128 00129 //---------------------------------------------------------------------------------------------------------------------- 00130 MainWindow::~MainWindow() 00131 { 00132 delete m_ui; 00133 } 00134 00135 //---------------------------------------------------------------------------------------------------------------------- 00136 void MainWindow::setNewMoisture(double _currentTemp) 00137 { 00138 double m_checkTemp = m_previousTemp - _currentTemp; 00139 double m_currentMoisture = m_ui->m_sceneMoisture->value(); 00140 00141 // it means the temperature has decreased 00142 if(m_checkTemp>0) 00143 { 00144 // according to the previous work, if the temperature has decreased every 20 Celsius, the moisture would be double increased. 00145 if(m_checkTemp>=20) 00146 { 00147 m_currentMoisture *= 2; 00148 m_previousTemp = _currentTemp; 00149 m_gl->changeMoistureOfTheScene(m_currentMoisture); 00150 } 00151 } 00152 else 00153 { 00154 // according to the previous work, if the temperature has increased every 20 Celsius, the moisture would be double decreased. 00155 if(m_checkTemp<=-20) 00156 { 00157 m_currentMoisture = m_currentMoisture/2; 00158 m_previousTemp = _currentTemp; 00159 m_gl->changeMoistureOfTheScene(m_currentMoisture); 00160 } 00161 } 00162 00163 m_ui->m_sceneMoisture->setValue(m_currentMoisture); 00164 } 00165 00166 //---------------------------------------------------------------------------------------------------------------------- 00167 void MainWindow::setNewMaximum( 00168 int _newMaximum 00169 ) 00170 { 00171 m_ui->m_originIndex->setMaximum(_newMaximum); 00172 } 00173 00174 //---------------------------------------------------------------------------------------------------------------------- 00175 void MainWindow::setNewObjMaximum(int _newObjAmount) 00176 { 00177 if(_newObjAmount>0) 00178 { 00179 m_ui->m_fuelIndex->setEnabled(true); 00180 m_ui->m_fuelIndex->setMaximum(_newObjAmount); 00181 } 00182 else 00183 { 00184 m_ui->m_fuelIndex->setMaximum(1); 00185 m_ui->m_fuelIndex->setEnabled(false); 00186 } 00187 00188 } 00189 00190 //---------------------------------------------------------------------------------------------------------------------- 00191 void MainWindow::toggleGenerateButton() 00192 { 00193 m_ui->m_tabMenu->setEnabled(false); 00194 m_ui->m_generateToggle->setEnabled(false); 00195 m_ui->m_editSceneToggle->setEnabled(true); 00196 m_ui->m_pause->setEnabled(true); 00197 m_ui->m_play->setEnabled(true); 00198 } 00199 00200 //---------------------------------------------------------------------------------------------------------------------- 00201 void MainWindow::toggleEditButton() 00202 { 00203 m_ui->m_tabMenu->setEnabled(true); 00204 m_ui->m_generateToggle->setEnabled(true); 00205 m_ui->m_editSceneToggle->setEnabled(false); 00206 m_ui->m_pause->setEnabled(false); 00207 m_ui->m_play->setEnabled(false); 00208 } 00209 00210 //---------------------------------------------------------------------------------------------------------------------- 00211 void MainWindow::toggleTerrainButton() 00212 { 00213 if(m_ui->m_mountain->isChecked()) 00214 { 00215 m_ui->m_heightDown->setEnabled(true); 00216 m_ui->m_heightUp->setEnabled(true); 00217 m_ui->m_mountainReset->setEnabled(true); 00218 m_ui->m_mountainIterationsNumber->setEnabled(true); 00219 m_ui->m_originAmount->setEnabled(true); 00220 00221 connect(m_ui->m_mountainReset, SIGNAL(clicked()),m_gl,SLOT(resetMountain())); 00222 connect(m_ui->m_heightUp, SIGNAL(clicked()),m_gl,SLOT(increaseTerrainHeight())); 00223 connect(m_ui->m_heightDown, SIGNAL(clicked()),m_gl,SLOT(decreaseTerrainHeight())); 00224 connect(m_ui->m_mountainIterationsNumber, SIGNAL(valueChanged(int)),m_gl,SLOT(setNewMountainIterations(int))); 00225 connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), m_gl, SLOT(assignNewOrigin(int))); 00226 connect(m_ui->m_originAmount, SIGNAL(valueChanged(int)), this, SLOT(setNewMaximum(int))); 00227 } 00228 else 00229 { 00230 m_ui->m_heightDown->setEnabled(false); 00231 m_ui->m_heightUp->setEnabled(false); 00232 m_ui->m_mountainReset->setEnabled(false); 00233 m_ui->m_mountainIterationsNumber->setEnabled(false); 00234 m_ui->m_originAmount->setEnabled(false); 00235 } 00236 } 00237 00238 //---------------------------------------------------------------------------------------------------------------------- 00239 void MainWindow::toggleWind() 00240 { 00241 if(m_ui->m_windCheckBox->isChecked()) 00242 { 00243 m_ui->m_windArrowShow->setEnabled(true); 00244 m_ui->m_windDialDir->setEnabled(true); 00245 m_ui->m_windSpeed->setEnabled(true); 00246 00247 // label 00248 m_ui->m_winddirlabel->setEnabled(true); 00249 m_ui->m_windspeedlabel->setEnabled(true); 00250 00251 if(m_ui->m_windArrowShow->isChecked()) 00252 m_gl->showWindDir(true); 00253 00254 connect(m_ui->m_windSpeed, SIGNAL(valueChanged(int)), m_gl, SLOT(assignWindSpeed(int))); 00255 connect(m_ui->m_windArrowShow, SIGNAL(toggled(bool)), m_gl, SLOT(showWindDir(bool))); 00256 connect(m_ui->m_windDialDir, SIGNAL(sliderMoved(int)), m_gl, SLOT(changeWindDirection(int))); 00257 } 00258 else 00259 { 00260 m_ui->m_windArrowShow->setEnabled(false); 00261 m_ui->m_windDialDir->setEnabled(false); 00262 m_ui->m_windSpeed->setEnabled(false); 00263 00264 // label 00265 m_ui->m_winddirlabel->setEnabled(false); 00266 m_ui->m_windspeedlabel->setEnabled(false); 00267 } 00268 } 00269 00270 //---------------------------------------------------------------------------------------------------------------------- 00271 void MainWindow::increaseFuelHeight() 00272 { 00273 m_gl->adjustFuelSize(3 , 1); 00274 } 00275 00276 //---------------------------------------------------------------------------------------------------------------------- 00277 void MainWindow::increaseFuelLength() 00278 { 00279 m_gl->adjustFuelSize(1 , 1); 00280 00281 } 00282 00283 //---------------------------------------------------------------------------------------------------------------------- 00284 void MainWindow::decreaseFuelHeight() 00285 { 00286 m_gl->adjustFuelSize(3 , 2); 00287 } 00288 00289 //---------------------------------------------------------------------------------------------------------------------- 00290 void MainWindow::decreaseFuelLength() 00291 { 00292 m_gl->adjustFuelSize(1 , 2); 00293 00294 } 00295