From 52838aa6bd9d52ba726161218309bf8561400f5c Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 27 Dec 2022 14:29:16 +0100 Subject: [PATCH] PD: fixes #7791: Linear Pattern With Single Occurrence Fails --- src/Mod/PartDesign/App/FeatureTransformed.cpp | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureTransformed.cpp b/src/Mod/PartDesign/App/FeatureTransformed.cpp index 14b6fdd482..821abe735d 100644 --- a/src/Mod/PartDesign/App/FeatureTransformed.cpp +++ b/src/Mod/PartDesign/App/FeatureTransformed.cpp @@ -229,8 +229,9 @@ App::DocumentObjectExecReturn *Transformed::execute() TopoDS_Shape shape = copy.Shape(); BRepBuilderAPI_Transform mkTrf(shape, *transformIter, false); // No need to copy, now - if (!mkTrf.IsDone()) - return shapeTools; + if (!mkTrf.IsDone()) { + throw Base::CADKernelError("Transformation failed"); + } shape = mkTrf.Shape(); shapes.emplace_back(shape); @@ -273,35 +274,35 @@ App::DocumentObjectExecReturn *Transformed::execute() TopTools_ListOfShape shapeArguments; shapeArguments.Append(current); TopTools_ListOfShape shapeTools = getTransformedCompShape(fuseShape.getShape()); - if (shapeTools.Size() == 0) - return new App::DocumentObjectExecReturn("Transformation failed", (*o)); - std::unique_ptr mkBool(new BRepAlgoAPI_Fuse()); - mkBool->SetArguments(shapeArguments); - mkBool->SetTools(shapeTools); - mkBool->Build(); - if (!mkBool->IsDone()) { - std::stringstream error; - error << "Boolean operation failed"; - return new App::DocumentObjectExecReturn(error.str()); + if (!shapeTools.IsEmpty()) { + std::unique_ptr mkBool(new BRepAlgoAPI_Fuse()); + mkBool->SetArguments(shapeArguments); + mkBool->SetTools(shapeTools); + mkBool->Build(); + if (!mkBool->IsDone()) { + std::stringstream error; + error << "Boolean operation failed"; + return new App::DocumentObjectExecReturn(error.str()); + } + current = mkBool->Shape(); } - current = mkBool->Shape(); } if (!cutShape.isNull()) { TopTools_ListOfShape shapeArguments; shapeArguments.Append(current); TopTools_ListOfShape shapeTools = getTransformedCompShape(cutShape.getShape()); - if (shapeTools.Size() == 0) - return new App::DocumentObjectExecReturn("Transformation failed", (*o)); - std::unique_ptr mkBool(new BRepAlgoAPI_Cut()); - mkBool->SetArguments(shapeArguments); - mkBool->SetTools(shapeTools); - mkBool->Build(); - if (!mkBool->IsDone()) { - std::stringstream error; - error << "Boolean operation failed"; - return new App::DocumentObjectExecReturn(error.str()); + if (!shapeTools.IsEmpty()) { + std::unique_ptr mkBool(new BRepAlgoAPI_Cut()); + mkBool->SetArguments(shapeArguments); + mkBool->SetTools(shapeTools); + mkBool->Build(); + if (!mkBool->IsDone()) { + std::stringstream error; + error << "Boolean operation failed"; + return new App::DocumentObjectExecReturn(error.str()); + } + current = mkBool->Shape(); } - current = mkBool->Shape(); } support = current; // Use result of this operation for fuse/cut of next original