From d115566909d97a312ee7794c7c55add3f0328f9d Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 4 Oct 2017 19:00:38 +0300 Subject: [PATCH] Throw exception and fix a step case --- src/SMESH/SMESH_MeshEditor.cxx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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 -- 2.39.2