X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_PolylineXY.cxx;h=fc97524992fc8faa9c0e97234727ab7e7d6fbe6d;hb=a95289fabbb6fbf6f32c06207422c65aafd5bd65;hp=4c223307635e1e50ce1d753099c394e41498a836;hpb=e77a4312d0891c252baac0e1dcac298bb7bdeb72;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_PolylineXY.cxx b/src/HYDROData/HYDROData_PolylineXY.cxx index 4c223307..fc975249 100644 --- a/src/HYDROData/HYDROData_PolylineXY.cxx +++ b/src/HYDROData/HYDROData_PolylineXY.cxx @@ -500,44 +500,49 @@ bool convertEdgesToSections( const TopoDS_Edge& double d1= ProjectPointToCurve(aEndPs[1].XYZ(), adaptorOldCurve,p[1]); double d2= ProjectPointToCurve(midPnt.XYZ(), adaptorOldCurve, p[2]); DEBTRACE("d0: "< pmax) + { + pmin = p[1]; + pmax = p[0]; + forward = false; + } } else // old section closed: check if we use first or last points... { - if((pmin < pmax) and((abs(pmin - pfirst)> 1.e-3) and (abs(pmax - plast) >1.e-3))) // internal points forward + if((pmin < pmax) && ((abs(pmin - pfirst)> 1.e-3) && (abs(pmax - plast) >1.e-3))) // internal points forward forward = true; - else if ((pmin > pmax) and((abs(pmin - plast)> 1.e-3) and (abs(pmax - pfirst) >1.e-3))) // internal points reverse + else if ((pmin > pmax) && ((abs(pmin - plast)> 1.e-3) && (abs(pmax - pfirst) >1.e-3))) // internal points reverse { pmin = p[1]; pmax = p[0]; forward = false; } - else if ((abs(pmin - plast) <1.e-3) and (p[2] < pmax)) // forward, replace pmin par pfirst + else if ((abs(pmin - plast) <1.e-3) && (p[2] < pmax)) // forward, replace pmin par pfirst pmin = pfirst; - else if ((abs(pmin - plast) <1.e-3) and (p[2] > pmax)) // reverse + else if ((abs(pmin - plast) <1.e-3) && (p[2] > pmax)) // reverse { pmin = p[1]; pmax = p[0]; forward = false; } - else if ((abs(pmax - pfirst) <1.e-3) and (p[2] < pmin)) // reverse + else if ((abs(pmax - pfirst) <1.e-3) && (p[2] < pmin)) // reverse { pmin = p[1]; pmax = p[0]; forward = false; } - else if ((abs(pmax - pfirst) <1.e-3) and (p[2] > pmin)) // forward, replace pmax par plast + else if ((abs(pmax - pfirst) <1.e-3) && (p[2] > pmin)) // forward, replace pmax par plast pmax = plast; } + DEBTRACE("forward: "<< forward << " pmin " << pmin << " pmax " << pmax); HYDROData_PolylineXY::Point aFirstPoint, aLastPoint; if (forward) { @@ -553,6 +558,7 @@ bool convertEdgesToSections( const TopoDS_Edge& HYDROData_PolylineXY::PointsList aSectPoints = theOldPolyline->GetPoints(isec, false); int nbPoints = aSectPoints.Length(); + DEBTRACE("nbPoints " << nbPoints); if (forward) for (int i=1; i<=nbPoints; i++) { @@ -560,7 +566,7 @@ bool convertEdgesToSections( const TopoDS_Edge& gp_XYZ p(aPoint.X(), aPoint.Y(), 0); double param =-1; double d = ProjectPointToCurve(p, adaptorOldCurve, param); - if ((param > pmin) and (param < pmax)) + if ((param > pmin) && (param < pmax)) { DEBTRACE("param: " << param); aPointsList.Append(aPoint); @@ -573,7 +579,7 @@ bool convertEdgesToSections( const TopoDS_Edge& gp_XYZ p(aPoint.X(), aPoint.Y(), 0); double param =-1; double d = ProjectPointToCurve(p, adaptorOldCurve, param); - if ((param > pmin) and (param < pmax)) + if ((param > pmin) && (param < pmax)) { DEBTRACE("param: " << param); aPointsList.Append(aPoint); @@ -618,9 +624,9 @@ bool HYDROData_PolylineXY::ImportShape( const TopoDS_Shape& theShape, if ( theShape.IsNull() ) return false; - std::string brepName = this->GetName().toStdString(); - brepName += ".brep"; - BRepTools::Write( theShape, brepName.c_str() ); + //std::string brepName = this->GetName().toStdString(); + //brepName += ".brep"; + //BRepTools::Write( theShape, brepName.c_str() ); RemoveSections(); @@ -882,35 +888,99 @@ void HYDROData_PolylineXY::setEditable( const bool theIsEditable ) /** * Returns true if polyline is closed */ -bool HYDROData_PolylineXY::IsClosed( const bool theIsSimpleCheck ) const +bool HYDROData_PolylineXY::IsClosed(const bool theIsSimpleCheck) const { + //DEBTRACE("IsClosed " << theIsSimpleCheck << " " << GetName()); bool anIsClosed = false; TopoDS_Shape aShape = GetShape(); - if ( aShape.IsNull() ) + if (aShape.IsNull()) return anIsClosed; TopTools_SequenceOfShape aWires; - HYDROData_ShapesTool::ExploreShapeToShapes( aShape, TopAbs_WIRE, aWires ); + HYDROData_ShapesTool::ExploreShapeToShapes(aShape, TopAbs_WIRE, aWires); int aNbWires = aWires.Length(); - if ( theIsSimpleCheck ) - { - anIsClosed = aNbWires > 0; - for ( int i = 1; i <= aNbWires && anIsClosed; ++i ) + if (theIsSimpleCheck) { - const TopoDS_Shape& aWire = aWires.Value( i ); - anIsClosed = BRep_Tool::IsClosed( aWire ); + anIsClosed = aNbWires > 0; + for (int i = 1; i <= aNbWires && anIsClosed; ++i) + { + const TopoDS_Shape& aWire = aWires.Value(i); + anIsClosed = BRep_Tool::IsClosed(aWire); + } } - } else - { - anIsClosed = aNbWires == 1 && BRep_Tool::IsClosed( aWires.First() ); - } + { + if (aNbWires == 1) + anIsClosed = BRep_Tool::IsClosed(aWires.First()); + else + { + //DEBTRACE("aNbWires " << aNbWires); + Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape; + Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape; + for (int i = 1; i <= aNbWires; ++i) + { + const TopoDS_Shape& aWire = aWires.Value(i); + TopExp_Explorer it2(aWire, TopAbs_EDGE); + for (; it2.More(); it2.Next()) + aSeqEdges->Append(it2.Current()); + } + if (aSeqEdges->Length() > 1) + { + //DEBTRACE(aSeqEdges->Length()); + ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges, 1E-5, Standard_False, aSeqWires); + if (aSeqWires->Length() == 1) + { + //DEBTRACE(aSeqWires->Length()); + const TopoDS_Wire& aPolylineWire = TopoDS::Wire(aSeqWires->Value(1)); + anIsClosed = BRep_Tool::IsClosed(aPolylineWire); + } + } + } + } return anIsClosed; } +int HYDROData_PolylineXY::GetNbConnectedWires(Handle(TopTools_HSequenceOfShape)& aConnectedWires) const +{ + TopoDS_Shape aShape = GetShape(); + if (aShape.IsNull()) + return 0; + int aNbconnectedWires = 0; + TopTools_SequenceOfShape aWires; + HYDROData_ShapesTool::ExploreShapeToShapes(aShape, TopAbs_WIRE, aWires); + int aNbWires = aWires.Length(); + if (aNbWires == 1) + { + aNbconnectedWires = aNbWires; + aConnectedWires->Append(aWires.First()); + } + else + { + //DEBTRACE("aNbWires " << aNbWires); + Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape; + Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape; + for (int i = 1; i <= aNbWires; ++i) + { + const TopoDS_Shape& aWire = aWires.Value(i); + TopExp_Explorer it2(aWire, TopAbs_EDGE); + for (; it2.More(); it2.Next()) + aSeqEdges->Append(it2.Current()); + } + if (aSeqEdges->Length() > 1) + { + //DEBTRACE(aSeqEdges->Length()); + ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges, 1E-5, Standard_False, aSeqWires); + } + aConnectedWires = aSeqWires; + aNbconnectedWires = aConnectedWires->Length(); + DEBTRACE("aNbconnectedWires " << aNbconnectedWires); + } +return aNbconnectedWires; +} + double HYDROData_PolylineXY::GetDistance( const int theSectionIndex, const int thePointIndex ) const {