Salome HOME
[bos #29471] [EDF] (2022-T1) Advanced geometry features: iterate through holes of...
[modules/geom.git] / src / GEOMImpl / GEOMImpl_OffsetDriver.cxx
index 413ccff7c24838bbe42f4c0a94dfc10722c3a0a7..bb6ef1cd3b7146c666e72076597ad03f4981bd93 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -86,11 +86,20 @@ Standard_Integer GEOMImpl_OffsetDriver::Execute(Handle(TFunction_Logbook)& log)
     StdFail_NotDone::Raise(aMsg.ToCString());
   }
 
-  if (aType == OFFSET_SHAPE || aType == OFFSET_SHAPE_COPY) {
-    BRepOffsetAPI_MakeOffsetShape MO (aShapeBase,
-                                      aCI.GetValue(),
-                                      aTol);
-    if (MO.IsDone()) {
+  if ( aType == OFFSET_SHAPE || aType == OFFSET_SHAPE_COPY )
+  {
+    BRepOffsetAPI_MakeOffsetShape MO;
+    BRepOffset_Mode aMode = BRepOffset_Skin;
+    Standard_Boolean anIntersection = Standard_False, aSelfInter = Standard_False;
+    MO.PerformByJoin( aShapeBase,
+                      aCI.GetValue(),
+                      aTol,
+                      aMode,
+                      anIntersection,
+                      aSelfInter,
+                      aCI.GetJoinByPipes() ? GeomAbs_Arc : GeomAbs_Intersection );
+
+    if ( MO.IsDone() ) {
       aShape = MO.Shape();
       if ( !GEOMUtils::CheckShape(aShape, true) && !GEOMUtils::FixShapeTolerance(aShape) )
         Standard_ConstructionError::Raise("Boolean operation aborted : non valid shape result");
@@ -166,9 +175,9 @@ Standard_Integer GEOMImpl_OffsetDriver::Execute(Handle(TFunction_Logbook)& log)
       }
 
       // Create a hollowed solid.
-      BRepOffsetAPI_MakeThickSolid aMkSolid
-                  (aShapeBase, aFacesToRm, anOffset, aTol, BRepOffset_Skin,
-                   Standard_False, Standard_False, GeomAbs_Intersection);
+      BRepOffsetAPI_MakeThickSolid aMkSolid;
+      aMkSolid.MakeThickSolidByJoin (aShapeBase, aFacesToRm, anOffset, aTol, BRepOffset_Skin,
+                                     Standard_False, Standard_False, GeomAbs_Intersection);
 
       if (aMkSolid.IsDone()) {
         aShape = aMkSolid.Shape();
@@ -228,4 +237,4 @@ GetCreationInformation(std::string&             theOperationName,
   return true;
 }
 
-IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_OffsetDriver,GEOM_BaseDriver);
+IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_OffsetDriver,GEOM_BaseDriver)