From b24ec104a3642c766b6a0188abf20ae3d92b2fc3 Mon Sep 17 00:00:00 2001 From: jgv Date: Thu, 17 Aug 2017 16:01:21 +0300 Subject: [PATCH] Next version. --- src/BRepOffset/BRepOffset_Tool.cxx | 21 +++++++++++++---- src/BRepOffset/BRepOffset_Tool.hxx | 9 +++++++- .../BRepOffsetAPI_PatchFaces.cxx | 23 +++++++++++-------- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/BRepOffset/BRepOffset_Tool.cxx b/src/BRepOffset/BRepOffset_Tool.cxx index 96e5a1ab21..2a6ccc4ee6 100644 --- a/src/BRepOffset/BRepOffset_Tool.cxx +++ b/src/BRepOffset/BRepOffset_Tool.cxx @@ -3248,7 +3248,8 @@ Standard_Boolean BRepOffset_Tool::EnLargeFace const Standard_Boolean UpdatePCurve, const Standard_Boolean enlargeU, const Standard_Boolean enlargeVfirst, - const Standard_Boolean enlargeVlast) + const Standard_Boolean enlargeVlast, + const Standard_Boolean UseInfini) { //--------------------------- // extension de la geometrie. @@ -3270,8 +3271,20 @@ Standard_Boolean BRepOffset_Tool::EnLargeFace } S->Bounds (US1,US2,VS1,VS2); - UU1 = VV1 = - TheInfini; - UU2 = VV2 = TheInfini; + if (UseInfini) + { + UU1 = VV1 = - TheInfini; + UU2 = VV2 = TheInfini; + } + else + { + Standard_Real FaceDU = UF2 - UF1; + Standard_Real FaceDV = VF2 - VF1; + UU1 = UF1 - FaceDU; + UU2 = UF2 + FaceDU; + VV1 = VF1 - FaceDV; + VV2 = VF2 + FaceDV; + } if (CanExtentSurface) { SurfaceChange = EnlargeGeometry( S, UU1, UU2, VV1, VV2, isVV1degen, isVV2degen, UF1, UF2, VF1, VF2, @@ -4148,4 +4161,4 @@ void PerformPlanes(const TopoDS_Face& theFace1, Standard_Boolean IsInf(const Standard_Real theVal) { return (theVal > TheInfini*0.9); -} \ No newline at end of file +} diff --git a/src/BRepOffset/BRepOffset_Tool.hxx b/src/BRepOffset/BRepOffset_Tool.hxx index 25ad516b1b..9ccf7ba034 100644 --- a/src/BRepOffset/BRepOffset_Tool.hxx +++ b/src/BRepOffset/BRepOffset_Tool.hxx @@ -104,7 +104,14 @@ public: //! if is TRUE, update the pcurves of the //! edges of on the new surface.if the surface has been changed, //! Returns True if The Surface of has changed. - Standard_EXPORT static Standard_Boolean EnLargeFace (const TopoDS_Face& F, TopoDS_Face& NF, const Standard_Boolean ChangeGeom, const Standard_Boolean UpDatePCurve = Standard_False, const Standard_Boolean enlargeU = Standard_True, const Standard_Boolean enlargeVfirst = Standard_True, const Standard_Boolean enlargeVlast = Standard_True); + Standard_EXPORT static Standard_Boolean EnLargeFace (const TopoDS_Face& F, + TopoDS_Face& NF, + const Standard_Boolean ChangeGeom, + const Standard_Boolean UpDatePCurve = Standard_False, + const Standard_Boolean enlargeU = Standard_True, + const Standard_Boolean enlargeVfirst = Standard_True, + const Standard_Boolean enlargeVlast = Standard_True, + const Standard_Boolean UseInfini = Standard_True); Standard_EXPORT static void ExtentFace (const TopoDS_Face& F, TopTools_DataMapOfShapeShape& ConstShapes, TopTools_DataMapOfShapeShape& ToBuild, const TopAbs_State Side, const Standard_Real TolConf, TopoDS_Face& NF); diff --git a/src/BRepOffsetAPI/BRepOffsetAPI_PatchFaces.cxx b/src/BRepOffsetAPI/BRepOffsetAPI_PatchFaces.cxx index dcbaa94f85..b04935a394 100644 --- a/src/BRepOffsetAPI/BRepOffsetAPI_PatchFaces.cxx +++ b/src/BRepOffsetAPI/BRepOffsetAPI_PatchFaces.cxx @@ -221,7 +221,9 @@ static Standard_Boolean IsTangentFaces(const TopoDS_Edge& theEdge, Handle(BRepTopAdaptor_TopolTool) aTool2 = new BRepTopAdaptor_TopolTool(aBAHS2); Standard_Integer aNbSamples1 = aTool1->NbSamples(); Standard_Integer aNbSamples2 = aTool2->NbSamples(); - Standard_Integer aNbSamples = Max(aNbSamples1, aNbSamples2); + const Standard_Integer aNbSamplesMax = 23; + Standard_Integer aNbSamples = Min(aNbSamplesMax, Max(aNbSamples1, aNbSamples2)); + const Standard_Real aTolAngle = M_PI/18; // Computation of the continuity. @@ -233,14 +235,14 @@ static Standard_Boolean IsTangentFaces(const TopoDS_Edge& theEdge, if (i == aNbSamples) aPar = aLast; LocalAnalysis_SurfaceContinuity aCont(aC2d1, aC2d2, aPar, - aSurf1, aSurf2, Order, - 0.001, TolC0, 0.1, 0.1, 0.1); - if (!aCont.IsDone()) - { - nbNotDone++; - continue; - } - + aSurf1, aSurf2, Order, + 0.001, TolC0, aTolAngle, 0.1, 0.1); + if (!aCont.IsDone()) + { + nbNotDone++; + continue; + } + if (Order == GeomAbs_G1) { if (!aCont.IsG1()) @@ -320,7 +322,8 @@ void BRepOffsetAPI_PatchFaces::Build() aNeighborFace.Orientation(TopAbs_FORWARD); TopoDS_Face aNewFace; BRepOffset_Tool::EnLargeFace(aNeighborFace, aNewFace, - Standard_True,Standard_True,Standard_True,Standard_True,Standard_True); + Standard_True,Standard_True,Standard_True,Standard_True,Standard_True, + Standard_False); //not too big myFaceNewFace.Add(aNeighborFace, aNewFace); } } -- 2.39.5