Salome HOME
#19078 [CEA] Mesh Group - Group on filter
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_FilterDlg.cxx
old mode 100755 (executable)
new mode 100644 (file)
index b55632f..5d7f160
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020  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
@@ -798,7 +798,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 +856,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
@@ -1369,8 +1369,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
@@ -1403,7 +1402,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
@@ -1546,7 +1545,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()
 {
@@ -1572,6 +1571,8 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
                  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) ||
@@ -1618,6 +1619,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:
@@ -1753,6 +1756,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 );
@@ -1792,13 +1796,13 @@ 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 )
   {
@@ -1811,8 +1815,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   case SMESH::FT_Area:
   case SMESH::FT_Volume3D:
   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:
@@ -1823,11 +1826,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;
 
@@ -2054,7 +2060,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 );
 
@@ -2115,7 +2121,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
 {
@@ -2190,6 +2196,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;
   }
@@ -2238,6 +2245,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");
@@ -2265,6 +2273,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");
@@ -2735,7 +2744,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);
 }
@@ -3067,7 +3076,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()
 {
@@ -3193,8 +3202,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));
@@ -3487,7 +3497,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() ||
@@ -3497,7 +3508,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
@@ -3657,7 +3669,7 @@ SMESH_Actor* SMESHGUI_FilterDlg::getActor()
 //=======================================================================
 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();
@@ -3665,7 +3677,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 );
@@ -3678,8 +3691,6 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& th
     return;
 
   Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
-  //mySelectionMgr->clearSelected();
-  //mySelectionMgr->AddIObject(anIO, false);
   SALOME_ListIO aList;
   aList.Append(anIO);
   mySelectionMgr->setSelectedObjects(aList, false);