diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 2b954d5cf8..6819398580 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -222,27 +222,25 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges exitSelectionMode(); } else if (selectionMode == SelectionMode::Reference) { - // TODO check if this works correctly (2015-09-01, Fat-Zer) - exitSelectionMode(); + auto pcLinearPattern = static_cast(getObject()); + std::vector directions; App::DocumentObject* selObj = nullptr; - auto pcLinearPattern = static_cast(getObject()); - if (pcLinearPattern) { - getReferencedSelection(pcLinearPattern, msg, selObj, directions); - - // Note: ReferenceSelection has already checked the selection for validity - if (selObj - && (selectionMode == SelectionMode::Reference - || selObj->isDerivedFrom(App::Line::getClassTypeId()) - || selObj->isDerivedFrom(Part::Feature::getClassTypeId()) - || selObj->isDerivedFrom(PartDesign::Line::getClassTypeId()) - || selObj->isDerivedFrom(PartDesign::Plane::getClassTypeId()))) { - setupTransaction(); - pcLinearPattern->Direction.setValue(selObj, directions); - recomputeFeature(); - updateUI(); - } + getReferencedSelection(pcLinearPattern, msg, selObj, directions); + if (!selObj) { + return; } + + // Note: ReferenceSelection has already checked the selection for validity + if (selObj->isDerivedFrom() || selObj->isDerivedFrom() + || selObj->isDerivedFrom() + || selObj->isDerivedFrom()) { + setupTransaction(); + pcLinearPattern->Direction.setValue(selObj, directions); + recomputeFeature(); + updateUI(); + } + exitSelectionMode(); } } } diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index eb1dc448e9..a1823d22ac 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -134,17 +134,17 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg if (originalSelected(msg)) { exitSelectionMode(); } - else { + else if (selectionMode == SelectionMode::Reference) { + auto pcMirrored = static_cast(getObject()); + std::vector mirrorPlanes; App::DocumentObject* selObj = nullptr; - auto pcMirrored = static_cast(getObject()); getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); if (!selObj) { return; } - if (selectionMode == SelectionMode::Reference - || selObj->isDerivedFrom(App::Plane::getClassTypeId())) { + if (selObj->isDerivedFrom()) { setupTransaction(); pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); recomputeFeature(); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index e437ab90ef..a49879b30b 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -218,21 +218,21 @@ void TaskPolarPatternParameters::adaptVisibilityToMode() void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { if (selectionMode != SelectionMode::None && msg.Type == Gui::SelectionChanges::AddSelection) { - if (originalSelected(msg)) { exitSelectionMode(); } - else { + else if (selectionMode == SelectionMode::Reference) { + auto pcPolarPattern = static_cast(getObject()); + std::vector axes; App::DocumentObject* selObj = nullptr; - auto pcPolarPattern = static_cast(getObject()); getReferencedSelection(pcPolarPattern, msg, selObj, axes); if (!selObj) { return; } - if (selectionMode == SelectionMode::Reference - || selObj->isDerivedFrom(App::Line::getClassTypeId())) { + if (selObj->isDerivedFrom() || selObj->isDerivedFrom() + || selObj->isDerivedFrom()) { setupTransaction(); pcPolarPattern->Axis.setValue(selObj, axes); recomputeFeature();