X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_PolylineOperator.cxx;h=d36f5fa115e2c0147d164ae1fa40be0fc21a3273;hb=c5ae2ec8ffa7b30a77bcef4fbb316c6ece4928b5;hp=2e4ffff3315ad5fc26c2634915bcfd4868664d98;hpb=3509da2a6b8ca29cbbee410486f3fa8efaa3e448;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_PolylineOperator.cxx b/src/HYDROData/HYDROData_PolylineOperator.cxx index 2e4ffff3..d36f5fa1 100644 --- a/src/HYDROData/HYDROData_PolylineOperator.cxx +++ b/src/HYDROData/HYDROData_PolylineOperator.cxx @@ -88,8 +88,7 @@ bool HYDROData_PolylineOperator::Split( const Handle( HYDROData_Document )& theD { std::vector aCurvesList; Split( aCurves[i], thePoint, theTolerance, aCurvesList ); - bool isLocalOK = CreatePolylines( theDoc, thePolyline->GetName(), - aCurvesList, true, thePolyline->GetWireColor() ); + bool isLocalOK = CreatePolylines( theDoc, thePolyline, aCurvesList, true ); isOK = isOK && isLocalOK; } return isOK; @@ -132,46 +131,47 @@ 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() ); + { + aName = "merged"; + int anIndex = 1; + QString aNewName = aName + "_" + QString::number(anIndex); + while (!theDoc->FindObjectByName(aNewName).IsNull()) // the object with such a name is not found + { + anIndex++; + aNewName = aName + "_" + QString::number(anIndex); + } + aName = aNewName; + } + + aNewPolyline->SetName(aName); + aNewPolyline->Update(); return true; } @@ -216,7 +216,7 @@ bool HYDROData_PolylineOperator::split( const Handle( HYDROData_Document )& theD for (int aPSI = 0; aPSI < aPSCount; ++aPSI) { HYDROData_TopoCurve aCurve; - DEBTRACE("Initialize curve " << aPSI); + //DEBTRACE("Initialize curve " << aPSI); if (!aCurve.Initialize(aCurves[aPSI])) { continue; @@ -236,17 +236,16 @@ bool HYDROData_PolylineOperator::split( const Handle( HYDROData_Document )& theD aSplitCurves.end(); for (int iw=0; aCIt != aLastCIt; ++aCIt, iw++) { - std::stringstream brepName; - brepName << "theSplitWire_"; - brepName << iw; - brepName << ".brep"; - BRepTools::Write(aCIt->Wire() , brepName.str().c_str() ); - aResult.push_back(aCIt->Wire()); + /*std::stringstream brepName; + brepName << "theSplitWire_"; + brepName << iw; + brepName << ".brep"; + BRepTools::Write(aCIt->Wire() , brepName.str().c_str() );*/ + aResult.push_back(aCIt->Wire()); } } - CreatePolylines( theDoc, thePolyline->GetName(), aResult, true, thePolyline->GetWireColor() ); - //CreatePolylinesSplit( theDoc, thePolyline, aResult, true ); + CreatePolylines( theDoc, thePolyline, aResult, true ); return true; } @@ -295,67 +294,21 @@ void HYDROData_PolylineOperator::Split( } } -//bool HYDROData_PolylineOperator::CreatePolylinesSplit(const Handle( HYDROData_Document )& theDoc, -// const Handle( HYDROData_PolylineXY )& thePolyline, -// const std::vector& theShapes, bool isUseIndices) -//{ -// -// if (theDoc.IsNull()) -// return false; -// -// int nbSections = thePolyline->NbSections(); -// const QString& theNamePrefix = thePolyline->GetName(); -// const QColor& theColor = thePolyline->GetWireColor(); -// -// int n = theShapes.size(); -// DEBTRACE("theShapes.size() "<< n); -// int anIndex = 1; -// for (int i = 0; i < n; i++) -// { -// Handle( HYDROData_PolylineXY ) aPolyline = -// Handle( HYDROData_PolylineXY )::DownCast(theDoc->CreateObject(KIND_POLYLINEXY)); -// if (aPolyline.IsNull()) -// return false; -// -// for (int isec = 0; isec < nbSections; isec++) -// { -// gp_XY p = gp_XY(0, 0); -// //double d = thePolyline->GetMinDistance(isec, p); -// } -// -// if (isUseIndices) -// { -// QString aNewName = theNamePrefix + "_" + QString::number(anIndex); -// while (!theDoc->FindObjectByName(aNewName).IsNull()) // the object with such a name is not found -// { -// anIndex++; -// aNewName = theNamePrefix + "_" + QString::number(anIndex); -// } -// aPolyline->SetName(aNewName); -// } -// else -// { -// aPolyline->SetName(theNamePrefix); -// } -// -// if (theColor.isValid()) -// aPolyline->SetWireColor(theColor); -// } -// return true; -// -//} - bool HYDROData_PolylineOperator::CreatePolylines( const Handle( HYDROData_Document )& theDoc, - const QString& theNamePrefix, + const Handle( HYDROData_PolylineXY )& theOldPolyline, const std::vector& theShapes, - bool isUseIndices, - const QColor& theColor ) + bool isUseIndices ) { if( theDoc.IsNull() ) return false; + if ( theOldPolyline.IsNull() ) + return false; + const QString& theNamePrefix = theOldPolyline->GetName(); + const QColor& theColor = theOldPolyline->GetWireColor(); + int n = theShapes.size(); - DEBTRACE("theShapes.size() "<< n); + //DEBTRACE("theShapes.size() "<< n); int anIndex = 1; for( int i=0; iImportShape(theShapes[i], false); - //aPolyline->SetShape( theShapes[i] ); - + aPolyline->ImportShape(theShapes[i], false, theOldPolyline, false); if( isUseIndices ) {