]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Implement ConvertFromQuadratic() operation
authoreap <eap@opencascade.com>
Thu, 4 May 2006 09:29:29 +0000 (09:29 +0000)
committereap <eap@opencascade.com>
Thu, 4 May 2006 09:29:29 +0000 (09:29 +0000)
src/SMESHGUI/SMESHGUI_ConvToQuadDlg.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadDlg.h
src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadOp.h
src/SMESHGUI/SMESH_msg_en.po

index ab2e101119785022f4a8a8f407f94d4793b3040c..1f53247815e630d92b9369b231ddb57e5311723d 100644 (file)
@@ -34,6 +34,8 @@
 #include <qgroupbox.h>
 #include <qlayout.h>
 #include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
 
 SMESHGUI_ConvToQuadDlg::SMESHGUI_ConvToQuadDlg()
 : SMESHGUI_Dialog( 0, false, true )
@@ -50,12 +52,26 @@ SMESHGUI_ConvToQuadDlg::SMESHGUI_ConvToQuadDlg()
   createObject( tr( "MESH" ), aGrp, 0 );
 
   //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
   QVBoxLayout* aLay = new QVBoxLayout( mainFrame(), 5, 5 );
   aLay->addWidget( aGrp );
   aLay->addWidget( myMedNdsOnGeom );
+  aLay->addWidget( myBG );
+  
+  connect(myBG, SIGNAL( clicked( int ) ), this, SIGNAL( onClicked( int ) ) );
 }
 
 SMESHGUI_ConvToQuadDlg::~SMESHGUI_ConvToQuadDlg()
@@ -77,7 +93,38 @@ bool SMESHGUI_ConvToQuadDlg::IsEnabledCheck() const
   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() );
+}
+
+
index 863a96826786a787bb24ff04a594721c36395781..596b823a7f3ac4416fba71d5f7c7704031e73387 100644 (file)
@@ -42,6 +42,8 @@
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
 class QCheckBox;
+class QRadioButton;
+class QButtonGroup;
 
 class SMESHGUI_ConvToQuadDlg : public SMESHGUI_Dialog
 { 
@@ -54,11 +56,22 @@ public:
   bool     IsMediumNdsOnGeom() const;
   void     SetMediumNdsOnGeom(const bool theCheck);
   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:
 
   QCheckBox* myMedNdsOnGeom;
+  QButtonGroup* myBG;
+  QRadioButton* myRB1;
+  QRadioButton* myRB2;
+
 };
 
 #endif
index f779cb2c833e61f14fc170bc96647fc49efd4daa..a88743f2f58a209cab8732324885d3b78b6c46ca 100644 (file)
@@ -91,6 +91,8 @@ void SMESHGUI_ConvToQuadOp::startOperation()
   {
     myDlg = new SMESHGUI_ConvToQuadDlg( );
   }
+  connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) );
+
   SMESHGUI_SelectionOp::startOperation();
 
   myDlg->SetMediumNdsOnGeom( false );
@@ -122,23 +124,21 @@ void SMESHGUI_ConvToQuadOp::selectionDone()
     SMESH::SMESH_Mesh_var mesh =
     SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );  
 
-    GEOM::GEOM_Object_var mainGeom;
-    mainGeom = mesh->GetShapeToMesh();
-
-    if( mesh->_is_nil() || 
-       ( !mesh->NbEdgesOfOrder(SMESH::ORDER_LINEAR) && 
-         !mesh->NbFacesOfOrder(SMESH::ORDER_LINEAR) &&
-         !mesh->NbVolumesOfOrder(SMESH::ORDER_LINEAR) ) )
+    if( mesh->_is_nil() )
     {
-      myDlg->setButtonEnabled( false, QtxDialog::OK | QtxDialog::Apply );
-      myDlg->SetEnabledCheck( false );
+      myDlg->SetEnabledControls( 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 
     {
-      myDlg->setButtonEnabled( true, QtxDialog::OK | QtxDialog::Apply );
-      myDlg->SetEnabledCheck( true );
+      myDlg->SetEnabledControls( true );
     }
   }
   catch ( const SALOME::SALOME_Exception& S_ex )
@@ -205,13 +205,20 @@ bool SMESHGUI_ConvToQuadOp::onApply()
 
   try
   {
-    bool aParam = true;
-    if( myDlg->IsEnabledCheck() )
-      aParam = myDlg->IsMediumNdsOnGeom();
-
     SMESH::SMESH_MeshEditor_var aEditor = mesh->GetMeshEditor();
-    aEditor->ConvertToQuadratic( aParam );
-    aResult = true; 
+    if( !myDlg->CurrentRB() )
+    {
+      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 )
   {
@@ -222,11 +229,58 @@ bool SMESHGUI_ConvToQuadOp::onApply()
   {
     aResult = false;
   }
-  if(aResult)
+  if( aResult )
   {
-    update( UF_ObjBrowser | UF_Model );
-    myDlg->setButtonEnabled( false, QtxDialog::Apply );
+    update( UF_ObjBrowser | UF_Model | UF_Viewer );
+    selectionDone();
   }
   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 );
+}
+
+
index c6b9ff5c68fa19d478550e335c453f48a405b940..bc862f97ba7b3dfffc44248aec9c1883ccca617d 100644 (file)
@@ -42,8 +42,9 @@ class SMESHGUI_ConvToQuadDlg;
 class SMESHGUI_ConvToQuadOp : public SMESHGUI_SelectionOp
 { 
   Q_OBJECT
-      
-  //  enum HypType{ Algo = 0, MainHyp, AddHyp };
+
+public:      
+enum MeshType{ Comp = 0, Linear, Quadratic };
 
 public:
   SMESHGUI_ConvToQuadOp();
@@ -55,12 +56,14 @@ protected:
   virtual void                   startOperation();
   virtual void                   selectionDone();
   virtual SUIT_SelectionFilter*  createFilter( const int ) const;
+  MeshType                       ConsistMesh( const SMESH::SMESH_Mesh_var& ) const;
 
 protected slots:
   virtual bool                   onApply();
+  void                           ConnectRadioButtons( int);
 
 private:
-  SMESHGUI_ConvToQuadDlg*              myDlg;
+  SMESHGUI_ConvToQuadDlg*        myDlg;
 };
 
 #endif
index 0bb49ce4be2de39db312c7e00852937a03860969..44adb6e45846745bd3b71b2b3bc4d98f3abad782 100644 (file)
@@ -2216,7 +2216,7 @@ msgid "MEN_MAP"
 msgstr "Pattern mapping"
 
 msgid "MEN_CONV_TO_QUAD"
-msgstr "Convert to quadratic"
+msgstr "Convert to/from quadratic"
 
 msgid "MEN_EXTRUSION_ALONG"
 msgstr "Extrusion along a path"
@@ -2569,7 +2569,7 @@ msgid "TOP_MAP"
 msgstr "Pattern mapping"
 
 msgid "TOP_CONV_TO_QUAD"
-msgstr "Convert to quadratic"
+msgstr "Convert to/from quadratic"
 
 msgid "TOP_EXTRUSION_ALONG"
 msgstr "Extrusion along a path"
@@ -2873,7 +2873,7 @@ msgid "STB_MAP"
 msgstr "Pattern mapping"
 
 msgid "STB_CONV_TO_QUAD"
-msgstr "Convert to quadratic"
+msgstr "Convert to/from quadratic"
 
 msgid "STB_EXTRUSION_ALONG"
 msgstr "Extrusion along a path"
@@ -3177,7 +3177,7 @@ msgstr "Mesh is not defined\nPlease specify it and try again"
 #-----------------------------------------------------------
 
 msgid "SMESHGUI_ConvToQuadDlg::CAPTION"
-msgstr "Convert to quadratic"
+msgstr "Convert to/from quadratic"
 
 msgid "SMESHGUI_ConvToQuadDlg::MESH"
 msgstr "Mesh"
@@ -3185,6 +3185,12 @@ msgstr "Mesh"
 msgid "SMESHGUI_ConvToQuadDlg::MEDIUMNDS"
 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"
 msgstr "Mesh is not selected\nPlease specify it and try again"