Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYMaillageWidget.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) <2012-2024> <EDF-DTG> <FRANCE>
3  * This file is part of Code_TYMPAN (R).
4  * Code_TYMPAN (R) is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * Code_TYMPAN (R) is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  * You should have received a copy of the GNU General Public License along
13  * with Code_TYMPAN (R). If not, see <https://www.gnu.org/licenses/>.
14  */
15 
28 
29 #include "TYLookupTableWidget.h"
30 
31 #include <qradiobutton.h>
32 #include <qbuttongroup.h>
33 #include <qcombobox.h>
34 // Added by qt3to4:
35 #include <QGridLayout>
36 #include <QFrame>
37 #include <QLabel>
38 #include <QtWidgets>
39 
40 #include "TYMaillageWidget.h"
41 #include "TYElementWidget.h"
42 
43 #define TR(id) OLocalizator::getString("TYMaillageWidget", (id))
44 
45 TYMaillageWidget::TYMaillageWidget(TYMaillage* pElement, QWidget* _pParent /*=NULL*/)
46  : TYWidget(pElement, _pParent)
47 {
48  _dataFreq = 16.0;
49 
50  _elmW = new TYElementWidget(pElement, this);
51 
52  resize(300, 200);
53  setWindowTitle(TR("id_caption"));
54  _maillageLayout = new QGridLayout();
55  setLayout(_maillageLayout);
56 
57  _maillageLayout->addWidget(_elmW, 0, 0);
58 
59  // Affichage du min et du max des valeurs
60  QGroupBox* pGroupBoxVal = new QGroupBox(this);
61  pGroupBoxVal->setTitle(TR("id_valeurs"));
62  QGridLayout* pGroupBoxValLayout = new QGridLayout();
63  pGroupBoxVal->setLayout(pGroupBoxValLayout);
64 
65  QLabel* pDataValMinLabel = new QLabel(TR("id_datavalmin"), pGroupBoxVal);
66  pGroupBoxValLayout->addWidget(pDataValMinLabel, 0, 0);
67  _lineEditDataValMin = new TYLineEdit(pGroupBoxVal);
68  _lineEditDataValMin->setReadOnly(true);
69  pGroupBoxValLayout->addWidget(_lineEditDataValMin, 0, 1);
70 
71  QLabel* pDataValMaxLabel = new QLabel(TR("id_datavalmax"), pGroupBoxVal);
72  pGroupBoxValLayout->addWidget(pDataValMaxLabel, 0, 2);
73  _lineEditDataValMax = new TYLineEdit(pGroupBoxVal);
74  _lineEditDataValMax->setReadOnly(true);
75  pGroupBoxValLayout->addWidget(_lineEditDataValMax, 0, 3);
76 
77  _maillageLayout->addWidget(pGroupBoxVal, 1, 0);
78 
79  // Disambiguate the overloaded signals
80  void (QComboBox::*_qComboBox_activated)(int) = &QComboBox::activated;
81  void (QButtonGroup::*_qButtonGroup_clicked)(int) = &QButtonGroup::idClicked;
82 
83  // Choix des valeurs (dBLin, dBA, freq)
84  QGroupBox* pGroupBoxData = new QGroupBox(this);
85  pGroupBoxData->setTitle(TR("id_datatype"));
86  QGridLayout* pGroupBoxDataLayout = new QGridLayout();
87  pGroupBoxData->setLayout(pGroupBoxDataLayout);
88 
89  pGroupBoxDataLayout->setColumnStretch(0, 1);
90  pGroupBoxDataLayout->setColumnStretch(1, 0);
91 
92  _buttonGroupDataType = new QButtonGroup();
93  QObject::connect(_buttonGroupDataType, _qButtonGroup_clicked, this, &TYMaillageWidget::updateValMinMax);
94  _buttonGroupDataType->setExclusive(true);
95  _pRadioButtondBA = new QRadioButton(TR("id_dba"));
97  _pRadioButtondBLin = new QRadioButton(TR("id_dblin"));
99  _pRadioButtonDataFreq = new QRadioButton(TR("id_datafreq"));
101 
102  QGridLayout* groupBoxDataTypeLayout = new QGridLayout();
103  groupBoxDataTypeLayout->addWidget(_pRadioButtondBA, 0, 0);
104  groupBoxDataTypeLayout->addWidget(_pRadioButtondBLin, 0, 1);
105  groupBoxDataTypeLayout->addWidget(_pRadioButtonDataFreq, 0, 2);
106 
107  QGroupBox* groupBoxDataType = new QGroupBox();
108  groupBoxDataType->setTitle(TR(""));
109  groupBoxDataType->setLayout(groupBoxDataTypeLayout);
110 
111  pGroupBoxDataLayout->addWidget(groupBoxDataType, 0, 0);
112 
113  // Choix de la frequence
114  _comboBoxFreq = new QComboBox(pGroupBoxData);
115  pGroupBoxDataLayout->addWidget(_comboBoxFreq, 0, 1);
116  updateFreqList();
117 
118  connect(_comboBoxFreq, _qComboBox_activated, this, &TYMaillageWidget::setFrequency);
119 
120  _maillageLayout->addWidget(pGroupBoxData, 2, 0);
121 
122  // Definition de la palette de couleur
123  QGroupBox* pGroupBoxColor = new QGroupBox(this);
124  pGroupBoxColor->setTitle(TR("id_palette"));
125 
126  QGridLayout* pGroupBoxColorLayout = new QGridLayout();
127  pGroupBoxColor->setLayout(pGroupBoxColorLayout);
128 
129  // Nom de la palette
130  _lineEditPaletteName = new QLineEdit(pGroupBoxColor);
131  _lineEditPaletteName->setEnabled(false);
132  pGroupBoxColorLayout->addWidget(_lineEditPaletteName, 0, 0);
133 
134  // Bouton d'edition de la palette
135  _pushButtonEditPalette = new QPushButton(pGroupBoxColor);
136  _pushButtonEditPalette->setText(TR("id_edit_palette"));
137  pGroupBoxColorLayout->addWidget(_pushButtonEditPalette, 0, 1);
138  connect(_pushButtonEditPalette, &QPushButton::clicked, this, &TYMaillageWidget::editPalette);
139 
140  QWidget* dummy = new QWidget();
141  _lookupTableWidget = new TYLabeledLookupTableWidget(getElement()->getPalette(), dummy);
142  pGroupBoxColorLayout->addWidget(dummy, 1, 0, 1, 2);
143 
144  _maillageLayout->addWidget(pGroupBoxColor, 3, 0);
145 
146  // Indication du nombre de points
147  _groupBox = new QGroupBox(this);
148  _groupBox->setTitle("");
149  _groupBoxLayout = new QGridLayout();
150  _groupBox->setLayout(_groupBoxLayout);
151 
152  QLabel* pNbPointsLabel = new QLabel(TR("id_nbpoint"), _groupBox);
153  _groupBoxLayout->addWidget(pNbPointsLabel, 0, 0);
154  _lineEditNbPoints = new QLineEdit(_groupBox);
155  _lineEditNbPoints->setReadOnly(true);
156  _groupBoxLayout->addWidget(_lineEditNbPoints, 0, 1);
157 
158  _maillageLayout->addWidget(_groupBox, 4, 0);
159 
160  // Hauteur du maillage
161  QGroupBox* pGroupBoxHaut = new QGroupBox(this);
162  pGroupBoxHaut->setTitle("");
163  QGridLayout* pGroupBoxHautLayout = new QGridLayout();
164  pGroupBoxHaut->setLayout(pGroupBoxHautLayout);
165 
166  QLabel* pHautLabel = new QLabel(TR("id_hauteur"), pGroupBoxHaut);
167  pGroupBoxHautLayout->addWidget(pHautLabel, 0, 0);
168  _lineEditHauteur = new TYLineEdit(pGroupBoxHaut);
169  pGroupBoxHautLayout->addWidget(_lineEditHauteur, 0, 1);
170  QLabel* pHautUnitLabel = new QLabel(TR("id_unite_hauteur"), pGroupBoxHaut);
171  pGroupBoxHautLayout->addWidget(pHautUnitLabel, 0, 2);
172 
173  _maillageLayout->addWidget(pGroupBoxHaut, 5, 0);
174 
175  updateContent();
176 
177  connect(_buttonGroupDataType, _qButtonGroup_clicked, this, &TYMaillageWidget::dataTypeChanged);
178 }
179 
181 
183 {
184  _elmW->updateContent();
185 
186  // Positionne la valeur du comboBox;
187  _dataFreq = getElement()->getDataFreq();
188  int indFreq = TYSpectre::getIndice(_dataFreq);
189  _comboBoxFreq->setCurrentIndex(indFreq);
190 
191  _buttonGroupDataType->button(getElement()->getDataType())->setChecked(true);
192  dataTypeChanged(getElement()->getDataType());
193 
194  _lineEditHauteur->setText(QString().setNum(getElement()->getHauteur()));
195 
196  updateNbPoints(static_cast<uint32>(getElement()->getPtsCalcul().size()));
197  updateValMinMax();
198  updatePalette();
199 }
200 
201 void TYMaillageWidget::updateNbPoints(unsigned int nbPoints)
202 {
203  _lineEditNbPoints->setText(QString().setNum(nbPoints));
204 }
205 
207 {
208  double val = 0.0;
209  double valMin = +10000.0;
210  double valMax = -10000.0;
211  TYPointCalcul* pPoint = NULL;
212 
213  int dataType = _buttonGroupDataType->checkedId();
214 
215  for (unsigned int i = 0; i < getElement()->getPtsCalcul().size(); i++)
216  {
217  pPoint = getElement()->getPtsCalcul()[i];
218  if (pPoint->etat() == false)
219  {
220  continue;
221  } // On ne prend pas en compte les points inactifs
222 
223  switch (dataType)
224  {
226  val = pPoint->getValA();
227  break;
229  val = pPoint->getValLin();
230  break;
232  val = pPoint->getSpectre()->getValueReal(_dataFreq);
233  break;
234  }
235 
236  valMin = val < valMin ? val : valMin;
237  valMax = val > valMax ? val : valMax;
238  }
239 
240  _lineEditDataValMin->setText(QString().setNum(valMin, 'f', 2));
241  _lineEditDataValMax->setText(QString().setNum(valMax, 'f', 2));
242 }
243 
245 {
246  _lineEditPaletteName->setText(getElement()->getPalette()->getName());
247  _lookupTableWidget->update(getElement()->getPalette());
248 }
249 
251 {
252  _elmW->apply();
253 
254  // Si la hauteur est differente
255  if (getElement()->getHauteur() != _lineEditHauteur->text().toDouble())
256  {
257  getElement()->setHauteur(_lineEditHauteur->text().toDouble());
258  TYProjet* pProj = dynamic_cast<TYProjet*>(getElement()->getParent());
259  if (pProj && pProj->getSite()->getAltimetry()->containsData())
260  {
261  pProj->updateAltiRecepteurs();
262  }
263  }
264 
265  getElement()->setDataFreq(_dataFreq);
266  getElement()->setDataType(_buttonGroupDataType->checkedId());
267 
268  emit modified();
269 }
270 
272 {
273  if (selected == 2)
274  {
275  _comboBoxFreq->setEnabled(true);
276  }
277  else
278  {
279  _comboBoxFreq->setEnabled(false);
280  }
281 }
282 
284 {
285  _dataFreq = _comboBoxFreq->currentText().toFloat();
286  updateValMinMax();
287 }
288 
290 {
291  LPTYPalette palette = getElement()->getPalette();
292  if (palette->edit(this))
293  {
294  updatePalette();
295  }
296 }
297 
299 {
301  for (unsigned int i = 0; i < tabFreq.size(); i++)
302  {
303  QString str;
304  str.setNum(tabFreq[i], 'f', 1);
305  _comboBoxFreq->insertItem(i, str);
306  }
307 }
outil IHM pour un element (fichier header)
outil IHM pour une entrée utilisateur (fichier header)
Outil IHM utile a l'affichage de la palette de couleur (fichier header)
#define TR(id)
Outil IHM pour un maillage (fichier header)
const std::vector< double > tabFreq
OTabFreq TYTabFreq
Collection des frequences.
Definition: TYSpectre.h:27
double getValueReal(double freq)
Definition: spectre.cpp:973
static int getIndice(const double &freq)
Return the index associated to a frequency.
Definition: spectre.h:398
bool containsData()
Definition: TYAltimetrie.h:251
classe de l'objet IHM pour un element
virtual void apply()
virtual void updateContent()
void update(const TYPalette *palette)
virtual void updateContent()
QRadioButton * _pRadioButtonDataFreq
void dataTypeChanged(int selected)
QRadioButton * _pRadioButtondBA
void setFrequency(int freq)
QGridLayout * _groupBoxLayout
void updateNbPoints(unsigned int nbPts)
TYMaillageWidget(TYMaillage *pElement, QWidget *_pParent=NULL)
QRadioButton * _pRadioButtondBLin
TYLineEdit * _lineEditDataValMin
TYLineEdit * _lineEditHauteur
QGroupBox * _groupBox
TYLabeledLookupTableWidget * _lookupTableWidget
QLineEdit * _lineEditPaletteName
TYElementWidget * _elmW
QComboBox * _comboBoxFreq
QGridLayout * _maillageLayout
QButtonGroup * _buttonGroupDataType
QPushButton * _pushButtonEditPalette
QLineEdit * _lineEditNbPoints
virtual void apply()
TYLineEdit * _lineEditDataValMax
Classe de definition d'un maillage.
Definition: TYMaillage.h:51
@ ValGlobalDBLin
Definition: TYMaillage.h:299
Classe de definition d'un point de calcul.C'est une classe derivee a TYPoint avec en plus un spectrep...
Definition: TYPointCalcul.h:33
double getValLin()
Get de la valeur globale Lin au point.
virtual LPTYSpectre getSpectre()
Get du spectre resultat d'un calcul donne.
virtual bool etat()
double getValA()
Get de la valeur globale A au point.
classe de definition d'un projet.
Definition: TYProjet.h:45
bool updateAltiRecepteurs()
Definition: TYProjet.cpp:632
LPTYSiteNode getSite()
Get du site.
Definition: TYProjet.h:169
LPTYAltimetrie getAltimetry() const
static const TYTabFreq getTabFreqNorm(TYSpectreForm form=SPECTRE_FORM_TIERS)
Definition: TYSpectre.cpp:419
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
void modified()
unsigned int uint32
Definition: defines.h:75