Salome HOME
IPAL0052448: Too thin viscous layers are constructed
[modules/smesh.git] / src / StdMeshers / StdMeshers_Quadrangle_2D.cxx
index f6a7e237902befa95e4973a661d37600a49697e6..f720468f7bd3bfce81d71f3dee855186610ac29c 100644 (file)
@@ -1138,14 +1138,26 @@ FaceQuadStruct::Ptr StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &
       do
       {
         const TopoDS_Edge& edge = *edgeIt;
-        if ( SMESH_Algo::isDegenerated( edge ) && myNeedSmooth )
+        nextSideVReached = nextSideV.IsSame( myHelper->IthVertex( 1, edge ));
+        if ( SMESH_Algo::isDegenerated( edge ))
         {
-          // no side on a degenerated EDGE
+          if ( !myNeedSmooth ) // need to make a side on a degen edge
+          {
+            if ( sideEdges.empty() )
+            {
+              sideEdges.push_back( edge );
+              ++nbUsedDegen;
+              nextSideVReached = true;
+            }
+            else
+            {
+              break;
+            }
+          }
         }
         else
         {
           sideEdges.push_back( edge );
-          nextSideVReached = nextSideV.IsSame( myHelper->IthVertex( 1, edge ));
         }
         ++edgeIt;
       }
@@ -4058,7 +4070,7 @@ bool StdMeshers_Quadrangle_2D::check()
       int iPrev = myHelper->WrapIndex( i-1, wire->NbEdges() );
       const TopoDS_Edge& e1 = wire->Edge( iPrev );
       const TopoDS_Edge& e2 = wire->Edge( i );
-      double angle = myHelper->GetAngle( e1, e2, geomFace );
+      double angle = myHelper->GetAngle( e1, e2, geomFace, wire->FirstVertex( i ));
       if (( maxAngle < angle ) &&
           ( 5.* M_PI/180 < angle && angle < 175.* M_PI/180  ))
       {
@@ -4212,7 +4224,7 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face&          theFace,
     TopoDS_Vertex v = helper.IthVertex( 0, *edge );
     if ( !theConsiderMesh || SMESH_Algo::VertexNode( v, helper.GetMeshDS() ))
     {
-      double angle = SMESH_MesherHelper::GetAngle( prevE, *edge, theFace );
+      double angle = SMESH_MesherHelper::GetAngle( prevE, *edge, theFace, v );
       vertexByAngle.insert( make_pair( angle, v ));
       angleByVertex.Bind( v, angle );
     }