Salome HOME
INT PAL 0052727: Fitering algorithms according to geometry does not work in Create...
authorimn <imn@opencascade.com>
Tue, 9 Jun 2015 09:06:53 +0000 (12:06 +0300)
committerimn <imn@opencascade.com>
Tue, 9 Jun 2015 09:06:53 +0000 (12:06 +0300)
src/SMESHGUI/SMESHGUI_MeshOp.cxx

index 67408d72002239ff23c172e0279a38d0556016d9..708e7f40d032a21540087d1cdc3929c7fc047ef6 100644 (file)
@@ -1496,14 +1496,20 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
       if ( anAvailable.count() == 1 )
         soleCompatible = myAvailableHypData[dim][Algo][0];
       if ( dim == aTopDim && prevAlgo ) {// all available algoritms should be selectable any way
       if ( anAvailable.count() == 1 )
         soleCompatible = myAvailableHypData[dim][Algo][0];
       if ( dim == aTopDim && prevAlgo ) {// all available algoritms should be selectable any way
-        if (myDlg->currentMeshType() == MT_ANY)
-          availableHyps( dim, Algo, anAvailable, myAvailableHypData[dim][Algo], 0 );
+        anAvailable.clear();
+        for (int i = 0; i < myFilteredAlgoData[dim].count(); ++i) {
+          HypothesisData* aCurAlgo = myFilteredAlgoData[dim][ i ];
+          anAvailable.append( aCurAlgo->Label );
+        }
       }
       myDlg->tab( dim )->setAvailableHyps( Algo, anAvailable );
       noCompatible = anAvailable.isEmpty();
 
       // restore previously selected algo
       }
       myDlg->tab( dim )->setAvailableHyps( Algo, anAvailable );
       noCompatible = anAvailable.isEmpty();
 
       // restore previously selected algo
-      algoIndex = myAvailableHypData[dim][Algo].indexOf( curAlgo );
+      if (dim == aTopDim && prevAlgo)
+        algoIndex = myFilteredAlgoData[dim].indexOf( curAlgo );
+      else
+        algoIndex = myAvailableHypData[dim][Algo].indexOf( curAlgo );
       if ( !isSubmesh && algoIndex < 0 && soleCompatible && !forward && dim != SMESH::DIM_0D)
         // select the sole compatible algo
         algoIndex = myAvailableHypData[dim][Algo].indexOf( soleCompatible );
       if ( !isSubmesh && algoIndex < 0 && soleCompatible && !forward && dim != SMESH::DIM_0D)
         // select the sole compatible algo
         algoIndex = myAvailableHypData[dim][Algo].indexOf( soleCompatible );
@@ -2646,6 +2652,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI
         algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) );
       }
       myAvailableHypData[dim][Algo].clear();
         algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) );
       }
       myAvailableHypData[dim][Algo].clear();
+      myFilteredAlgoData[dim].clear();
       anAvailableAlgs.clear();
       if ( dim != SMESH::DIM_2D || currentHyp( SMESH::DIM_3D, Algo ) < 0 ||
            myAvailableHypData[SMESH::DIM_3D][Algo].empty() ||
       anAvailableAlgs.clear();
       if ( dim != SMESH::DIM_2D || currentHyp( SMESH::DIM_3D, Algo ) < 0 ||
            myAvailableHypData[SMESH::DIM_3D][Algo].empty() ||
@@ -2659,6 +2666,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI
           {
             anAvailableAlgs.append( curAlgo->Label );
             myAvailableHypData[dim][Algo].append( curAlgo );
           {
             anAvailableAlgs.append( curAlgo->Label );
             myAvailableHypData[dim][Algo].append( curAlgo );
+            myFilteredAlgoData[dim].append( curAlgo );
           }
         }
         if ( !isNone && algoCur ) {
           }
         }
         if ( !isNone && algoCur ) {