Salome HOME
'Extrusion Along Path' dialog box : rearrange widgets
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_ExtrusionAlongPathDlg.cxx
index d99f0ad205215400029b17d4fcd1e48f08490fba..989518fe02b671162ec32071a150deb6d87dbf72 100644 (file)
@@ -180,6 +180,35 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( QWidget* parent,
   PathGrpLayout->addWidget( SelectStartPointButton, 2, 1 );
   PathGrpLayout->addWidget( StartPointLineEdit,     2, 2 );
 
+  // Controls for base point defining
+  BasePointCheck = new QCheckBox( tr( "SMESH_USE_BASE_POINT" ), ArgumentsGrp );
+
+  BasePointGrp = new QGroupBox( tr( "SMESH_BASE_POINT" ), ArgumentsGrp );
+  BasePointGrp->setColumnLayout( 0, Qt::Vertical );
+  BasePointGrp->layout()->setSpacing( 0 ); BasePointGrp->layout()->setMargin( 0 );
+  QGridLayout* BasePointGrpLayout = new QGridLayout( BasePointGrp->layout() );
+  BasePointGrpLayout->setAlignment( Qt::AlignTop );
+  BasePointGrpLayout->setSpacing( 6 ); BasePointGrpLayout->setMargin( 11 );
+  
+  SelectBasePointButton = new QToolButton( BasePointGrp );
+  SelectBasePointButton->setPixmap( selectImage );
+
+  XLab  = new QLabel( tr( "SMESH_X" ), BasePointGrp );
+  XSpin = new SMESHGUI_SpinBox( BasePointGrp );
+  YLab  = new QLabel( tr( "SMESH_Y" ), BasePointGrp );
+  YSpin = new SMESHGUI_SpinBox( BasePointGrp );
+  ZLab  = new QLabel( tr( "SMESH_Z" ), BasePointGrp );
+  ZSpin = new SMESHGUI_SpinBox( BasePointGrp );
+
+  // layouting
+  BasePointGrpLayout->addWidget( SelectBasePointButton, 0, 0 );
+  BasePointGrpLayout->addWidget( XLab,                  0, 1 );
+  BasePointGrpLayout->addWidget( XSpin,                 0, 2 );
+  BasePointGrpLayout->addWidget( YLab,                  0, 3 );
+  BasePointGrpLayout->addWidget( YSpin,                 0, 4 );
+  BasePointGrpLayout->addWidget( ZLab,                  0, 5 );
+  BasePointGrpLayout->addWidget( ZSpin,                 0, 6 );
+
   // Controls for angles defining
   AnglesCheck = new QCheckBox( tr( "SMESH_USE_ANGLES" ), ArgumentsGrp );
   
@@ -212,46 +241,17 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( QWidget* parent,
   AnglesGrpLayout->addWidget(          AngleSpin,  0,    2    );
   AnglesGrpLayout->setRowStretch( 1, 10 );
   
-  // Controls for base point defining
-  BasePointCheck = new QCheckBox( tr( "SMESH_USE_BASE_POINT" ), ArgumentsGrp );
-
-  BasePointGrp = new QGroupBox( tr( "SMESH_BASE_POINT" ), ArgumentsGrp );
-  BasePointGrp->setColumnLayout( 0, Qt::Vertical );
-  BasePointGrp->layout()->setSpacing( 0 ); BasePointGrp->layout()->setMargin( 0 );
-  QGridLayout* BasePointGrpLayout = new QGridLayout( BasePointGrp->layout() );
-  BasePointGrpLayout->setAlignment( Qt::AlignTop );
-  BasePointGrpLayout->setSpacing( 6 ); BasePointGrpLayout->setMargin( 11 );
-  
-  SelectBasePointButton = new QToolButton( BasePointGrp );
-  SelectBasePointButton->setPixmap( selectImage );
-
-  XLab  = new QLabel( tr( "SMESH_X" ), BasePointGrp );
-  XSpin = new SMESHGUI_SpinBox( BasePointGrp );
-  YLab  = new QLabel( tr( "SMESH_Y" ), BasePointGrp );
-  YSpin = new SMESHGUI_SpinBox( BasePointGrp );
-  ZLab  = new QLabel( tr( "SMESH_Z" ), BasePointGrp );
-  ZSpin = new SMESHGUI_SpinBox( BasePointGrp );
-
-  // layouting
-  BasePointGrpLayout->addWidget( SelectBasePointButton, 0, 0 );
-  BasePointGrpLayout->addWidget( XLab,                  0, 1 );
-  BasePointGrpLayout->addWidget( XSpin,                 0, 2 );
-  BasePointGrpLayout->addWidget( YLab,                  0, 3 );
-  BasePointGrpLayout->addWidget( YSpin,                 0, 4 );
-  BasePointGrpLayout->addWidget( ZLab,                  0, 5 );
-  BasePointGrpLayout->addWidget( ZSpin,                 0, 6 );
-
   // layouting
   ArgumentsGrpLayout->addWidget(          ElementsLab,            0,    0    );
   ArgumentsGrpLayout->addWidget(          SelectElementsButton,   0,    1    );
   ArgumentsGrpLayout->addWidget(          ElementsLineEdit,       0,    2    );
   ArgumentsGrpLayout->addMultiCellWidget( MeshCheck,              1, 1, 0, 2 );
   ArgumentsGrpLayout->addMultiCellWidget( PathGrp,                2, 2, 0, 2 );
-  ArgumentsGrpLayout->addWidget(          AnglesCheck,            3,    0    );
-  ArgumentsGrpLayout->addMultiCellWidget( AnglesGrp,              3, 4, 1, 2 );
-  ArgumentsGrpLayout->addWidget(          BasePointCheck,         5,    0    );
-  ArgumentsGrpLayout->addMultiCellWidget( BasePointGrp,           5, 6, 1, 2 );
-  ArgumentsGrpLayout->setRowStretch( 4, 10 );
+  ArgumentsGrpLayout->addWidget(          BasePointCheck,         3,    0    );
+  ArgumentsGrpLayout->addMultiCellWidget( BasePointGrp,           3, 4, 1, 2 );
+  ArgumentsGrpLayout->addWidget(          AnglesCheck,            5,    0    );
+  ArgumentsGrpLayout->addMultiCellWidget( AnglesGrp,              5, 6, 1, 2 );
+  ArgumentsGrpLayout->setRowStretch( 6, 10 );
 
   /***************************************************************/
   // common buttons group box
@@ -579,9 +579,9 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
     int j = 0;
     bool bOk;
     for ( int i = 0; i < AnglesList->count(); i++ ) {
-      long angle = AnglesList->text( i ).toLong( &bOk );
+      double angle = AnglesList->text( i ).toDouble( &bOk );
       if  ( bOk )
-       anAngles[ j++ ] = angle;
+       anAngles[ j++ ] = angle*PI/180;
     }
     anAngles->length( j );
   }
@@ -597,9 +597,52 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
   try {
     QAD_WaitCursor wc;
     SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-    aMeshEditor->ExtrusionAlongPath( anElementsId.inout(), myPathMesh, myPathShape, aNodeStart, 
-                                    AnglesCheck->isChecked(), anAngles.inout(), 
-                                    BasePointCheck->isChecked(), aBasePoint );
+    SMESH::SMESH_MeshEditor::Extrusion_Error retVal = 
+      aMeshEditor->ExtrusionAlongPath( anElementsId.inout(), myPathMesh, myPathShape, aNodeStart, 
+                                      AnglesCheck->isChecked(), anAngles.inout(), 
+                                      BasePointCheck->isChecked(), aBasePoint );
+
+    wc.stop();
+    switch ( retVal ) {
+    case SMESH::SMESH_MeshEditor::EXTR_NO_ELEMENTS:
+      QAD_MessageBox::warn1( QAD_Application::getDesktop(),
+                            tr( "SMESH_ERROR" ),
+                            tr( "NO_ELEMENTS_SELECTED" ),
+                            tr( "SMESH_BUT_OK" ) );
+      return false; break;
+    case SMESH::SMESH_MeshEditor::EXTR_PATH_NOT_EDGE:
+      QAD_MessageBox::warn1( QAD_Application::getDesktop(),
+                            tr( "SMESH_ERROR" ),
+                            tr( "SELECTED_PATH_IS_NOT_EDGE" ),
+                            tr( "SMESH_BUT_OK" ) );
+      return false; break;
+    case SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE:
+      QAD_MessageBox::warn1( QAD_Application::getDesktop(),
+                            tr( "SMESH_ERROR" ),
+                            tr( "BAD_SHAPE_TYPE" ),
+                            tr( "SMESH_BUT_OK" ) );
+      return false; break;
+    case SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE:
+      QAD_MessageBox::warn1( QAD_Application::getDesktop(),
+                            tr( "SMESH_ERROR" ),
+                            tr( "EXTR_BAD_STARTING_NODE" ),
+                            tr( "SMESH_BUT_OK" ) );
+      return false; break;
+    case SMESH::SMESH_MeshEditor::EXTR_BAD_ANGLES_NUMBER:
+      QAD_MessageBox::warn1( QAD_Application::getDesktop(),
+                            tr( "SMESH_ERROR" ),
+                            tr( "WRONG_ANGLES_NUMBER" ),
+                            tr( "SMESH_BUT_OK" ) );
+      return false; break;
+    case SMESH::SMESH_MeshEditor::EXTR_CANT_GET_TANGENT:
+      QAD_MessageBox::warn1( QAD_Application::getDesktop(),
+                            tr( "SMESH_ERROR" ),
+                            tr( "CANT_GET_TANGENT" ),
+                            tr( "SMESH_BUT_OK" ) );
+      return false; break;
+    case SMESH::SMESH_MeshEditor::EXTR_OK:
+      break;
+    }
   }
   catch( ... ) {
     return false;
@@ -937,14 +980,11 @@ void SMESHGUI_ExtrusionAlongPathDlg::SetEditCurrentArgument( QToolButton* button
     QAD_Application::getDesktop()->SetSelectionMode( ActorSelection );
 
     if ( !myPathMesh->_is_nil() ) {
-      TColStd_MapOfInteger aTypes;
-      aTypes.Add( TopAbs_EDGE );
-      aTypes.Add( TopAbs_WIRE );
       GEOM::GEOM_Object_var aMainShape = myPathMesh->GetShapeToMesh();
       SMESH_Actor* aPathActor = SMESH::FindActorByObject( myPathMesh );
 
       if ( !aMainShape->_is_nil() && aPathActor )
-       mySelection->AddFilter( new SMESH_NumberFilter( "GEOM", TopAbs_SHAPE, -1, aTypes, aMainShape ) );
+       mySelection->AddFilter( new SMESH_NumberFilter( "GEOM", TopAbs_SHAPE, -1, TopAbs_EDGE, aMainShape ) );
        //SMESH::SetPickable( aPathActor );
     }
   }