X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_PolylineOperator.cxx;h=0bc2d326069380329d9f92e0bb4d15626c24eff5;hb=545854182f0363f61284d5abe34c3627d4f3b088;hp=c8bc099f76d36f74f36574a11ef2743d82072f3b;hpb=e3000ba337d23a437393722a865e2074609ef51a;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_PolylineOperator.cxx b/src/HYDROData/HYDROData_PolylineOperator.cxx index c8bc099f..0bc2d326 100644 --- a/src/HYDROData/HYDROData_PolylineOperator.cxx +++ b/src/HYDROData/HYDROData_PolylineOperator.cxx @@ -19,8 +19,11 @@ #include #include #include +#include +#ifndef LIGHT_MODE #include +#endif #include #include @@ -44,7 +47,9 @@ #include #include #include -#include +#include +#include +#include template void append( std::vector& theList, const std::vector& theList2 ) { @@ -77,8 +82,9 @@ bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theD for( int i=0, n=aCurves.size(); i aCurvesList; - Split(aCurves[i], thePoint, theTolerance, aCurvesList); - bool isLocalOK = CreatePolylines( theDoc, thePolyline->GetName(), aCurvesList, true ); + Split( aCurves[i], thePoint, theTolerance, aCurvesList ); + bool isLocalOK = CreatePolylines( theDoc, thePolyline->GetName(), + aCurvesList, true, thePolyline->GetWireColor() ); isOK = isOK && isLocalOK; } return isOK; @@ -87,7 +93,8 @@ 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()) { @@ -96,7 +103,7 @@ bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theD 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, @@ -107,7 +114,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; @@ -155,7 +163,7 @@ bool HYDROData_PolylineOperator::Merge( const Handle( HYDROData_Document )& theD std::vector aPolylines(1); aPolylines[0] = aWireSet; - CreatePolylines(theDoc, theName, aPolylines, false); + CreatePolylines( theDoc, theName, aPolylines, false, QColor() ); return true; } @@ -163,8 +171,11 @@ 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; @@ -209,7 +220,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 = @@ -220,7 +231,7 @@ bool HYDROData_PolylineOperator::split( const Handle( HYDROData_Document )& theD } } - CreatePolylines(theDoc, thePolyline->GetName(), aResult, true); + CreatePolylines( theDoc, thePolyline->GetName(), aResult, true, thePolyline->GetWireColor() ); return true; } @@ -272,7 +283,8 @@ void HYDROData_PolylineOperator::Split( bool HYDROData_PolylineOperator::CreatePolylines( const Handle( HYDROData_Document )& theDoc, const QString& theNamePrefix, const std::vector& theShapes, - bool isUseIndices ) + bool isUseIndices, + const QColor& theColor ) { if( theDoc.IsNull() ) return false; @@ -299,6 +311,9 @@ bool HYDROData_PolylineOperator::CreatePolylines( const Handle( HYDROData_Docume { aPolyline->SetName( theNamePrefix ); } + + if( theColor.isValid() ) + aPolyline->SetWireColor( theColor ); } return true; } @@ -326,7 +341,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; } @@ -402,3 +419,43 @@ double HYDROData_PolylineOperator::ReduceDeflection( } return aMaxDefl; } + +bool HYDROData_PolylineOperator::Extract( const Handle(HYDROData_Document)& theDocument, + const Handle(HYDROData_Object)& theObject ) +{ + if( theObject.IsNull() || theDocument.IsNull() ) + return false; + + QList aBoundShapes; + QStringList aBoundNames; + + theObject->GetBoundaries( aBoundShapes, aBoundNames ); + + for( int i=0, n=aBoundShapes.size(); iCreateObject( KIND_POLYLINEXY ) ); + + if( aPolyline.IsNull() ) + return false; + + aPolyline->SetShape( aShape ); + + int anIndex = 0; + QString aName = aBoundName; + while( !theDocument->FindObjectByName( aName ).IsNull() ) + { + anIndex++; + aName = aBoundName + "_" + QString::number( anIndex ); + } + aPolyline->SetName( aName ); + } + + return true; +}