Salome HOME
Merge branch 'agy/arch2_ic0'
[modules/smesh.git] / src / StdMeshers / StdMeshers_Quadrangle_2D.cxx
index 8ecdfa8c5c340ff41b49cccc23421951545818a3..5f4796266bac5fe007d35c442b307c96a5cf9066 100644 (file)
@@ -208,8 +208,8 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis
  */
 //=============================================================================
 
-bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh&         aMesh,
-                                        const TopoDS_Shape& aShape)
+bool StdMeshers_Quadrangle_2D::ComputeSMESH_Mesh&         aMesh,
+                                        const TopoDS_Shape& aShape )
 {
   const TopoDS_Face& F = TopoDS::Face(aShape);
   aMesh.GetSubMesh( F );
@@ -3209,8 +3209,8 @@ bool StdMeshers_Quadrangle_2D::evaluateQuadPref(SMESH_Mesh &        aMesh,
  */
 //=============================================================================
 
-void StdMeshers_Quadrangle_2D::splitQuadFace(SMESHDS_Mesh *       theMeshDS,
-                                             int                  theFaceID,
+void StdMeshers_Quadrangle_2D::splitQuadFace(SMESHDS_Mesh *       /*theMeshDS*/,
+                                             int                  /*theFaceID*/,
                                              const SMDS_MeshNode* theNode1,
                                              const SMDS_MeshNode* theNode2,
                                              const SMDS_MeshNode* theNode3,
@@ -4776,6 +4776,7 @@ bool StdMeshers_Quadrangle_2D::check()
 
     const SMDS_MeshNode* nInFace = 0;
     if ( myHelper->HasSeam() )
+    {
       for ( int i = 0; i < nbN && !nInFace; ++i )
         if ( !myHelper->IsSeamShape( nn[i]->getshapeId() ))
         {
@@ -4784,6 +4785,33 @@ bool StdMeshers_Quadrangle_2D::check()
           if ( myHelper->IsOnSeam( uv ))
             nInFace = NULL;
         }
+    }
+    if ( myHelper->GetPeriodicIndex() && !nInFace )
+    {
+      for ( int i = 0; i < nbN && !nInFace; ++i )
+        if ( fSubMesh->Contains( nn[i] ))
+          nInFace = nn[i];
+      if ( !nInFace )
+        for ( int i = 0; i < nbN && !nInFace; ++i )
+        {
+          SMDS_ElemIteratorPtr fIt = nn[i]->GetInverseElementIterator( SMDSAbs_Face );
+          while ( fIt->more() && !nInFace )
+          {
+            const SMDS_MeshElement* face = fIt->next();
+            if ( !fSubMesh->Contains( face ))
+              continue;
+            for ( int iN = 0, nN = face->NbCornerNodes(); iN < nN; ++iN )
+            {
+              const SMDS_MeshNode* n = face->GetNode( iN );
+              if ( fSubMesh->Contains( n ))
+              {
+                nInFace = n;
+                break;
+              }
+            }
+          }
+        }
+    }
 
     toCheckUV = true;
     for ( int i = 0; i < nbN; ++i )