Salome HOME
Nouvelles icones
[modules/homard.git] / src / HOMARDGUI / MonCreateZone.cxx
1 // Copyright (C) 2011-2013  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library 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.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 using namespace std;
21
22 #include "MonCreateZone.h"
23 #include "MonCreateHypothesis.h"
24
25 #include <QFileDialog>
26 #include <QMessageBox>
27
28 #include "SalomeApp_Tools.h"
29 #include "HOMARDGUI_Utils.h"
30 #include "HomardQtCommun.h"
31 #include <utilities.h>
32
33 #include <SUIT_Desktop.h>
34 #include <SUIT_MessageBox.h>
35 #include <SUIT_ResourceMgr.h>
36 #include <SUIT_Session.h>
37 #include <SUIT_ViewManager.h>
38
39 // ------------------------------------------------------------------------------------------------------------------------
40 MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, bool modal,
41                              HOMARD::HOMARD_Gen_var myHomardGen,
42                              QString caseName) :
43 // ------------------------------------------------------------------------------------------------------------------------------
44 /* Constructs a MonCreateZone
45    appele pour une vraie creation
46    initialise une boite et non une sphere
47 */
48     QDialog(0), Ui_CreateZone(),
49     _parent(parent),
50     _aZoneName (""),
51     _aCaseName(caseName),
52     _Orient(0),
53     _Type(2),
54     _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
55     _ZoneXcentre(0), _ZoneYcentre(0), _ZoneZcentre(0), _ZoneRayon(0),
56     _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0),
57     _ZoneXmin(0), _ZoneXmax(0), _ZoneYmin(0), _ZoneYmax(0), _ZoneZmin(0), _ZoneZmax(0),
58     _Xaxis(0), _Yaxis(0), _Zaxis(0), _RayonInt(0), _Haut(0),
59     _ZoneXaxis(0), _ZoneYaxis(0), _ZoneZaxis(0), _ZoneRayonInt(0), _ZoneHaut(0),
60     _DMax(0),
61     Chgt (false)
62     {
63       MESSAGE("Constructeur") ;
64       _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen) ;
65       setupUi(this) ;
66       setModal(modal) ;
67       InitConnect( ) ;
68
69       SetNewZoneName() ;
70       InitValZone() ;           // Cherche les valeurs de la boite englobante le maillage
71       InitMinMax() ;            // Initialise les bornes des boutons
72       SetBox() ;                // Propose une boite en premier choix
73
74     }
75 // --------------------------------------------------------------------------------------------------------------
76 MonCreateZone::MonCreateZone(MonCreateHypothesis* parent,
77                              HOMARD::HOMARD_Gen_var myHomardGen,
78                              QString caseName):
79 // --------------------------------------------------------------------------------------------------------------
80 // Constructeur appele par MonEditZone
81 //
82     QDialog(0), Ui_CreateZone(),
83      _myHomardGen(myHomardGen),
84     _parent(parent),
85     _aZoneName (""),
86     _aCaseName(caseName),
87     _Orient(0),
88     _Type(2),
89     _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
90     _ZoneXcentre(0), _ZoneYcentre(0), _ZoneZcentre(0), _ZoneRayon(0),
91     _ZoneXmin(0), _ZoneXmax(0), _ZoneYmin(0), _ZoneYmax(0), _ZoneZmin(0), _ZoneZmax(0),
92     _Xaxis(0), _Yaxis(0), _Zaxis(0), _RayonInt(0), _Haut(0),
93     _ZoneXaxis(0), _ZoneYaxis(0), _ZoneZaxis(0), _ZoneRayonInt(0), _ZoneHaut(0),
94     // Pour affichage lors de l edition d une Zone sans nom de Cas
95     _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1),
96     _DMax(1),
97     Chgt (false)
98     {
99   //  MESSAGE("Debut de  MonCreateZone")
100       setupUi(this) ;
101
102       setModal(true) ;
103       InitConnect() ;
104     }
105
106 // ------------------------------------------------------------------------
107 MonCreateZone::~MonCreateZone()
108 // ------------------------------------------------------------------------
109 {
110     // no need to delete child widgets, Qt does it all for us
111 }
112 // ------------------------------------------------------------------------
113 void MonCreateZone::InitConnect()
114 // ------------------------------------------------------------------------
115 {
116     connect( RBBox,        SIGNAL(clicked()) , this, SLOT(SetBox()) ) ;
117     connect( RBSphere,     SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ;
118     connect( RBCylinder,   SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ;
119     connect( RBPipe,       SIGNAL(clicked()) , this, SLOT(SetPipe()) ) ;
120     connect( buttonOk,     SIGNAL( pressed() ), this, SLOT( PushOnOK() ) ) ;
121     connect( buttonApply,  SIGNAL( pressed() ), this, SLOT( PushOnApply() ) ) ;
122     connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) ) ;
123     connect( buttonHelp,   SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) ) ;
124 }
125 // ------------------------------------------------------------------------
126 void MonCreateZone::InitValZone()
127 // ------------------------------------------------------------------------
128 {
129 //
130 //  1. Les coordonnees extremes du maillage
131 //
132   if (_aCaseName == QString("")) { return; }
133
134   HOMARD::HOMARD_Cas_var aCas = _myHomardGen->GetCase(_aCaseName.toStdString().c_str()) ;
135   HOMARD::extrema_var  MesExtremes = aCas->GetBoundingBox() ;
136   int num = MesExtremes->length() ;
137   ASSERT(num == 10) ;
138   _Xmin=MesExtremes[0]; _Xmax=MesExtremes[1]; _Xincr=MesExtremes[2];
139   _Ymin=MesExtremes[3]; _Ymax=MesExtremes[4]; _Yincr=MesExtremes[5];
140   _Zmin=MesExtremes[6]; _Zmax=MesExtremes[7]; _Zincr=MesExtremes[8];
141   _DMax=MesExtremes[9];
142   if ( _Xincr < 0 ) { _Orient = 2 ; }
143   else if ( _Yincr < 0 ) { _Orient = 3 ; }
144   else if ( _Zincr < 0 ) { _Orient = 1 ; }
145   MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ;
146   MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ;
147   MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ;
148   MESSAGE ("_DMax : " << _DMax) ;
149   MESSAGE ("_Orient : " << _Orient) ;
150 //  2. Caracteristiques des zones
151 // en X
152   if ( _Xincr < 0 )
153   {
154     _ZoneXmin = _Xmin;
155     _ZoneXmax = _Xmax;
156   }
157   else
158   {
159     _ZoneXmin = _Xmin - _Xincr;
160     _ZoneXmax = _Xmax + _Xincr;
161   }
162   _Xcentre=(_Xmin + _Xmax)/2.;
163 // en Y
164   if ( _Yincr < 0 )
165   {
166     _ZoneYmin = _Ymin;
167     _ZoneYmax = _Ymax;
168   }
169   else
170   {
171     _ZoneYmin = _Ymin - _Yincr;
172     _ZoneYmax = _Ymax + _Yincr;
173   }
174   _Ycentre=(_Ymin + _Ymax)/2.;
175 // en Z
176   if ( _Zincr < 0 )
177   {
178     _ZoneZmin = _Zmin;
179     _ZoneZmax = _Zmax;
180   }
181   else
182   {
183     _ZoneZmin = _Zmin - _Zincr;
184     _ZoneZmax = _Zmax + _Zincr;
185   }
186   _Zcentre=(_Zmin + _Zmax)/2.;
187 // Rayons
188   _Rayon= _DMax/4.;
189   _RayonInt= _DMax/8.;
190 // Axe et hauteur pour cylindre et tuyau
191   _Haut= _DMax/2.;
192 // 3. Gestion des icones
193   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ;
194   QPixmap pix = resMgr->loadPixmap( "HOMARD", "boxdxyz.png" ) ;
195   if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "boxdxyz.png" ) ; }
196   else                { pix = resMgr->loadPixmap( "HOMARD", "boxdxy.png" ) ; }
197   QIcon IS=QIcon(pix) ;
198   RBBox->setIcon(IS) ;
199
200   if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ) ; }
201   else                { pix = resMgr->loadPixmap( "HOMARD", "disk.png" ) ;
202                         RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8));
203                         TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
204                         TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
205                         TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); }
206   IS=QIcon(pix) ;
207   RBCylinder->setIcon(IS) ;
208
209   if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "pipe.png" ) ; }
210   else                { pix = resMgr->loadPixmap( "HOMARD", "diskwithhole.png" ) ;
211                         RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8));
212                         TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
213                         TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
214                         TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); }
215   IS=QIcon(pix) ;
216   RBPipe->setIcon(IS) ;
217
218   if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ) ;
219                         IS=QIcon(pix) ;
220                         RBSphere->setIcon(IS) ; }
221   else                { RBSphere->setVisible(0) ; }
222 }
223
224 // ------------------------------------------------------------------------
225 void MonCreateZone::InitMinMax()
226 // ------------------------------------------------------------------------
227 {
228 // en X
229     if ( _Xincr > 0) {
230       SpinBox_Xmini->setRange(_ZoneXmin,_ZoneXmax) ;
231       SpinBox_Xmaxi->setRange(_ZoneXmin,_ZoneXmax) ;
232       SpinBox_Xmini->setSingleStep(_Xincr) ;
233       SpinBox_Xmaxi->setSingleStep(_Xincr) ;
234       SpinBox_Xcentre->setSingleStep(_Xincr) ;
235     }
236     else {
237       SpinBox_Xmini->setValue(_ZoneXmin) ;
238       SpinBox_Xmaxi->setValue(_ZoneXmax) ;
239       SpinBox_Xcentre->setValue(_Xcentre) ;
240       SpinBox_Xbase->setValue(_Xcentre) ;
241       SpinBox_Xbase_p->setValue(_Xcentre) ;
242       SpinBox_Xmini->setEnabled(false) ;
243       SpinBox_Xmaxi->setEnabled(false) ;
244       SpinBox_Xcentre->setEnabled(false) ;
245       SpinBox_Xbase->setEnabled(false) ;
246       SpinBox_Xbase_p->setEnabled(false) ;
247     }
248 // en Y
249     if ( _Yincr > 0) {
250       SpinBox_Ymini->setRange(_ZoneYmin,_ZoneYmax) ;
251       SpinBox_Ymaxi->setRange(_ZoneYmin,_ZoneYmax) ;
252       SpinBox_Ymini->setSingleStep(_Yincr) ;
253       SpinBox_Ymaxi->setSingleStep(_Yincr) ;
254       SpinBox_Ycentre->setSingleStep(_Yincr) ;
255     }
256     else {
257       SpinBox_Ymini->setValue(_ZoneYmin) ;
258       SpinBox_Ymaxi->setValue(_ZoneYmax) ;
259       SpinBox_Ycentre->setValue(_Ycentre) ;
260       SpinBox_Ybase->setValue(_Ycentre) ;
261       SpinBox_Ybase_p->setValue(_Ycentre) ;
262       SpinBox_Ymini->setEnabled(false) ;
263       SpinBox_Ymaxi->setEnabled(false) ;
264       SpinBox_Ycentre->setEnabled(false) ;
265       SpinBox_Ybase->setEnabled(false) ;
266       SpinBox_Ybase_p->setEnabled(false) ;
267     }
268 // en Z
269     if ( _Zincr > 0) {
270       SpinBox_Zmini->setRange(_ZoneZmin,_ZoneZmax) ;
271       SpinBox_Zmaxi->setRange(_ZoneZmin,_ZoneZmax) ;
272       SpinBox_Zmini->setSingleStep(_Zincr) ;
273       SpinBox_Zmaxi->setSingleStep(_Zincr) ;
274       SpinBox_Zcentre->setSingleStep(_Zincr) ;
275     }
276     else {
277       SpinBox_Zmini->setValue(_ZoneZmin) ;
278       SpinBox_Zmaxi->setValue(_ZoneZmax) ;
279       SpinBox_Zcentre->setValue(_Zcentre) ;
280       SpinBox_Zbase->setValue(_Zcentre) ;
281       SpinBox_Zbase_p->setValue(_Zcentre) ;
282       SpinBox_Zmini->setEnabled(false) ;
283       SpinBox_Zmaxi->setEnabled(false) ;
284       SpinBox_Zcentre->setEnabled(false) ;
285       SpinBox_Zbase->setEnabled(false) ;
286       SpinBox_Zbase_p->setEnabled(false) ;
287     }
288 // Rayons
289     SpinBox_Rayon->setSingleStep(_Rayon/10.) ;
290     SpinBox_Rayon->setMinimum(0.) ;
291     SpinBox_Radius->setSingleStep(_Rayon/10.) ;
292     SpinBox_Radius->setMinimum(0.) ;
293     SpinBox_Radius_int->setSingleStep(_Rayon/20.) ;
294     SpinBox_Radius_int->setMinimum(0.) ;
295     SpinBox_Radius_ext->setSingleStep(_Rayon/10.) ;
296     SpinBox_Radius_ext->setMinimum(0.) ;
297 // Axe et hauteur
298 // Si une coordonnee est constante, inutile de demander l'axe et la hauteur
299     if ( _Orient > 0) {
300       SpinBox_Xaxis->setVisible(0) ;
301       SpinBox_Yaxis->setVisible(0) ;
302       SpinBox_Zaxis->setVisible(0) ;
303       SpinBox_Haut->setVisible(0) ;
304       TLXaxis->setVisible(0) ;
305       TLYaxis->setVisible(0) ;
306       TLZaxis->setVisible(0) ;
307       TLHaut->setVisible(0) ;
308       SpinBox_Xaxis_p->setVisible(0) ;
309       SpinBox_Yaxis_p->setVisible(0) ;
310       SpinBox_Zaxis_p->setVisible(0) ;
311       SpinBox_Haut_p->setVisible(0) ;
312       TLXaxis_p->setVisible(0) ;
313       TLYaxis_p->setVisible(0) ;
314       TLZaxis_p->setVisible(0) ;
315       TLHaut_p->setVisible(0) ;
316     }
317     else {
318       SpinBox_Haut->setMinimum(0.) ;
319       SpinBox_Haut->setSingleStep(_Rayon/10.) ;
320       SpinBox_Haut_p->setMinimum(0.) ;
321       SpinBox_Haut_p->setSingleStep(_Rayon/10.) ;
322     }
323 }
324 // ------------------------------------------------------------------------
325 bool MonCreateZone::PushOnApply()
326 // ------------------------------------------------------------------------
327 // Appele lorsque l'un des boutons Ok ou Apply est presse
328 //
329 {
330   std::cerr << LEZoneName->text().trimmed().toStdString() << std::endl;
331   if (LEZoneName->text().trimmed()=="")
332   {
333     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
334                               QObject::tr("HOM_ZONE_NAME") ) ;
335     return false;
336   }
337
338   switch (_Type)
339   {
340     case 11 : // il s agit d un rectangle
341     { }
342     case 12 : // il s agit d un rectangle
343     { }
344     case 13 : // il s agit d un rectangle
345     { }
346     case 2 : // il s agit d un parallelipipede rectangle
347     {
348       if (  (_ZoneXmin != SpinBox_Xmini->value()) or
349             (_ZoneXmax != SpinBox_Xmaxi->value()) or
350             (_ZoneYmin != SpinBox_Ymini->value()) or
351             (_ZoneYmax != SpinBox_Ymaxi->value()) or
352             (_ZoneZmin != SpinBox_Zmini->value()) or
353             (_ZoneZmax   != SpinBox_Zmaxi->value()) )
354       {
355         Chgt = true;
356         _ZoneXmin= SpinBox_Xmini->value() ; _ZoneXmax= SpinBox_Xmaxi->value() ;
357         _ZoneYmin= SpinBox_Ymini->value() ; _ZoneYmax= SpinBox_Ymaxi->value() ;
358         _ZoneZmin= SpinBox_Zmini->value() ; _ZoneZmax= SpinBox_Zmaxi->value() ;
359       }
360       break ;
361     }
362     case 4 : // il s agit d une sphere
363     {
364       if (  (_ZoneXcentre != SpinBox_Xcentre->value()) or
365             (_ZoneYcentre != SpinBox_Ycentre->value()) or
366             (_ZoneZcentre != SpinBox_Zbase->value())   or
367             (_ZoneRayon   != SpinBox_Rayon->value()) )
368       {
369         Chgt = true;
370         _ZoneXcentre=SpinBox_Xcentre->value() ;
371         _ZoneYcentre=SpinBox_Ycentre->value() ;
372         _ZoneZcentre=SpinBox_Zcentre->value() ;
373         _ZoneRayon=SpinBox_Rayon->value() ;
374       }
375       break ;
376     }
377     case 31 : // il s agit d un disque issu d'un cylindre
378     { }
379     case 32 : // il s agit d un disque issu d'un cylindre
380     { }
381     case 33 : // il s agit d un disque issu d'un cylindre
382     { }
383     case 5 : // il s agit d un cylindre
384     {
385       if (  (_ZoneXcentre != SpinBox_Xbase->value())  or
386             (_ZoneYcentre != SpinBox_Ybase->value())  or
387             (_ZoneZcentre != SpinBox_Zbase->value())  or
388             (_ZoneRayon   != SpinBox_Radius->value()) or
389             (_ZoneHaut    != SpinBox_Haut->value())   or
390             (_ZoneXaxis   != SpinBox_Xaxis->value())  or
391             (_ZoneYaxis   != SpinBox_Yaxis->value())  or
392             (_ZoneZaxis   != SpinBox_Zaxis->value()) )
393       {
394         Chgt = true;
395         _ZoneXcentre=SpinBox_Xbase->value() ;
396         _ZoneYcentre=SpinBox_Ybase->value() ;
397         _ZoneZcentre=SpinBox_Zbase->value() ;
398         _ZoneXaxis=SpinBox_Xaxis->value() ;
399         _ZoneYaxis=SpinBox_Yaxis->value() ;
400         _ZoneZaxis=SpinBox_Zaxis->value() ;
401         _ZoneRayon=SpinBox_Radius->value() ;
402         _ZoneHaut=SpinBox_Haut->value() ;
403       }
404       break ;
405     }
406     case 61 : // il s agit d un disque avec trou
407     { }
408     case 62 : // il s agit d un disque avec trou
409     { }
410     case 63 : // il s agit d un disque avec trou
411     { }
412     case 7 : // il s agit d un tuyau
413     {
414       if (  (_ZoneXcentre  != SpinBox_Xbase_p->value())  or
415             (_ZoneYcentre  != SpinBox_Ybase_p->value())  or
416             (_ZoneZcentre  != SpinBox_Zbase_p->value())  or
417             (_ZoneRayonInt != SpinBox_Radius_int->value()) or
418             (_ZoneRayon    != SpinBox_Radius_ext->value()) or
419             (_ZoneHaut     != SpinBox_Haut_p->value())   or
420             (_ZoneXaxis    != SpinBox_Xaxis_p->value())  or
421             (_ZoneYaxis    != SpinBox_Yaxis_p->value())  or
422             (_ZoneZaxis    != SpinBox_Zaxis_p->value()) )
423       {
424         Chgt = true;
425         _ZoneXcentre=SpinBox_Xbase_p->value() ;
426         _ZoneYcentre=SpinBox_Ybase_p->value() ;
427         _ZoneZcentre=SpinBox_Zbase_p->value() ;
428         _ZoneXaxis=SpinBox_Xaxis_p->value() ;
429         _ZoneYaxis=SpinBox_Yaxis_p->value() ;
430         _ZoneZaxis=SpinBox_Zaxis_p->value() ;
431         _ZoneRayonInt=SpinBox_Radius_int->value() ;
432         _ZoneRayon=SpinBox_Radius_ext->value() ;
433         _ZoneHaut=SpinBox_Haut_p->value() ;
434       }
435       break ;
436    }
437   }
438
439 // Controles
440 // Pour un rectangle ou un parallelepipede :
441   if ( ( _Type >= 11 and _Type <= 13 ) or _Type == 2 )
442   {
443     if ((_ZoneXmin >= _ZoneXmax) and (_Xincr > 0)) {
444       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
445                                 QObject::tr("HOM_ZONE_LIMIT").arg("X") ) ;
446       return false; }
447
448     if  ((_ZoneYmin >= _ZoneYmax) and (_Yincr > 0)) {
449       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
450                                 QObject::tr("HOM_ZONE_LIMIT").arg("Y") ) ;
451       return false; }
452
453     if ((_ZoneZmin >= _ZoneZmax) and (_Zincr > 0)) {
454       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
455                                 QObject::tr("HOM_ZONE_LIMIT").arg("Z") ) ;
456       return false; }
457   }
458 // L'axe pour un cylindre ou un tuyau :
459   if ( _Type == 5 or _Type == 7 )
460   {
461     double daux = _ZoneXaxis*_ZoneXaxis + _ZoneYaxis*_ZoneYaxis + _ZoneZaxis*_ZoneZaxis ;
462     if ( daux < 0.0000001 )
463     {
464       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
465                                 QObject::tr("HOM_AXE") );
466       return false;
467     }
468   }
469 // Rayons pour disque avec trou ou un tuyau :
470   if ( ( _Type >= 61 and _Type <= 63 ) or _Type == 7 )
471   {
472     if ( _ZoneRayonInt >= _ZoneRayon )
473     {
474       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
475                                 QObject::tr("HOM_ZONE_RAYON") );
476       return false;
477     }
478   }
479   bool bOK = CreateOrUpdateZone() ;
480
481   if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
482
483   return bOK;
484
485 }
486 // ---------------------------------------------------
487 bool MonCreateZone:: CreateOrUpdateZone()
488 //----------------------------------------------------
489 //  Creation de la zone
490 {
491   MESSAGE("CreateOrUpdateZone _Type ="<<_Type);
492   if (_aZoneName != LEZoneName->text().trimmed())
493   {
494     _aZoneName = LEZoneName->text().trimmed() ;
495     try
496     {
497       switch (_Type)
498       {
499         case 11 : // il s agit d un rectangle
500         { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
501           _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _Orient );
502           break;
503         }
504         case 12 : // il s agit d un rectangle
505         { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
506           _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax, _Orient );
507           break;
508         }
509         case 13 : // il s agit d un rectangle
510         { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
511           _ZoneZmin, _ZoneZmax, _ZoneXmin, _ZoneXmax, _Orient );
512           break;
513         }
514         case 2 : // il s agit d un parallelepipede
515         { aZone = _myHomardGen->CreateZoneBox(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
516           _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax );
517           break;
518         }
519         case 4 : // il s agit d une sphere
520         { aZone = _myHomardGen->CreateZoneSphere(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
521           _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon );
522           break;
523         }
524         case 31 : // il s agit d un disque issu d'un cylindre
525         { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
526           _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _Orient );
527           break;
528           }
529         case 32 : // il s agit d un disque issu d'un cylindre
530         { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
531           _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _Orient );
532           break;
533         }
534         case 33 : // il s agit d un disque issu d'un cylindre
535         { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
536           _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _Orient );
537           break;
538         }
539         case 5 : // il s agit d un cylindre
540         { aZone = _myHomardGen->CreateZoneCylinder(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
541           _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut );
542           break;
543         }
544         case 61 : // il s agit d un disque avec trou
545         { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
546           _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
547           break;
548           }
549         case 62 : // il s agit d un disque avec trou
550         { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
551           _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
552           break;
553           }
554         case 63 : // il s agit d un disque avec trou
555         { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
556           _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
557           break;
558           }
559         case 7 : // il s agit d un tuyau
560         { aZone = _myHomardGen->CreateZonePipe(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
561           _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut, _ZoneRayonInt );
562           break;
563           }
564       }
565     }
566     catch( SALOME::SALOME_Exception& S_ex )
567     {
568       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
569                                 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
570       return false ;
571     }
572     _parent->addZoneinTWZone(_aZoneName) ;
573 // Mise en place des attributs
574     aZone->SetLimit(_Xincr, _Yincr, _Zincr) ;
575
576     return true;
577   }
578   else { return false ; }
579 }
580 // ------------------------------------------------------------------------
581 void MonCreateZone::PushOnOK()
582 // ------------------------------------------------------------------------
583 {
584      if (PushOnApply()) this->close() ;
585 }
586 // ------------------------------------------------------------------------
587 void MonCreateZone::PushOnHelp()
588 // ------------------------------------------------------------------------
589 {
590   HOMARD_UTILS::PushOnHelp(QString("gui_create_zone.html"), QString("") ) ;
591 }
592
593 // -----------------------------------
594 void MonCreateZone::SetNewZoneName()
595 // -----------------------------------
596 {
597 // Recherche d'un nom par defaut qui n'existe pas encore
598
599   HOMARD::listeZones_var  MyZones = _myHomardGen->GetAllZonesName() ;
600   int num = 0; QString aZoneName="";
601   while (aZoneName=="" )
602   {
603     aZoneName.setNum(num+1) ;
604     aZoneName.insert(0, QString("Zone_")) ;
605     for ( int i=0; i<MyZones->length() ; i++)
606     {
607       if ( aZoneName ==  QString(MyZones[i]))
608       {
609           num=num+1;
610           aZoneName="";
611           break;
612       }
613    }
614   }
615   LEZoneName->clear() ;
616   LEZoneName->insert(aZoneName) ;
617 }
618 // ------------------------------------------------------------------------
619 void MonCreateZone::SetBox()
620 // ------------------------------------------------------------------------
621 {
622   gBBox->setVisible(1) ;
623   gBSphere->setVisible(0) ;
624   gBCylindre->setVisible(0) ;
625   gBPipe->setVisible(0) ;
626   adjustSize() ;
627   _Type=2;
628 // Sachant que l'increment est le 1/100eme de l'ecart (min/max), cela revient
629 // a initialiser la boite sur une boite 'centrale' comprise entre 2/5 et 3/5
630   if ( _Xincr > 0 ) { SpinBox_Xmini->setValue(_Xcentre-10*_Xincr) ;
631                       SpinBox_Xmaxi->setValue(_Xcentre+10*_Xincr) ; }
632   else { _Type=12 ; }
633   if ( _Yincr > 0 ) { SpinBox_Ymini->setValue(_Ycentre-10*_Yincr) ;
634                       SpinBox_Ymaxi->setValue(_Ycentre+10*_Yincr) ; }
635   else { _Type=13 ; }
636   if ( _Zincr > 0 ) { SpinBox_Zmini->setValue(_Zcentre-10*_Zincr) ;
637                       SpinBox_Zmaxi->setValue(_Zcentre+10*_Zincr) ; }
638   else { _Type=11 ; }
639 }
640 // ------------------------------------------------------------------------
641 void MonCreateZone::SetSphere()
642 // ------------------------------------------------------------------------
643 {
644   MESSAGE("Debut de SetSphere")
645   gBBox->setVisible(0) ;
646   gBSphere->setVisible(1) ;
647   gBCylindre->setVisible(0) ;
648   gBPipe->setVisible(0) ;
649   adjustSize() ;
650   _Type=4;
651   SpinBox_Xcentre->setValue(_Xcentre) ;
652   SpinBox_Ycentre->setValue(_Ycentre) ;
653   SpinBox_Zcentre->setValue(_Zcentre) ;
654   SpinBox_Rayon->setValue(_Rayon) ;
655   MESSAGE("Fin de SetSphere")
656 }
657 // ------------------------------------------------------------------------
658 void MonCreateZone::SetCylinder()
659 // ------------------------------------------------------------------------
660 {
661   MESSAGE("Debut de SetCylinder")
662   gBBox->setVisible(0) ;
663   gBSphere->setVisible(0) ;
664   gBCylindre->setVisible(1) ;
665   gBPipe->setVisible(0) ;
666   adjustSize() ;
667   _Type=5;
668   if ( _Xincr > 0 ) { SpinBox_Xbase->setValue(_Xcentre) ;
669                       SpinBox_Xaxis->setValue(0.) ; }
670   else { _Type=32 ; }
671   if ( _Yincr > 0 ) { SpinBox_Ybase->setValue(_Ycentre) ;
672                       SpinBox_Yaxis->setValue(0.) ; }
673   else { _Type=33 ; }
674   if ( _Zincr > 0 ) { SpinBox_Zbase->setValue(_Zcentre) ;
675                       SpinBox_Zaxis->setValue(1.) ; }
676   else { _Type=31 ; }
677   SpinBox_Radius->setValue(_Rayon) ;
678   SpinBox_Haut->setValue(_Haut) ;
679   MESSAGE("Fin de SetCylinder")
680 }
681 // ------------------------------------------------------------------------
682 void MonCreateZone::SetPipe()
683 // ------------------------------------------------------------------------
684 {
685   MESSAGE("Debut de SetPipe")
686   gBBox->setVisible(0) ;
687   gBSphere->setVisible(0) ;
688   gBCylindre->setVisible(0) ;
689   gBPipe->setVisible(1) ;
690   adjustSize() ;
691   _Type=7;
692   if ( _Xincr > 0 ) { SpinBox_Xbase_p->setValue(_Xcentre) ;
693                       SpinBox_Xaxis_p->setValue(0.) ; }
694   else { _Type=62 ; }
695   if ( _Yincr > 0 ) { SpinBox_Ybase_p->setValue(_Ycentre) ;
696                       SpinBox_Yaxis_p->setValue(0.) ; }
697   else { _Type=63 ; }
698   if ( _Zincr > 0 ) { SpinBox_Zbase_p->setValue(_Zcentre) ;
699                       SpinBox_Zaxis_p->setValue(1.) ; }
700   else { _Type=61 ; }
701   SpinBox_Radius_int->setValue(_RayonInt) ;
702   SpinBox_Radius_ext->setValue(_Rayon) ;
703   SpinBox_Haut_p->setValue(_Haut) ;
704   MESSAGE("Fin de SetPipe")
705 }
706
707