#include <SUIT_Session.h>
#include <SUIT_ViewManager.h>
+#include "math.h"
+#define PI 3.141592653589793
// ------------------------------------------------------------------------------------------------------------------------
MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal,
HOMARD::HOMARD_Gen_var myHomardGen,
_parent(parent),
_aName (""),
_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),
- _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(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),
Chgt (false)
{
MESSAGE("Constructeur") ;
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);
InitConnect( );
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();
}
void MonCreateBoundaryAn::InitConnect()
// ------------------------------------------------------------------------
{
- connect( RBCylindre, SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ;
- connect( RBSphere, SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ;
+ 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( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) );
connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) );
connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) );
void MonCreateBoundaryAn::InitMinMax()
// ------------------------------------------------------------------------
{
-// en X
+ // 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);
- SpinBox_Xcentre->setSingleStep(_Xincr);
-//en Y
+ // . Y de l'axe
+ SpinBox_Yaxis->setValue(0.);
SpinBox_Yaxis->setSingleStep(0.1);
- SpinBox_Ycentre->setSingleStep(_Yincr);
-//en Z
+ // . Z de l'axe
+ SpinBox_Zaxis->setValue(1.);
SpinBox_Zaxis->setSingleStep(0.1);
- SpinBox_Zcentre->setSingleStep(_Zincr);
-// Rayon
+ // . Rayon
+ SpinBox_Radius->setValue(_Rayon);
SpinBox_Radius->setSingleStep(_Rayon/10.);
SpinBox_Radius->setMinimum(0.);
+
+ // 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.);
SpinBox_Rayon->setMinimum(0.);
+
+ // 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. ;
+ SpinBox_Cone_V1->setMinimum(0.);
+ _BoundaryAnRayon2 = _Rayon ;
+ SpinBox_Cone_V2->setSingleStep(_Rayon/10.);
+ SpinBox_Cone_V2->setMinimum(0.);
+
+ // 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);
}
// ------------------------------------------------------------------------
bool MonCreateBoundaryAn::PushOnApply()
_BoundaryAnYcentre=SpinBox_Ycent->value();
_BoundaryAnZcentre=SpinBox_Zcent->value();
_BoundaryAnRayon=SpinBox_Radius->value();
- 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;
- }
}
break;
}
}
break;
}
- }
+
+ case 3 : // il s agit d un cone defini par un axe et un angle
+ {
+ if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) or
+ (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) or
+ (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) or
+ (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) or
+ (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) or
+ (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) or
+ (_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()) or
+ (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) or
+ (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) or
+ (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) or
+ (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) or
+ (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) or
+ (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) or
+ (_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;
+ }
+ }
bool bOK = CreateOrUpdateBoundaryAn();
+
+ if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
+
return bOK;
}
//----------------------------------------------------
// Creation de l'objet boundary
{
- if (_aName != LEBoundaryName->text().trimmed())
- {
+// if (_aName != LEBoundaryName->text().trimmed())
+// {
_aName = LEBoundaryName->text().trimmed();
switch (_Type)
{
case 1 : // il s agit d un cylindre
{
- aBoundaryAn = _myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_aName.toStdString().c_str()), \
- _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon );
+ try
+ {
+ aBoundaryAn = _myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_aName.toStdString().c_str()), \
+ _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon );
+ }
+ catch( SALOME::SALOME_Exception& S_ex )
+ {
+ QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+ QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+ return false ;
+ }
break;
}
case 2 : // il s agit d une sphere
{
- aBoundaryAn = _myHomardGen->CreateBoundarySphere(CORBA::string_dup(_aName.toStdString().c_str()), \
- _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
+ try
+ {
+ aBoundaryAn = _myHomardGen->CreateBoundarySphere(CORBA::string_dup(_aName.toStdString().c_str()), \
+ _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
+ }
+ catch( SALOME::SALOME_Exception& S_ex )
+ {
+ QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+ QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+ return false ;
+ }
+ break;
+ }
+ case 3 : // il s agit d un cone defini par un axe et un angle
+ {
+ try
+ {
+ aBoundaryAn = _myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_aName.toStdString().c_str()), \
+ _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \
+ _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone);
+ }
+ catch( SALOME::SALOME_Exception& S_ex )
+ {
+ QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+ QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+ return false ;
+ }
+ break;
+ }
+ case 4 : // il s agit d un cone defini par les 2 rayons
+ {
+ try
+ {
+ aBoundaryAn = _myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_aName.toStdString().c_str()), \
+ _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \
+ _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2);
+ }
+ catch( SALOME::SALOME_Exception& S_ex )
+ {
+ QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+ QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+ return false ;
+ }
break;
}
}
_parent->AddBoundaryAn(_aName);
- }
// Mise en place des attributs
- aBoundaryAn->SetLimit(_Xincr, _Yincr, _Zincr);
+ aBoundaryAn->SetLimit(_Xincr, _Yincr, _Zincr);
- HOMARD_UTILS::updateObjBrowser();
- return true;
+ return true;
+// }
+// else { return false ; }
}
// ------------------------------------------------------------------------
void MonCreateBoundaryAn::PushOnOK()
MESSAGE("Debut de SetCylinder")
gBCylindre->setVisible(1);
gBSphere->setVisible(0);
+ gBCone->setVisible(0);
adjustSize();
_Type=1;
- SpinBox_Xcent->setValue(_Xcentre);
- SpinBox_Xaxis->setValue(0.);
- SpinBox_Ycent->setValue(_Ycentre);
- SpinBox_Yaxis->setValue(0.);
- SpinBox_Zcent->setValue(_Zcentre);
- SpinBox_Zaxis->setValue(1.);
- SpinBox_Radius->setValue(_Rayon);
// MESSAGE("Fin de SetCylinder")
}
// ------------------------------------------------------------------------
MESSAGE("Debut de SetSphere")
gBCylindre->setVisible(0);
gBSphere->setVisible(1);
+ gBCone->setVisible(0);
adjustSize();
_Type=2;
- SpinBox_Xcentre->setValue(_Xcentre);
- SpinBox_Ycentre->setValue(_Ycentre);
- SpinBox_Zcentre->setValue(_Zcentre);
- SpinBox_Rayon->setValue(_Rayon);
// 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()) or
+ (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) or
+ (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) or
+ (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) or
+ (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) or
+ (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) or
+ (_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, QApplication::UnicodeUTF8));
+ SpinBox_Cone_X1->setValue(_BoundaryAnXcone1);
+ TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1);
+ TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1);
+//
+ TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0, QApplication::UnicodeUTF8));
+ 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, QApplication::UnicodeUTF8));
+ SpinBox_Cone_X2->setValue(_BoundaryAnXcone2);
+ TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2);
+ TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2);
+//
+ TLCone_V2->setVisible(1);
+ SpinBox_Cone_V2->setVisible(1);
+ TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0, QApplication::UnicodeUTF8));
+ 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()) or
+ (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) or
+ (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) or
+ (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) or
+ (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) or
+ (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) or
+ (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) or
+ (_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, QApplication::UnicodeUTF8));
+ SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+ TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+ TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+//
+ TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+ TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+ TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0, QApplication::UnicodeUTF8));
+ SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+//
+ TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0, QApplication::UnicodeUTF8));
+ 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);
+//
+ adjustSize();
+ if ( RB_Def_radius->isChecked() )
+ {
+ SetConeR();
+ }
+ else
+ {
+ SetConeA();
+ }
+// MESSAGE("Fin de SetCone")
+}
+// ------------------------------------------------------------------------
+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 = "<<option)
+//
+// o
+// ! .
+// ! .
+// RA! .
+// ! o
+// ! RB! .
+// ! ! .
+// A----------------B----------O
+//
+// Thales : RA/RB = AO/BO ==> 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")
+}