From: eap Date: Wed, 4 Oct 2017 16:00:38 +0000 (+0300) Subject: Throw exception and fix a step case X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d115566909d97a312ee7794c7c55add3f0328f9d;p=modules%2Fsmesh.git Throw exception and fix a step case --- diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx index 9bc9371ee..6accfe3d1 100644 --- a/src/SMESH/SMESH_MeshEditor.cxx +++ b/src/SMESH/SMESH_MeshEditor.cxx @@ -13177,7 +13177,8 @@ namespace // utils for MakePolyLine throw SALOME_Exception(LOCALIZED( "Infinite loop in MakePolyLine()")); } - return; + if ( myPaths[ iSeg ].myPoints.empty() ) + throw SALOME_Exception( SMESH_Comment("Can't find a full path for PolySegment #") << iSeg ); } // PolyPathCompute::Compute() @@ -13227,15 +13228,16 @@ void SMESH_MeshEditor::MakePolyLine( TListOfPolySegments& theSegments, gp_XYZ pMid = 0.5 * ( p1 + p2 ); const SMDS_MeshElement* face; polySeg.myMidProjPoint = searcher->Project( pMid, SMDSAbs_Face, &face ); + polySeg.myVector = polySeg.myMidProjPoint.XYZ() - pMid; - if ( polySeg.myMidProjPoint.Distance( pMid ) < Precision::Confusion() ) - { - SMESH_MeshAlgos::FaceNormal( face, const_cast< gp_XYZ& >( polySeg.myVector.XYZ() )); - polySeg.myMidProjPoint = pMid + polySeg.myVector.XYZ() * ( p1 - p2 ).Modulus() * planarCoef; - } - else + gp_XYZ faceNorm; + SMESH_MeshAlgos::FaceNormal( face, faceNorm ); + + if ( polySeg.myVector.Magnitude() < Precision::Confusion() || + polySeg.myVector * faceNorm < Precision::Confusion() ) { - polySeg.myVector = polySeg.myMidProjPoint.XYZ() - pMid; + polySeg.myVector = faceNorm; + polySeg.myMidProjPoint = pMid + faceNorm * ( p1 - p2 ).Modulus() * planarCoef; } } else