X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHUtils%2FSMESH_PolyLine.cxx;h=82ace285912eba5086e0b76940d3397ee20027bc;hp=c252afb2c77515a5c4eb68cead4d9ed37a375f9b;hb=98ec6be586ce93a33c242c6ce1f90b609ce31493;hpb=6ca4db2d7c49474a93e30c02bef83f05b354e540 diff --git a/src/SMESHUtils/SMESH_PolyLine.cxx b/src/SMESHUtils/SMESH_PolyLine.cxx index c252afb2c..82ace2859 100644 --- a/src/SMESHUtils/SMESH_PolyLine.cxx +++ b/src/SMESHUtils/SMESH_PolyLine.cxx @@ -154,7 +154,10 @@ namespace if ( !path.SetCutAtCorner( cornerNode, fIt->next(), plnNorm, plnOrig )) continue; - if ( !myAvoidSet.insert( path.myNode1.Node() ).second || + if ( path.myDot1 == 0 && + !myAvoidSet.insert( path.myNode1.Node() ).second ) + continue; + if ( path.myDot2 == 0 && !myAvoidSet.insert( path.myNode2.Node() ).second ) continue; @@ -494,28 +497,37 @@ namespace << " in a PolySegment " << iSeg ); if ( path.myDot1 == 0. && - path.myDot2 == 0. && - paths.size() - nbPaths >= 2 ) // use a face non-parallel to the plane + path.myDot2 == 0. ) { - const SMDS_MeshElement* goodFace = 0; - for ( size_t j = nbPaths; j < paths.size(); ++j ) + if ( paths.size() - nbPaths >= 2 ) // use a face non-parallel to the plane { - path = paths[j]; - if ( path.Extend( plnNorm, plnOrig )) - goodFace = paths[j].myFace; - else - paths[j].myFace = 0; - } - if ( !goodFace ) - throw SALOME_Exception ( SMESH_Comment("Cant move from point ") << iP+1 - << " of a PolySegment " << iSeg ); - for ( size_t j = nbPaths; j < paths.size(); ++j ) - if ( !paths[j].myFace ) + const SMDS_MeshElement* goodFace = 0; + for ( size_t j = nbPaths; j < paths.size(); ++j ) { - paths[j].myFace = goodFace; - paths[j].myNodeInd1 = goodFace->GetNodeIndex( paths[j].myNode1.Node() ); - paths[j].myNodeInd2 = goodFace->GetNodeIndex( paths[j].myNode2.Node() ); + path = paths[j]; + if ( path.Extend( plnNorm, plnOrig )) + goodFace = paths[j].myFace; + else + paths[j].myFace = 0; } + if ( !goodFace ) + throw SALOME_Exception ( SMESH_Comment("Cant move from point ") << iP+1 + << " of a PolySegment " << iSeg ); + for ( size_t j = nbPaths; j < paths.size(); ++j ) + if ( !paths[j].myFace ) + { + paths[j].myFace = goodFace; + paths[j].myNodeInd1 = goodFace->GetNodeIndex( paths[j].myNode1.Node() ); + paths[j].myNodeInd2 = goodFace->GetNodeIndex( paths[j].myNode2.Node() ); + } + } + else // use the sole found face + { + path = paths.back(); + std::swap( path.myNode1, path.myNode2 ); + std::swap( path.myNodeInd1, path.myNodeInd2 ); + paths.push_back( path ); + } } }