X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMImpl%2FGEOMImpl_OffsetDriver.cxx;h=bb6ef1cd3b7146c666e72076597ad03f4981bd93;hb=de644ac6fe44325aaa8ce9c1aa729dd9189eea6e;hp=413ccff7c24838bbe42f4c0a94dfc10722c3a0a7;hpb=2736f682fe0d63fbaf9dff49c46b4fa6c23d72ce;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx b/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx index 413ccff7c..bb6ef1cd3 100644 --- a/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx @@ -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)