Salome HOME
IPAL52704: TC7.6.0: "Modification of orientation" don't work on volumes
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MultiEditDlg.cxx
index a252ce333238a2c3080adcea34843c64534c507b..018006f27c36a1f6046c0be6a9e5a8ebda637942 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // 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.
+// 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
@@ -53,7 +53,6 @@
 #include <LightApp_SelectionMgr.h>
 #include <LightApp_Application.h>
 #include <SALOME_ListIO.hxx>
-#include <SALOME_ListIteratorOfListIO.hxx>
 #include <SalomeApp_Tools.h>
 
 #include <SVTK_Selector.h>
@@ -739,7 +738,7 @@ void SMESHGUI_MultiEditDlg::updateButtons()
   bool isListBoxNonEmpty = myListBox->count() > 0;
   bool isToAll = myToAllChk->isChecked();
   myFilterBtn->setEnabled(!isToAll);
-  myRemoveBtn->setEnabled(isListBoxNonEmpty && !isToAll);
+  myRemoveBtn->setEnabled(myListBox->selectedItems().count() && !isToAll);
   mySortBtn->setEnabled(isListBoxNonEmpty &&!isToAll);
 
   const SALOME_ListIO& aList = mySelector->StoredIObjects();
@@ -859,6 +858,8 @@ void SMESHGUI_MultiEditDlg::onListSelectionChanged()
   mySelector->AddOrRemoveIndex(anActor->getIO(),anIndexes,false);
   if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
     aViewWindow->highlight(anActor->getIO(),true,true);
+
+  myRemoveBtn->setEnabled( anIndexes.Extent() );
 }
 
 //=======================================================================
@@ -1078,7 +1079,7 @@ bool SMESHGUI_ChangeOrientationDlg::process (SMESH::SMESH_MeshEditor_ptr theEdit
 
 int SMESHGUI_ChangeOrientationDlg::nbElemsInMesh()
 {
-  return ( myFilterType = SMESH::FaceFilter ) ? myMesh->NbFaces() : myMesh->NbVolumes();
+  return ( myFilterType == SMESH::FaceFilter ) ? myMesh->NbFaces() : myMesh->NbVolumes();
 }
 
 /*!
@@ -1282,7 +1283,7 @@ bool SMESHGUI_CuttingOfQuadsDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
     {
       if ( hasObj )
         return theEditor->QuadTo4Tri( obj ), true;
-      SMESH::SMESH_IDSource_wrap elems = theEditor->MakeIDSource( theIds, SMESH::FACE );
+      SMESH::IDSource_wrap elems = theEditor->MakeIDSource( theIds, SMESH::FACE );
       theEditor->QuadTo4Tri( elems );
       return true;
     }
@@ -1618,7 +1619,7 @@ bool SMESHGUI_SplitVolumesDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
                                         const SMESH::long_array&    theIds,
                                         SMESH::SMESH_IDSource_ptr   theObj)
 {
-  SMESH::SMESH_IDSource_wrap obj = theObj;
+  SMESH::IDSource_wrap obj = theObj;
   if ( CORBA::is_nil( obj ))
     obj = theEditor->MakeIDSource( theIds, SMESH::VOLUME );
   else
@@ -1635,16 +1636,18 @@ bool SMESHGUI_SplitVolumesDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
       aParameters << myDirSpin[2]->text();
       myMesh->SetParameters( aParameters.join(":").toLatin1().constData() );
 
-      SMESH::AxisStruct_var axis = new SMESH::AxisStruct;
-      axis->x  = myPointSpin[0]->GetValue();
-      axis->y  = myPointSpin[1]->GetValue();
-      axis->z  = myPointSpin[2]->GetValue();
-      axis->vx = myDirSpin[0]->GetValue();
-      axis->vy = myDirSpin[1]->GetValue();
-      axis->vz = myDirSpin[2]->GetValue();
-
-      theEditor->SplitHexahedraIntoPrisms( obj,  myGroupChoice->checkedId()+1,
-                                           axis, myAllDomainsChk->isChecked() );
+      SMESH::PointStruct_var point = new SMESH::PointStruct;
+      point->x  = myPointSpin[0]->GetValue();
+      point->y  = myPointSpin[1]->GetValue();
+      point->z  = myPointSpin[2]->GetValue();
+      SMESH::DirStruct_var norm = new SMESH::DirStruct;
+      norm->PS.x = myDirSpin[0]->GetValue();
+      norm->PS.y = myDirSpin[1]->GetValue();
+      norm->PS.z = myDirSpin[2]->GetValue();
+
+      theEditor->SplitHexahedraIntoPrisms( obj, point, norm,
+                                           myGroupChoice->checkedId()+1,
+                                           myAllDomainsChk->isChecked() );
     }
     else
     {
@@ -1698,6 +1701,10 @@ void SMESHGUI_SplitVolumesDlg::on3d2dChanged(int isPrism)
   }
   SMESHGUI_MultiEditDlg::on3d2dChanged( !myEntityType );
   myEntityType = 1; // == VOLUME
+  myChoiceWidget->hide();
+  myChoiceWidget->show();
+  resize(minimumSizeHint());
+  onSelectionDone();
 }
 
 //================================================================================
@@ -1788,6 +1795,8 @@ void SMESHGUI_SplitVolumesDlg::onSelectionDone()
     }
     updateButtons();
   }
+
+  myCriterionGrp->setEnabled( !myMesh->_is_nil() && nbElemsInMesh() > 0 );
 }
 
 //================================================================================