diff --git a/src/BOPAlgo/BOPAlgo_PaveFiller_7.cxx b/src/BOPAlgo/BOPAlgo_PaveFiller_7.cxx index 6a98461550..29364f4680 100644 --- a/src/BOPAlgo/BOPAlgo_PaveFiller_7.cxx +++ b/src/BOPAlgo/BOPAlgo_PaveFiller_7.cxx @@ -304,13 +304,28 @@ class BOPAlgo_BPC { myE=aE; } // + const TopoDS_Edge& GetEdge() const { + return myE; + } + const TopoDS_Face& GetFace() const { + return myF; + } + const Handle_Geom2d_Curve& GetCurve2d() const { + return myCurve; + } + Standard_Boolean IsToUpdate() const { + return myToUpdate; + } + // void Perform() { - BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane (myE, myF); + BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane (myE, myF, myCurve, myToUpdate); }; // protected: TopoDS_Edge myE; TopoDS_Face myF; + Handle_Geom2d_Curve myCurve; + Standard_Boolean myToUpdate; }; //======================================================================= typedef BOPCol_NCVector @@ -748,6 +763,7 @@ void BOPAlgo_PaveFiller::Prepare() return; } // + // Build pcurves of edges on planes; first collect pairs edge-face. BOPAlgo_VectorOfBPC aVBPC; // for (i = 1; i <= aNbF; ++i) { @@ -764,6 +780,17 @@ void BOPAlgo_PaveFiller::Prepare() //====================================================== BOPAlgo_BPCCnt::Perform(myRunParallel, aVBPC); //====================================================== + + // pcurves are built, and now update edges + BRep_Builder aBB; + TopoDS_Edge E; + for (i = 0; i < aVBPC.Extent(); i++) { + const BOPAlgo_BPC& aBPC=aVBPC(i); + if (aBPC.IsToUpdate()) { + Standard_Real aTolE = BRep_Tool::Tolerance(aBPC.GetEdge()); + aBB.UpdateEdge(aBPC.GetEdge(), aBPC.GetCurve2d(), aBPC.GetFace(), aTolE); + } + } } //======================================================================= //function : IsBasedOnPlane diff --git a/src/BOPTools/BOPTools_AlgoTools2D.cdl b/src/BOPTools/BOPTools_AlgoTools2D.cdl index b7b3c46c33..3b5c4a4fcd 100644 --- a/src/BOPTools/BOPTools_AlgoTools2D.cdl +++ b/src/BOPTools/BOPTools_AlgoTools2D.cdl @@ -158,6 +158,12 @@ is theE : Edge from TopoDS; theF : Face from TopoDS); + BuildPCurveForEdgeOnPlane(myclass; + theE : Edge from TopoDS; + theF : Face from TopoDS; + theC2D: out Curve from Geom2d; + bToUpdate: out Boolean); + BuildPCurveForEdgesOnPlane(myclass; theLE : ListOfShape from BOPCol; theF : Face from TopoDS); diff --git a/src/BOPTools/BOPTools_AlgoTools2D.cxx b/src/BOPTools/BOPTools_AlgoTools2D.cxx index 6b60782026..9e3502f81a 100644 --- a/src/BOPTools/BOPTools_AlgoTools2D.cxx +++ b/src/BOPTools/BOPTools_AlgoTools2D.cxx @@ -505,6 +505,21 @@ void BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane aBB.UpdateEdge(aE, aC2D, aF, aTolE); } } + +//======================================================================= +//function : BuildPCurveForEdgeOnPlane +//purpose : +//======================================================================= +void BOPTools_AlgoTools2D::BuildPCurveForEdgeOnPlane + (const TopoDS_Edge& aE, + const TopoDS_Face& aF, + Handle(Geom2d_Curve)& aC2D, + Standard_Boolean& bToUpdate) +{ + Standard_Real aT1, aT2; + aC2D=BRep_Tool_CurveOnSurface(aE, aF, aT1, aT2, bToUpdate); +} + //======================================================================= // function: BuildPCurveForEdgesOnPlane // purpose: