Salome HOME
Update of CheckDone
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_FilterDlg.cxx
old mode 100755 (executable)
new mode 100644 (file)
index c2f4bd6..98439f0
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -69,6 +69,7 @@
 // SALOME KERNEL includes
 #include <SALOMEDSClient_Study.hxx>
 #include <Basics_Utils.hxx>
+#include <smIdType.hxx>
 
 // OCCT includes
 #include <StdSelect_TypeOfFace.hxx>
@@ -697,7 +698,7 @@ void SMESHGUI_FilterTable::ComboDelegate::setModelData( QWidget* editor,
 
 void SMESHGUI_FilterTable::ComboDelegate::updateEditorGeometry( QWidget* editor,
                                                                 const QStyleOptionViewItem& option, 
-                                                                const QModelIndex& index ) const
+                                                                const QModelIndex& /*index*/ ) const
 {
   editor->setGeometry( option.rect );
 }
@@ -798,7 +799,7 @@ void SMESHGUI_FilterTable::Table::setEditable (bool isEditable,
 
 //=======================================================================
 // name    : SMESHGUI_FilterTable::Table::isEditable
-// Purpose : Verify wheter cell is editable
+// Purpose : Verify whether cell is editable
 //=======================================================================
 bool SMESHGUI_FilterTable::Table::isEditable (int row, int col) const
 {
@@ -856,7 +857,7 @@ QList<int> SMESHGUI_FilterTable::Table::selectedRows()
 
 /*
   Class       : SMESHGUI_FilterTable
-  Description : Frame containig
+  Description : Frame containing
                   - Button group for switching entity type
                   - Table for displaying filter criterions
                   - Buttons for editing table and filter libraries
@@ -870,8 +871,8 @@ SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
                                             QWidget* parent,
                                             const int type )
 : QWidget( parent ),
-  myIsLocked( false ),
-  mySMESHGUI( theModule )
+  mySMESHGUI( theModule ),
+  myIsLocked( false )
 {
   myEntityType = -1;
 
@@ -888,8 +889,8 @@ SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
                                             QWidget* parent,
                                             const QList<int>& types )
 : QWidget( parent ),
-  myIsLocked( false ),
-  mySMESHGUI( theModule )
+  mySMESHGUI( theModule ),
+  myIsLocked( false )
 {
   myEntityType = -1;
   Init(types);
@@ -1012,6 +1013,7 @@ void SMESHGUI_FilterTable::Init (const QList<int>& theTypes)
         Table* aTable = createTable(mySwitchTableGrp, *typeIt);
         myTables[ *typeIt ] = aTable;
         ((QVBoxLayout*)mySwitchTableGrp->layout())->addWidget(myTables[ *typeIt ]);
+        myEntityType = -1;
       }
     }
   }
@@ -1154,7 +1156,7 @@ bool SMESHGUI_FilterTable::IsValid (const bool theMess, const int theEntityType)
       bool aRes = false;
       bool isSignalsBlocked = aTable->signalsBlocked();
       aTable->blockSignals(true);
-      double  aThreshold = (int)aTable->text(i, 2).toDouble(&aRes);
+      /*double  aThreshold =*/ aTable->text(i, 2).toDouble( &aRes );
       aTable->blockSignals(isSignalsBlocked);
 
       if (!aRes && aTable->isEditable(i, 2))
@@ -1368,8 +1370,7 @@ void SMESHGUI_FilterTable::SetCriterion (const int                       theRow,
   {
     if ( strlen( theCriterion.ThresholdID ) > 0 ) // shape ID -> name
     {
-      _PTR(SObject) sobj =
-        SMESH::GetActiveStudyDocument()->FindObjectID( theCriterion.ThresholdID.in() );
+      _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( theCriterion.ThresholdID.in() );
       if ( !sobj )
         aTable->item( theRow, 2 )->setText( QString( theCriterion.ThresholdID ) );
       else
@@ -1402,7 +1403,7 @@ void SMESHGUI_FilterTable::SetCriterion (const int                       theRow,
            theCriterion.Type != SMESH::FT_OverConstrainedVolume &&
            theCriterion.Type != SMESH::FT_LinearOrQuadratic)
   {
-    // Numberic criterion
+    // Numeric criterion
     aTable->item( theRow, 2 )->setText(QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
   }
   else
@@ -1545,7 +1546,7 @@ void SMESHGUI_FilterTable::onRemoveBtn()
 
 //=======================================================================
 // name    : SMESHGUI_FilterTable::updateAdditionalWidget
-// Purpose : Enable/Disable widget with additonal parameters
+// Purpose : Enable/Disable widget with additional parameters
 //=======================================================================
 void SMESHGUI_FilterTable::updateAdditionalWidget()
 {
@@ -1559,19 +1560,33 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
 
   ComboItem* anItem = ((ComboItem*)aTable->item(aRow, 0));
   int aCriterion = GetCriterionType(aRow);
-  bool toEnable = ((((ComboItem*)aTable->item(aRow, 1))->value() == SMESH::FT_EqualTo &&
-                   aCriterion != SMESH::FT_RangeOfIds &&
-                   aCriterion != SMESH::FT_FreeEdges &&
-                   aCriterion != SMESH::FT_FreeFaces &&
-                   aCriterion != SMESH::FT_BadOrientedVolume &&
-                   aCriterion != SMESH::FT_BareBorderFace &&
-                   aCriterion != SMESH::FT_BareBorderVolume &&
-                   aCriterion != SMESH::FT_OverConstrainedFace &&
-                   aCriterion != SMESH::FT_OverConstrainedVolume)
-                   ||
-                   aCriterion == SMESH::FT_CoplanarFaces ||
+  bool isDbl = ( aCriterion == SMESH::FT_AspectRatio        ||
+                 aCriterion == SMESH::FT_AspectRatio3D      ||
+                 aCriterion == SMESH::FT_Warping            ||
+                 aCriterion == SMESH::FT_Warping3D          ||
+                 aCriterion == SMESH::FT_MinimumAngle       ||
+                 aCriterion == SMESH::FT_Taper              ||
+                 aCriterion == SMESH::FT_Skew               ||
+                 aCriterion == SMESH::FT_Area               ||
+                 aCriterion == SMESH::FT_Volume3D           ||
+                 aCriterion == SMESH::FT_ScaledJacobian     ||
+                 aCriterion == SMESH::FT_MaxElementLength2D ||
+                 aCriterion == SMESH::FT_MaxElementLength3D ||
+                 aCriterion == SMESH::FT_Length             ||
+                 aCriterion == SMESH::FT_Length2D           ||
+                 aCriterion == SMESH::FT_Length3D           ||
+                 aCriterion == SMESH::FT_Deflection2D       ||
+                 aCriterion == SMESH::FT_BallDiameter );
+
+  bool toEnable = (( isDbl && ((ComboItem*)aTable->item(aRow, 1))->value() == SMESH::FT_EqualTo) ||
+                   aCriterion == SMESH::FT_BelongToPlane                                         ||
+                   aCriterion == SMESH::FT_BelongToCylinder                                      ||
+                   aCriterion == SMESH::FT_BelongToGenSurface                                    ||
+                   aCriterion == SMESH::FT_BelongToGeom                                          ||
+                   aCriterion == SMESH::FT_LyingOnGeom                                           ||
+                   aCriterion == SMESH::FT_CoplanarFaces                                         ||
                    aCriterion == SMESH::FT_EqualNodes);
-  
+
   if (!myAddWidgets.contains(anItem))
   {
     myAddWidgets[ anItem ] = new AdditionalWidget(myWgStack);
@@ -1592,6 +1607,7 @@ const char* SMESHGUI_FilterTable::getPrecision( const int aType )
   case SMESH::FT_Taper:
     retval = "parametric_precision"; break;
   case SMESH::FT_Warping:
+  case SMESH::FT_Warping3D:
   case SMESH::FT_MinimumAngle:
   case SMESH::FT_Skew:
   case SMESH::FT_CoplanarFaces:
@@ -1607,6 +1623,8 @@ const char* SMESHGUI_FilterTable::getPrecision( const int aType )
     retval = "len_tol_precision"; break;
   case SMESH::FT_Length:
   case SMESH::FT_Length2D:
+  case SMESH::FT_Length3D:
+  case SMESH::FT_Deflection2D:
   case SMESH::FT_MaxElementLength2D:
   case SMESH::FT_MaxElementLength3D:
   case SMESH::FT_BallDiameter:
@@ -1718,6 +1736,7 @@ static QList<int> entityTypes( const int theType )
   {
   case SMESH::NODE:
     typeIds.append( SMDSEntity_Node );
+    break;
   case SMESH::EDGE:
     typeIds.append( SMDSEntity_Edge );
     typeIds.append( SMDSEntity_Quad_Edge );
@@ -1730,7 +1749,7 @@ static QList<int> entityTypes( const int theType )
     typeIds.append( SMDSEntity_Quad_Quadrangle );
     typeIds.append( SMDSEntity_BiQuad_Quadrangle );
     typeIds.append( SMDSEntity_Polygon );
-    //typeIds.append( SMDSEntity_Quad_Polygon );
+    typeIds.append( SMDSEntity_Quad_Polygon );
     break;
   case SMESH::VOLUME:
     typeIds.append( SMDSEntity_Tetra );
@@ -1742,6 +1761,7 @@ static QList<int> entityTypes( const int theType )
     typeIds.append( SMDSEntity_TriQuad_Hexa );
     typeIds.append( SMDSEntity_Penta );
     typeIds.append( SMDSEntity_Quad_Penta );
+    typeIds.append( SMDSEntity_BiQuad_Penta );
     typeIds.append( SMDSEntity_Hexagonal_Prism );
     typeIds.append( SMDSEntity_Polyhedra );
     //typeIds.append( SMDSEntity_Quad_Polyhedra );
@@ -1761,7 +1781,7 @@ static QList<int> entityTypes( const int theType )
 // Purpose : Provides reaction on change of criterion
 //=======================================================================
 
-void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, const int entityType)
+void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int /*col*/, const int entityType)
 {
   int aType = entityType == -1 ? GetType() : entityType;
   Table* aTable = myTables[ aType ];
@@ -1781,27 +1801,28 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   }
 
   // find out a type of item required by a new criterion and other table features
-  int aCriterionType       = GetCriterionType(row);
+  int  aCriterionType      = GetCriterionType(row);
   bool anIsDoubleCriterion = false;
   bool anIsIntCriterion    = false;
   bool anIsComboCriterion  = false;
   // other features:
   QList<int> comboIDs; // values to show in a combo item
-  int nbCompareSigns = 0; // possible values are 0,1,3
+  int  nbCompareSigns      = 0; // possible values are 0,1,3
   bool isThresholdEditable = false; // actual for "simple" item types
   switch ( aCriterionType )
   {
   case SMESH::FT_AspectRatio:
   case SMESH::FT_AspectRatio3D:
   case SMESH::FT_Warping:
+  case SMESH::FT_Warping3D:
   case SMESH::FT_MinimumAngle:
   case SMESH::FT_Taper:
   case SMESH::FT_Skew:
   case SMESH::FT_Area:
   case SMESH::FT_Volume3D:
+  case SMESH::FT_ScaledJacobian:
   case SMESH::FT_MaxElementLength2D:
-  case SMESH::FT_MaxElementLength3D:
-    anIsDoubleCriterion = true; break;
+  case SMESH::FT_MaxElementLength3D: anIsDoubleCriterion = true; break;
 
   case SMESH::FT_FreeBorders:
   case SMESH::FT_FreeEdges:
@@ -1812,11 +1833,14 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   case SMESH::FT_EqualFaces:
   case SMESH::FT_EqualVolumes: break;
 
+  case SMESH::FT_NodeConnectivityNumber:
   case SMESH::FT_MultiConnection:
   case SMESH::FT_MultiConnection2D: anIsIntCriterion = true; nbCompareSigns = 3; break;
 
   case SMESH::FT_Length:
-  case SMESH::FT_Length2D: anIsDoubleCriterion = true; break;
+  case SMESH::FT_Length2D:
+  case SMESH::FT_Length3D:
+  case SMESH::FT_Deflection2D: anIsDoubleCriterion = true; break;
 
   case SMESH::FT_BelongToMeshGroup: break;
 
@@ -2043,7 +2067,7 @@ void SMESHGUI_FilterTable::addRow (Table* theTable, const int theType, const boo
   }
   myIsLocked = false;
 
-  // IPAL19372 - to prevent calling onCriterionChaged() slot before completion of setItem()
+  // IPAL19372 - to prevent calling onCriterionChanged() slot before completion of setItem()
   bool isSignalsBlocked = theTable->signalsBlocked();
   theTable->blockSignals( true );
 
@@ -2104,7 +2128,7 @@ QTableWidgetItem* SMESHGUI_FilterTable::getCriterionItem (const int theType) con
 
 //=======================================================================
 // name    : SMESHGUI_FilterTable::getCompareItem
-// Purpose : Get combo table item for operation of comparision
+// Purpose : Get combo table item for operation of comparison
 //=======================================================================
 QTableWidgetItem* SMESHGUI_FilterTable::getCompareItem () const
 {
@@ -2179,6 +2203,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_GroupColor         ] = tr("GROUP_COLOR");
       aCriteria[ SMESH::FT_EqualNodes         ] = tr("EQUAL_NODE");
       aCriteria[ SMESH::FT_ConnectedElements  ] = tr("CONNECTED_ELEMS");
+      aCriteria[ SMESH::FT_NodeConnectivityNumber ] = tr("NODE_CONN_NUMBER");
     }
     return aCriteria;
   }
@@ -2227,6 +2252,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BelongToGenSurface ] = tr("BELONG_TO_GENSURFACE");
       aCriteria[ SMESH::FT_LyingOnGeom        ] = tr("LYING_ON_GEOM");
       aCriteria[ SMESH::FT_Length2D           ] = tr("LENGTH2D");
+      aCriteria[ SMESH::FT_Deflection2D       ] = tr("DEFLECTION2D");
       aCriteria[ SMESH::FT_MultiConnection2D  ] = tr("MULTI2D_BORDERS");
       aCriteria[ SMESH::FT_FreeFaces          ] = tr("FREE_FACES");
       aCriteria[ SMESH::FT_BareBorderFace     ] = tr("BARE_BORDER_FACE");
@@ -2247,6 +2273,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
     if (aCriteria.isEmpty())
     {
       aCriteria[ SMESH::FT_AspectRatio3D        ] = tr("ASPECT_RATIO_3D");
+      aCriteria[ SMESH::FT_Warping3D            ] = tr("WARPING_3D");
       aCriteria[ SMESH::FT_RangeOfIds           ] = tr("RANGE_OF_IDS");
       aCriteria[ SMESH::FT_BelongToMeshGroup    ] = tr("BELONG_TO_MESH_GROUP");
       aCriteria[ SMESH::FT_BelongToGeom         ] = tr("BELONG_TO_GEOM");
@@ -2254,6 +2281,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BadOrientedVolume    ] = tr("BAD_ORIENTED_VOLUME");
       aCriteria[ SMESH::FT_BareBorderVolume     ] = tr("BARE_BORDER_VOLUME");
       aCriteria[ SMESH::FT_OverConstrainedVolume] = tr("OVER_CONSTRAINED_VOLUME");
+      aCriteria[ SMESH::FT_Length3D             ] = tr("LENGTH3D");
       aCriteria[ SMESH::FT_Volume3D             ] = tr("VOLUME_3D");
       aCriteria[ SMESH::FT_MaxElementLength3D   ] = tr("MAX_ELEMENT_LENGTH_3D");
       aCriteria[ SMESH::FT_LinearOrQuadratic    ] = tr("LINEAR");
@@ -2262,6 +2290,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_EqualVolumes         ] = tr("EQUAL_VOLUME");
       aCriteria[ SMESH::FT_EntityType           ] = tr("ENTITY_TYPE");
       aCriteria[ SMESH::FT_ConnectedElements    ] = tr("CONNECTED_ELEMS");
+      aCriteria[ SMESH::FT_ScaledJacobian       ] = tr("SCALED_JACOBIAN");
     }
     return aCriteria;
   }
@@ -2357,7 +2386,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCompare() const
 // Purpose : Create table
 //=======================================================================
 SMESHGUI_FilterTable::Table* SMESHGUI_FilterTable::createTable (QWidget*  theParent,
-                                                                const int theType)
+                                                                const int /*theType*/)
 {
   // create table
   Table* aTable= new Table(0, 6, theParent);
@@ -2724,7 +2753,7 @@ void SMESHGUI_FilterDlg::construct (const QList<int>& theTypes)
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
-  myHelpFileName = "selection_filter_library_page.html";
+  myHelpFileName = "selection_filter_library.html";
 
   Init(myTypes);
 }
@@ -2881,6 +2910,11 @@ void SMESHGUI_FilterDlg::Init (const int type, const bool setInViewer)
 //=======================================================================
 void SMESHGUI_FilterDlg::Init (const QList<int>& theTypes, const bool setInViewer)
 {
+  if ( theTypes.empty() )
+  {
+    Init( SMESH::ALL, setInViewer );
+    return;
+  }
   mySourceWg  = 0;
   myTypes     = theTypes;
   myMesh      = SMESH::SMESH_Mesh::_nil();
@@ -2915,6 +2949,8 @@ void SMESHGUI_FilterDlg::Init (const QList<int>& theTypes, const bool setInViewe
 
   connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate()));
   connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(reject()));
+  connect(mySMESHGUI, SIGNAL(SignalActivatedViewManager()), SLOT(onOpenView()));
+  connect(mySMESHGUI, SIGNAL(SignalCloseView()), SLOT(onCloseView()));
   
   updateMainButtons();
   updateSelection();
@@ -2977,13 +3013,13 @@ void SMESHGUI_FilterDlg::reject()
     SALOME_ListIO aList;
     mySelectionMgr->clearFilters();
     mySelectionMgr->clearSelected();
-    SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter (myIObjects);
+    SALOME_DataMapIteratorOfIOMapOfVtk anIter (myIObjects);
     for ( ; anIter.More(); anIter.Next())
     {
       aList.Append(anIter.Key());
 
-      TColStd_MapOfInteger aResMap;
-      const TColStd_IndexedMapOfInteger& anIndMap = anIter.Value();
+      SVTK_TVtkIDsMap aResMap;
+      const SVTK_TIndexedMapOfVtkId& anIndMap = anIter.Value();
       for (int i = 1, n = anIndMap.Extent(); i <= n; i++)
         aResMap.Add(anIndMap(i));
 
@@ -3000,6 +3036,29 @@ void SMESHGUI_FilterDlg::reject()
   QDialog::reject();
 }
 
+//=================================================================================
+// function : onOpenView()
+// purpose  :
+//=================================================================================
+void SMESHGUI_FilterDlg::onOpenView()
+{
+  if ( mySelector ) {
+    SMESH::SetPointRepresentation(false);
+  }
+  else {
+    mySelector = SMESH::GetViewWindow( mySMESHGUI )->GetSelector();
+  }
+}
+
+//=================================================================================
+// function : onCloseView()
+// purpose  :
+//=================================================================================
+void SMESHGUI_FilterDlg::onCloseView()
+{
+  mySelector = 0;
+}
+
 //=================================================================================
 // function : onHelp()
 // purpose  :
@@ -3026,7 +3085,7 @@ void SMESHGUI_FilterDlg::onHelp()
 
 //=======================================================================
 // name    : SMESHGUI_FilterDlg::onDeactivate
-// Purpose : SLOT called when dialog must be deativated
+// Purpose : SLOT called when dialog must be deactivated
 //=======================================================================
 void SMESHGUI_FilterDlg::onDeactivate()
 {
@@ -3152,8 +3211,9 @@ bool SMESHGUI_FilterDlg::isValid() const
       QString aName;
       myTable->GetThreshold(i, aName);
 
-      std::vector<_PTR(SObject)> aList =
-        SMESH::GetActiveStudyDocument()->FindObjectByName(aName.toLatin1().constData(), "GEOM");
+      std::vector<_PTR(SObject)> aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "GEOM");
+      if (aList.size() == 0)
+        aList = SMESH::getStudy()->FindObjectByName(aName.toUtf8().constData(), "SHAPERSTUDY");
       if (aList.size() == 0) {
         SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
                                      tr("BAD_SHAPE_NAME").arg(aName));
@@ -3290,7 +3350,7 @@ void SMESHGUI_FilterDlg::SetSelection()
     const SALOME_ListIO& anObjs = mySelector->StoredIObjects(); 
     SALOME_ListIteratorOfListIO anIter (anObjs);
     for ( ; anIter.More(); anIter.Next()) {
-      TColStd_IndexedMapOfInteger aMap;
+      SVTK_TIndexedMapOfVtkId aMap;
       mySelector->GetIndex(anIter.Value(), aMap);
       myIObjects.Bind(anIter.Value(), aMap);
     }
@@ -3323,8 +3383,8 @@ bool SMESHGUI_FilterDlg::onApply()
     insertFilterInViewer();
 
     if (!myFilter[ aCurrType ]->GetPredicate()->_is_nil()) {
-      // 
-      bool toFilter = (( SMESH::FindActorByObject( myMesh )) ||
+      //
+      bool toFilter = (( getActor() ) ||
                        ( myInitSourceWgOnApply && mySourceWg ) ||
                        ( mySourceGrp->checkedId() == Dialog && mySourceWg ));
       if ( toFilter ) {
@@ -3332,6 +3392,9 @@ bool SMESHGUI_FilterDlg::onApply()
         filterSource(aCurrType, aResultIds);
         // select in viewer
         selectInViewer(aCurrType, aResultIds);
+        // set ids to the dialog
+        if ( myInitSourceWgOnApply || mySourceGrp->checkedId() == Dialog )
+          setIdsToWg(mySourceWg, aResultIds);
       }
     }
 
@@ -3372,7 +3435,7 @@ bool SMESHGUI_FilterDlg::createFilter (const int theType)
   if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
     aPrecision = mgr->integerValue( "SMESH", "controls_precision", aPrecision );
 
-  for (CORBA::ULong i = 0; i < n; i++) {
+  for ( int i = 0; i < n; i++) {
     SMESH::Filter::Criterion aCriterion = createCriterion();
     myTable->GetCriterion(i, aCriterion);
     aCriterion.Precision = aPrecision;
@@ -3443,7 +3506,8 @@ void SMESHGUI_FilterDlg::UnRegisterFilters()
 //=======================================================================
 void SMESHGUI_FilterDlg::insertFilterInViewer()
 {
-  if (SVTK_Selector* aSelector = SMESH::GetSelector()) {
+  if (SVTK_Selector* aSelector = SMESH::GetSelector())
+  {
     SMESH::ElementType anEntType = (SMESH::ElementType)myTable->GetType();
 
     if (myFilter[ myTable->GetType() ]->_is_nil() ||
@@ -3453,7 +3517,8 @@ void SMESHGUI_FilterDlg::insertFilterInViewer()
     {
       SMESH::RemoveFilter(getFilterId(anEntType), aSelector);
     }
-    else {
+    else
+    {
       Handle(SMESHGUI_PredicateFilter) aFilter = new SMESHGUI_PredicateFilter();
       aFilter->SetPredicate(myFilter[ myTable->GetType() ]->GetPredicate());
       SMESH::RemoveFilter(getFilterId(anEntType), aSelector); //skl for IPAL12631
@@ -3479,9 +3544,9 @@ void SMESHGUI_FilterDlg::filterSource (const int theType,
   {
     if (myMesh->_is_nil())
       return;
-    SMESH::long_array_var anIds = myFilter[ theType ]->GetElementsId(myMesh);
+    SMESH::smIdType_array_var anIds = myFilter[ theType ]->GetElementsId(myMesh);
     for (int i = 0, n = anIds->length(); i < n; i++)
-      theResIds.append(anIds[ i ]);
+      theResIds.append(FromSmIdType<int>(anIds[ i ]));
   }
   else if (aSourceId == Selection)
   {
@@ -3507,9 +3572,6 @@ void SMESHGUI_FilterDlg::filterSource (const int theType,
       if (aPred->IsSatisfy(*anIter))
         theResIds.append(*anIter);
   }
-  // set ids to the dialog
-  if (myInitSourceWgOnApply || aSourceId == Dialog)
-    setIdsToWg(mySourceWg, theResIds);
 }
 
 //=======================================================================
@@ -3525,7 +3587,7 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
 
   // Create map of entities to be filtered
   TColStd_MapOfInteger aToBeFiltered;
-  SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter(myIObjects);
+  SALOME_DataMapIteratorOfIOMapOfVtk anIter(myIObjects);
 
   for ( ; anIter.More(); anIter.Next())
   {
@@ -3535,10 +3597,10 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
     {
       if (aSubMesh->GetFather()->GetId() == myMesh->GetId())
       {
-        SMESH::long_array_var anIds =
+        SMESH::smIdType_array_var anIds =
           theType == SMESH::NODE ? aSubMesh->GetNodesId() : aSubMesh->GetElementsId();
         for (int i = 0, n = anIds->length(); i < n; i++)
-          aToBeFiltered.Add(anIds[ i ]);
+          aToBeFiltered.Add(FromSmIdType<int>(anIds[ i ]));
       }
     }
 
@@ -3549,9 +3611,9 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
     {
       if (aGroup->GetType() == theType && aGroup->GetMesh()->GetId() == myMesh->GetId())
       {
-        SMESH::long_array_var anIds = aGroup->GetListOfID();
+        SMESH::smIdType_array_var anIds = aGroup->GetListOfID();
         for (int i = 0, n = anIds->length(); i < n; i++)
-          aToBeFiltered.Add(anIds[ i ]);
+          aToBeFiltered.Add(FromSmIdType<int>(anIds[ i ]));
       }
     }
 
@@ -3559,7 +3621,7 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
     SMESH::SMESH_Mesh_var aMeshPtr = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIter.Key());
     if (!aMeshPtr->_is_nil() && aMeshPtr->GetId() == myMesh->GetId())
     {
-      const TColStd_IndexedMapOfInteger& aSelMap = anIter.Value();
+      const SVTK_TIndexedMapOfVtkId& aSelMap = anIter.Value();
 
       if (aSelMap.Extent() > 0)
       {
@@ -3581,13 +3643,42 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
       theResIds.append(aResIter.Key());
 }
 
+//=======================================================================
+//function : getActor
+//purpose  : Returns an actor to show filtered entities
+//=======================================================================
+
+SMESH_Actor* SMESHGUI_FilterDlg::getActor()
+{
+  SMESH_Actor* meshActor = SMESH::FindActorByObject( myMesh );
+  if ( meshActor && meshActor->GetVisibility() )
+    return meshActor;
+
+  SALOME_DataMapIteratorOfIOMapOfVtk anIter(myIObjects);
+  for ( ; anIter.More(); anIter.Next())
+  {
+    Handle(SALOME_InteractiveObject) io = anIter.Key();
+    if ( io->hasEntry() )
+    {
+      SMESH_Actor* actor = SMESH::FindActorByEntry( io->getEntry() );
+      if ( !actor )
+        continue;
+      if ( actor->GetVisibility() )
+        return actor;
+      if ( !meshActor )
+        meshActor = actor;
+    }
+  }
+  return meshActor;
+}
+
 //=======================================================================
 // name    : SMESHGUI_FilterDlg::selectInViewer
 // Purpose : Select given entities in viewer
 //=======================================================================
 void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& theIds)
 {
-  if (mySelectionMgr == 0 || myMesh->_is_nil())
+  if (mySelectionMgr == 0 || myMesh->_is_nil() )
     return;
 
   mySelectionMgr->clearFilters();
@@ -3595,7 +3686,8 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& th
   // Set new selection mode if necessary
   Selection_Mode aSelMode = getSelMode(theType);
   SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
-  if ( aViewWindow && aViewWindow->SelectionMode()!=aSelMode) {
+  if ( aViewWindow && aViewWindow->SelectionMode() != aSelMode )
+  {
     mySelectionMgr->clearSelected();
     mySelectionMgr->clearFilters();
     SMESH::SetPointRepresentation( aSelMode == NodeSelection );
@@ -3603,13 +3695,11 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& th
   }
 
   // Clear selection
-  SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh);
-  if (!anActor || !anActor->hasIO())
+  SMESH_Actor* anActor = getActor();
+  if ( !anActor || !anActor->hasIO() )
     return;
 
   Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
-  //mySelectionMgr->clearSelected();
-  //mySelectionMgr->AddIObject(anIO, false);
   SALOME_ListIO aList;
   aList.Append(anIO);
   mySelectionMgr->setSelectedObjects(aList, false);
@@ -3624,7 +3714,7 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& th
   SMESH::RemoveFilter(aFilterId);
 
   // get vtk ids
-  TColStd_MapOfInteger aMap;
+  SVTK_TVtkIDsMap aMap;
   QList<int>::const_iterator anIter;
   for (anIter = theIds.begin(); anIter != theIds.end(); ++anIter) {
     aMap.Add(*anIter);
@@ -3646,7 +3736,7 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& th
 //=======================================================================
 SMESH::Filter::Criterion SMESHGUI_FilterDlg::createCriterion()
 {
-   SMESH::Filter::Criterion aCriterion;
+  SMESH::Filter::Criterion aCriterion;
 
   aCriterion.Type          = SMESH::FT_Undefined;
   aCriterion.Compare       = SMESH::FT_Undefined;
@@ -3669,7 +3759,7 @@ SMESH::Filter::Criterion SMESHGUI_FilterDlg::createCriterion()
 void SMESHGUI_FilterDlg::onSelectionDone()
 {
   const SALOME_ListIO& aList = mySelector->StoredIObjects();
-  if ( myMesh->_is_nil() && aList.Extent()>0 )
+  if ( myMesh->_is_nil() && aList.Extent() > 0 )
   {
     myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(aList.First());
     if ( !(myMesh->_is_nil()) ) {
@@ -3735,6 +3825,7 @@ void SMESHGUI_FilterDlg::onSelectionDone()
         myTable->SetThreshold(aRow, SMESH::toQStr( grp->GetName() ));
         myTable->SetID       (aRow, anIO->getEntry() );
       }
+      break;
     }
   default: // get a GEOM object
     {