Salome HOME
#16648 [CEA] RadialQuadrangle algorithm hypothesis change requires a Clear Mesh Data...
[modules/smesh.git] / src / SMESH / SMESH_Algo.cxx
index d0ee85cb8fe61a136f752405ef01baf5f721d9ee..4de1879f1c231c776c864765bf238f28eebaab66 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  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
@@ -173,8 +173,8 @@ const SMESH_Algo::Features& SMESH_Algo::GetFeatures( const std::string& algoType
  */
 //=============================================================================
 
-SMESH_Algo::SMESH_Algo (int hypId, int studyId, SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+SMESH_Algo::SMESH_Algo (int hypId, SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _compatibleAllHypFilter = _compatibleNoAuxHypFilter = NULL;
   _onlyUnaryInput = _requireDiscreteBoundary = _requireShape = true;
@@ -202,26 +202,26 @@ SMESH_Algo::~SMESH_Algo()
  */
 //=============================================================================
 
-SMESH_0D_Algo::SMESH_0D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_0D_Algo::SMESH_0D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_VERTEX);
   _type = ALGO_0D;
 }
-SMESH_1D_Algo::SMESH_1D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_1D_Algo::SMESH_1D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_EDGE);
   _type = ALGO_1D;
 }
-SMESH_2D_Algo::SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_2D_Algo::SMESH_2D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_FACE);
   _type = ALGO_2D;
 }
-SMESH_3D_Algo::SMESH_3D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_3D_Algo::SMESH_3D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_SOLID);
   _type = ALGO_3D;
@@ -263,6 +263,10 @@ SMESH_Algo::GetUsedHypothesis(SMESH_Mesh &         aMesh,
                               const bool           ignoreAuxiliary) const
 {
   SMESH_Algo* me = const_cast< SMESH_Algo* >( this );
+
+  std::list<const SMESHDS_Hypothesis *> savedHyps; // don't delete the list if 
+  savedHyps.swap( me->_usedHypList );              // it does not change (#16578)
+
   me->_usedHypList.clear();
   if ( const SMESH_HypoFilter* filter = GetCompatibleHypoFilter( ignoreAuxiliary ))
   {
@@ -270,6 +274,9 @@ SMESH_Algo::GetUsedHypothesis(SMESH_Mesh &         aMesh,
     if ( ignoreAuxiliary && _usedHypList.size() > 1 )
       me->_usedHypList.clear(); //only one compatible hypothesis allowed
   }
+  if ( _usedHypList == savedHyps )
+    savedHyps.swap( me->_usedHypList );
+
   return _usedHypList;
 }
 
@@ -287,10 +294,17 @@ SMESH_Algo::GetAppliedHypothesis(SMESH_Mesh &         aMesh,
                                  const bool           ignoreAuxiliary) const
 {
   SMESH_Algo* me = const_cast< SMESH_Algo* >( this );
+
+  std::list<const SMESHDS_Hypothesis *> savedHyps; // don't delete the list if 
+  savedHyps.swap( me->_appliedHypList );           // it does not change (#16578)
+
   me->_appliedHypList.clear();
   if ( const SMESH_HypoFilter* filter = GetCompatibleHypoFilter( ignoreAuxiliary ))
     aMesh.GetHypotheses( aShape, *filter, me->_appliedHypList, false );
 
+  if ( _appliedHypList == savedHyps )
+    savedHyps.swap( me->_appliedHypList );
+
   return _appliedHypList;
 }
 
@@ -751,7 +765,7 @@ SMESH_Algo::EMeshError SMESH_Algo::GetMeshError(SMESH_subMesh* subMesh)
     if ( !fIt->more() )
       return MEr_EMPTY;
 
-    // We check that only links on EDGEs encouter once, the rest links, twice
+    // We check that only links on EDGEs encounter once, the rest links, twice
     set< SMESH_TLink > links;
     while ( fIt->more() )
     {