diff --git a/src/Mod/PartDesign/App/FeatureTransformed.cpp b/src/Mod/PartDesign/App/FeatureTransformed.cpp index c5fa9e914a..d218113257 100644 --- a/src/Mod/PartDesign/App/FeatureTransformed.cpp +++ b/src/Mod/PartDesign/App/FeatureTransformed.cpp @@ -235,19 +235,34 @@ App::DocumentObjectExecReturn* Transformed::recomputePreview() { const auto mode = static_cast(TransformMode.getValue()); - const auto makeCompoundOfToolShapes = [this]() { + const Part::Feature* supportFeature = getBaseObject(); + const Part::TopoShape supportShape = supportFeature->Shape.getShape(); + + if (supportShape.isNull()) { + return App::DocumentObject::StdReturn; + } + + gp_Trsf supportTransform = supportShape.getShape().Location().Transformation(); + + const auto makeCompoundOfToolShapes = [this, &supportTransform]() { BRep_Builder builder; TopoDS_Compound compound; builder.MakeCompound(compound); for (const auto& original : getOriginals()) { if (auto* feature = freecad_cast(original)) { - const auto& shape = feature->AddSubShape.getShape(); + auto shape = feature->AddSubShape.getShape(); + + gp_Trsf trsf = feature->getLocation().Transformation().Multiplied( + supportTransform.Inverted() + ); if (shape.isNull()) { continue; } + shape = shape.makeElementTransform(trsf); + builder.Add(compound, shape.getShape()); } } @@ -260,9 +275,14 @@ App::DocumentObjectExecReturn* Transformed::recomputePreview() PreviewShape.setValue(makeCompoundOfToolShapes()); return StdReturn; - case Mode::WholeShape: - PreviewShape.setValue(getBaseShape()); + case Mode::WholeShape: { + auto shape = getBaseTopoShape(); + shape = shape.makeElementTransform(supportTransform.Inverted()); + + PreviewShape.setValue(shape.getShape()); + return StdReturn; + } default: return FeatureRefine::recomputePreview(); diff --git a/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp b/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp index 50c6f6ca15..d5e203d228 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp @@ -104,19 +104,6 @@ void ViewProviderTransformed::updatePreview() try { if (auto feature = getObject()) { - const Part::Feature* supportFeature = feature->getBaseObject(); - const Part::TopoShape& supportShape = supportFeature->Shape.getShape(); - - if (supportShape.isNull()) { - return; - } - - Base::Matrix4D invertedSupportMatrix; - Part::TopoShape::convertToMatrix( - supportShape.getShape().Location().Transformation().Inverted(), - invertedSupportMatrix - ); - auto originals = feature->getOriginals(); auto transforms = feature->getTransformations(originals); @@ -133,7 +120,7 @@ void ViewProviderTransformed::updatePreview() auto sep = new SoSeparator; auto transformNode = new SoTransform; - transformNode->setMatrix(convert(transformMatrix * invertedSupportMatrix)); + transformNode->setMatrix(convert(transformMatrix)); sep->addChild(transformNode); sep->addChild(pcPreviewShape);