Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYRectangularMaillageWidget.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 
21 // Added by qt3to4:
22 #include <QGridLayout>
23 #include <QLabel>
24 #include <QtWidgets>
25 
33 
34 #define TR(id) OLocalizator::getString("TYRectangularMaillageWidget", (id))
35 
37  QWidget* _pParent /*=NULL*/)
38  : TYWidget(pElement, _pParent)
39 {
40 
41  _maillageW = new TYMaillageWidget(pElement, this);
42 
43  resize(300, 200);
44  setWindowTitle(TR("id_caption"));
45  QGridLayout* pRectangularMaillageLayout = new QGridLayout();
46  setLayout(pRectangularMaillageLayout);
47 
48  pRectangularMaillageLayout->addWidget(_maillageW, 0, 0);
49 
50  QGroupBox* pGroupBox = new QGroupBox(this);
51  QGridLayout* pGroupBoxLayout = new QGridLayout();
52  pGroupBox->setLayout(pGroupBoxLayout);
53 
54  QLabel* pLabelDistanceX = new QLabel(TR("id_distance_x"), pGroupBox);
55  _lineEditDistanceX = new TYLineEdit(pGroupBox);
56  QObject::connect(_lineEditDistanceX, &QLineEdit::textChanged, this,
58  QLabel* pLabelDistanceUniteX = new QLabel(TR("id_distance_unit"), pGroupBox);
59  pGroupBoxLayout->addWidget(pLabelDistanceX, 0, 0);
60  pGroupBoxLayout->addWidget(_lineEditDistanceX, 0, 1);
61  pGroupBoxLayout->addWidget(pLabelDistanceUniteX, 0, 2);
62 
63  QLabel* pLabelDensiteY = new QLabel(TR("id_distance_y"), pGroupBox);
64  _lineEditDistanceY = new TYLineEdit(pGroupBox);
65  QObject::connect(_lineEditDistanceY, &QLineEdit::textChanged, this,
67  QLabel* pLabelDensiteUniteY = new QLabel(TR("id_distance_unit"), pGroupBox);
68  pGroupBoxLayout->addWidget(pLabelDensiteY, 1, 0);
69  pGroupBoxLayout->addWidget(_lineEditDistanceY, 1, 1);
70  pGroupBoxLayout->addWidget(pLabelDensiteUniteY, 1, 2);
71 
72  pRectangularMaillageLayout->addWidget(pGroupBox, 1, 0);
73 
74  QGroupBox* pGroupBoxRectangle = new QGroupBox(this);
75  pGroupBoxRectangle->setTitle(TR("id_rectangle"));
76  QGridLayout* pGroupBoxRectangleLayout = new QGridLayout();
77  pGroupBoxRectangle->setLayout(pGroupBoxRectangleLayout);
78 
79  _lineEditNomRectangle = new QLineEdit(pGroupBoxRectangle);
80  _lineEditNomRectangle->setEnabled(false);
81  pGroupBoxRectangleLayout->addWidget(_lineEditNomRectangle, 0, 0);
82 
83  QLabel* pSurfaceLabel = new QLabel(TR("id_surface"), pGroupBoxRectangle);
84  pGroupBoxRectangleLayout->addWidget(pSurfaceLabel, 0, 1);
85  _lineEditSurface = new TYLineEdit(pGroupBoxRectangle);
86  _lineEditSurface->setReadOnly(true);
87  pGroupBoxRectangleLayout->addWidget(_lineEditSurface, 0, 2);
88 
89  QPushButton* pPushButtonRectangle = new QPushButton(TR("id_proprietes_button"), pGroupBoxRectangle);
90  pGroupBoxRectangleLayout->addWidget(pPushButtonRectangle, 0, 3);
91 
92  pRectangularMaillageLayout->addWidget(pGroupBoxRectangle, 2, 0);
93 
94  updateContent();
95 
96  connect(pPushButtonRectangle, &QPushButton::clicked, this, &TYRectangularMaillageWidget::editRectangle);
97 }
98 
100 
102 {
104 
105  if (getElement()->getRectangle())
106  {
107  _lineEditNomRectangle->setText(getElement()->getRectangle()->getName());
108  _lineEditSurface->setText(QString().setNum(getElement()->getRectangle()->surface(), 'f', 2));
109  }
110 
111  _lineEditDistanceX->setText(QString().setNum(getElement()->getDistanceX(), 'f', 2));
112  _lineEditDistanceY->setText(QString().setNum(getElement()->getDistanceY(), 'f', 2));
113 }
114 
116 {
117  double surface = _lineEditSurface->text().toDouble();
118  double densiteX = 1.0f / (_lineEditDistanceX->text().toDouble());
119  double densiteY = 1.0f / (_lineEditDistanceY->text().toDouble());
120 
121  _maillageW->updateNbPoints((int)(surface * densiteX * densiteY));
122 }
123 
125 {
126  _maillageW->apply();
127 
128  // Si les densites sont differentes
129  double distanceX = _lineEditDistanceX->text().toDouble();
130  double distanceY = _lineEditDistanceY->text().toDouble();
131  LPTYProjet pProj = dynamic_cast<TYProjet*>(getElement()->getParent());
132 
133  if (((getElement()->getDistanceX() != distanceX) || (getElement()->getDistanceY() != distanceY)) &&
134  getElement()->getRectangle())
135  {
136  // Rebuild the noise map
137  getElement()->make(getElement()->getRectangle(), 1.0f / distanceX, 1.0f / distanceY);
138 
139  // Update computation for new number of spectrums
140  dynamic_cast<TYProjet*>(getElement()->getParent())->updateCalculsWithMaillage(getElement());
141 
142  // La densite a changee, il faut mettre a jour l'altimetrie
143  if (pProj && pProj->getSite()->getAltimetry()->containsData())
144  {
145  pProj->updateAltiRecepteurs();
146  }
147  }
148  if (pProj)
149  {
150  pProj->updateGraphic();
151  }
152 
153  emit modified();
154 }
155 
157 {
158  int ret = getElement()->getRectangle()->edit(this);
159 
160  if ((ret == QDialog::Accepted) && (getElement()->getRectangle()))
161  {
162  _lineEditNomRectangle->setText(getElement()->getRectangle()->getName());
163  }
164 }
outil IHM pour une entrée utilisateur (fichier header)
Outil IHM pour un maillage (fichier header)
#define TR(id)
outil IHM pour un maillage rectangulaire (fichier header)
bool containsData()
Definition: TYAltimetrie.h:251
classe de l'objet IHM pour un maillage
virtual void updateContent()
void updateNbPoints(unsigned int nbPts)
virtual void apply()
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
virtual void updateGraphic()
Definition: TYProjet.cpp:1153
TYRectangularMaillageWidget(TYRectangularMaillage *pElement, QWidget *_pParent=NULL)
Classe de definition d'un maillage rectangulaire.
LPTYAltimetrie getAltimetry() const
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
void modified()