]> OCCT Git - occt-copy.git/commitdiff
Next version. CR29003_1
authorjgv <jgv@opencascade.com>
Thu, 17 Aug 2017 13:01:21 +0000 (16:01 +0300)
committerjgv <jgv@opencascade.com>
Thu, 17 Aug 2017 13:01:21 +0000 (16:01 +0300)
src/BRepOffset/BRepOffset_Tool.cxx
src/BRepOffset/BRepOffset_Tool.hxx
src/BRepOffsetAPI/BRepOffsetAPI_PatchFaces.cxx

index 96e5a1ab2148f076880ca88c930486ed1de9d750..2a6ccc4ee6f301ff322ec63c3160702b67137ae5 100644 (file)
@@ -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
+}
index 25ad516b1bbe29b07c1ff760dbffe8b3b6e004e6..9ccf7ba034e6c8d55b814c1f2d30779a0233f925 100644 (file)
@@ -104,7 +104,14 @@ public:
   //! if <UpdatePCurve>  is  TRUE, update the  pcurves of the
   //! edges of <F> on   the new surface.if the surface has  been changed,
   //! Returns  True if The Surface of  <NF> 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);
   
index dcbaa94f856635ecdedd1f9550c1afe3ed005058..b04935a39464d2014fb9b9007ef1ef33c7169dc4 100644 (file)
@@ -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);
     }
   }