X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_ViscousLayers2D.cxx;h=af66439b64f25703be2deca0144ab1558895fe61;hp=d5b758bda8c4f1e4f4341ad2156e46fd00aa4550;hb=e74c29b7867ca230102fc580d831dda6b81b3b4c;hpb=373690534aa482a4daea68f2a5a14fa9de8a9a1b diff --git a/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx b/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx index d5b758bda..af66439b6 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx @@ -30,6 +30,7 @@ #include "SMDS_SetIterator.hxx" #include "SMESHDS_Group.hxx" #include "SMESHDS_Hypothesis.hxx" +#include "SMESHDS_Mesh.hxx" #include "SMESH_Algo.hxx" #include "SMESH_ComputeError.hxx" #include "SMESH_ControlsDef.hxx" @@ -562,7 +563,7 @@ void StdMeshers_ViscousLayers2D::SetProxyMeshOfEdge( const StdMeshers_FaceSide& // -------------------------------------------------------------------------------- bool StdMeshers_ViscousLayers2D::HasProxyMesh( const TopoDS_Face& face, SMESH_Mesh& mesh ) { - return VISCOUS_2D::_ProxyMeshHolder::FindProxyMeshOfFace( face, mesh ); + return VISCOUS_2D::_ProxyMeshHolder::FindProxyMeshOfFace( face, mesh ).get(); } // -------------------------------------------------------------------------------- SMESH_ComputeErrorPtr @@ -1262,7 +1263,7 @@ void _ViscousBuilder2D::adjustCommonEdge( _PolyLine& LL, _PolyLine& LR ) if ( isR ) LR._lEdges.erase( LR._lEdges.begin()+1, eIt ); else - LL._lEdges.erase( eIt, --LL._lEdges.end() ); + LL._lEdges.erase( eIt+1, --LL._lEdges.end() ); // eIt = isR ? L._lEdges.begin()+1 : L._lEdges.end()-2; // for ( size_t i = 1; i < iLE; ++i, eIt += dIt ) // eIt->_isBlocked = true; @@ -1743,11 +1744,13 @@ bool _ViscousBuilder2D::shrink() } } // loop on FACEs sharing E + // Check if L is an already shrinked seam + if ( adjFace.IsNull() && _helper.IsRealSeam( edgeID )) + if ( L._wire->Edge( L._edgeInd ).Orientation() == TopAbs_FORWARD ) + continue; // Commented as a case with a seam EDGE (issue 0052461) is hard to support // because SMESH_ProxyMesh can't hold different sub-meshes for two // 2D representations of the seam. But such a case is not a real practice one. - // Check if L is an already shrinked seam - // if ( adjFace.IsNull() && _helper.IsRealSeam( edgeID )) // { // for ( int iL2 = iL1-1; iL2 > -1; --iL2 ) // { @@ -2184,7 +2187,7 @@ bool _ViscousBuilder2D::refine() vector< double > segLen( L._lEdges.size() ); segLen[0] = 0.0; - // check if length modification is usefull: look for _LayerEdge's + // check if length modification is useful: look for _LayerEdge's // with length limited due to collisions bool lenLimited = false; for ( size_t iLE = 1; ( iLE < L._lEdges.size()-1 && !lenLimited ); ++iLE ) @@ -2437,6 +2440,19 @@ bool _ViscousBuilder2D::refine() nodeDataVec.front().param = L._wire->FirstU( L._edgeInd ); nodeDataVec.back() .param = L._wire->LastU ( L._edgeInd ); + if (( nodeDataVec[0].node == nodeDataVec.back().node ) && + ( _helper.GetPeriodicIndex() == 1 || _helper.GetPeriodicIndex() == 2 )) // closed EDGE + { + const int iCoord = _helper.GetPeriodicIndex(); + gp_XY uv = nodeDataVec[0].UV(); + uv.SetCoord( iCoord, L._lEdges[0]._uvOut.Coord( iCoord )); + nodeDataVec[0].SetUV( uv ); + + uv = nodeDataVec.back().UV(); + uv.SetCoord( iCoord, L._lEdges.back()._uvOut.Coord( iCoord )); + nodeDataVec.back().SetUV( uv ); + } + _ProxyMeshOfFace::_EdgeSubMesh* edgeSM = getProxyMesh()->GetEdgeSubMesh( L._wire->EdgeID( L._edgeInd )); edgeSM->SetUVPtStructVec( nodeDataVec );