]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
merge polylines just creates a new polyline containing all the sections from original...
authorPaul RASCLE <paul.rascle@edf.fr>
Wed, 15 Jun 2016 20:55:41 +0000 (22:55 +0200)
committerPaul RASCLE <paul.rascle@edf.fr>
Wed, 15 Jun 2016 20:55:41 +0000 (22:55 +0200)
src/HYDROData/HYDROData_PolylineOperator.cxx

index 2e4ffff3315ad5fc26c2634915bcfd4868664d98..5dfa0411ecd7ba3344e02c71b44315da6656bf9f 100644 (file)
@@ -132,46 +132,35 @@ bool HYDROData_PolylineOperator::Merge( const Handle( HYDROData_Document )& theD
                                         bool isConnectByNewSegment,
                                         double theTolerance )
 {
-  std::deque<HYDROData_TopoCurve> 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<TopoDS_Wire> aWires;
-    GetWires(aPolyline, aWires);
-    for (std::vector<TopoDS_Wire>::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<TCollection_AsciiString>           aSectNames;
+    NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
+    NCollection_Sequence<bool>                              aSectClosures;
+    aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures );
 
-  TopoDS_Compound aWireSet;
-  BRep_Builder aBuilder;
-  aBuilder.MakeCompound(aWireSet);
-  std::deque<HYDROData_TopoCurve>::iterator aCIt = aMergedCurves.begin();
-  std::deque<HYDROData_TopoCurve>::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<TopoDS_Shape> aPolylines(1);
-  aPolylines[0] = aWireSet;
   QString aName = theName;
   if( aName.isEmpty() )
     aName = "merged";
-  CreatePolylines( theDoc, aName, aPolylines, true, QColor() );
+  aNewPolyline->SetName(aName);
   return true;
 }