-// Copyright (C) 2007-2015 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
//function : Execute
//purpose :
//=======================================================================
-Standard_Integer GEOMImpl_OffsetDriver::Execute(TFunction_Logbook& log) const
+Standard_Integer GEOMImpl_OffsetDriver::Execute(Handle(TFunction_Logbook)& log) const
{
if (Label().IsNull()) return 0;
Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
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");
if (aType == TopAbs_FACE || aType == TopAbs_SHELL) {
// Create a thick solid.
- BRepClass3d_SolidClassifier aClassifier = BRepClass3d_SolidClassifier(aShapeBase);
+ BRepClass3d_SolidClassifier aClassifier(aShapeBase);
aClassifier.PerformInfinitePoint(Precision::Confusion());
if (aClassifier.State()==TopAbs_IN)
{
// Control the solid orientation. This is mostly done to fix a bug in case of extrusion
// of a circle. The built solid is then badly oriented
- BRepClass3d_SolidClassifier anotherClassifier = BRepClass3d_SolidClassifier(aShape);
+ BRepClass3d_SolidClassifier anotherClassifier(aShape);
anotherClassifier.PerformInfinitePoint(Precision::Confusion());
if (anotherClassifier.State()==TopAbs_IN)
{
}
// 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();
aFunction->SetValue(aShape);
- log.SetTouched(Label());
+ log->SetTouched(Label());
return 1;
}
return true;
}
-IMPLEMENT_STANDARD_HANDLE (GEOMImpl_OffsetDriver,GEOM_BaseDriver);
-IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_OffsetDriver,GEOM_BaseDriver);
+IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_OffsetDriver,GEOM_BaseDriver)