Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / StdMeshers / StdMeshers_MEFISTO_2D.cxx
index 7537f7aeb8743a686b54b8cb864dc743b3d2e790..08849566e5d1d625fa50ea272490be2a7cb624f2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MEFISTO_2D.cxx
 //           Moved here from SMESH_MEFISTO_2D.cxx
 //  Author : Paul RASCLE, EDF
@@ -31,6 +31,7 @@
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMESHDS_Mesh.hxx"
 #include "SMESH_Comment.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
@@ -78,10 +79,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen * gen):
-  SMESH_2D_Algo(hypId, studyId, gen)
+StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, SMESH_Gen * gen):
+  SMESH_2D_Algo(hypId, gen)
 {
-  MESSAGE("StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D");
   _name = "MEFISTO_2D";
   _shapeType = (1 << TopAbs_FACE);
   _compatibleHypothesis.push_back("MaxElementArea");
@@ -103,7 +103,6 @@ StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen *
 
 StdMeshers_MEFISTO_2D::~StdMeshers_MEFISTO_2D()
 {
-  MESSAGE("StdMeshers_MEFISTO_2D::~StdMeshers_MEFISTO_2D");
 }
 
 //=============================================================================
@@ -188,8 +187,6 @@ bool StdMeshers_MEFISTO_2D::CheckHypothesis
 
 bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
 {
-  MESSAGE("StdMeshers_MEFISTO_2D::Compute");
-
   TopoDS_Face F = TopoDS::Face(aShape.Oriented(TopAbs_FORWARD));
 
   // helper builds quadratic mesh if necessary
@@ -206,7 +203,7 @@ bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
   // get all edges of a face
   TError problem;
   TWireVector wires =
-    StdMeshers_FaceSide::GetFaceWires( F, aMesh, skipMediumNodes, problem, proxyMesh );
+    StdMeshers_FaceSide::GetFaceWires( F, aMesh, skipMediumNodes, problem, _helper, proxyMesh );
   int nbWires = wires.size();
   if ( problem && !problem->IsOK() ) return error( problem );
   if ( nbWires == 0 ) return error( "Problem in StdMeshers_FaceSide::GetFaceWires()");
@@ -283,8 +280,6 @@ bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
 
     if (ierr == 0)
     {
-      MESSAGE("... End Triangulation Generated Triangle Number " << nbt);
-      MESSAGE("                                    Node Number " << nbst);
       StoreResult(nbst, uvst, nbt, nust, mefistoToDS, scalex, scaley);
       isOk = true;
     }
@@ -312,8 +307,6 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh,
                                      const TopoDS_Shape & aShape,
                                      MapShapeNbElems& aResMap)
 {
-  MESSAGE("StdMeshers_MEFISTO_2D::Evaluate");
-
   TopoDS_Face F = TopoDS::Face(aShape.Oriented(TopAbs_FORWARD));
 
   double aLen = 0.0;
@@ -325,7 +318,7 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh,
     TopoDS_Edge E = TopoDS::Edge(exp.Current());
     MapShapeNbElemsItr anIt = aResMap.find( aMesh.GetSubMesh(E) );
     if( anIt == aResMap.end() ) continue;
-    std::vector<int> aVec = (*anIt).second;
+    std::vector<smIdType> aVec = (*anIt).second;
     int nbe = Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
     NbSeg += nbe;
     if(IsFirst) {
@@ -346,7 +339,7 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh,
     }
   }
   if(NbSeg<1) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -368,7 +361,7 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh,
     (int)( anArea/(tmpLength*tmpLength*sqrt(3.)/4) );
   int nbNodes = (int) ( nbFaces*3 - (NbSeg-1)*2 ) / 6;
 
-  std::vector<int> aVec(SMDSEntity_Last);
+  std::vector<smIdType> aVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i] = 0;
   if(IsQuadratic) {
     aVec[SMDSEntity_Quad_Triangle] = nbFaces;
@@ -523,8 +516,7 @@ static bool fixCommonVertexUV (R2 &                 theUV,
         // check if node is medium
         if ( theCreateQuadratic && SMESH_MesherHelper::IsMedium( node, SMDSAbs_Edge ))
           continue;
-        const SMDS_EdgePosition* epos =
-          static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+        SMDS_EdgePositionPtr epos = node->GetPosition();
         double u = epos->GetUParameter();
         if ( u < umin )
           umin = u;
@@ -542,10 +534,10 @@ static bool fixCommonVertexUV (R2 &                 theUV,
   }
   R2 uv0, uv1, uv2;
   uv0.x = thisUV.X();   uv0.y = thisUV.Y();
-  uv1.x = nextUV.X();   uv1.y = nextUV.Y(); 
+  uv1.x = nextUV.X();   uv1.y = nextUV.Y();
   uv2.x = thisUV.X();   uv2.y = thisUV.Y();
 
-  uv1.x *= theScaleX;   uv1.y *= theScaleY; 
+  uv1.x *= theScaleX;   uv1.y *= theScaleY;
 
   if ( fixOverlappedLinkUV( uv0, uv1, uv2 ))
   {
@@ -645,7 +637,11 @@ bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector &                 wires,
       m++;
     }
 
-    int mFirst = mOnVertex.front(), mLast = m - 1;
+    int mFirst = 0, mLast = 0;
+    if (!mOnVertex.empty()) {
+      mFirst = mOnVertex.front();
+      mLast = m - 1;
+    }
     list< int >::iterator mIt = mOnVertex.begin();
     for ( ; mIt != mOnVertex.end(); ++mIt)
     {
@@ -685,7 +681,7 @@ bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector &                 wires,
  */
 //=============================================================================
 
-void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh &        aMesh,
+void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh &        /*aMesh*/,
                                                const TopoDS_Face & aFace,
                                                double &            scalex,
                                                double &            scaley)
@@ -831,7 +827,7 @@ void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
     bool isDegen = ( _helper->HasDegeneratedEdges() &&
                      ( nn[0] == nn[1] || nn[1] == nn[2] || nn[2] == nn[0] ));
 
-    // It was an attemp to fix a problem of a zero area face whose all nodes
+    // It was an attempt to fix a problem of a zero area face whose all nodes
     // are on one staight EDGE. But omitting this face makes a hole in the mesh :(
     // if ( !isDegen && allNodesAreOld )
     //   isDegen = isDegenTria( nn );