Implement ConvertFromQuadratic() operation

This commit is contained in:
eap 2006-05-04 09:29:29 +00:00
parent abfa12f3fc
commit 12375208ad
5 changed files with 157 additions and 34 deletions

View File

@ -34,6 +34,8 @@
#include <qgroupbox.h> #include <qgroupbox.h>
#include <qlayout.h> #include <qlayout.h>
#include <qcheckbox.h> #include <qcheckbox.h>
#include <qradiobutton.h>
#include <qbuttongroup.h>
SMESHGUI_ConvToQuadDlg::SMESHGUI_ConvToQuadDlg() SMESHGUI_ConvToQuadDlg::SMESHGUI_ConvToQuadDlg()
: SMESHGUI_Dialog( 0, false, true ) : SMESHGUI_Dialog( 0, false, true )
@ -50,12 +52,26 @@ SMESHGUI_ConvToQuadDlg::SMESHGUI_ConvToQuadDlg()
createObject( tr( "MESH" ), aGrp, 0 ); createObject( tr( "MESH" ), aGrp, 0 );
//Create check box //Create check box
myMedNdsOnGeom = new QCheckBox( tr( "MEDIUMNDS" ), mainFrame() ); myMedNdsOnGeom = new QCheckBox( tr( "MEDIUMNDS" ), mainFrame() );
//Create RadioButtons
myBG = new QButtonGroup( 2, Qt::Vertical, "", mainFrame() );
myBG->setExclusive( true );
myRB1 = new QRadioButton( myBG );
myRB1->setText( tr( "RADIOBTN_1" ) );
myRB1->setChecked( true );
myRB2 = new QRadioButton( myBG );
myRB2->setText( tr( "RADIOBTN_2" ) );
// Fill layout // Fill layout
QVBoxLayout* aLay = new QVBoxLayout( mainFrame(), 5, 5 ); QVBoxLayout* aLay = new QVBoxLayout( mainFrame(), 5, 5 );
aLay->addWidget( aGrp ); aLay->addWidget( aGrp );
aLay->addWidget( myMedNdsOnGeom ); aLay->addWidget( myMedNdsOnGeom );
aLay->addWidget( myBG );
connect(myBG, SIGNAL( clicked( int ) ), this, SIGNAL( onClicked( int ) ) );
} }
SMESHGUI_ConvToQuadDlg::~SMESHGUI_ConvToQuadDlg() SMESHGUI_ConvToQuadDlg::~SMESHGUI_ConvToQuadDlg()
@ -77,7 +93,38 @@ bool SMESHGUI_ConvToQuadDlg::IsEnabledCheck() const
return myMedNdsOnGeom->isEnabled(); return myMedNdsOnGeom->isEnabled();
} }
void SMESHGUI_ConvToQuadDlg::SetEnabledCheck(const bool theCheck) void SMESHGUI_ConvToQuadDlg::SetEnabledCheck( const bool theCheck )
{ {
myMedNdsOnGeom->setEnabled(theCheck); myMedNdsOnGeom->setEnabled( theCheck );
} }
int SMESHGUI_ConvToQuadDlg::CurrentRB( )
{
return myBG->selectedId();
}
void SMESHGUI_ConvToQuadDlg::SetEnabledControls( const bool theCheck )
{
myBG->setEnabled( theCheck );
myMedNdsOnGeom->setEnabled( theCheck );
setButtonEnabled( theCheck, QtxDialog::OK | QtxDialog::Apply );
}
void SMESHGUI_ConvToQuadDlg::SetEnabledRB( const int idx, const bool theCheck )
{
if(idx)
{
myRB2->setEnabled( theCheck );
myRB1->setEnabled( !theCheck );
myRB1->setChecked( true );
}
else
{
myRB1->setEnabled( theCheck );
myRB2->setEnabled( !theCheck );
myRB2->setChecked( true );
}
emit onClicked( myBG->selectedId() );
}

View File

@ -42,6 +42,8 @@
#include CORBA_SERVER_HEADER(SMESH_Mesh) #include CORBA_SERVER_HEADER(SMESH_Mesh)
class QCheckBox; class QCheckBox;
class QRadioButton;
class QButtonGroup;
class SMESHGUI_ConvToQuadDlg : public SMESHGUI_Dialog class SMESHGUI_ConvToQuadDlg : public SMESHGUI_Dialog
{ {
@ -54,11 +56,22 @@ public:
bool IsMediumNdsOnGeom() const; bool IsMediumNdsOnGeom() const;
void SetMediumNdsOnGeom(const bool theCheck); void SetMediumNdsOnGeom(const bool theCheck);
bool IsEnabledCheck() const; bool IsEnabledCheck() const;
void SetEnabledCheck(const bool theCheck); void SetEnabledCheck( const bool theCheck );
void SetEnabledGroup( const bool theCheck );
void SetEnabledControls( const bool theCheck );
void SetEnabledRB( const int idx, const bool theCheck );
int CurrentRB();//returns the ID of the selected toggle button
signals:
void onClicked( int );
private: private:
QCheckBox* myMedNdsOnGeom; QCheckBox* myMedNdsOnGeom;
QButtonGroup* myBG;
QRadioButton* myRB1;
QRadioButton* myRB2;
}; };
#endif #endif

View File

@ -91,6 +91,8 @@ void SMESHGUI_ConvToQuadOp::startOperation()
{ {
myDlg = new SMESHGUI_ConvToQuadDlg( ); myDlg = new SMESHGUI_ConvToQuadDlg( );
} }
connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) );
SMESHGUI_SelectionOp::startOperation(); SMESHGUI_SelectionOp::startOperation();
myDlg->SetMediumNdsOnGeom( false ); myDlg->SetMediumNdsOnGeom( false );
@ -122,23 +124,21 @@ void SMESHGUI_ConvToQuadOp::selectionDone()
SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh_var mesh =
SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh ); SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
GEOM::GEOM_Object_var mainGeom; if( mesh->_is_nil() )
mainGeom = mesh->GetShapeToMesh();
if( mesh->_is_nil() ||
( !mesh->NbEdgesOfOrder(SMESH::ORDER_LINEAR) &&
!mesh->NbFacesOfOrder(SMESH::ORDER_LINEAR) &&
!mesh->NbVolumesOfOrder(SMESH::ORDER_LINEAR) ) )
{ {
myDlg->setButtonEnabled( false, QtxDialog::OK | QtxDialog::Apply ); myDlg->SetEnabledControls( false );
myDlg->SetEnabledCheck( false ); }
else if( ConsistMesh( mesh ) == SMESHGUI_ConvToQuadOp::Quadratic )
{
myDlg->SetEnabledRB( 0, false );
}
else if( ConsistMesh( mesh ) == SMESHGUI_ConvToQuadOp::Linear )
{
myDlg->SetEnabledRB( 1, false );
} }
else if( mainGeom->_is_nil() && myDlg->IsEnabledCheck() )
myDlg->SetEnabledCheck( false );
else else
{ {
myDlg->setButtonEnabled( true, QtxDialog::OK | QtxDialog::Apply ); myDlg->SetEnabledControls( true );
myDlg->SetEnabledCheck( true );
} }
} }
catch ( const SALOME::SALOME_Exception& S_ex ) catch ( const SALOME::SALOME_Exception& S_ex )
@ -205,13 +205,20 @@ bool SMESHGUI_ConvToQuadOp::onApply()
try try
{ {
bool aParam = true;
if( myDlg->IsEnabledCheck() )
aParam = myDlg->IsMediumNdsOnGeom();
SMESH::SMESH_MeshEditor_var aEditor = mesh->GetMeshEditor(); SMESH::SMESH_MeshEditor_var aEditor = mesh->GetMeshEditor();
aEditor->ConvertToQuadratic( aParam ); if( !myDlg->CurrentRB() )
aResult = true; {
bool aParam = true;
if( myDlg->IsEnabledCheck() )
aParam = myDlg->IsMediumNdsOnGeom();
aEditor->ConvertToQuadratic( aParam );
aResult = true;
}
else
{
aResult = aEditor->ConvertFromQuadratic();
}
} }
catch ( const SALOME::SALOME_Exception& S_ex ) catch ( const SALOME::SALOME_Exception& S_ex )
{ {
@ -222,11 +229,58 @@ bool SMESHGUI_ConvToQuadOp::onApply()
{ {
aResult = false; aResult = false;
} }
if(aResult) if( aResult )
{ {
update( UF_ObjBrowser | UF_Model ); update( UF_ObjBrowser | UF_Model | UF_Viewer );
myDlg->setButtonEnabled( false, QtxDialog::Apply ); selectionDone();
} }
return aResult; return aResult;
} }
//================================================================================
/*! ConsistMesh
* Determines, what elements this mesh contains.
*/
//================================================================================
SMESHGUI_ConvToQuadOp::MeshType SMESHGUI_ConvToQuadOp::ConsistMesh( const SMESH::SMESH_Mesh_var& mesh) const
{
int nbAllElem = 0, nbQEdges =0, nbQFaces =0, nbQVolum = 0;
int nbEdges = 0, nbFaces = 0, nbVolum = 0;
nbAllElem = (int)mesh->NbElements();
nbQEdges = (int)mesh->NbEdgesOfOrder(SMESH::ORDER_QUADRATIC);
nbQFaces = (int)mesh->NbFacesOfOrder(SMESH::ORDER_QUADRATIC);
nbQVolum = (int)mesh->NbVolumesOfOrder(SMESH::ORDER_QUADRATIC);
nbEdges = (int)mesh->NbEdgesOfOrder(SMESH::ORDER_LINEAR);
nbFaces = (int)mesh->NbFacesOfOrder(SMESH::ORDER_LINEAR);
nbVolum = (int)mesh->NbVolumesOfOrder(SMESH::ORDER_LINEAR);
if( nbAllElem == (nbQEdges+nbQFaces+nbQVolum) )
return SMESHGUI_ConvToQuadOp::Quadratic;
else if ( nbAllElem == (nbEdges+nbFaces+nbVolum) )
return SMESHGUI_ConvToQuadOp::Linear;
else
return SMESHGUI_ConvToQuadOp::Comp;
}
void SMESHGUI_ConvToQuadOp::ConnectRadioButtons( int id )
{
QString anMeshEntry = myDlg->selectedObject( 0 );
_PTR(SObject) pMesh = studyDS()->FindObjectID( anMeshEntry.latin1() );
if ( !pMesh ) return;
SMESH::SMESH_Mesh_var mesh =
SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
GEOM::GEOM_Object_var mainGeom;
mainGeom = mesh->GetShapeToMesh();
if( id || mainGeom->_is_nil() )
myDlg->SetEnabledCheck( false );
else
myDlg->SetEnabledCheck( true );
}

View File

@ -42,8 +42,9 @@ class SMESHGUI_ConvToQuadDlg;
class SMESHGUI_ConvToQuadOp : public SMESHGUI_SelectionOp class SMESHGUI_ConvToQuadOp : public SMESHGUI_SelectionOp
{ {
Q_OBJECT Q_OBJECT
// enum HypType{ Algo = 0, MainHyp, AddHyp }; public:
enum MeshType{ Comp = 0, Linear, Quadratic };
public: public:
SMESHGUI_ConvToQuadOp(); SMESHGUI_ConvToQuadOp();
@ -55,12 +56,14 @@ protected:
virtual void startOperation(); virtual void startOperation();
virtual void selectionDone(); virtual void selectionDone();
virtual SUIT_SelectionFilter* createFilter( const int ) const; virtual SUIT_SelectionFilter* createFilter( const int ) const;
MeshType ConsistMesh( const SMESH::SMESH_Mesh_var& ) const;
protected slots: protected slots:
virtual bool onApply(); virtual bool onApply();
void ConnectRadioButtons( int);
private: private:
SMESHGUI_ConvToQuadDlg* myDlg; SMESHGUI_ConvToQuadDlg* myDlg;
}; };
#endif #endif

View File

@ -2216,7 +2216,7 @@ msgid "MEN_MAP"
msgstr "Pattern mapping" msgstr "Pattern mapping"
msgid "MEN_CONV_TO_QUAD" msgid "MEN_CONV_TO_QUAD"
msgstr "Convert to quadratic" msgstr "Convert to/from quadratic"
msgid "MEN_EXTRUSION_ALONG" msgid "MEN_EXTRUSION_ALONG"
msgstr "Extrusion along a path" msgstr "Extrusion along a path"
@ -2569,7 +2569,7 @@ msgid "TOP_MAP"
msgstr "Pattern mapping" msgstr "Pattern mapping"
msgid "TOP_CONV_TO_QUAD" msgid "TOP_CONV_TO_QUAD"
msgstr "Convert to quadratic" msgstr "Convert to/from quadratic"
msgid "TOP_EXTRUSION_ALONG" msgid "TOP_EXTRUSION_ALONG"
msgstr "Extrusion along a path" msgstr "Extrusion along a path"
@ -2873,7 +2873,7 @@ msgid "STB_MAP"
msgstr "Pattern mapping" msgstr "Pattern mapping"
msgid "STB_CONV_TO_QUAD" msgid "STB_CONV_TO_QUAD"
msgstr "Convert to quadratic" msgstr "Convert to/from quadratic"
msgid "STB_EXTRUSION_ALONG" msgid "STB_EXTRUSION_ALONG"
msgstr "Extrusion along a path" msgstr "Extrusion along a path"
@ -3177,7 +3177,7 @@ msgstr "Mesh is not defined\nPlease specify it and try again"
#----------------------------------------------------------- #-----------------------------------------------------------
msgid "SMESHGUI_ConvToQuadDlg::CAPTION" msgid "SMESHGUI_ConvToQuadDlg::CAPTION"
msgstr "Convert to quadratic" msgstr "Convert to/from quadratic"
msgid "SMESHGUI_ConvToQuadDlg::MESH" msgid "SMESHGUI_ConvToQuadDlg::MESH"
msgstr "Mesh" msgstr "Mesh"
@ -3185,6 +3185,12 @@ msgstr "Mesh"
msgid "SMESHGUI_ConvToQuadDlg::MEDIUMNDS" msgid "SMESHGUI_ConvToQuadDlg::MEDIUMNDS"
msgstr "Medium nodes on geometry" msgstr "Medium nodes on geometry"
msgid "SMESHGUI_ConvToQuadDlg::RADIOBTN_1"
msgstr "Convert to quadratic"
msgid "SMESHGUI_ConvToQuadDlg::RADIOBTN_2"
msgstr "Convert from quadratic"
msgid "SMESHGUI_ConvToQuadOp::MESH_IS_NOT_SELECTED" msgid "SMESHGUI_ConvToQuadOp::MESH_IS_NOT_SELECTED"
msgstr "Mesh is not selected\nPlease specify it and try again" msgstr "Mesh is not selected\nPlease specify it and try again"