Salome HOME
Frontière analytique torique
[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 #include "MonCreateZone.h"
21 #include "MonCreateHypothesis.h"
22
23 #include <QFileDialog>
24 #include <QMessageBox>
25
26 #include "SalomeApp_Tools.h"
27 #include "HOMARDGUI_Utils.h"
28 #include "HomardQtCommun.h"
29 #include <utilities.h>
30
31 #include <SUIT_Desktop.h>
32 #include <SUIT_MessageBox.h>
33 #include <SUIT_ResourceMgr.h>
34 #include <SUIT_Session.h>
35 #include <SUIT_ViewManager.h>
36
37 using namespace std;
38
39 // ----------------------------------------------------------------------
40 MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, bool modal,
41                              HOMARD::HOMARD_Gen_var myHomardGen0,
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     _Name (""),
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(myHomardGen0) ;
65       setupUi(this) ;
66       setModal(modal) ;
67       InitConnect( ) ;
68
69       SetNewName() ;
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 myHomardGen0,
78                              QString caseName):
79 // ----------------------------------------------------------------------
80 // Constructeur appele par MonEditZone
81 //
82     QDialog(0), Ui_CreateZone(),
83      myHomardGen(myHomardGen0),
84     _parent(parent),
85     _Name (""),
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_Radius->setSingleStep(_Rayon/10.) ;
291     SpinBox_Radius_int->setSingleStep(_Rayon/20.) ;
292     SpinBox_Radius_ext->setSingleStep(_Rayon/10.) ;
293 // Axe et hauteur
294 // Si une coordonnee est constante, inutile de demander l'axe et la hauteur
295     if ( _Orient > 0) {
296       SpinBox_Xaxis->setVisible(0) ;
297       SpinBox_Yaxis->setVisible(0) ;
298       SpinBox_Zaxis->setVisible(0) ;
299       SpinBox_Haut->setVisible(0) ;
300       TLXaxis->setVisible(0) ;
301       TLYaxis->setVisible(0) ;
302       TLZaxis->setVisible(0) ;
303       TLHaut->setVisible(0) ;
304       SpinBox_Xaxis_p->setVisible(0) ;
305       SpinBox_Yaxis_p->setVisible(0) ;
306       SpinBox_Zaxis_p->setVisible(0) ;
307       SpinBox_Haut_p->setVisible(0) ;
308       TLXaxis_p->setVisible(0) ;
309       TLYaxis_p->setVisible(0) ;
310       TLZaxis_p->setVisible(0) ;
311       TLHaut_p->setVisible(0) ;
312     }
313     else {
314       SpinBox_Haut->setSingleStep(_Rayon/10.) ;
315       SpinBox_Haut_p->setSingleStep(_Rayon/10.) ;
316     }
317 }
318 // ------------------------------------------------------------------------
319 bool MonCreateZone::PushOnApply()
320 // ------------------------------------------------------------------------
321 // Appele lorsque l'un des boutons Ok ou Apply est presse
322 //
323 {
324   if (LEName->text().trimmed()=="")
325   {
326     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
327                               QObject::tr("HOM_ZONE_NAME") ) ;
328     return false;
329   }
330
331   switch (_Type)
332   {
333     case 11 : // il s agit d un rectangle
334     { }
335     case 12 : // il s agit d un rectangle
336     { }
337     case 13 : // il s agit d un rectangle
338     { }
339     case 2 : // il s agit d un parallelipipede rectangle
340     {
341       if (  (_ZoneXmin != SpinBox_Xmini->value()) ||
342             (_ZoneXmax != SpinBox_Xmaxi->value()) ||
343             (_ZoneYmin != SpinBox_Ymini->value()) ||
344             (_ZoneYmax != SpinBox_Ymaxi->value()) ||
345             (_ZoneZmin != SpinBox_Zmini->value()) ||
346             (_ZoneZmax   != SpinBox_Zmaxi->value()) )
347       {
348         Chgt = true;
349         _ZoneXmin= SpinBox_Xmini->value() ; _ZoneXmax= SpinBox_Xmaxi->value() ;
350         _ZoneYmin= SpinBox_Ymini->value() ; _ZoneYmax= SpinBox_Ymaxi->value() ;
351         _ZoneZmin= SpinBox_Zmini->value() ; _ZoneZmax= SpinBox_Zmaxi->value() ;
352       }
353       break ;
354     }
355     case 4 : // il s agit d une sphere
356     {
357       if (  (_ZoneXcentre != SpinBox_Xcentre->value()) ||
358             (_ZoneYcentre != SpinBox_Ycentre->value()) ||
359             (_ZoneZcentre != SpinBox_Zbase->value())   ||
360             (_ZoneRayon   != SpinBox_Rayon->value()) )
361       {
362         Chgt = true;
363         _ZoneXcentre=SpinBox_Xcentre->value() ;
364         _ZoneYcentre=SpinBox_Ycentre->value() ;
365         _ZoneZcentre=SpinBox_Zcentre->value() ;
366         _ZoneRayon=SpinBox_Rayon->value() ;
367       }
368       break ;
369     }
370     case 31 : // il s agit d un disque issu d'un cylindre
371     { }
372     case 32 : // il s agit d un disque issu d'un cylindre
373     { }
374     case 33 : // il s agit d un disque issu d'un cylindre
375     { }
376     case 5 : // il s agit d un cylindre
377     {
378       if (  (_ZoneXcentre != SpinBox_Xbase->value())  ||
379             (_ZoneYcentre != SpinBox_Ybase->value())  ||
380             (_ZoneZcentre != SpinBox_Zbase->value())  ||
381             (_ZoneRayon   != SpinBox_Radius->value()) ||
382             (_ZoneHaut    != SpinBox_Haut->value())   ||
383             (_ZoneXaxis   != SpinBox_Xaxis->value())  ||
384             (_ZoneYaxis   != SpinBox_Yaxis->value())  ||
385             (_ZoneZaxis   != SpinBox_Zaxis->value()) )
386       {
387         Chgt = true;
388         _ZoneXcentre=SpinBox_Xbase->value() ;
389         _ZoneYcentre=SpinBox_Ybase->value() ;
390         _ZoneZcentre=SpinBox_Zbase->value() ;
391         _ZoneXaxis=SpinBox_Xaxis->value() ;
392         _ZoneYaxis=SpinBox_Yaxis->value() ;
393         _ZoneZaxis=SpinBox_Zaxis->value() ;
394         _ZoneRayon=SpinBox_Radius->value() ;
395         _ZoneHaut=SpinBox_Haut->value() ;
396       }
397       break ;
398     }
399     case 61 : // il s agit d un disque avec trou
400     { }
401     case 62 : // il s agit d un disque avec trou
402     { }
403     case 63 : // il s agit d un disque avec trou
404     { }
405     case 7 : // il s agit d un tuyau
406     {
407       if (  (_ZoneXcentre  != SpinBox_Xbase_p->value())  ||
408             (_ZoneYcentre  != SpinBox_Ybase_p->value())  ||
409             (_ZoneZcentre  != SpinBox_Zbase_p->value())  ||
410             (_ZoneRayonInt != SpinBox_Radius_int->value()) ||
411             (_ZoneRayon    != SpinBox_Radius_ext->value()) ||
412             (_ZoneHaut     != SpinBox_Haut_p->value())   ||
413             (_ZoneXaxis    != SpinBox_Xaxis_p->value())  ||
414             (_ZoneYaxis    != SpinBox_Yaxis_p->value())  ||
415             (_ZoneZaxis    != SpinBox_Zaxis_p->value()) )
416       {
417         Chgt = true;
418         _ZoneXcentre=SpinBox_Xbase_p->value() ;
419         _ZoneYcentre=SpinBox_Ybase_p->value() ;
420         _ZoneZcentre=SpinBox_Zbase_p->value() ;
421         _ZoneXaxis=SpinBox_Xaxis_p->value() ;
422         _ZoneYaxis=SpinBox_Yaxis_p->value() ;
423         _ZoneZaxis=SpinBox_Zaxis_p->value() ;
424         _ZoneRayonInt=SpinBox_Radius_int->value() ;
425         _ZoneRayon=SpinBox_Radius_ext->value() ;
426         _ZoneHaut=SpinBox_Haut_p->value() ;
427       }
428       break ;
429    }
430   }
431
432 // Controles
433 // Pour un rectangle ou un parallelepipede :
434   if ( ( _Type >= 11 && _Type <= 13 ) || _Type == 2 )
435   {
436     if ((_ZoneXmin >= _ZoneXmax) && (_Xincr > 0)) {
437       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
438                                 QObject::tr("HOM_ZONE_LIMIT").arg("X") ) ;
439       return false; }
440
441     if  ((_ZoneYmin >= _ZoneYmax) && (_Yincr > 0)) {
442       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
443                                 QObject::tr("HOM_ZONE_LIMIT").arg("Y") ) ;
444       return false; }
445
446     if ((_ZoneZmin >= _ZoneZmax) && (_Zincr > 0)) {
447       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
448                                 QObject::tr("HOM_ZONE_LIMIT").arg("Z") ) ;
449       return false; }
450   }
451 // L'axe pour un cylindre ou un tuyau :
452   if ( _Type == 5 || _Type == 7 )
453   {
454     double daux = _ZoneXaxis*_ZoneXaxis + _ZoneYaxis*_ZoneYaxis + _ZoneZaxis*_ZoneZaxis ;
455     if ( daux < 0.0000001 )
456     {
457       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
458                                 QObject::tr("HOM_AXE") );
459       return false;
460     }
461   }
462 // Rayons pour disque avec trou ou un tuyau :
463   if ( ( _Type >= 61 && _Type <= 63 ) || _Type == 7 )
464   {
465     if ( _ZoneRayonInt >= _ZoneRayon )
466     {
467       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
468                                 QObject::tr("HOM_ZONE_RAYON") );
469       return false;
470     }
471   }
472   bool bOK = CreateOrUpdateZone() ;
473
474   if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
475
476   return bOK;
477
478 }
479 // ---------------------------------------------------
480 bool MonCreateZone:: CreateOrUpdateZone()
481 //----------------------------------------------------
482 //  Creation de la zone
483 {
484   MESSAGE("CreateOrUpdateZone _Type ="<<_Type);
485   if (_Name != LEName->text().trimmed())
486   {
487     _Name = LEName->text().trimmed() ;
488     try
489     {
490       switch (_Type)
491       {
492         case 11 : // il s agit d un rectangle
493         { aZone = myHomardGen->CreateZoneBox2D(CORBA::string_dup(_Name.toStdString().c_str()), \
494           _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _Orient );
495           break;
496         }
497         case 12 : // il s agit d un rectangle
498         { aZone = myHomardGen->CreateZoneBox2D(CORBA::string_dup(_Name.toStdString().c_str()), \
499           _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax, _Orient );
500           break;
501         }
502         case 13 : // il s agit d un rectangle
503         { aZone = myHomardGen->CreateZoneBox2D(CORBA::string_dup(_Name.toStdString().c_str()), \
504           _ZoneZmin, _ZoneZmax, _ZoneXmin, _ZoneXmax, _Orient );
505           break;
506         }
507         case 2 : // il s agit d un parallelepipede
508         { aZone = myHomardGen->CreateZoneBox(CORBA::string_dup(_Name.toStdString().c_str()), \
509           _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax );
510           break;
511         }
512         case 4 : // il s agit d une sphere
513         { aZone = myHomardGen->CreateZoneSphere(CORBA::string_dup(_Name.toStdString().c_str()), \
514           _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon );
515           break;
516         }
517         case 31 : // il s agit d un disque issu d'un cylindre
518         { aZone = myHomardGen->CreateZoneDisk(CORBA::string_dup(_Name.toStdString().c_str()), \
519           _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _Orient );
520           break;
521           }
522         case 32 : // il s agit d un disque issu d'un cylindre
523         { aZone = myHomardGen->CreateZoneDisk(CORBA::string_dup(_Name.toStdString().c_str()), \
524           _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _Orient );
525           break;
526         }
527         case 33 : // il s agit d un disque issu d'un cylindre
528         { aZone = myHomardGen->CreateZoneDisk(CORBA::string_dup(_Name.toStdString().c_str()), \
529           _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _Orient );
530           break;
531         }
532         case 5 : // il s agit d un cylindre
533         { aZone = myHomardGen->CreateZoneCylinder(CORBA::string_dup(_Name.toStdString().c_str()), \
534           _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut );
535           break;
536         }
537         case 61 : // il s agit d un disque avec trou
538         { aZone = myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_Name.toStdString().c_str()), \
539           _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
540           break;
541           }
542         case 62 : // il s agit d un disque avec trou
543         { aZone = myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_Name.toStdString().c_str()), \
544           _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
545           break;
546           }
547         case 63 : // il s agit d un disque avec trou
548         { aZone = myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_Name.toStdString().c_str()), \
549           _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
550           break;
551           }
552         case 7 : // il s agit d un tuyau
553         { aZone = myHomardGen->CreateZonePipe(CORBA::string_dup(_Name.toStdString().c_str()), \
554           _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut, _ZoneRayonInt );
555           break;
556           }
557       }
558     }
559     catch( SALOME::SALOME_Exception& S_ex )
560     {
561       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
562                                 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
563       return false ;
564     }
565     _parent->addZoneinTWZone(_Name) ;
566 // Mise en place des attributs
567     aZone->SetLimit(_Xincr, _Yincr, _Zincr) ;
568
569     return true;
570   }
571   else { return false ; }
572 }
573 // ------------------------------------------------------------------------
574 void MonCreateZone::PushOnOK()
575 // ------------------------------------------------------------------------
576 {
577      if (PushOnApply()) this->close() ;
578 }
579 // ------------------------------------------------------------------------
580 void MonCreateZone::PushOnHelp()
581 // ------------------------------------------------------------------------
582 {
583   char* LanguageShort = myHomardGen->GetLanguageShort();
584   HOMARD_UTILS::PushOnHelp(QString("gui_create_zone.html"), QString(""), QString(LanguageShort));
585 }
586
587 // -----------------------------------
588 void MonCreateZone::SetNewName()
589 // -----------------------------------
590 {
591 // Recherche d'un nom par defaut qui n'existe pas encore
592
593   HOMARD::listeZones_var  MyObjects = myHomardGen->GetAllZonesName() ;
594   int num = 0; QString aName="";
595   while (aName=="" )
596   {
597     aName.setNum(num+1) ;
598     aName.insert(0, QString("Zone_")) ;
599     for ( int i=0; i<MyObjects->length() ; i++)
600     {
601       if ( aName ==  QString(MyObjects[i]))
602       {
603         num ++ ;
604         aName = "" ;
605         break ;
606       }
607    }
608   }
609   LEName->setText(aName);
610 }
611 // ------------------------------------------------------------------------
612 void MonCreateZone::SetBox()
613 // ------------------------------------------------------------------------
614 {
615   gBBox->setVisible(1) ;
616   gBSphere->setVisible(0) ;
617   gBCylindre->setVisible(0) ;
618   gBPipe->setVisible(0) ;
619   adjustSize() ;
620   _Type=2;
621 // Sachant que l'increment est le 1/100eme de l'ecart (min/max), cela revient
622 // a initialiser la boite sur une boite 'centrale' comprise entre 2/5 et 3/5
623   if ( _Xincr > 0 ) { SpinBox_Xmini->setValue(_Xcentre-10*_Xincr) ;
624                       SpinBox_Xmaxi->setValue(_Xcentre+10*_Xincr) ; }
625   else { _Type=12 ; }
626   if ( _Yincr > 0 ) { SpinBox_Ymini->setValue(_Ycentre-10*_Yincr) ;
627                       SpinBox_Ymaxi->setValue(_Ycentre+10*_Yincr) ; }
628   else { _Type=13 ; }
629   if ( _Zincr > 0 ) { SpinBox_Zmini->setValue(_Zcentre-10*_Zincr) ;
630                       SpinBox_Zmaxi->setValue(_Zcentre+10*_Zincr) ; }
631   else { _Type=11 ; }
632 }
633 // ------------------------------------------------------------------------
634 void MonCreateZone::SetSphere()
635 // ------------------------------------------------------------------------
636 {
637   MESSAGE("Debut de SetSphere")
638   gBBox->setVisible(0) ;
639   gBSphere->setVisible(1) ;
640   gBCylindre->setVisible(0) ;
641   gBPipe->setVisible(0) ;
642   adjustSize() ;
643   _Type=4;
644   SpinBox_Xcentre->setValue(_Xcentre) ;
645   SpinBox_Ycentre->setValue(_Ycentre) ;
646   SpinBox_Zcentre->setValue(_Zcentre) ;
647   SpinBox_Rayon->setValue(_Rayon) ;
648   MESSAGE("Fin de SetSphere")
649 }
650 // ------------------------------------------------------------------------
651 void MonCreateZone::SetCylinder()
652 // ------------------------------------------------------------------------
653 {
654   MESSAGE("Debut de SetCylinder")
655   gBBox->setVisible(0) ;
656   gBSphere->setVisible(0) ;
657   gBCylindre->setVisible(1) ;
658   gBPipe->setVisible(0) ;
659   adjustSize() ;
660   _Type=5;
661   if ( _Xincr > 0 ) { SpinBox_Xbase->setValue(_Xcentre) ;
662                       SpinBox_Xaxis->setValue(0.) ; }
663   else { _Type=32 ; }
664   if ( _Yincr > 0 ) { SpinBox_Ybase->setValue(_Ycentre) ;
665                       SpinBox_Yaxis->setValue(0.) ; }
666   else { _Type=33 ; }
667   if ( _Zincr > 0 ) { SpinBox_Zbase->setValue(_Zcentre) ;
668                       SpinBox_Zaxis->setValue(1.) ; }
669   else { _Type=31 ; }
670   SpinBox_Radius->setValue(_Rayon) ;
671   SpinBox_Haut->setValue(_Haut) ;
672   MESSAGE("Fin de SetCylinder")
673 }
674 // ------------------------------------------------------------------------
675 void MonCreateZone::SetPipe()
676 // ------------------------------------------------------------------------
677 {
678   MESSAGE("Debut de SetPipe")
679   gBBox->setVisible(0) ;
680   gBSphere->setVisible(0) ;
681   gBCylindre->setVisible(0) ;
682   gBPipe->setVisible(1) ;
683   adjustSize() ;
684   _Type=7;
685   if ( _Xincr > 0 ) { SpinBox_Xbase_p->setValue(_Xcentre) ;
686                       SpinBox_Xaxis_p->setValue(0.) ; }
687   else { _Type=62 ; }
688   if ( _Yincr > 0 ) { SpinBox_Ybase_p->setValue(_Ycentre) ;
689                       SpinBox_Yaxis_p->setValue(0.) ; }
690   else { _Type=63 ; }
691   if ( _Zincr > 0 ) { SpinBox_Zbase_p->setValue(_Zcentre) ;
692                       SpinBox_Zaxis_p->setValue(1.) ; }
693   else { _Type=61 ; }
694   SpinBox_Radius_int->setValue(_RayonInt) ;
695   SpinBox_Radius_ext->setValue(_Rayon) ;
696   SpinBox_Haut_p->setValue(_Haut) ;
697   MESSAGE("Fin de SetPipe")
698 }
699
700