Salome HOME
0021077: EDF 1695 SMESH: Netgen works bad with 1D hypothesis on an elliptic torus
authoreap <eap@opencascade.com>
Thu, 18 Nov 2010 10:10:09 +0000 (10:10 +0000)
committereap <eap@opencascade.com>
Thu, 18 Nov 2010 10:10:09 +0000 (10:10 +0000)
  Make propagation work w/o any hypotheses assigned to edges where an
  1D hypothesis is propagated to.

src/StdMeshers/StdMeshers_Propagation.cxx

index 8b88ce99aef3eb996847f48c10b46bc41896652f..481803839c1d28f16c71d32a8c11115c9e26afc9 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "SMDS_SetIterator.hxx"
 #include "SMESH_Algo.hxx"
+#include "SMESH_Gen.hxx"
 #include "SMESH_HypoFilter.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
@@ -40,7 +41,7 @@
 #include <TopoDS.hxx>
 
 #define DBGMSG(txt) \
-//  cout << txt << endl;
+  //  cout << txt << endl;
 
 using namespace std;
 
@@ -347,6 +348,10 @@ namespace {
             oppSM->ComputeStateEngine( SMESH_subMesh::CLEAN );
             oppData->SetState( IN_CHAIN );
             DBGMSG( "set IN_CHAIN on " << oppSM->GetId() );
+            if ( oppSM->GetAlgoState() != SMESH_subMesh::HYP_OK )
+              // make oppSM check algo state
+              if ( SMESH_Algo* algo = mesh->GetGen()->GetAlgo( *mesh, anOppE ))
+                oppSM->AlgoStateEngine(SMESH_subMesh::ADD_FATHER_ALGO,algo);
           }
           else {
             oppData->SetState( LAST_IN_CHAIN );
@@ -455,6 +460,7 @@ namespace {
 
   void PropagationMgr::Set(SMESH_subMesh * submesh)
   {
+    if ( findData( submesh )) return;
     DBGMSG( "PropagationMgr::Set() on  " << submesh->GetId() );
     EventListenerData* data = new PropagationMgrData();
     submesh->SetEventListener( getListener(), data, submesh );