From b2048859a28c67d53ef30410687605f0870124ee Mon Sep 17 00:00:00 2001 From: Paul RASCLE Date: Wed, 15 Jun 2016 22:55:41 +0200 Subject: [PATCH] merge polylines just creates a new polyline containing all the sections from original polylines --- src/HYDROData/HYDROData_PolylineOperator.cxx | 47 ++++++++------------ 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/src/HYDROData/HYDROData_PolylineOperator.cxx b/src/HYDROData/HYDROData_PolylineOperator.cxx index 2e4ffff3..5dfa0411 100644 --- a/src/HYDROData/HYDROData_PolylineOperator.cxx +++ b/src/HYDROData/HYDROData_PolylineOperator.cxx @@ -132,46 +132,35 @@ bool HYDROData_PolylineOperator::Merge( const Handle( HYDROData_Document )& theD bool isConnectByNewSegment, double theTolerance ) { - std::deque aMergedCurves; + Handle( HYDROData_PolylineXY ) aNewPolyline = + Handle( HYDROData_PolylineXY )::DownCast( theDoc->CreateObject( KIND_POLYLINEXY ) ); + int ins =0; + HYDROData_SequenceOfObjects::Iterator aPIt(thePolylines); - for (; aPIt.More(); aPIt.Next()) + + for (int ip=1; aPIt.More(); aPIt.Next(), ip++) { Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast(aPIt.Value()); - std::vector aWires; - GetWires(aPolyline, aWires); - for (std::vector::const_iterator aWIt = aWires.begin(), - aLastWIt = aWires.end(); aWIt != aLastWIt; ++aWIt) - { - const Standard_Boolean aResult = !isConnectByNewSegment ? - HYDROData_TopoCurve::Merge(theTolerance, *aWIt, aMergedCurves) : - HYDROData_TopoCurve::Connect(theTolerance, *aWIt, aMergedCurves); - if (!aResult) - { - return false; - } - } - } + NCollection_Sequence aSectNames; + NCollection_Sequence aSectTypes; + NCollection_Sequence aSectClosures; + aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures ); - TopoDS_Compound aWireSet; - BRep_Builder aBuilder; - aBuilder.MakeCompound(aWireSet); - std::deque::iterator aCIt = aMergedCurves.begin(); - std::deque::iterator aLastCIt = aMergedCurves.end(); - for (; aCIt != aLastCIt; ++aCIt) - { - if (!aCIt->IsEmpty()) + for ( int i = 1, n = aSectNames.Size(); i <= n; ++i ) { - aBuilder.Add(aWireSet, aCIt->Wire()); + const TCollection_AsciiString& aSectName = aSectNames.Value( i ) + "_" + ip; + const HYDROData_PolylineXY::SectionType& aSectType = aSectTypes.Value( i ); + bool aSectClosure = aSectClosures.Value( i ); + aNewPolyline->AddSection(aSectName, aSectType, aSectClosure); + HYDROData_PolylineXY::PointsList aPointsList = aPolyline->GetPoints(i-1, false); + aNewPolyline->SetPoints(ins++, aPointsList); } } - - std::vector aPolylines(1); - aPolylines[0] = aWireSet; QString aName = theName; if( aName.isEmpty() ) aName = "merged"; - CreatePolylines( theDoc, aName, aPolylines, true, QColor() ); + aNewPolyline->SetName(aName); return true; } -- 2.39.2