X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_MEFISTO_2D.cxx;h=f4ef0198d114575598259d6a3759533eec7cac06;hb=178d2ef645d103ce49228cde6ed35488144ed446;hp=f842eb87b01bc6bd88d813f90ffeebfbc6202084;hpb=bb0c89d5a835e16cb265fd475e49cfb40c3a885f;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx index f842eb87b..f4ef0198d 100644 --- a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx +++ b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -303,7 +304,7 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh, TopoDS_Face F = TopoDS::Face(aShape.Oriented(TopAbs_FORWARD)); double aLen = 0.0; - double NbSeg = 0; + int NbSeg = 0; bool IsQuadratic = false; bool IsFirst = true; TopExp_Explorer exp(F,TopAbs_EDGE); @@ -312,10 +313,10 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh, MapShapeNbElemsItr anIt = aResMap.find( aMesh.GetSubMesh(E) ); if( anIt == aResMap.end() ) continue; std::vector aVec = (*anIt).second; - int nbe = Max(aVec[1],aVec[2]); + int nbe = Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]); NbSeg += nbe; if(IsFirst) { - IsQuadratic = ( aVec[2] > aVec[1] ); + IsQuadratic = ( aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge] ); IsFirst = false; } double a,b; @@ -331,27 +332,38 @@ bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh, P1 = P2; } } + if(NbSeg<1) { + std::vector aResVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; iGetComputeError(); + smError.reset( new SMESH_ComputeError(COMPERR_ALGO_FAILED, + "Submesh can not be evaluated",this)); + return false; + } aLen = aLen/NbSeg; // middle length - _edgeLength = DBL_MAX; + _edgeLength = Precision::Infinite(); double tmpLength = Min( _edgeLength, aLen ); GProp_GProps G; BRepGProp::SurfaceProperties(aShape,G); double anArea = G.Mass(); - int nbFaces = (int) anArea/(tmpLength*tmpLength*sqrt(3)/4); + int nbFaces = Precision::IsInfinite( tmpLength ) ? 0 : + (int)( anArea/(tmpLength*tmpLength*sqrt(3.)/4) ); int nbNodes = (int) ( nbFaces*3 - (NbSeg-1)*2 ) / 6; - std::vector aVec(17); - for(int i=0; i<17; i++) aVec[i] = 0; + std::vector aVec(SMDSEntity_Last); + for(int i=SMDSEntity_Node; i(node->GetPosition().get()); + static_cast(node->GetPosition()); double u = epos->GetUParameter(); if ( u < umin ) umin = u;