Salome HOME
Porting to DEV version of OCCT.
[modules/smesh.git] / src / StdMeshers / StdMeshers_Quadrangle_2D.cxx
index e2df2ddd7951e245565f47b93260f9513380df51..dca977adc9b0cabc2504736e1c47b1fa22c86f05 100644 (file)
@@ -51,7 +51,6 @@
 #include <Geom_Surface.hxx>
 #include <NCollection_DefineArray2.hxx>
 #include <Precision.hxx>
-#include <Quantity_Parameter.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
 #include <TColStd_SequenceOfReal.hxx>
 #include <TColgp_SequenceOfXY.hxx>
@@ -230,7 +229,7 @@ bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh&         aMesh,
   myNeedSmooth = false;
   myCheckOri   = false;
 
-  FaceQuadStruct::Ptr quad = CheckNbEdges( aMesh, F, /*considerMesh=*/true );
+  FaceQuadStruct::Ptr quad = CheckNbEdges( aMesh, F, /*considerMesh=*/true, myHelper );
   if (!quad)
     return false;
   myQuadList.clear();
@@ -1052,7 +1051,8 @@ static bool twoEdgesMeatAtVertex(const TopoDS_Edge& e1,
 
 FaceQuadStruct::Ptr StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &         aMesh,
                                                            const TopoDS_Shape & aShape,
-                                                           const bool           considerMesh)
+                                                           const bool           considerMesh,
+                                                           SMESH_MesherHelper*  aFaceHelper)
 {
   if ( !myQuadList.empty() && myQuadList.front()->face.IsSame( aShape ))
     return myQuadList.front();
@@ -1071,6 +1071,7 @@ FaceQuadStruct::Ptr StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &
   }
 
   // find corner vertices of the quad
+  myHelper = ( aFaceHelper && aFaceHelper->GetSubShape() == aShape ) ? aFaceHelper : NULL;
   vector<TopoDS_Vertex> corners;
   int nbDegenEdges, nbSides = getCorners( F, aMesh, edges, corners, nbDegenEdges, considerMesh );
   if ( nbSides == 0 )
@@ -1096,7 +1097,7 @@ FaceQuadStruct::Ptr StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &
           sideEdges.push_back( *edgeIt++ );
       if ( !sideEdges.empty() )
         quad->side.push_back( StdMeshers_FaceSide::New(F, sideEdges, &aMesh, iSide < QUAD_TOP_SIDE,
-                                                       ignoreMediumNodes, myProxyMesh));
+                                                       ignoreMediumNodes, myHelper, myProxyMesh));
       else
         --iSide;
     }
@@ -1150,7 +1151,7 @@ FaceQuadStruct::Ptr StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &
       {
         quad->side.push_back
           ( StdMeshers_FaceSide::New( F, sideEdges, &aMesh, iSide < QUAD_TOP_SIDE,
-                                      ignoreMediumNodes, myProxyMesh ));
+                                      ignoreMediumNodes, myHelper, myProxyMesh ));
         ++iSide;
       }
       if ( quad->side.size() == 4 )
@@ -3986,7 +3987,7 @@ void StdMeshers_Quadrangle_2D::smooth (FaceQuadStruct::Ptr quad)
         }
       }
 
-  // define refernce orientation in 2D
+  // define reference orientation in 2D
   TNo2SmooNoMap::iterator n2sn = smooNoMap.begin();
   for ( ; n2sn != smooNoMap.end(); ++n2sn )
     if ( !n2sn->second._triangles.empty() )
@@ -4110,7 +4111,7 @@ bool StdMeshers_Quadrangle_2D::check()
   {
     TError err;
     TSideVector wireVec =
-      StdMeshers_FaceSide::GetFaceWires( geomFace, *myHelper->GetMesh(), true, err );
+      StdMeshers_FaceSide::GetFaceWires( geomFace, *myHelper->GetMesh(), true, err, myHelper );
     StdMeshers_FaceSidePtr wire = wireVec[0];
 
     // find a right angle VERTEX
@@ -4251,7 +4252,10 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face&          theFace,
   theNbDegenEdges = 0;
 
   SMESH_MesherHelper helper( theMesh );
-  StdMeshers_FaceSide faceSide( theFace, theWire, &theMesh, /*isFwd=*/true, /*skipMedium=*/true);
+  if ( myHelper )
+    helper.CopySubShapeInfo( *myHelper );
+  StdMeshers_FaceSide faceSide( theFace, theWire, &theMesh,
+                                /*isFwd=*/true, /*skipMedium=*/true, &helper );
 
   // sort theVertices by angle
   multimap<double, TopoDS_Vertex> vertexByAngle;