ROV'NET  0.2
BTS SNIR LaSalle Avignon 2020
ihmrov.cpp
Aller à la documentation de ce fichier.
1 
7 #include "ihmrov.h"
8 #include "rov.h"
9 #include "ihmreglagevideo.h"
10 #include "ihmalbumphoto.h"
11 #include "ihmaccueil.h"
12 #include "campagne.h"
13 #include "ihmconfiguration.h"
14 #include <QtMath>
15 
16 IHMRov::IHMRov(IHMAccueil *ihmAccueil, QWidget *parent) : QWidget(parent), campagneEnCours(nullptr), ihmAccueil(ihmAccueil), etatRadar(true)
17 {
18  qDebug() << Q_FUNC_INFO << this << "width" << qApp->desktop()->screen()->width() << "height" << qApp->desktop()->screen()->height();
19  rov = new Rov(this);
20  reglageVideo = nullptr;
21  configuration = nullptr;
22 
27 
28  if(!rov->getManettes().isEmpty())
29  modifieEtatManette(true);
30 }
31 
33 {
34  qDebug() << Q_FUNC_INFO;
35 }
36 
38 {
39  fluxVideo = new QLabel("Aucune image détéctée",this);
40  photosEnCours = new QPushButton("Album Photo", this);
41  boutonReglageVideo = new QPushButton("Réglages Vidéo", this);
42  boutonCampagne = new QPushButton(QString::fromUtf8("Démarrer"), this);
43  boutonConfiguration = new QPushButton("Communication", this);
44  hautDePage = new QLabel(this);
45  basDePage = new QLabel(this);
46  logoEtatPortSerie = new QLabel(this);
47  logoEtatCamera = new QLabel(this);
48  logoEtatManette = new QLabel(this);
49  etatPortSerie = new QLabel(this);
50  etatCamera = new QLabel(this);
51  etatManette = new QLabel(this);
52  portSerie = new QLabel("Port série :", this);
53  camera = new QLabel("Caméra :", this);
54  manette = new QLabel("Manette :", this);
55  indicateurTemperature = new QwtThermo(this);
56  indicateurRadiation = new QwtThermo(this);
57  zoneEtatMateriel = new QGroupBox(this);
58  zoneInformationSeuils = new QGroupBox(this);
59  temperature = new QLabel("Température\n", this);
60  radiation = new QLabel("Radiation\n", this);
61 
62  QFont police1("", 15, 75, false);
63  QFont police2("Cursive", 12, 40, true);
64 
65  portSerie->setFont(police1);
66  camera->setFont(police1);
67  manette->setFont(police1);
68  etatPortSerie->setFont(police2);
69  etatCamera->setFont(police2);
70  etatManette->setFont(police2);
71  temperature->setFont(police2);
72  radiation->setFont(police2);
73 
74  fluxVideo->setFixedSize(230,50);
75  fluxVideo->setFont(police1);
76 
77  photosEnCours->setFixedSize(230,50);
78  photosEnCours->setFont(police1);
79  photosEnCours->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50_survole.png)}");
80  //photosEnCours->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50_survole.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50.png)}");
81 
82  boutonReglageVideo->setFixedSize(230,50);
83  boutonReglageVideo->setFont(police1);
84  boutonReglageVideo->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50_survole.png)}");
85  //boutonReglageVideo->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50_survole.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50.png)}");
86 
87  boutonCampagne->setFixedSize(230,50);
88  boutonCampagne->setFont(police1);
89  boutonCampagne->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50_survole.png)}");
90  //boutonCampagne->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50_survole.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50.png)}");
91 
92  boutonConfiguration->setFixedSize(230,50);
93  boutonConfiguration->setFont(police1);
94  boutonConfiguration->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50_survole.png)}");
95  //boutonConfiguration->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50_survole.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50.png)}");
96 
97  hautDePage->setMinimumHeight(1);
98  //hautDePage->setStyleSheet("QLabel {border-image: url(design/fond_noir.png)}");
99  basDePage->setMinimumHeight(1);
100  //basDePage->setStyleSheet("QLabel {border-image: url(design/fond_noir.png)}");
101 
102  #ifdef PAS_DE_MANETTE
103  testCapturePhoto = new QPushButton("Capturer", this);
104  testCapturePhoto->setFixedSize(230,50);
105  //testCapturePhoto->setFont(police);
106  testCapturePhoto->setStyleSheet("QPushButton {border-image: url(design/bouton_230x50.png)}" "QPushButton:hover {border-image: url(design/bouton_230x50_survole.png)}");
107  QAction *actionCapturerPhoto = new QAction(this);
108  actionCapturerPhoto->setShortcut(QKeySequence(Qt::Key_C));
109  addAction(actionCapturerPhoto);
110  connect(actionCapturerPhoto, SIGNAL(triggered()), this, SLOT(capturerImage()));
111  #endif
112 }
113 
115 {
116  int width = int(qApp->desktop()->screen()->width() * RATIO);
117  int height = int(qApp->desktop()->screen()->height() * RATIO);
118  fluxVideo->setFixedSize(width, height);
119  fluxVideo->setScaledContents(true);
120  fluxVideo->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
121  fluxVideo->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/signal-interrompu.jpg"));
122 
123  logoEtatPortSerie->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/inactif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
124  etatPortSerie->setText("Fermé");
125 
126  logoEtatCamera->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/inactif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
127  etatCamera->setText("Eteinte");
128 
129  logoEtatManette->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/inactif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
130  etatManette->setText("Déconnectée");
131 
133  indicateurRadiation->setScale(QwtInterval(0,SEUIL_RADIATION_ACCEPTABLE));
134 
135  indicateurTemperature->setOrigin(0.);
136  indicateurTemperature->setOriginMode(QwtThermo::OriginMode::OriginCustom);
137 
138  zoneEtatMateriel->setStyleSheet("QGroupBox {background: white} QGroupBox{border: 2px solid black}");
139  zoneInformationSeuils->setStyleSheet("QGroupBox {background: white} QGroupBox{border: 2px solid black}");
140  portSerie->setStyleSheet("QLabel {background: white}");
141  camera->setStyleSheet("QLabel {background: white}");
142  manette->setStyleSheet("QLabel {background: white}");
143  etatPortSerie->setStyleSheet("QLabel {background: white}");
144  etatCamera->setStyleSheet("QLabel {background: white}");
145  etatManette->setStyleSheet("QLabel {background: white}");
146  logoEtatPortSerie->setStyleSheet("QLabel {background: white}");
147  logoEtatCamera->setStyleSheet("QLabel {background: white}");
148  logoEtatManette->setStyleSheet("QLabel {background: white}");
149  indicateurRadiation->setStyleSheet("QwtThermo {background: white}");
150  indicateurTemperature->setStyleSheet("QwtThermo {background: white}");
151  temperature->setStyleSheet("QLabel {background: white}");
152  radiation->setStyleSheet("QLabel {background: white}");
153 }
154 
156 {
157  QVBoxLayout *layoutPrincipal = new QVBoxLayout;
158  QHBoxLayout *layoutInformationRov = new QHBoxLayout;
159  QVBoxLayout *layoutCamera = new QVBoxLayout;
160  QVBoxLayout *layoutOptionVideo = new QVBoxLayout;
161  QVBoxLayout *layoutGestionCampagne = new QVBoxLayout;
162  QVBoxLayout *layoutReglageVideo = new QVBoxLayout;
163  QVBoxLayout *layoutInformationMateriel = new QVBoxLayout;
164  QHBoxLayout *layoutEtatPortSerie = new QHBoxLayout;
165  QHBoxLayout *layoutEtatCamera = new QHBoxLayout;
166  QHBoxLayout *layoutEtatManette = new QHBoxLayout;
167  QHBoxLayout *layoutInformationSeuils = new QHBoxLayout;
168  QVBoxLayout *layoutSeuilTemperature = new QVBoxLayout;
169  QVBoxLayout *layoutSeuilRadiation = new QVBoxLayout;
170 
171  layoutOptionVideo->setAlignment(Qt::AlignTop);
172  layoutGestionCampagne->setAlignment(Qt::AlignBottom);
173  layoutInformationMateriel->setAlignment(Qt::AlignTop);
174  layoutCamera->addWidget(fluxVideo);
175 
176  layoutOptionVideo->addWidget(boutonReglageVideo);
177  layoutOptionVideo->addWidget(boutonConfiguration);
178  layoutOptionVideo->addWidget(photosEnCours);
179  #ifdef PAS_DE_MANETTE
180  layoutOptionVideo->addWidget(testCapturePhoto);
181  #endif
182 
183  layoutInformationMateriel->addWidget(portSerie);
184  layoutInformationMateriel->addLayout(layoutEtatPortSerie);
185  layoutInformationMateriel->addWidget(camera);
186  layoutInformationMateriel->addLayout(layoutEtatCamera);
187  layoutInformationMateriel->addWidget(manette);
188  layoutInformationMateriel->addLayout(layoutEtatManette);
189 
190  layoutEtatPortSerie->setAlignment(Qt::AlignLeft);
191  layoutEtatCamera->setAlignment(Qt::AlignLeft);
192  layoutEtatManette->setAlignment(Qt::AlignLeft);
193 
194  layoutEtatPortSerie->addWidget(logoEtatPortSerie);
195  layoutEtatPortSerie->addWidget(etatPortSerie);
196 
197  layoutEtatCamera->addWidget(logoEtatCamera);
198  layoutEtatCamera->addWidget(etatCamera);
199 
200  layoutEtatManette->addWidget(logoEtatManette);
201  layoutEtatManette->addWidget(etatManette);
202 
203  layoutSeuilTemperature->addWidget(temperature);
204  layoutSeuilTemperature->addWidget(indicateurTemperature);
205 
206  layoutSeuilRadiation->addWidget(radiation);
207  layoutSeuilRadiation->addWidget(indicateurRadiation);
208 
209  layoutInformationSeuils->addLayout(layoutSeuilTemperature);
210  layoutInformationSeuils->addLayout(layoutSeuilRadiation);
211 
212  layoutPrincipal->addWidget(hautDePage);
213  layoutPrincipal->addLayout(layoutInformationRov);
214  layoutInformationRov->addLayout(layoutCamera);
215  layoutInformationRov->addStretch();
216  layoutInformationRov->addLayout(layoutReglageVideo);
217  layoutReglageVideo->addLayout(layoutOptionVideo);
218 
219  //layoutReglageVideo->addLayout(layoutInformationMateriel);
220  zoneEtatMateriel->setLayout(layoutInformationMateriel);
221  layoutReglageVideo->addWidget(zoneEtatMateriel);
222  //layoutReglageVideo->addLayout(layoutInformationSeuils);
223  zoneInformationSeuils->setLayout(layoutInformationSeuils);
224  layoutReglageVideo->addWidget(zoneInformationSeuils);
225 
226  layoutReglageVideo->addLayout(layoutGestionCampagne);
227  layoutGestionCampagne->addWidget(boutonCampagne);
228  layoutPrincipal->addWidget(basDePage);
229 
230  setLayout(layoutPrincipal);
231  resize(width(), fluxVideo->maximumHeight());
232  //setStyleSheet("background:#101010;");
233  setStyleSheet("background:#C1BEBE;");
234 
235  setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint);
236  showMinimized();
237 }
238 
240 {
241  connect(boutonReglageVideo, SIGNAL(clicked()), this, SLOT(reglerVideo()));
242  connect(boutonConfiguration, SIGNAL(clicked()), this, SLOT(reglerConfiguration()));
243  connect(photosEnCours, SIGNAL(clicked()), this, SLOT(chargerPhotos()));
244  #ifdef PAS_DE_MANETTE
245  connect(testCapturePhoto, SIGNAL(clicked(bool)), this, SLOT(capturerImage(bool)));
246  #endif
247  connect(boutonCampagne, SIGNAL(clicked()), this, SLOT(gererCampagne()));
248  connect(rov, SIGNAL(enregistrerMesures(QString, QString, QString)), ihmAccueil, SLOT(enregisterMesureBDD(QString, QString, QString)));
249 }
250 
251 void IHMRov::actualiserInformations(QPixmap &image)
252 {
253  QPainter p(&image);
254  QPen pen;
255  QPen penCadre;
256  QFont fontHaut("Open Sans");
257  QFont fontBas("Open Sans");
258  int marge = 0;
259  pen.setWidth(qApp->desktop()->screen()->width() * 0.005);
260 
261  //QFontDatabase fontDatabase;
262  //qDebug() << fontDatabase.families();
263 
264  // règle la taille de police
265  fontHaut.setPixelSize(image.height()*0.045); // 4.5 % de la hauteur de l'image en pixel
266  fontBas.setPixelSize(fontHaut.pixelSize()*0.75); // 75% de la hauteur normale
267 
268  /*
269  // pour le dessin du bandeau
270  penCadre.setWidth(1);
271  penCadre.setBrush(Qt::lightGray);
272  penCadre.setCapStyle(Qt::RoundCap);
273  penCadre.setJoinStyle(Qt::RoundJoin);
274  p.setPen(penCadre);
275  // dessine un bandeau en haut (hauteur 5% de la hauteur de l'image)
276  p.drawLine( 0, (image.height()*0.05)+1, image.width(), (image.height()*0.05)+1 );
277  // dessine un bandeau en bas (hauteur 5% de la hauteur de l'image)
278  p.drawLine( 0, (image.height()*0.95)-1, image.width(), (image.height()*0.95)-1 );
279  */
280  QRect bandeauHaut( 0, 0, image.width(), image.height()*0.05 );
281  QRect bandeauBas( 0, image.height()*0.95, image.width(), image.height()*0.05 );
282  penCadre.setBrush(QBrush(QColor(255, 255, 255, 255)));
283  p.setPen(penCadre);
284  p.fillRect(bandeauHaut, QBrush(QColor(128, 128, 128, 64)));
285  p.fillRect(bandeauBas, QBrush(QColor(128, 128, 128, 64)));
286 
287  // découpe le bandeau en trois cadres (largeurs : 25 % 50 % 25% de la largeur de l'image)
288  QRect bandeauHautGauche( 0, 0, image.width()*0.25, image.height()*0.05 );
289  QRect bandeauHautCentre( image.width()*0.25, 0, image.width()*0.5, image.height()*0.05 );
290  QRect bandeauHautDroite( image.width()*0.75, 0, image.width()*0.25, image.height()*0.05 );
291 
292  // découpe le bandeau en trois cadres (largeurs : 25 % 25 % 25% 25% de la largeur de l'image)
293  QRect bandeauBasGauche( 0, image.height()*0.95, image.width()*0.25, image.height()*0.05 );
294  QRect bandeauBasCentreGauche( image.width()*0.25, image.height()*0.95, image.width()*0.25, image.height()*0.05 );
295  QRect bandeauBasCentreDroite( image.width()*0.50, image.height()*0.95, image.width()*0.25, image.height()*0.05 );
296  QRect bandeauRadar( image.width()*0.75, image.height() - image.width()*0.25, image.width()*0.25, image.width()*0.25);
297  QRect bandeauBasDroite( image.width()*0.75, image.height()*0.95, image.width()*0.25, image.height()*0.05 );
298 
299  /*
300  // pour le dessin des cadres
301  p.setPen(pen);
302  // dessine les trois cadres du haut
303  p.drawRect( bandeauHautGauche ); // haut gauche
304  p.fillRect(bandeauHautGauche, QBrush(QColor(128, 128, 128, 64)));
305  p.drawRect( bandeauHautCentre ); // haut centre
306  p.fillRect(bandeauHautCentre, QBrush(QColor(128, 128, 128, 64)));
307  p.drawRect( bandeauHautDroite ); // haut droite
308  p.fillRect(bandeauHautDroite, QBrush(QColor(128, 128, 128, 64)));
309  // dessine les quatres cadres du bas
310  p.drawRect( bandeauBasGauche ); // bas gauche
311  p.fillRect(bandeauBasGauche, QBrush(QColor(128, 128, 128, 64)));
312  p.drawRect( bandeauBasCentreGauche ); // bas centre gauche
313  p.fillRect(bandeauBasCentreGauche, QBrush(QColor(128, 128, 128, 64)));
314  p.drawRect( bandeauBasCentreDroite ); // bas centre droite
315  p.fillRect(bandeauBasCentreDroite, QBrush(QColor(128, 128, 128, 64)));
316  p.drawRect( bandeauBasDroite ); // bas droite
317  p.fillRect(bandeauBasDroite, QBrush(QColor(128, 128, 128, 64)));
318  */
319 
320  // pour le dessin des textes et images
321  pen.setBrush(Qt::darkRed);
322  p.setPen(pen);
323  p.setFont(fontHaut);
324 
325  marge = image.width()*0.0025;
326  QRect cadreLogoHorloge( bandeauHautGauche.x(), bandeauHautGauche.y(), bandeauHautGauche.width()*0.1, bandeauHautGauche.height() ); // 10% du bandeau
327  cadreLogoHorloge.adjust(marge, marge, -marge, -marge);
328  QImage logoHeure(qApp->applicationDirPath() + "/images/logo_heure.png");
329  p.drawImage(cadreLogoHorloge, logoHeure);
330  p.drawText(bandeauHautGauche, Qt::AlignHCenter|Qt::AlignVCenter, QTime::currentTime().toString());
331 
332  QRect cadreLogoDuree( bandeauHautDroite.x(), bandeauHautDroite.y(), bandeauHautDroite.width()*0.1, bandeauHautGauche.height() ); // 10% du bandeau
333  cadreLogoDuree.adjust(marge, marge, -marge, -marge);
334  QImage logoDuree(qApp->applicationDirPath() + "/images/logo_duree.png");
335  p.drawImage(cadreLogoDuree, logoDuree);
336  p.drawText(bandeauHautDroite, Qt::AlignHCenter|Qt::AlignVCenter, rov->getTempsCampagne());
337 
338  p.setFont(fontBas);
339  QRect cadreLogoTemperature( bandeauBasGauche.x(), bandeauBasGauche.y(), bandeauBasGauche.width()*0.1, bandeauBasGauche.height() ); // 10% du bandeau
340  cadreLogoTemperature.adjust(marge, marge, -marge, -marge);
341  QImage logoTemperature(qApp->applicationDirPath() + "/images/logo_temperature.png");
342  p.drawImage(cadreLogoTemperature, logoTemperature);
343  p.drawText(bandeauBasGauche, Qt::AlignHCenter|Qt::AlignVCenter, rov->getCapteurs()->getTemperature() + " °C");
344 
345  QRect cadreLogoHumidite( bandeauBasCentreGauche.x(), bandeauBasCentreGauche.y(), bandeauBasCentreGauche.width()*0.1, bandeauBasCentreGauche.height() ); // 10% du bandeau
346  cadreLogoHumidite.adjust(marge, marge, -marge, -marge);
347  QImage logoHumditie(qApp->applicationDirPath() + "/images/logo_humidite.png");
348  p.drawImage(cadreLogoHumidite, logoHumditie);
349  p.drawText(bandeauBasCentreGauche, Qt::AlignHCenter|Qt::AlignVCenter, rov->getCapteurs()->getHumidite() + "%");
350 
351  QRect cadreLogoRadiation( bandeauBasCentreDroite.x(), bandeauBasCentreDroite.y(), bandeauBasCentreDroite.width()*0.1, bandeauBasCentreDroite.height() ); // 10% du bandeau
352  cadreLogoRadiation.adjust(marge, marge, -marge, -marge);
353  QImage logoRadiation(qApp->applicationDirPath() + "/images/logo_radiation.png");
354  p.drawImage(cadreLogoRadiation, logoRadiation);
355  p.drawText(bandeauBasCentreDroite, Qt::AlignHCenter|Qt::AlignVCenter, rov->getCapteurs()->getRadiation() + " uS/h");
356 
357  if(getEtatRadar())
358  {
359  pen.setBrush(Qt::green);
360  p.setPen(pen);
361  //p.drawPoint(image.width()*0.875, image.height() - image.width()*0.125); // placement du point 0 sur le radar
362  p.drawImage(bandeauRadar, QImage(qApp->applicationDirPath() + "/images/RADAR.png"));
363 
364  if(rov->getCapteurs()->getTelemetrie().toInt() <= DISTANCE_MAX_RADAR && rov->getCapteurs()->getTelemetrie().toInt() >= 0 && rov->getCapteurs()->getAngle().toInt() >= 0 && rov->getCapteurs()->getAngle().toInt() <= ANGLE_MAX_RADAR && rov->getCapteurs()->getAngle() != "" && rov->getCapteurs()->getTelemetrie() != "")
365  {
366  if(rov->getCapteurs()->getAngle().toInt() == ANGLE_MAX_RADAR || rov->getCapteurs()->getAngle().toInt() == ANGLE_MIN_RADAR)
367  {
368  pointsRadar.clear();
369  }
370  pointsRadar.push_back(QPoint(calculCoordonneesX(image),calculCoordonneesY(image)));
371  for (QVector<QPoint>::iterator it = pointsRadar.begin(); it != pointsRadar.end(); ++it)
372  {
373  p.drawPoint((*it).x(),(*it).y());
374  }
375  }
376  }
377  else
378  {
379  QRect cadreLogoObstacle( bandeauBasDroite.x(), bandeauBasDroite.y(), bandeauBasDroite.width()*0.1, bandeauBasDroite.height() ); // 10% du bandeau
380  cadreLogoObstacle.adjust(marge, marge, -marge, -marge);
381  QImage logoObstacle(qApp->applicationDirPath() + "/images/logo_telemetrie.png");
382  p.drawImage(cadreLogoObstacle, logoObstacle);
383  p.drawText(bandeauBasDroite, Qt::AlignHCenter|Qt::AlignVCenter, "Obstacle : " + rov->getCapteurs()->getTelemetrie() + " cm");
384 
385  }
386  p.end();
387 }
388 
390 {
392  {
393  indicateurRadiation->setFillBrush(QBrush(QColor(Qt::GlobalColor::darkRed)));
394  }
395  else
396  {
397  indicateurRadiation->setFillBrush(QBrush(QColor(Qt::GlobalColor::darkGreen)));
398  }
399 
401  {
402  indicateurTemperature->setFillBrush(QBrush(QColor(Qt::GlobalColor::darkRed)));
403  }
404  else
405  {
406  indicateurTemperature->setFillBrush(QBrush(QColor(Qt::GlobalColor::darkGreen)));
407  }
408 
409  indicateurRadiation->setValue(rov->getCapteurs()->getRadiation().toDouble());
410  indicateurTemperature->setValue(rov->getCapteurs()->getTemperature().toDouble());
411 }
412 
413 double IHMRov::calculCoordonneesX(QPixmap &image)
414 {
415  if(rov->getCapteurs()->getAngle().toDouble() > 90)
416  return image.width()*(0.875 - 0.125*qSin(qDegreesToRadians(90.0 - (rov->getCapteurs()->getAngle().toDouble() - 2 * (rov->getCapteurs()->getAngle().toDouble() - 90))))* rov->getCapteurs()->getTelemetrie().toDouble()/DISTANCE_MAX_RADAR);
417  else
418  return image.width()*(0.875 + 0.125*qSin(qDegreesToRadians(90.0 - rov->getCapteurs()->getAngle().toDouble()))* rov->getCapteurs()->getTelemetrie().toDouble()/DISTANCE_MAX_RADAR);
419 }
420 
421 double IHMRov::calculCoordonneesY(QPixmap &image)
422 {
423  return (image.height() - image.width()*0.125) - image.width()*0.125*qSin(qDegreesToRadians(rov->getCapteurs()->getAngle().toDouble()))*rov->getCapteurs()->getTelemetrie().toDouble()/DISTANCE_MAX_RADAR;
424 }
425 
427 {
428  campagneEnCours = campagne;
429  setWindowTitle(NOM_FENETRE_ROV " " + campagne->getNomCampagne() + " " + campagne->getDate().toString());
430 }
431 
433 {
434  return campagneEnCours;
435 }
436 
438 {
439  this->etatRadar = etatRadar;
440 }
441 
443 {
444  return etatRadar;
445 }
446 
447 void IHMRov::afficherImage(QPixmap image)
448 {
449  derniereImageVideo = image;
450  actualiserInformations(image);
451  fluxVideo->setPixmap(image);
452 }
453 
455 {
456  if(reglageVideo != nullptr)
457  {
458  reglageVideo->show();
459  reglageVideo->raise();
460  }
461 }
462 
464 {
465  if(configuration != nullptr)
466  {
468  configuration->show();
469  configuration->raise();
470  }
471 }
472 
473 void IHMRov::capturerImage(bool etat)
474 {
475  #ifndef PAS_DE_MANETTE
476  if(etat)
477  #endif
478  //Q_UNUSED(etat)
479  {
480  Photo photo;
481 
482  photo.image = derniereImageVideo;
483  photo.dateheure = QDateTime::currentDateTime();
484  photo.aGarder = true;
485  photo.cheminSauvegarde = campagneEnCours->getCheminSauvegarde() + "/" + campagneEnCours->getNomCampagne() + "/" + "Capture_" + QString::number(campagneEnCours->incrementeNombrePhoto());
486 
488  qDebug() << Q_FUNC_INFO << "Photo capturée";
489 
490  photo.image.save(photo.cheminSauvegarde, "PNG");
491 
493  }
494 }
495 
497 {
498  qDebug() << Q_FUNC_INFO << boutonCampagne->text();
499  if(boutonCampagne->text() == QString::fromUtf8("Démarrer"))
500  {
501  if(reglageVideo == nullptr)
503  if(configuration == nullptr)
505  if(rov->demarrerCampagne())
506  {
507  boutonCampagne->setText(QString::fromUtf8("Arrêter"));
508  }
509  }
510  else if(boutonCampagne->text() == QString::fromUtf8("Arrêter"))
511  {
512  fermer();
513  //this->close();
514  }
515 }
516 
518 {
519  IHMAlbumPhoto *ihmAlbumPhoto = new IHMAlbumPhoto(this);
521 }
522 
524 {
526 }
527 
529 {
531  fluxVideo->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/signal-interrompu.jpg"));
532 }
533 
534 void IHMRov::closeEvent(QCloseEvent *event)
535 {
536  qDebug() << Q_FUNC_INFO << rov->getCampagneEncours();
537  if(rov->getCampagneEncours())
538  {
539  fermer();
540  event->accept(); // -> close
541  }
542  else
543  {
544  event->ignore();
545  }
546 }
547 
549 {
550  rov->arreterCampagne();
551  delete reglageVideo;
552  delete configuration;
553  reglageVideo = nullptr;
554  configuration = nullptr;
555  boutonCampagne->setText(QString::fromUtf8("Démarrer"));
557  this->setVisible(false);
558  ihmAccueil->setVisible(true);
559 }
560 
561 void IHMRov::modifieEtatPortSerie(bool etat, QString information)
562 {
563  if(etat)
564  {
565  logoEtatPortSerie->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/actif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
566  etatPortSerie->setText(information);
567  }
568  else
569  {
571  logoEtatPortSerie->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/inactif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
572  etatPortSerie->setText("Fermé");
573  }
574 }
575 
576 void IHMRov::modifieEtatCamera(bool etat, QString information)
577 {
578  if(etat)
579  {
580  logoEtatCamera->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/actif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
581  etatCamera->setText(information);
582  }
583  else
584  {
585  logoEtatCamera->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/inactif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
586  etatCamera->setText("Eteinte");
587  }
588 }
589 
591 {
592  if(etat)
593  {
594  logoEtatManette->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/actif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
595  etatManette->setText("Connectée");
596  }
597  else
598  {
599  logoEtatManette->setPixmap(QPixmap(qApp->applicationDirPath() + "/images/inactif.png").scaled(qApp->desktop()->screen()->width()*0.01, qApp->desktop()->screen()->width()*0.01));
600  etatManette->setText("Déconnectée");
601  }
602 }
Fichier qui contient la déclaration de la classe IHMConfiguration.
void actualisePortsDisponibles()
Actualise la liste des ports disponible.
Fichier qui contient la déclaration de la classe Campagne.
QString getCheminSauvegarde() const
Retourne le chemin du dossier de sauvegarde des photos.
Definition: campagne.cpp:55
IHMAccueil * ihmAccueil
Relation entre l&#39;ihmAccueil et l&#39;ihmRov.
Definition: ihmrov.h:86
Rov * rov
Instance d&#39;un objet rov possédant le controle sur les autres classes.
Definition: ihmrov.h:87
void ajouterPhoto(Photo &photo)
Ajoute une photo dans l&#39;album photo.
Definition: campagne.cpp:80
void gererCampagne()
Arrête la campagne en cours.
Definition: ihmrov.cpp:496
Classe permettant de regler l&#39;affichage du flux video.
void modifierEtatBoutons()
Modifie l&#39;etat des boutons lors du démarrage du flux vidéo.
Capteurs * getCapteurs()
Retourne l&#39;objet capteurs créée par le rov.
Definition: rov.cpp:153
void initialiserLayouts()
Initialise les layouts de l&#39;IHM.
Definition: ihmrov.cpp:155
#define SEUIL_TEMPERATURE_POSITIVE_ACCEPTABLE
Definition: ihmrov.h:54
void configurerWidgets()
Configure l&#39;état des widgets à la création de l&#39;IHM.
Definition: ihmrov.cpp:114
int incrementeNombrePhoto()
Incrémente le nombre de photo prises durant la campagne et retourne son nombre.
Definition: campagne.cpp:105
QString getRadiation() const
Récupère la dernière information issue du capteur de radiation.
Definition: capteurs.cpp:64
QLabel * etatPortSerie
Emplacement permettant de visualiser l&#39;état du port série.
Definition: ihmrov.h:104
QLabel * basDePage
Emplacement permettant de créer un espace en bas de la page.
Definition: ihmrov.h:100
Fichier qui contient la déclaration de la classe IHMAlbumPhoto.
void setCampagne(Campagne *campagne)
Associe une campagne a la campagne en cours du rov.
Definition: ihmrov.cpp:426
QLabel * logoEtatManette
Emplacement permettant de visualiser l&#39;état de la manette à l&#39;aide d&#39;un logo.
Definition: ihmrov.h:103
IHMReglageVideo * reglageVideo
Instance d&#39;un objet reglageVidéo permettant de modifier les reglages du flux vidéo.
Definition: ihmrov.h:88
QLabel * hautDePage
Emplacement permettant de créer un espace en haut de la page.
Definition: ihmrov.h:99
QPushButton * testCapturePhoto
Bouton de simulation de prise de photo.
Definition: ihmrov.h:95
#define ANGLE_MAX_RADAR
Défini l&#39;angle max supporté pas le radar.
Definition: ihmrov.h:42
void initialiserWidgets()
Initialise les widgets de l&#39;IHM.
Definition: ihmrov.cpp:37
QPixmap image
Image de la photo.
Definition: ihmalbumphoto.h:22
void afficherImage(QPixmap image)
Affiche la nouvelle image du flux vidéo dans l&#39;ihm.
Definition: ihmrov.cpp:447
Campagne * getCampagne()
Retourne l&#39;objet campagne en cours.
Definition: ihmrov.cpp:432
QLabel * manette
Emplacement permettant de définir le type de matériel.
Definition: ihmrov.h:109
QPixmap derniereImageVideo
Dernière image reçue du flux vidéo.
Definition: ihmrov.h:93
Class permettant de visualiser les photos en cours de campagne.
Definition: ihmalbumphoto.h:35
void modifierCampagneBDD(Campagne *campagne)
Met à jour les informations de la campagne lors de l&#39;arret de celle-ci dans la BDD.
Definition: ihmaccueil.cpp:368
Classe controlant tout les traitements en provenance et en direction de la communication avec le rov...
Definition: rov.h:91
QLabel * etatManette
Emplacement permettant de visualiser l&#39;état de la manette.
Definition: ihmrov.h:106
QwtThermo * indicateurRadiation
Indicateur permettant de visualiser l&#39;etat de la radiation actuel avec indication de dépassement de s...
Definition: ihmrov.h:112
QPushButton * boutonConfiguration
Bouton permettant d&#39;accéder à la configuration de la communication.
Definition: ihmrov.h:98
#define NOM_FENETRE_ROV
Défini le nom du projet.
Definition: ihmrov.h:23
QDateTime getDate() const
Retourne la date de la campagne.
Definition: campagne.cpp:39
Class contenant les informations de la campagne en cours.
Definition: campagne.h:34
#define ANGLE_MIN_RADAR
Défini l&#39;angle min supporté pas le radar.
Definition: ihmrov.h:48
void setEtatRadar(bool etatRadar)
Dertermine l&#39;etat de etatRadar.
Definition: ihmrov.cpp:437
QLabel * logoEtatCamera
Emplacement permettant de visualiser l&#39;état de la caméra à l&#39;aide d&#39;un logo.
Definition: ihmrov.h:102
Campagne * campagneEnCours
Instance d&#39;un objet Campagne possédant les informations de la campagne en cours.
Definition: ihmrov.h:85
QLabel * camera
Emplacement permettant de définir le type de matériel.
Definition: ihmrov.h:108
void actualiserInformations(QPixmap &image)
Actualise les informations incrusté dans l&#39;image (heure, données capteur, durée missions) ...
Definition: ihmrov.cpp:251
void actualiserInformationsSeuils()
Actualise les informations affichés des indicateur de dépassement des seuils acceptable.
Definition: ihmrov.cpp:389
QString getTempsCampagne()
Retourne la durée de la campagne.
Definition: rov.cpp:158
bool getEtatRadar()
Donne l&#39;etat de etatRadar.
Definition: ihmrov.cpp:442
Fichier qui contient la déclaration de la classe IHMReglageVideo.
void reglerVideo()
Ouvre une nouvelle fenetre permettant de régler l&#39;affichage vidéo.
Definition: ihmrov.cpp:454
QString cheminSauvegarde
Chemin de sauvegarde de la photo.
Definition: ihmalbumphoto.h:25
~IHMRov()
Destructeur de la classe IHMRov.
Definition: ihmrov.cpp:32
QGroupBox * zoneEtatMateriel
Zone regroupant les informations sur l&#39;état du matériel.
Definition: ihmrov.h:115
IHMRov(IHMAccueil *ihmAccueil, QWidget *parent=nullptr)
Constructeur de la classe IHMRov.
Definition: ihmrov.cpp:16
IHMConfiguration * configuration
Instance d&#39;un objet IHMConfiguration permettant de modifier les reglages de la communication.
Definition: ihmrov.h:89
void arreterVideo()
Déconnecte les événements liés à la caméra et modifie l&#39;état des boutons de l&#39;IHM.
Definition: ihmrov.cpp:528
bool aGarder
Booléen afin de savoir si la photo sera archivé ou non.
Definition: ihmalbumphoto.h:24
QLabel * fluxVideo
Emplacement permettant d&#39;accueiller le flux vidéo.
Definition: ihmrov.h:90
#define SEUIL_RADIATION_ACCEPTABLE
Défini le seuil à partir duquel la radiation n&#39;est plus acceptable en microsievert.
Definition: ihmrov.h:66
bool getCampagneEncours() const
Retourne l&#39;etat de la campagne.
Definition: rov.cpp:180
bool etatRadar
Dertermine si on affiche un radar.
Definition: ihmrov.h:110
Class permettant de créer une nouvelle campagne, reprendre une campagne mise en pause, archiver une campagne, supprimer une campagne, accéder à la base de données et configurer le matériel.
Definition: ihmaccueil.h:29
double calculCoordonneesX(QPixmap &image)
Calcule les coordonnées x de l&#39;obstacle pour le radar.
Definition: ihmrov.cpp:413
QPushButton * photosEnCours
Bouton permettant d&#39;accéder aux photo prise en cours de campagne.
Definition: ihmrov.h:91
void modifieEtatPortSerie(bool etat, QString information)
Modifie l&#39;affichage de l&#39;état du port série.
Definition: ihmrov.cpp:561
QLabel * etatCamera
Emplacement permettant de visualiser l&#39;état de la caméra.
Definition: ihmrov.h:105
void initialiserEvenementsCamera()
Initialise les événements liés à la caméra.
void arreterCampagne()
Arrête la campagne.
Definition: rov.cpp:140
QGroupBox * zoneInformationSeuils
Zone regroupant les informations sur l&#39;état des seuils de dépassement.
Definition: ihmrov.h:116
#define SEUIL_TEMPERATURE_NEGATIVE_ACCEPTABLE
Definition: ihmrov.h:60
void closeEvent(QCloseEvent *event)
Gêre l&#39;état de la campagne lors de la fermeture forcé de la fenêtre ihmRov.
Definition: ihmrov.cpp:534
void capturerImage(bool etat=false)
Enregistre la dernière image du flux vidéo.
Definition: ihmrov.cpp:473
QVector< QPoint > pointsRadar
Conteneur des points du radar.
Definition: ihmrov.h:117
QString getAngle() const
Récupère la dernière information issue du capteur de distance.
Definition: capteurs.cpp:44
QwtThermo * indicateurTemperature
Indicateur permettant de visualiser l&#39;etat de la temperature actuel avec indication de dépassement de...
Definition: ihmrov.h:111
Fichier qui contient la déclaration de la classe IHMAccueil.
void modifieEtatManette(bool etat)
Modifie l&#39;affichage de l&#39;état de la manette.
Definition: ihmrov.cpp:590
Class permettant de configurer la communication avec le rov.
QString getNomCampagne() const
Retourne le nom de la campagne.
Definition: campagne.cpp:19
double calculCoordonneesY(QPixmap &image)
Calcule les coordonnées y de l&#39;obstacle pour le radar.
Definition: ihmrov.cpp:421
void reglerConfiguration()
Ouvre une nouvelle fenetre permettant de régler la communication.
Definition: ihmrov.cpp:463
QLabel * logoEtatPortSerie
Emplacement permettant de visualiser l&#39;état du port série à l&#39;aide d&#39;un logo.
Definition: ihmrov.h:101
Fichier qui contient la déclaration de la classe rov.
bool demarrerCampagne()
Démarre la campagne.
Definition: rov.cpp:127
QVector< Photo > getAlbumPhoto() const
Retourne l&#39;album photo de la campagne.
Definition: campagne.cpp:70
void ajouterPhotoBDD(Photo &photo, Campagne *campagne)
Ajoute la photo prise dans la BDD associé a la campagne.
Definition: ihmaccueil.cpp:386
#define DISTANCE_MAX_RADAR
Défini la distance max supporté pas le radar.
Definition: ihmrov.h:36
QLabel * portSerie
Emplacement permettant de définir le type de matériel.
Definition: ihmrov.h:107
QLabel * temperature
Emplacement permettant de définir le type de seuil.
Definition: ihmrov.h:113
void modifieEtatCamera(bool etat, QString information)
Modifie l&#39;affichage de l&#39;état de la caméra.
Definition: ihmrov.cpp:576
Fichier qui contient la déclaration de la classe IHMRov.
structure contenant les informations d&#39;une photo de campagne
Definition: ihmalbumphoto.h:20
void chargerPhotos()
Charge les photos disponible dans le conteneur albumPhoto de la classe campagne pour les afficher dan...
Definition: ihmrov.cpp:517
#define RATIO
Défini le ratio pour la taille de l&#39;affichage du flux vidéo.
Definition: ihmrov.h:30
QString getHumidite() const
Récupère la dernière information issue du capteur de humidité
Definition: capteurs.cpp:59
void ouvrirAlbumPhotos(QVector< Photo > albumPhoto)
Ouvre une nouvelle fenetre contenant la liste des photos prises en cours de mission.
QLabel * radiation
Emplacement permettant de définir le type de seuil.
Definition: ihmrov.h:114
QVector< Manette * > getManettes()
Retourne le conteneur de manettes créée par le rov.
Definition: rov.cpp:298
La classe QWidget est la classe de base de tous les objets graphiques d&#39;interface utilisateur...
void initialiserEvenementsCamera()
Initialise les événements liés à la caméra.
Definition: ihmrov.cpp:523
QString getTelemetrie() const
Récupère la dernière information issue du capteur télémétrique.
Definition: capteurs.cpp:49
void modifieEtatBoutons()
Modifie l&#39;état des boutons en fonction du port.
void fermer()
Arrête la campagne et ferme l&#39;ihmRov.
Definition: ihmrov.cpp:548
QString getTemperature() const
Récupère la dernière information issue du capteur de température.
Definition: capteurs.cpp:54
void initialiserEvenements()
Initialise les événements de l&#39;IHM.
Definition: ihmrov.cpp:239
QDateTime dateheure
Date/Heure de la photo.
Definition: ihmalbumphoto.h:23
QPushButton * boutonReglageVideo
Bouton permettant d&#39;accéder aux reglage de la vidéo.
Definition: ihmrov.h:92
QPushButton * boutonCampagne
Bouton permettant de mettre en pause la campagne en cours.
Definition: ihmrov.h:97