Salome HOME
Fix regression of SMESH_TEST/Grids/smesh/imps6/G0
authoreap <eap@opencascade.com>
Thu, 15 Aug 2013 12:10:20 +0000 (12:10 +0000)
committereap <eap@opencascade.com>
Thu, 15 Aug 2013 12:10:20 +0000 (12:10 +0000)
Clear _ImportData::_n2n if it's no more useful

src/StdMeshers/StdMeshers_Import_1D.cxx

index fbbe7198f5bea29e9fa125b3114472005d20e17a..c24c20aac3bd377ae835e24978b6010285d9e9ef 100644 (file)
@@ -182,10 +182,11 @@ namespace // INTERNAL STUFF
       if ( !_importMeshSubDS ) return;
       SMDS_ElemIteratorPtr eIt = _importMeshSubDS->GetElements();
       while ( eIt->more() )
       if ( !_importMeshSubDS ) return;
       SMDS_ElemIteratorPtr eIt = _importMeshSubDS->GetElements();
       while ( eIt->more() )
-        meshDS->RemoveFreeElement( eIt->next(), _importMeshSubDS, /*fromGroups=*/false );
+        meshDS->RemoveFreeElement( eIt->next(), 0, /*fromGroups=*/false );
       SMDS_NodeIteratorPtr nIt = _importMeshSubDS->GetNodes();
       while ( nIt->more() )
       SMDS_NodeIteratorPtr nIt = _importMeshSubDS->GetNodes();
       while ( nIt->more() )
-        meshDS->RemoveFreeNode( nIt->next(), _importMeshSubDS, /*fromGroups=*/false );
+        meshDS->RemoveFreeNode( nIt->next(), 0, /*fromGroups=*/false );
+      _importMeshSubDS->Clear();
       _n2n.clear();
       _e2e.clear();
     }
       _n2n.clear();
       _e2e.clear();
     }
@@ -266,6 +267,7 @@ namespace // INTERNAL STUFF
                               const SMESH_Hypothesis*         hyp);
     void removeSubmesh( SMESH_subMesh* sm, _ListenerData* data );
     void clearSubmesh ( SMESH_subMesh* sm, _ListenerData* data, bool clearAllSub );
                               const SMESH_Hypothesis*         hyp);
     void removeSubmesh( SMESH_subMesh* sm, _ListenerData* data );
     void clearSubmesh ( SMESH_subMesh* sm, _ListenerData* data, bool clearAllSub );
+    void clearN2N     ( SMESH_Mesh* tgtMesh );
 
     // mark sm as missing src hyp with valid groups
     static void waitHypModification(SMESH_subMesh* sm)
 
     // mark sm as missing src hyp with valid groups
     static void waitHypModification(SMESH_subMesh* sm)
@@ -347,6 +349,18 @@ namespace // INTERNAL STUFF
       }
   }
   //--------------------------------------------------------------------------------
       }
   }
   //--------------------------------------------------------------------------------
+  /*!
+   * \brief Clear _ImportData::_n2n.
+   *        _n2n is usefull within one mesh.Compute() only
+   */
+  void _Listener::clearN2N( SMESH_Mesh* tgtMesh )
+  {
+    list< _ImportData >& dList = get()->_tgtMesh2ImportData[tgtMesh];
+    list< _ImportData >::iterator d = dList.begin();
+    for ( ; d != dList.end(); ++d )
+      d->_n2n.clear();
+  }
+  //--------------------------------------------------------------------------------
   /*!
    * \brief Clear submeshes and remove imported mesh and/or groups if necessary
    *  \param sm - cleared submesh
   /*!
    * \brief Clear submeshes and remove imported mesh and/or groups if necessary
    *  \param sm - cleared submesh
@@ -448,6 +462,8 @@ namespace // INTERNAL STUFF
         default:;
         }
       }
         default:;
         }
       }
+      if ( !data->mySubMeshes.empty() )
+        clearN2N( data->mySubMeshes.front()->GetFather() );
     }
     else // event of Import submesh
     {
     }
     else // event of Import submesh
     {
@@ -496,6 +512,10 @@ namespace // INTERNAL STUFF
                 d->_computedSubM.insert( *smIt);
           }
       }
                 d->_computedSubM.insert( *smIt);
           }
       }
+      // Clear _ImportData::_n2n if it's no more useful, i.e. when
+      // the event is not within mesh.Compute()
+      if ( SMESH_subMesh::ALGO_EVENT == eventType )
+        clearN2N( subMesh->GetFather() );
     }
   }
 
     }
   }