Salome HOME
IPAL54025: MG-CADSurf regression: no edges generated on seam SHAPER_2.7.0 V8_3_0a2 V8_3_0b1
authoreap <eap@opencascade.com>
Tue, 7 Mar 2017 18:37:35 +0000 (21:37 +0300)
committereap <eap@opencascade.com>
Tue, 7 Mar 2017 18:37:35 +0000 (21:37 +0300)
src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx

index 19e1c59a531ef7209e131e1f181503333d25cb8f..28b17917ca8329afdce9389f7f00f7a7c27c786e 100644 (file)
@@ -1579,19 +1579,20 @@ namespace
     const TopoDS_Face& makeProxyFace( SMESH_ProxyMesh::Ptr& viscousMesh,
                                       const TopoDS_Face&    origFace)
     {
-      // get data of nodes on inner boundary of viscous layers
       SMESH_Mesh* origMesh = viscousMesh->GetMesh();
+
+      SMESH_MesherHelper helper( *origMesh );
+      helper.SetSubShape( origFace );
+      const bool hasSeam = helper.HasRealSeam();
+
+      // get data of nodes on inner boundary of viscous layers
       TError err;
       TSideVector wireVec = StdMeshers_FaceSide::GetFaceWires(origFace, *origMesh,
                                                               /*skipMediumNodes = */true,
-                                                              err, viscousMesh );
+                                                              err, &helper, viscousMesh );
       if ( err && err->IsKO() )
         throw *err.get(); // it should be caught at SMESH_subMesh
 
-      SMESH_MesherHelper helper( *origMesh );
-      helper.SetSubShape( origFace );
-      const bool hasSeam = helper.HasRealSeam();
-
       // proxy nodes and corresponding tmp VERTEXes
       std::vector<const SMDS_MeshNode*> origNodes;
       std::vector<TopoDS_Vertex>        tmpVertex;
@@ -2210,11 +2211,13 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
       // IMP23368. Do not set tag to an EDGE shared by FACEs of a hyper-patch
       bool isInHyperPatch = false;
       {
-        std::set< int > faceTags;
+        std::set< int > faceTags, faceIDs;
         TopTools_ListIteratorOfListOfShape fIt( e2ffmap.FindFromKey( e ));
         for ( ; fIt.More(); fIt.Next() )
         {
           int faceTag = meshDS->ShapeToIndex( fIt.Value() );
+          if ( !faceIDs.insert( faceTag ).second )
+            continue; // a face encounters twice for a seam edge
           int hpTag   = BLSURFPlugin_Hypothesis::GetHyperPatchTag( faceTag, _hypothesis );
           if ( !faceTags.insert( hpTag ).second )
           {