Salome HOME
Fix for SMESH::FT_BallDiameter
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_FilterDlg.cxx
index df5618fc2b223224094f732b318fe3f6af22c96a..37e1ae1b0cb0ceb0b24d6bcc7f58603650ad8006 100755 (executable)
@@ -1569,7 +1569,8 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
                    aCriterion != SMESH::FT_OverConstrainedFace &&
                    aCriterion != SMESH::FT_OverConstrainedVolume)
                    ||
-                   aCriterion == SMESH::FT_CoplanarFaces);
+                   aCriterion == SMESH::FT_CoplanarFaces ||
+                   aCriterion == SMESH::FT_EqualNodes);
   
   if (!myAddWidgets.contains(anItem))
   {
@@ -1608,6 +1609,7 @@ const char* SMESHGUI_FilterTable::getPrecision( const int aType )
   case SMESH::FT_Length2D:
   case SMESH::FT_MaxElementLength2D:
   case SMESH::FT_MaxElementLength3D:
+  case SMESH::FT_BallDiameter:
     retval = "length_precision"; break;
   case SMESH::FT_Volume3D:
     retval = "vol_precision"; break;
@@ -1799,7 +1801,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   case SMESH::FT_Volume3D:
   case SMESH::FT_MaxElementLength2D:
   case SMESH::FT_MaxElementLength3D:
-    anIsDoubleCriterion = true; nbCompareSigns = 3; break;
+    anIsDoubleCriterion = true; break;
 
   case SMESH::FT_FreeBorders:
   case SMESH::FT_FreeEdges:
@@ -1933,6 +1935,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
       DoubleSpinItem* dblSpin = new DoubleSpinItem( 0 );
       dblSpin->setPrecision( aPrecision );
       aTable->setItem( row, 2, dblSpin );
+      nbCompareSigns = 3;
     }
     else // --------------------------------------------------------------QTableWidgetItem
     {
@@ -1970,6 +1973,10 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   {
     isThresholdEditable = true;
   }
+  if ( !isThresholdEditable )
+  {
+    aTable->setItem( row, 2, new QTableWidgetItem() );
+  }
   aTable->setEditable( isThresholdEditable, row, 2);
 
 
@@ -3323,6 +3330,8 @@ bool SMESHGUI_FilterDlg::createFilter (const int theType)
     aCriteria[ i ] = aCriterion;
   }
 
+  if ( !myFilter[ theType ]->_is_nil() )
+    myFilter[ theType ]->UnRegister();
   myFilter[ theType ] = aFilterMgr->CreateFilter();
   myFilter[ theType ]->SetCriteria(aCriteria.inout());
 
@@ -3356,9 +3365,29 @@ SMESH::Filter_var SMESHGUI_FilterDlg::GetFilter() const
 
 void SMESHGUI_FilterDlg::SetFilter(SMESH::Filter_var filter, int type)
 {
+  if ( !filter->_is_nil() )
+    filter->Register();
+  if ( !myFilter[ type ]->_is_nil() )
+    myFilter[ type ]->UnRegister();
+
   myFilter[ type ] = filter;
 }
 
+//================================================================================
+/*!
+ * \brief call UnRegister() for myFilter's
+ */
+//================================================================================
+
+void SMESHGUI_FilterDlg::UnRegisterFilters()
+{
+  QMap< int, SMESH::Filter_var >::iterator i_f = myFilter.begin();
+  for ( ; i_f != myFilter.end(); ++i_f )
+    if ( !i_f.value()->_is_nil() )
+      i_f.value()->UnRegister();
+  myFilter.clear();
+}
+
 //=======================================================================
 // name    : SMESHGUI_FilterDlg::insertFilterInViewer
 // Purpose : Insert filter in viewer