1 // Copyright (C) 2011-2015 CEA/DEN, EDF R&D
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, or (at your option) any later version.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "MonCreateBoundaryAn.h"
21 #include "MonCreateCase.h"
23 #include <QFileDialog>
24 #include <QMessageBox>
26 #include "SalomeApp_Tools.h"
27 #include "HOMARDGUI_Utils.h"
28 #include "HomardQtCommun.h"
29 #include <utilities.h>
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>
38 #define PI 3.141592653589793
41 // ------------------------------------------------------------------------------------------------------------------------
42 MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal,
43 HOMARD::HOMARD_Gen_var myHomardGen0,
45 // ------------------------------------------------------------------------------------------------------------------------------
46 /* Constructs a MonCreateBoundaryAn
47 appele pour une vraie creation
48 initialise un cylindre et non une sphere
50 QDialog(0), Ui_CreateBoundaryAn(),
54 _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0),
56 _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0),
57 _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0),
58 _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
59 _BoundaryAnXcone1(0), _BoundaryAnYcone1(0), _BoundaryAnZcone1(0), _BoundaryAnRayon1(0),
60 _BoundaryAnXcone2(0), _BoundaryAnYcone2(0), _BoundaryAnZcone2(0), _BoundaryAnRayon2(0),
61 _BoundaryAnXaxisCone(0), _BoundaryAnYaxisCone(0), _BoundaryAnZaxisCone(0),
63 _BoundaryAnToreXcentre(0), _BoundaryAnToreYcentre(0), _BoundaryAnToreZcentre(0),
64 _BoundaryAnToreXaxe(0), _BoundaryAnToreYaxe(0), _BoundaryAnToreZaxe(0),
65 _BoundaryAnToreRRev(0), _BoundaryAnToreRPri(0),
68 MESSAGE("Constructeur") ;
69 myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
76 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
77 pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" );
79 RBSphere->setIcon(IS);
80 pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
82 RBCylindre->setIcon(IS);
83 pix = resMgr->loadPixmap( "HOMARD", "cone.png" );
86 pix = resMgr->loadPixmap( "HOMARD", "conepointvector.png" );
88 RB_Def_angle->setIcon(IS);
89 pix = resMgr->loadPixmap( "HOMARD", "conedxyz.png" );
91 RB_Def_radius->setIcon(IS);
92 pix = resMgr->loadPixmap( "HOMARD", "toruspointvector.png" );
99 InitValBoundaryAn(); // Cherche les valeurs de la boite englobante le maillage
100 InitMinMax(); // Initialise les bornes des boutons
101 SetCylinder(); // Propose un cylindre en premier choix
103 // --------------------------------------------------------------------------------------------------------------
104 MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent,
105 HOMARD::HOMARD_Gen_var myHomardGen0,
107 // --------------------------------------------------------------------------------------------------------------
108 // Constructeur appele par MonEditBoundaryAn
110 QDialog(0), Ui_CreateBoundaryAn(),
111 myHomardGen(myHomardGen0),
114 _aCaseName(caseName),
116 _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0),
117 _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0),
118 // Pour affichage lors de l edition d une BoundaryAn sans nom de Cas
119 _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
120 _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1), _DMax(1),
123 // MESSAGE("Debut de MonCreateBoundaryAn")
125 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
126 QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" );
128 RBSphere->setIcon(IS);
129 QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
130 QIcon IS2=QIcon(pix2);
131 RBCylindre->setIcon(IS2);
132 QPixmap pix3 = resMgr->loadPixmap( "HOMARD", "cone.png" );
133 QIcon IS3=QIcon(pix3);
134 RBCone->setIcon(IS3);
135 QPixmap pix4 = resMgr->loadPixmap( "HOMARD", "conepointvector.png" );
136 QIcon IS4=QIcon(pix4);
137 RB_Def_angle->setIcon(IS4);
138 QPixmap pix5 = resMgr->loadPixmap( "HOMARD", "conedxyz.png" );
139 QIcon IS5=QIcon(pix5);
140 RB_Def_radius->setIcon(IS5);
145 // ------------------------------------------------------------------------
146 MonCreateBoundaryAn::~MonCreateBoundaryAn()
147 // ------------------------------------------------------------------------
149 // no need to delete child widgets, Qt does it all for us
151 // ------------------------------------------------------------------------
152 void MonCreateBoundaryAn::InitConnect()
153 // ------------------------------------------------------------------------
155 connect( RBCylindre, SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ;
156 connect( RBSphere, SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ;
157 connect( RBCone, SIGNAL(clicked()) , this, SLOT(SetCone()) ) ;
158 connect( RB_Def_radius, SIGNAL(clicked()) , this, SLOT(SetConeR()) );
159 connect( RB_Def_angle, SIGNAL(clicked()) , this, SLOT(SetConeA()) );
160 connect( RBTore, SIGNAL(clicked()) , this, SLOT(SetTore()) ) ;
161 connect( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) );
162 connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) );
163 connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) );
164 connect( buttonHelp, SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) );
166 // ------------------------------------------------------------------------
167 void MonCreateBoundaryAn::InitValBoundaryAn()
168 // ------------------------------------------------------------------------
171 // 1. Les coordonnees extremes du maillage
173 if (_aCaseName == QString("")) { return; }
175 HOMARD::HOMARD_Cas_var aCas = myHomardGen->GetCase(_aCaseName.toStdString().c_str());
176 HOMARD::extrema_var MesExtremes = aCas->GetBoundingBox();
177 int num = MesExtremes->length() ;
179 _Xmin=MesExtremes[0]; _Xmax=MesExtremes[1]; _Xincr=MesExtremes[2];
180 _Ymin=MesExtremes[3]; _Ymax=MesExtremes[4]; _Yincr=MesExtremes[5];
181 _Zmin=MesExtremes[6]; _Zmax=MesExtremes[7]; _Zincr=MesExtremes[8];
182 _DMax=MesExtremes[9];
183 MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ;
184 MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ;
185 MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ;
186 MESSAGE ("_DMax : " << _DMax);
188 // 2. Caracteristiques des frontieres
190 _Xcentre=(_Xmin + _Xmax)/2.;
192 _Ycentre=(_Ymin + _Ymax)/2.;
194 _Zcentre=(_Zmin + _Zmax)/2.;
199 // ------------------------------------------------------------------------
200 void MonCreateBoundaryAn::InitMinMax()
201 // ------------------------------------------------------------------------
205 SpinBox_Xcent->setValue(_Xcentre);
206 SpinBox_Xcent->setSingleStep(_Xincr);
208 SpinBox_Ycent->setValue(_Ycentre);
209 SpinBox_Ycent->setSingleStep(_Yincr);
211 SpinBox_Zcent->setValue(_Zcentre);
212 SpinBox_Zcent->setSingleStep(_Zincr);
214 SpinBox_Xaxis->setValue(0.);
215 SpinBox_Xaxis->setSingleStep(0.1);
217 SpinBox_Yaxis->setValue(0.);
218 SpinBox_Yaxis->setSingleStep(0.1);
220 SpinBox_Zaxis->setValue(1.);
221 SpinBox_Zaxis->setSingleStep(0.1);
223 SpinBox_Radius->setValue(_Rayon);
224 SpinBox_Radius->setSingleStep(_Rayon/10.);
228 SpinBox_Xcentre->setValue(_Xcentre);
229 SpinBox_Xcentre->setSingleStep(_Xincr);
231 SpinBox_Ycentre->setValue(_Ycentre);
232 SpinBox_Ycentre->setSingleStep(_Yincr);
234 SpinBox_Zcentre->setValue(_Zcentre);
235 SpinBox_Zcentre->setSingleStep(_Zincr);
237 SpinBox_Rayon->setValue(_Rayon);
238 SpinBox_Rayon->setSingleStep(_Rayon/10.);
242 _BoundaryAnXcone1 = _Xcentre ;
243 SpinBox_Cone_X1->setSingleStep(_Xincr);
244 _BoundaryAnXcone2 = _Xcentre ;
245 SpinBox_Cone_X2->setSingleStep(_Xincr);
247 _BoundaryAnYcone1 = _Ycentre ;
248 SpinBox_Cone_Y1->setSingleStep(_Yincr);
249 _BoundaryAnYcone2 = _Ycentre ;
250 SpinBox_Cone_Y2->setSingleStep(_Yincr);
252 _BoundaryAnZcone1 = _Zmin ;
253 SpinBox_Cone_Z1->setSingleStep(_Zincr);
254 _BoundaryAnZcone2 = _Zmax ;
255 SpinBox_Cone_Z2->setSingleStep(_Zincr);
257 _BoundaryAnRayon1 = 0. ;
258 _BoundaryAnRayon2 = _Rayon ;
259 SpinBox_Cone_V2->setSingleStep(_Rayon/10.);
262 convertRayonAngle(1) ;
263 SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
264 SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
265 SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
266 SpinBox_Cone_V1->setValue(_BoundaryAngle);
267 SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
268 SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
269 SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
273 SpinBoxToreXcent->setValue(_Xcentre);
274 SpinBoxToreXcent->setSingleStep(_Xincr);
276 SpinBoxToreYcent->setValue(_Ycentre);
277 SpinBoxToreYcent->setSingleStep(_Yincr);
279 SpinBoxToreZcent->setValue(_Zcentre);
280 SpinBoxToreZcent->setSingleStep(_Zincr);
282 SpinBoxToreXaxe->setValue(0.);
283 SpinBoxToreXaxe->setSingleStep(0.1);
285 SpinBoxToreYaxe->setValue(0.);
286 SpinBoxToreYaxe->setSingleStep(0.1);
288 SpinBoxToreZaxe->setValue(1.);
289 SpinBoxToreZaxe->setSingleStep(0.1);
290 // . Rayon de revolution
291 SpinBoxToreRRev->setValue(_Rayon);
292 SpinBoxToreRRev->setSingleStep(_Rayon/10.);
294 SpinBoxToreRPri->setValue(_Rayon/3.);
295 SpinBoxToreRPri->setSingleStep(_Rayon/20.);
297 // ------------------------------------------------------------------------
298 bool MonCreateBoundaryAn::PushOnApply()
299 // ------------------------------------------------------------------------
300 // Appele lorsque l'un des boutons Ok ou Apply est presse
303 if (LEName->text().trimmed()=="")
305 QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
306 QObject::tr("HOM_BOUN_NAME") );
312 case 1 : // il s agit d un cylindre
314 if ((_BoundaryAnXcentre != SpinBox_Xcent->value()) ||
315 (_BoundaryAnYcentre != SpinBox_Ycent->value()) ||
316 (_BoundaryAnZcentre != SpinBox_Zcent->value()) ||
317 (_BoundaryAnRayon != SpinBox_Radius->value()) ||
318 (_BoundaryAnXaxis != SpinBox_Xaxis->value()) ||
319 (_BoundaryAnYaxis != SpinBox_Yaxis->value()) ||
320 (_BoundaryAnZaxis != SpinBox_Zaxis->value()) )
323 _BoundaryAnXaxis= SpinBox_Xaxis->value();
324 _BoundaryAnYaxis= SpinBox_Yaxis->value();
325 _BoundaryAnZaxis= SpinBox_Zaxis->value();
326 _BoundaryAnXcentre=SpinBox_Xcent->value();
327 _BoundaryAnYcentre=SpinBox_Ycent->value();
328 _BoundaryAnZcentre=SpinBox_Zcent->value();
329 _BoundaryAnRayon=SpinBox_Radius->value();
334 case 2 : // il s agit d une sphere
336 if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) ||
337 (_BoundaryAnYcentre != SpinBox_Ycentre->value()) ||
338 (_BoundaryAnZcentre != SpinBox_Zcentre->value()) ||
339 (_BoundaryAnRayon != SpinBox_Rayon->value()) )
342 _BoundaryAnXcentre=SpinBox_Xcentre->value();
343 _BoundaryAnYcentre=SpinBox_Ycentre->value();
344 _BoundaryAnZcentre=SpinBox_Zcentre->value();
345 _BoundaryAnRayon=SpinBox_Rayon->value();
350 case 3 : // il s agit d un cone defini par un axe et un angle
352 if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) ||
353 (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) ||
354 (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) ||
355 (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) ||
356 (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) ||
357 (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) ||
358 (_BoundaryAngle != SpinBox_Cone_V1->value()) )
361 _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ;
362 _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ;
363 _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ;
364 _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ;
365 _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ;
366 _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ;
367 _BoundaryAngle = SpinBox_Cone_V1->value() ;
372 case 4 : // il s agit d un cone defini par les 2 rayons
374 if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value()) ||
375 (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) ||
376 (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) ||
377 (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) ||
378 (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) ||
379 (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) ||
380 (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) ||
381 (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) )
384 _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ;
385 _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ;
386 _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ;
387 _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ;
388 _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ;
389 _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ;
390 _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ;
391 _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ;
395 case 5 : // il s agit d un tore
397 if ((_BoundaryAnToreXcentre != SpinBoxToreXcent->value()) ||
398 (_BoundaryAnToreYcentre != SpinBoxToreYcent->value()) ||
399 (_BoundaryAnToreZcentre != SpinBoxToreZcent->value()) ||
400 (_BoundaryAnToreRRev != SpinBoxToreRRev->value()) ||
401 (_BoundaryAnToreRPri != SpinBoxToreRPri->value()) ||
402 (_BoundaryAnToreXaxe != SpinBoxToreXaxe->value()) ||
403 (_BoundaryAnToreYaxe != SpinBoxToreYaxe->value()) ||
404 (_BoundaryAnToreZaxe != SpinBoxToreZaxe->value()) )
407 _BoundaryAnToreXcentre= SpinBoxToreXcent->value();
408 _BoundaryAnToreYcentre= SpinBoxToreYcent->value();
409 _BoundaryAnToreZcentre= SpinBoxToreZcent->value();
410 _BoundaryAnToreRRev=SpinBoxToreRRev->value();
411 _BoundaryAnToreRPri=SpinBoxToreRPri->value();
412 _BoundaryAnToreXaxe=SpinBoxToreXaxe->value();
413 _BoundaryAnToreYaxe=SpinBoxToreYaxe->value();
414 _BoundaryAnToreZaxe=SpinBoxToreZaxe->value();
421 bool bOK = CreateOrUpdateBoundaryAn();
423 if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
428 // ---------------------------------------------------
429 bool MonCreateBoundaryAn:: CreateOrUpdateBoundaryAn()
430 //----------------------------------------------------
431 // Creation de l'objet boundary
433 _aName = LEName->text().trimmed();
436 case 1 : // il s agit d un cylindre
440 aBoundaryAn = myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_aName.toStdString().c_str()), \
441 _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon );
443 catch( SALOME::SALOME_Exception& S_ex )
445 QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
446 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
451 case 2 : // il s agit d une sphere
455 aBoundaryAn = myHomardGen->CreateBoundarySphere(CORBA::string_dup(_aName.toStdString().c_str()), \
456 _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
458 catch( SALOME::SALOME_Exception& S_ex )
460 QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
461 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
466 case 3 : // il s agit d un cone defini par un axe et un angle
470 aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_aName.toStdString().c_str()), \
471 _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \
472 _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone);
474 catch( SALOME::SALOME_Exception& S_ex )
476 QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
477 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
482 case 4 : // il s agit d un cone defini par les 2 rayons
486 aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_aName.toStdString().c_str()), \
487 _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \
488 _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2);
490 catch( SALOME::SALOME_Exception& S_ex )
492 QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
493 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
498 case 5 : // il s agit d un tore
502 aBoundaryAn = myHomardGen->CreateBoundaryTorus(CORBA::string_dup(_aName.toStdString().c_str()), \
503 _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre, _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe, _BoundaryAnToreRRev, _BoundaryAnToreRPri );
505 catch( SALOME::SALOME_Exception& S_ex )
507 QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
508 QObject::tr(CORBA::string_dup(S_ex.details.text)) );
514 _parent->AddBoundaryAn(_aName);
518 // ------------------------------------------------------------------------
519 void MonCreateBoundaryAn::PushOnOK()
520 // ------------------------------------------------------------------------
522 if (PushOnApply()) this->close();
524 // ------------------------------------------------------------------------
525 void MonCreateBoundaryAn::PushOnHelp()
526 // ------------------------------------------------------------------------
528 std::string LanguageShort = myHomardGen->GetLanguageShort();
529 HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("un-cylindre"), QString(LanguageShort.c_str()));
532 // -----------------------------------
533 void MonCreateBoundaryAn::SetNewName()
534 // -----------------------------------
536 // Recherche d'un nom par defaut qui n'existe pas encore
538 HOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName();
539 int num = 0; QString aName="";
542 aName.setNum(num+1) ;
543 aName.insert(0, QString("Boun_")) ;
544 for ( int i=0; i<MyObjects->length(); i++)
546 if ( aName == QString(MyObjects[i]))
554 LEName->setText(aName);
556 // ------------------------------------------------------------------------
557 void MonCreateBoundaryAn::SetCylinder()
558 // ------------------------------------------------------------------------
560 MESSAGE("Debut de SetCylinder")
561 gBCylindre->setVisible(1);
562 gBSphere->setVisible(0);
563 gBCone->setVisible(0);
564 gBTore->setVisible(0);
569 // MESSAGE("Fin de SetCylinder")
571 // ------------------------------------------------------------------------
572 void MonCreateBoundaryAn::SetSphere()
573 // ------------------------------------------------------------------------
575 MESSAGE("Debut de SetSphere")
576 gBCylindre->setVisible(0);
577 gBSphere->setVisible(1);
578 gBCone->setVisible(0);
579 gBTore->setVisible(0);
584 // MESSAGE("Fin de SetSphere")
586 // ------------------------------------------------------------------------
587 void MonCreateBoundaryAn::SetConeR()
588 // ------------------------------------------------------------------------
590 MESSAGE("Debut de SetConeR")
592 // Stockage et conversion des valeurs si elles ont change
593 if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) ||
594 (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) ||
595 (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) ||
596 (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) ||
597 (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) ||
598 (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) ||
599 (_BoundaryAngle != SpinBox_Cone_V1->value()) )
601 MESSAGE("Stockage et conversion")
602 _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ;
603 _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ;
604 _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ;
605 _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ;
606 _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ;
607 _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ;
608 _BoundaryAngle = SpinBox_Cone_V1->value() ;
609 convertRayonAngle(-1) ;
614 TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0, QApplication::UnicodeUTF8));
615 SpinBox_Cone_X1->setValue(_BoundaryAnXcone1);
616 TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0, QApplication::UnicodeUTF8));
617 SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1);
618 TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0, QApplication::UnicodeUTF8));
619 SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1);
621 TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0, QApplication::UnicodeUTF8));
622 SpinBox_Cone_V1->setSingleStep(_Rayon/10.);
623 SpinBox_Cone_V1->setMaximum(100000.*_DMax);
624 SpinBox_Cone_V1->setValue(_BoundaryAnRayon1);
626 TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0, QApplication::UnicodeUTF8));
627 SpinBox_Cone_X2->setValue(_BoundaryAnXcone2);
628 TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0, QApplication::UnicodeUTF8));
629 SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2);
630 TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0, QApplication::UnicodeUTF8));
631 SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2);
633 TLCone_V2->setVisible(1);
634 SpinBox_Cone_V2->setVisible(1);
635 TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0, QApplication::UnicodeUTF8));
636 SpinBox_Cone_V2->setValue(_BoundaryAnRayon2);
638 // MESSAGE("Fin de SetConeR")
640 // ------------------------------------------------------------------------
641 void MonCreateBoundaryAn::SetConeA()
642 // ------------------------------------------------------------------------
644 MESSAGE("Debut de SetConeA")
645 // Stockage et conversion des valeurs si elles ont change
646 if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value()) ||
647 (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) ||
648 (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) ||
649 (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) ||
650 (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) ||
651 (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) ||
652 (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) ||
653 (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) )
655 MESSAGE("Stockage et conversion")
656 _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ;
657 _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ;
658 _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ;
659 _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ;
660 _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ;
661 _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ;
662 _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ;
663 _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ;
664 convertRayonAngle(1) ;
669 TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0, QApplication::UnicodeUTF8));
670 SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
671 TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0, QApplication::UnicodeUTF8));
672 SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
673 TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0, QApplication::UnicodeUTF8));
674 SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
676 TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0, QApplication::UnicodeUTF8));
677 SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
678 TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0, QApplication::UnicodeUTF8));
679 SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
680 TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0, QApplication::UnicodeUTF8));
681 SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
683 TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0, QApplication::UnicodeUTF8));
684 SpinBox_Cone_V1->setValue(_BoundaryAngle);
685 SpinBox_Cone_V1->setSingleStep(1.);
686 SpinBox_Cone_V1->setMaximum(90.);
688 TLCone_V2->setVisible(0);
689 SpinBox_Cone_V2->setVisible(0);
690 // MESSAGE("Fin de SetConeA")
694 // ------------------------------------------------------------------------
695 void MonCreateBoundaryAn::SetCone()
696 // ------------------------------------------------------------------------
698 MESSAGE("Debut de SetCone")
699 gBCylindre->setVisible(0);
700 gBSphere->setVisible(0);
701 gBCone->setVisible(1);
702 gBTore->setVisible(0);
704 if ( RB_Def_radius->isChecked() )
714 // MESSAGE("Fin de SetCone")
716 // ------------------------------------------------------------------------
717 void MonCreateBoundaryAn::SetTore()
718 // ------------------------------------------------------------------------
720 MESSAGE("Debut de SetTore")
721 gBCylindre->setVisible(0);
722 gBSphere->setVisible(0);
723 gBCone->setVisible(0);
724 gBTore->setVisible(1);
729 // MESSAGE("Fin de SetTore")
731 // ------------------------------------------------------------------------
732 void MonCreateBoundaryAn::convertRayonAngle(int option)
733 // ------------------------------------------------------------------------
734 // Conversion entre les deux formulations du cone :
735 // par deux rayons ou avec un axe et un angle.
736 // Voir sfcoi1 de HOMARD
738 MESSAGE("Debut de convertRayonAngle, option = "<<option)
747 // A----------------B----------O
749 // Thales : RA/RB = AO/BO ==> BO = AB*RB/(RA-RB)
750 // Angle : tg(alpha) = RA/AO
753 // De rayon vers angle :
756 double xa, ya, za, ra ;
757 double xb, yb, zb, rb ;
758 // Positionnement de A vers B, avec RA>RB
759 if ( _BoundaryAnRayon1 > _BoundaryAnRayon2 )
761 xa = _BoundaryAnXcone1 ;
762 ya = _BoundaryAnYcone1 ;
763 za = _BoundaryAnZcone1 ;
764 ra = _BoundaryAnRayon1 ;
765 xb = _BoundaryAnXcone2 ;
766 yb = _BoundaryAnYcone2 ;
767 zb = _BoundaryAnZcone2 ;
768 rb = _BoundaryAnRayon2 ;
772 xa = _BoundaryAnXcone2 ;
773 ya = _BoundaryAnYcone2 ;
774 za = _BoundaryAnZcone2 ;
775 ra = _BoundaryAnRayon2 ;
776 xb = _BoundaryAnXcone1 ;
777 yb = _BoundaryAnYcone1 ;
778 zb = _BoundaryAnZcone1 ;
779 rb = _BoundaryAnRayon1 ;
781 // Axe : relie les deux centres, de A vers B. L'axe est normalise
782 _BoundaryAnXaxisCone = xb - xa ;
783 _BoundaryAnYaxisCone = yb - ya ;
784 _BoundaryAnZaxisCone = zb - za ;
785 daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ;
786 _BoundaryAnXaxisCone = _BoundaryAnXaxisCone/daux ;
787 _BoundaryAnYaxisCone = _BoundaryAnYaxisCone/daux ;
788 _BoundaryAnZaxisCone = _BoundaryAnZaxisCone/daux ;
790 daux = daux * rb / (ra-rb) ;
791 _BoundaryAnXorigCone = xb + daux*_BoundaryAnXaxisCone ;
792 _BoundaryAnYorigCone = yb + daux*_BoundaryAnYaxisCone ;
793 _BoundaryAnZorigCone = zb + daux*_BoundaryAnZaxisCone ;
795 daux = ra / sqrt((_BoundaryAnXorigCone-xa)*(_BoundaryAnXorigCone-xa) + (_BoundaryAnYorigCone-ya)*(_BoundaryAnYorigCone-ya) + (_BoundaryAnZorigCone-za)*(_BoundaryAnZorigCone-za) ) ;
796 _BoundaryAngle = atan(daux)*180./PI ;
798 // D'angle vers rayon :
801 double xax, yax, zax ;
802 // L'axe est normalise
803 daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ;
804 xax = _BoundaryAnXaxisCone/daux ;
805 yax = _BoundaryAnYaxisCone/daux ;
806 zax = _BoundaryAnZaxisCone/daux ;
807 // Centre 1 : l'origine
808 _BoundaryAnXcone1 = _BoundaryAnXorigCone ;
809 _BoundaryAnYcone1 = _BoundaryAnYorigCone ;
810 _BoundaryAnZcone1 = _BoundaryAnZorigCone ;
812 _BoundaryAnRayon1 = 0. ;
813 // Centre 2 : l'origine decalee d'une longueur arbitraire le long de l'axe
814 _BoundaryAnXcone2 = _BoundaryAnXorigCone + _DMax*xax ;
815 _BoundaryAnYcone2 = _BoundaryAnYorigCone + _DMax*yax ;
816 _BoundaryAnZcone2 = _BoundaryAnZorigCone + _DMax*zax ;
817 // Rayon 2 : a calculer
818 _BoundaryAnRayon2 = _DMax*tan(_BoundaryAngle*PI/180.) ;
820 // MESSAGE("Fin de convertRayonAngle")