// Copyright (C) 2011-2020 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "MonCreateBoundaryAn.h" #include "MonCreateCase.h" #include #include #include "SalomeApp_Tools.h" #include "HOMARDGUI_Utils.h" #include "HomardQtCommun.h" #include #include #include #include #include #include #include "math.h" #define PI 3.141592653589793 using namespace std; // ------------------------------------------------------------------------------------------------------------------------ MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen0, QString caseName) : // ------------------------------------------------------------------------------------------------------------------------------ /* Constructs a MonCreateBoundaryAn appele pour une vraie creation initialise un cylindre et non une sphere */ QDialog(0), Ui_CreateBoundaryAn(), _parent(parent), _Name (""), _aCaseName(caseName), _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0), _Type(1), _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0), _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0), _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), _BoundaryAnXcone1(0), _BoundaryAnYcone1(0), _BoundaryAnZcone1(0), _BoundaryAnRayon1(0), _BoundaryAnXcone2(0), _BoundaryAnYcone2(0), _BoundaryAnZcone2(0), _BoundaryAnRayon2(0), _BoundaryAnXaxisCone(0), _BoundaryAnYaxisCone(0), _BoundaryAnZaxisCone(0), _BoundaryAngle(0), _BoundaryAnToreXcentre(0), _BoundaryAnToreYcentre(0), _BoundaryAnToreZcentre(0), _BoundaryAnToreXaxe(0), _BoundaryAnToreYaxe(0), _BoundaryAnToreZaxe(0), _BoundaryAnToreRRev(0), _BoundaryAnToreRPri(0), Chgt (false) { MESSAGE("Constructeur") ; myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0); setupUi(this); setModal(modal); // Gestion des icones QPixmap pix ; QIcon IS ; SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ); IS=QIcon(pix); RBSphere->setIcon(IS); pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ); IS=QIcon(pix); RBCylindre->setIcon(IS); pix = resMgr->loadPixmap( "HOMARD", "cone.png" ); IS=QIcon(pix); RBCone->setIcon(IS); pix = resMgr->loadPixmap( "HOMARD", "conepointvector.png" ); IS=QIcon(pix); RB_Def_angle->setIcon(IS); pix = resMgr->loadPixmap( "HOMARD", "conedxyz.png" ); IS=QIcon(pix); RB_Def_radius->setIcon(IS); pix = resMgr->loadPixmap( "HOMARD", "toruspointvector.png" ); IS=QIcon(pix); RBTore->setIcon(IS); InitConnect( ); SetNewName() ; InitValBoundaryAn(); // Cherche les valeurs de la boite englobante le maillage InitMinMax(); // Initialise les bornes des boutons SetCylinder(); // Propose un cylindre en premier choix } // -------------------------------------------------------------------------------------------------------------- MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, HOMARD::HOMARD_Gen_var myHomardGen0, QString caseName): // -------------------------------------------------------------------------------------------------------------- // QDialog(0), Ui_CreateBoundaryAn(), myHomardGen(myHomardGen0), _parent(parent), _Name (""), _aCaseName(caseName), _Type(1), _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0), _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0), // Pour affichage lors de l edition d une BoundaryAn sans nom de Cas _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1), _DMax(1), Chgt (false) { // MESSAGE("Debut de MonCreateBoundaryAn") setupUi(this); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ); QIcon IS=QIcon(pix); RBSphere->setIcon(IS); QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ); QIcon IS2=QIcon(pix2); RBCylindre->setIcon(IS2); QPixmap pix3 = resMgr->loadPixmap( "HOMARD", "cone.png" ); QIcon IS3=QIcon(pix3); RBCone->setIcon(IS3); QPixmap pix4 = resMgr->loadPixmap( "HOMARD", "conepointvector.png" ); QIcon IS4=QIcon(pix4); RB_Def_angle->setIcon(IS4); QPixmap pix5 = resMgr->loadPixmap( "HOMARD", "conedxyz.png" ); QIcon IS5=QIcon(pix5); RB_Def_radius->setIcon(IS5); setModal(true); InitConnect(); } // ------------------------------------------------------------------------ MonCreateBoundaryAn::~MonCreateBoundaryAn() // ------------------------------------------------------------------------ { // no need to delete child widgets, Qt does it all for us } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::InitConnect() // ------------------------------------------------------------------------ { connect( RBCylindre, SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ; connect( RBSphere, SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ; connect( RBCone, SIGNAL(clicked()) , this, SLOT(SetCone()) ) ; connect( RB_Def_radius, SIGNAL(clicked()) , this, SLOT(SetConeR()) ); connect( RB_Def_angle, SIGNAL(clicked()) , this, SLOT(SetConeA()) ); connect( RBTore, SIGNAL(clicked()) , this, SLOT(SetTore()) ) ; connect( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) ); connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) ); connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) ); connect( buttonHelp, SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) ); } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::InitValBoundaryAn() // ------------------------------------------------------------------------ { // // 1. Les coordonnees extremes du maillage // if (_aCaseName == QString("")) { return; } HOMARD::HOMARD_Cas_var aCas = myHomardGen->GetCase(_aCaseName.toStdString().c_str()); HOMARD::extrema_var MesExtremes = aCas->GetBoundingBox(); int num = MesExtremes->length() ; ASSERT(num == 10); _Xmin=MesExtremes[0]; _Xmax=MesExtremes[1]; _Xincr=MesExtremes[2]; _Ymin=MesExtremes[3]; _Ymax=MesExtremes[4]; _Yincr=MesExtremes[5]; _Zmin=MesExtremes[6]; _Zmax=MesExtremes[7]; _Zincr=MesExtremes[8]; _DMax=MesExtremes[9]; MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ; MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ; MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ; MESSAGE ("_DMax : " << _DMax); // 2. Caracteristiques des frontieres // en X _Xcentre=(_Xmin + _Xmax)/2.; // en Y _Ycentre=(_Ymin + _Ymax)/2.; // en Z _Zcentre=(_Zmin + _Zmax)/2.; // Rayon _Rayon= _DMax/4.; } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::InitMinMax() // ------------------------------------------------------------------------ { // Cylindre // . X du centre SpinBox_Xcent->setValue(_Xcentre); SpinBox_Xcent->setSingleStep(_Xincr); // . Y du centre SpinBox_Ycent->setValue(_Ycentre); SpinBox_Ycent->setSingleStep(_Yincr); // . Z du centre SpinBox_Zcent->setValue(_Zcentre); SpinBox_Zcent->setSingleStep(_Zincr); // . X de l'axe SpinBox_Xaxis->setValue(0.); SpinBox_Xaxis->setSingleStep(0.1); // . Y de l'axe SpinBox_Yaxis->setValue(0.); SpinBox_Yaxis->setSingleStep(0.1); // . Z de l'axe SpinBox_Zaxis->setValue(1.); SpinBox_Zaxis->setSingleStep(0.1); // . Rayon SpinBox_Radius->setValue(_Rayon); SpinBox_Radius->setSingleStep(_Rayon/10.); // Sphere // . X du centre SpinBox_Xcentre->setValue(_Xcentre); SpinBox_Xcentre->setSingleStep(_Xincr); // . Y du centre SpinBox_Ycentre->setValue(_Ycentre); SpinBox_Ycentre->setSingleStep(_Yincr); // . Z du centre SpinBox_Zcentre->setValue(_Zcentre); SpinBox_Zcentre->setSingleStep(_Zincr); // . Rayon SpinBox_Rayon->setValue(_Rayon); SpinBox_Rayon->setSingleStep(_Rayon/10.); // Cone en rayons // . X des centres _BoundaryAnXcone1 = _Xcentre ; SpinBox_Cone_X1->setSingleStep(_Xincr); _BoundaryAnXcone2 = _Xcentre ; SpinBox_Cone_X2->setSingleStep(_Xincr); // . Y des centres _BoundaryAnYcone1 = _Ycentre ; SpinBox_Cone_Y1->setSingleStep(_Yincr); _BoundaryAnYcone2 = _Ycentre ; SpinBox_Cone_Y2->setSingleStep(_Yincr); // . Z des centres _BoundaryAnZcone1 = _Zmin ; SpinBox_Cone_Z1->setSingleStep(_Zincr); _BoundaryAnZcone2 = _Zmax ; SpinBox_Cone_Z2->setSingleStep(_Zincr); // . Rayons/Angles _BoundaryAnRayon1 = 0. ; _BoundaryAnRayon2 = _Rayon ; SpinBox_Cone_V2->setSingleStep(_Rayon/10.); // Cone en angle convertRayonAngle(1) ; SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone); SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone); SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone); SpinBox_Cone_V1->setValue(_BoundaryAngle); SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone); SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone); SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone); // Tore // . X du centre SpinBoxToreXcent->setValue(_Xcentre); SpinBoxToreXcent->setSingleStep(_Xincr); // . Y du centre SpinBoxToreYcent->setValue(_Ycentre); SpinBoxToreYcent->setSingleStep(_Yincr); // . Z du centre SpinBoxToreZcent->setValue(_Zcentre); SpinBoxToreZcent->setSingleStep(_Zincr); // . X de l'axe SpinBoxToreXaxe->setValue(0.); SpinBoxToreXaxe->setSingleStep(0.1); // . Y de l'axe SpinBoxToreYaxe->setValue(0.); SpinBoxToreYaxe->setSingleStep(0.1); // . Z de l'axe SpinBoxToreZaxe->setValue(1.); SpinBoxToreZaxe->setSingleStep(0.1); // . Rayon de revolution SpinBoxToreRRev->setValue(_Rayon); SpinBoxToreRRev->setSingleStep(_Rayon/10.); // . Rayon primaire SpinBoxToreRPri->setValue(_Rayon/3.); SpinBoxToreRPri->setSingleStep(_Rayon/20.); } // ------------------------------------------------------------------------ bool MonCreateBoundaryAn::PushOnApply() // ------------------------------------------------------------------------ // Appele lorsque l'un des boutons Ok ou Apply est presse // { if (LEName->text().trimmed()=="") { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_BOUN_NAME") ); return false; } switch (_Type) { case 1 : // il s agit d un cylindre { if ((_BoundaryAnXcentre != SpinBox_Xcent->value()) || (_BoundaryAnYcentre != SpinBox_Ycent->value()) || (_BoundaryAnZcentre != SpinBox_Zcent->value()) || (_BoundaryAnRayon != SpinBox_Radius->value()) || (_BoundaryAnXaxis != SpinBox_Xaxis->value()) || (_BoundaryAnYaxis != SpinBox_Yaxis->value()) || (_BoundaryAnZaxis != SpinBox_Zaxis->value()) ) { Chgt = true; _BoundaryAnXaxis= SpinBox_Xaxis->value(); _BoundaryAnYaxis= SpinBox_Yaxis->value(); _BoundaryAnZaxis= SpinBox_Zaxis->value(); _BoundaryAnXcentre=SpinBox_Xcent->value(); _BoundaryAnYcentre=SpinBox_Ycent->value(); _BoundaryAnZcentre=SpinBox_Zcent->value(); _BoundaryAnRayon=SpinBox_Radius->value(); } break; } case 2 : // il s agit d une sphere { if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) || (_BoundaryAnYcentre != SpinBox_Ycentre->value()) || (_BoundaryAnZcentre != SpinBox_Zcentre->value()) || (_BoundaryAnRayon != SpinBox_Rayon->value()) ) { Chgt = true; _BoundaryAnXcentre=SpinBox_Xcentre->value(); _BoundaryAnYcentre=SpinBox_Ycentre->value(); _BoundaryAnZcentre=SpinBox_Zcentre->value(); _BoundaryAnRayon=SpinBox_Rayon->value(); } break; } case 3 : // il s agit d un cone defini par un axe et un angle { if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) || (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) || (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) || (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) || (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) || (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) || (_BoundaryAngle != SpinBox_Cone_V1->value()) ) { Chgt = true; _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ; _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ; _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ; _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ; _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ; _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ; _BoundaryAngle = SpinBox_Cone_V1->value() ; } break; } case 4 : // il s agit d un cone defini par les 2 rayons { if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value()) || (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) || (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) || (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) || (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) || (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) || (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) || (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) ) { Chgt = true; _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ; _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ; _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ; _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ; _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ; _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ; _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ; _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ; } break; } case 5 : // il s agit d un tore { if ((_BoundaryAnToreXcentre != SpinBoxToreXcent->value()) || (_BoundaryAnToreYcentre != SpinBoxToreYcent->value()) || (_BoundaryAnToreZcentre != SpinBoxToreZcent->value()) || (_BoundaryAnToreRRev != SpinBoxToreRRev->value()) || (_BoundaryAnToreRPri != SpinBoxToreRPri->value()) || (_BoundaryAnToreXaxe != SpinBoxToreXaxe->value()) || (_BoundaryAnToreYaxe != SpinBoxToreYaxe->value()) || (_BoundaryAnToreZaxe != SpinBoxToreZaxe->value()) ) { Chgt = true; _BoundaryAnToreXcentre= SpinBoxToreXcent->value(); _BoundaryAnToreYcentre= SpinBoxToreYcent->value(); _BoundaryAnToreZcentre= SpinBoxToreZcent->value(); _BoundaryAnToreRRev=SpinBoxToreRRev->value(); _BoundaryAnToreRPri=SpinBoxToreRPri->value(); _BoundaryAnToreXaxe=SpinBoxToreXaxe->value(); _BoundaryAnToreYaxe=SpinBoxToreYaxe->value(); _BoundaryAnToreZaxe=SpinBoxToreZaxe->value(); } break; } } // Controles // L'axe pour un cylindre if ( _Type == 5 ) { double daux = _BoundaryAnXaxis*_BoundaryAnXaxis + _BoundaryAnYaxis*_BoundaryAnYaxis + _BoundaryAnZaxis*_BoundaryAnZaxis ; if ( daux < 0.0000001 ) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_AXE") ); return false; } } // // Création ou mise à jour de la frontière // bool bOK = CreateOrUpdateBoundaryAn(); if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; } return bOK; } // --------------------------------------------------- bool MonCreateBoundaryAn::CreateOrUpdateBoundaryAn() //---------------------------------------------------- // Creation de l'objet boundary { MESSAGE("Debut de CreateOrUpdateBoundaryAn avec _Type ="<<_Type<<", _Name ="<<_Name.toStdString().c_str()<<" et LEName ="<text().trimmed().toStdString().c_str()); // if (_Name != LEName->text().trimmed()) { _Name = LEName->text().trimmed() ; try { switch (_Type) { case 1 : // il s agit d un cylindre { aBoundaryAn = myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_Name.toStdString().c_str()), \ _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon ); break; } case 2 : // il s agit d une sphere { aBoundaryAn = myHomardGen->CreateBoundarySphere(CORBA::string_dup(_Name.toStdString().c_str()), \ _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); break; } case 3 : // il s agit d un cone defini par un axe et un angle { aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_Name.toStdString().c_str()), \ _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \ _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone); break; } case 4 : // il s agit d un cone defini par les 2 rayons { aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_Name.toStdString().c_str()), \ _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \ _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2); break; } case 5 : // il s agit d un tore { aBoundaryAn = myHomardGen->CreateBoundaryTorus(CORBA::string_dup(_Name.toStdString().c_str()), \ _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre, _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe, _BoundaryAnToreRRev, _BoundaryAnToreRPri ); break; } } } catch( SALOME::SALOME_Exception& S_ex ) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), QObject::tr(CORBA::string_dup(S_ex.details.text)) ); return false ; } _parent->AddBoundaryAn(_Name); return true; } else { QMessageBox::warning( 0, QObject::tr("HOM_WARNING"), QObject::tr("HOM_SELECT_OBJECT_4") ); return false ; } MESSAGE("Fin de CreateOrUpdateBoundaryAn"); } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::PushOnOK() // ------------------------------------------------------------------------ { if (PushOnApply()) this->close(); } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::PushOnHelp() // ------------------------------------------------------------------------ { std::string LanguageShort = myHomardGen->GetLanguageShort(); HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("un-cylindre"), QString(LanguageShort.c_str())); } // ----------------------------------- void MonCreateBoundaryAn::SetNewName() // ----------------------------------- { // Recherche d'un nom par defaut qui n'existe pas encore HOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName(); int num = 0; QString aName=""; while (aName=="" ) { aName.setNum(num+1) ; aName.insert(0, QString("Boun_")) ; for ( int i=0; ilength(); i++) { if ( aName == QString(MyObjects[i])) { num ++ ; aName = "" ; break ; } } } LEName->setText(aName); } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetCylinder() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetCylinder") gBCylindre->setVisible(1); gBSphere->setVisible(0); gBCone->setVisible(0); gBTore->setVisible(0); // _Type=1; // adjustSize(); // MESSAGE("Fin de SetCylinder") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetSphere() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetSphere") gBCylindre->setVisible(0); gBSphere->setVisible(1); gBCone->setVisible(0); gBTore->setVisible(0); // _Type=2; // adjustSize(); // MESSAGE("Fin de SetSphere") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetConeR() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetConeR") // // Stockage et conversion des valeurs si elles ont change if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) || (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) || (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) || (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) || (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) || (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) || (_BoundaryAngle != SpinBox_Cone_V1->value()) ) { MESSAGE("Stockage et conversion") _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ; _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ; _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ; _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ; _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ; _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ; _BoundaryAngle = SpinBox_Cone_V1->value() ; convertRayonAngle(-1) ; } // _Type=4; // TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0)); SpinBox_Cone_X1->setValue(_BoundaryAnXcone1); TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0)); SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1); TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0)); SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1); // TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0)); SpinBox_Cone_V1->setSingleStep(_Rayon/10.); SpinBox_Cone_V1->setMaximum(100000.*_DMax); SpinBox_Cone_V1->setValue(_BoundaryAnRayon1); // TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0)); SpinBox_Cone_X2->setValue(_BoundaryAnXcone2); TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0)); SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2); TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0)); SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2); // TLCone_V2->setVisible(1); SpinBox_Cone_V2->setVisible(1); TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0)); SpinBox_Cone_V2->setValue(_BoundaryAnRayon2); // // MESSAGE("Fin de SetConeR") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetConeA() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetConeA") // Stockage et conversion des valeurs si elles ont change if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value()) || (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) || (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) || (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) || (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) || (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) || (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) || (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) ) { MESSAGE("Stockage et conversion") _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ; _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ; _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ; _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ; _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ; _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ; _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ; _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ; convertRayonAngle(1) ; } // _Type=3; // TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0)); SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone); TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0)); SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone); TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0)); SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone); // TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0)); SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone); TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0)); SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone); TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0)); SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone); // TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0)); SpinBox_Cone_V1->setValue(_BoundaryAngle); SpinBox_Cone_V1->setSingleStep(1.); SpinBox_Cone_V1->setMaximum(90.); // TLCone_V2->setVisible(0); SpinBox_Cone_V2->setVisible(0); // MESSAGE("Fin de SetConeA") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetCone() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetCone") gBCylindre->setVisible(0); gBSphere->setVisible(0); gBCone->setVisible(1); gBTore->setVisible(0); // if ( RB_Def_radius->isChecked() ) { SetConeR(); } else { SetConeA(); } // adjustSize(); // MESSAGE("Fin de SetCone") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::SetTore() // ------------------------------------------------------------------------ { MESSAGE("Debut de SetTore") gBCylindre->setVisible(0); gBSphere->setVisible(0); gBCone->setVisible(0); gBTore->setVisible(1); // _Type=5; // adjustSize(); // MESSAGE("Fin de SetTore") } // ------------------------------------------------------------------------ void MonCreateBoundaryAn::convertRayonAngle(int option) // ------------------------------------------------------------------------ // Conversion entre les deux formulations du cone : // par deux rayons ou avec un axe et un angle. // Voir sfcoi1 de HOMARD { MESSAGE("Debut de convertRayonAngle, option = "< BO = AB*RB/(RA-RB) // Angle : tg(alpha) = RA/AO // double daux ; // De rayon vers angle : if ( option == 1 ) { double xa, ya, za, ra ; double xb, yb, zb, rb ; // Positionnement de A vers B, avec RA>RB if ( _BoundaryAnRayon1 > _BoundaryAnRayon2 ) { xa = _BoundaryAnXcone1 ; ya = _BoundaryAnYcone1 ; za = _BoundaryAnZcone1 ; ra = _BoundaryAnRayon1 ; xb = _BoundaryAnXcone2 ; yb = _BoundaryAnYcone2 ; zb = _BoundaryAnZcone2 ; rb = _BoundaryAnRayon2 ; } else { xa = _BoundaryAnXcone2 ; ya = _BoundaryAnYcone2 ; za = _BoundaryAnZcone2 ; ra = _BoundaryAnRayon2 ; xb = _BoundaryAnXcone1 ; yb = _BoundaryAnYcone1 ; zb = _BoundaryAnZcone1 ; rb = _BoundaryAnRayon1 ; } // Axe : relie les deux centres, de A vers B. L'axe est normalise _BoundaryAnXaxisCone = xb - xa ; _BoundaryAnYaxisCone = yb - ya ; _BoundaryAnZaxisCone = zb - za ; daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ; _BoundaryAnXaxisCone = _BoundaryAnXaxisCone/daux ; _BoundaryAnYaxisCone = _BoundaryAnYaxisCone/daux ; _BoundaryAnZaxisCone = _BoundaryAnZaxisCone/daux ; // Origine daux = daux * rb / (ra-rb) ; _BoundaryAnXorigCone = xb + daux*_BoundaryAnXaxisCone ; _BoundaryAnYorigCone = yb + daux*_BoundaryAnYaxisCone ; _BoundaryAnZorigCone = zb + daux*_BoundaryAnZaxisCone ; // Angle en degre daux = ra / sqrt((_BoundaryAnXorigCone-xa)*(_BoundaryAnXorigCone-xa) + (_BoundaryAnYorigCone-ya)*(_BoundaryAnYorigCone-ya) + (_BoundaryAnZorigCone-za)*(_BoundaryAnZorigCone-za) ) ; _BoundaryAngle = atan(daux)*180./PI ; } // D'angle vers rayon : else { double xax, yax, zax ; // L'axe est normalise daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ; xax = _BoundaryAnXaxisCone/daux ; yax = _BoundaryAnYaxisCone/daux ; zax = _BoundaryAnZaxisCone/daux ; // Centre 1 : l'origine _BoundaryAnXcone1 = _BoundaryAnXorigCone ; _BoundaryAnYcone1 = _BoundaryAnYorigCone ; _BoundaryAnZcone1 = _BoundaryAnZorigCone ; // Rayon 1 : nul _BoundaryAnRayon1 = 0. ; // Centre 2 : l'origine decalee d'une longueur arbitraire le long de l'axe _BoundaryAnXcone2 = _BoundaryAnXorigCone + _DMax*xax ; _BoundaryAnYcone2 = _BoundaryAnYorigCone + _DMax*yax ; _BoundaryAnZcone2 = _BoundaryAnZorigCone + _DMax*zax ; // Rayon 2 : a calculer _BoundaryAnRayon2 = _DMax*tan(_BoundaryAngle*PI/180.) ; } // MESSAGE("Fin de convertRayonAngle") }