X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_PolylineOperator.cxx;h=7e44abefa551166741ff52efc984e12951d4047a;hb=e744ba34fd38d6744d11b54cd15b6f86350695b2;hp=612d24f985e09c6dc764661df0e5ce9cfe4b2ada;hpb=2c701f7ccb7e83e06eb3ed6af61739ee46c07392;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_PolylineOperator.cxx b/src/HYDROData/HYDROData_PolylineOperator.cxx index 612d24f9..7e44abef 100644 --- a/src/HYDROData/HYDROData_PolylineOperator.cxx +++ b/src/HYDROData/HYDROData_PolylineOperator.cxx @@ -20,7 +20,9 @@ #include #include +#ifndef LIGHT_MODE #include +#endif #include #include @@ -45,6 +47,7 @@ #include #include #include +#include template void append( std::vector& theList, const std::vector& theList2 ) { @@ -64,6 +67,11 @@ bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theD const gp_Pnt2d& thePoint, double theTolerance ) const { + if (thePolyline.IsNull()) + { + return false; + } + std::vector aPointsList( 1 ); aPointsList[0] = thePoint; std::vector aCurves; @@ -82,11 +90,17 @@ bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theD bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theDoc, const Handle( HYDROData_PolylineXY )& thePolyline, const Handle( HYDROData_PolylineXY )& theTool, - double theTolerance ) const + double theTolerance, + bool& theIsIntersected) const { + if (thePolyline.IsNull() || theTool.IsNull()) + { + return false; + } + HYDROData_SequenceOfObjects aSeq; aSeq.Append( theTool ); - return split( theDoc, thePolyline, aSeq, theTolerance, -1 ); + return split( theDoc, thePolyline, aSeq, theTolerance, -1, theIsIntersected); } bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theDoc, @@ -97,7 +111,8 @@ bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theD for( int i=f; i<=l; i++ ) { Handle( HYDROData_PolylineXY ) aPolyline = Handle( HYDROData_PolylineXY )::DownCast( thePolylines.Value( i ) ); - if( !split( theDoc, aPolyline, thePolylines, theTolerance, i ) ) + bool isIntersected; + if( !split( theDoc, aPolyline, thePolylines, theTolerance, i, isIntersected) ) return false; } return true; @@ -153,8 +168,16 @@ bool HYDROData_PolylineOperator::split( const Handle( HYDROData_Document )& theD const Handle( HYDROData_PolylineXY )& thePolyline, const HYDROData_SequenceOfObjects& theTools, double theTolerance, - int theIgnoreIndex ) const + int theIgnoreIndex, + bool& theIsIntersected) const { + theIsIntersected = false; + + if (thePolyline.IsNull()) + { + return false; + } + std::vector aCurves; GetWires(thePolyline, aCurves); std::vector aToolCurves; @@ -163,11 +186,19 @@ bool HYDROData_PolylineOperator::split( const Handle( HYDROData_Document )& theD { Handle( HYDROData_PolylineXY ) aToolPolyline = Handle( HYDROData_PolylineXY )::DownCast( theTools.Value( i ) ); - std::vector aTCurves; - GetWires(aToolPolyline, aTCurves); - append( aToolCurves, aTCurves); + if (!aToolPolyline.IsNull()) + { + std::vector aTCurves; + GetWires(aToolPolyline, aTCurves); + append( aToolCurves, aTCurves); + } } + if (aToolCurves.empty()) + { + return false; + } + const int aPSCount = aCurves.size(); const int aTSCount = aToolCurves.size(); std::vector aResult; @@ -186,7 +217,7 @@ bool HYDROData_PolylineOperator::split( const Handle( HYDROData_Document )& theD } std::deque aSplittedCurves; - aCurve.Cut(aParams, aSplittedCurves); + theIsIntersected |= aCurve.Cut(aParams, aSplittedCurves); std::deque::const_iterator aCIt = aSplittedCurves.begin(); std::deque::const_iterator aLastCIt = @@ -303,7 +334,9 @@ double HYDROData_PolylineOperator::ReduceDeflection( } Handle(Geom_BSplineCurve) aBSpline2; const bool isClosed = theCurve.IsClosed(); +#ifndef LIGHT_MODE if (!CurveCreator_Utils::constructBSpline(aPs2, isClosed, aBSpline2)) +#endif { return -1; }