Salome HOME
23514: EDF 16031 - SMESH freezes
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_FieldSelectorWdg.cxx
index 3185ea3654b31fe72ba4d3aac378db17aa428db1..91034498099e2bca288b7a9b63f0b97c0eb32f72 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  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
@@ -86,7 +86,7 @@ SMESHGUI_FieldSelectorWdg::SMESHGUI_FieldSelectorWdg( QWidget* p )
  * \brief Retrieves all fields defined on geometry of given meshes
  */
 bool SMESHGUI_FieldSelectorWdg::
-GetAllFeilds(const QList< QPair< SMESH::SMESH_IDSource_var, QString > >& meshes,
+GetAllFields(const QList< QPair< SMESH::SMESH_IDSource_var, QString > >& meshes,
              QList< QPair< GEOM::ListOfFields_var, QString > >&          fields)
 {
   myFields = & fields;
@@ -113,6 +113,19 @@ GetAllFeilds(const QList< QPair< SMESH::SMESH_IDSource_var, QString > >& meshes,
         fields = fieldOp->GetFields( shape );
         for ( size_t iF = 0; iF < fields->length(); ++iF )
         {
+          GEOM::field_data_type dataType = fields[ iF ]->GetDataType();
+          if ( dataType == GEOM::FDT_String )
+            continue;
+          GEOM::ListOfLong_var stepIDs = fields[ iF ]->GetSteps();
+          if ( stepIDs->length() < 1 )
+            continue;
+          GEOM::string_array_var comps = fields[ iF ]->GetComponents();
+          if ( comps->length() < 1 )
+            continue;
+          CORBA::Short dim = fields[iF]->GetDimension();
+          if ( dim < 0 )
+            continue; // "whole shape" field ignored
+
           CORBA::String_var name = fields[iF]->GetName();
           createItem( myTree, name.in(), iF, meshItem );
         }
@@ -153,11 +166,11 @@ GetAllFeilds(const QList< QPair< SMESH::SMESH_IDSource_var, QString > >& meshes,
 /*!
  * \brief Filter off not selected fields from myFields
  */
-bool SMESHGUI_FieldSelectorWdg::GetSelectedFeilds()
+bool SMESHGUI_FieldSelectorWdg::GetSelectedFields()
 {
   int nbSelected = 0;
   if ( myTree->isEnabled() )
-    for ( size_t i = 0; i < myTree->topLevelItemCount(); ++i )
+    for ( int i = 0; i < myTree->topLevelItemCount(); ++i )
     {
       QTreeWidgetItem* meshItem = myTree->topLevelItem( i );
       int iM = meshItem->data( 0, Qt::UserRole ).toInt();
@@ -189,7 +202,7 @@ bool SMESHGUI_FieldSelectorWdg::GetSelectedFeilds()
     }
   else
   {
-    for ( size_t iF = 0; iF < myFields->count(); ++iF )
+    for ( int iF = 0; iF < myFields->count(); ++iF )
     {
       GEOM::ListOfFields& fields = (*myFields)[ iF ].first.inout();
       fields.length( 0 );