From 08f7afb0e451101f5abd0d6d0541145e769b4da4 Mon Sep 17 00:00:00 2001 From: DeepSOIC Date: Tue, 10 Mar 2015 00:09:42 +0300 Subject: [PATCH] PartDesign: fix wrong sketch pad (#1854) Fixes the issue where, when a sketch is cloned, and selected for padding, the clone gets padded instead of the sketch. It also allows padding of a sketch that is already used by anything else, except for PartDesign features. + the same fix for PartDesign Revolution. --- src/Mod/PartDesign/Gui/Command.cpp | 38 ++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index b4bb036ca..31422a5d0 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -73,7 +73,7 @@ void validateSketches(std::vector& sketches, const bool su std::vector ref = (*s)->getInList(); std::vector::iterator r = ref.begin(); while (r != ref.end()) { - if ((*r)->getTypeId().isDerivedFrom(App::DocumentObjectGroup::getClassTypeId())) { + if (!(*r)->getTypeId().isDerivedFrom(PartDesign::SketchBased().getClassTypeId())) { r = ref.erase(r); continue; } @@ -186,20 +186,26 @@ CmdPartDesignPad::CmdPartDesignPad() void CmdPartDesignPad::activated(int iMsg) { + bool bNoSketchWasSelected = false; // Get a valid sketch from the user // First check selections std::vector sketches = getSelection().getObjectsOfType(Part::Part2DObject::getClassTypeId()); - Gui::validateSketches(sketches, false); - // Next let the user choose from a list of all eligible objects - if (sketches.size() == 0) { + if (sketches.size() == 0) {//no sketches were selected. Let user pick an object from valid ones available in document sketches = getDocument()->getObjectsOfType(Part::Part2DObject::getClassTypeId()); - Gui::validateSketches(sketches, false); - if (sketches.size() == 0) { + bNoSketchWasSelected = true; + } + Gui::validateSketches(sketches, false); + if (sketches.size() == 0) { + if (bNoSketchWasSelected) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No valid sketches in this document"), QObject::tr("Please create a sketch or 2D object first")); - return; + } else { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No valid sketches selected"), + QObject::tr("None of selected sketches/2D objects is valid for padding. Please select a valid sketch or 2D object that is not used by any other feature.")); } + return; } + // If there is more than one selection/possibility, show dialog and let user pick sketch if (sketches.size() > 1) { PartDesignGui::FeaturePickDialog Dlg(sketches); @@ -338,20 +344,26 @@ CmdPartDesignRevolution::CmdPartDesignRevolution() void CmdPartDesignRevolution::activated(int iMsg) { + bool bNoSketchWasSelected = false; // Get a valid sketch from the user // First check selections std::vector sketches = getSelection().getObjectsOfType(Part::Part2DObject::getClassTypeId()); - Gui::validateSketches(sketches, false); - // Next let the user choose from a list of all eligible objects - if (sketches.size() == 0) { + if (sketches.size() == 0) {//no sketches were selected. Let user pick an object from valid ones available in document sketches = getDocument()->getObjectsOfType(Part::Part2DObject::getClassTypeId()); - Gui::validateSketches(sketches, false); - if (sketches.size() == 0) { + bNoSketchWasSelected = true; + } + Gui::validateSketches(sketches, false); + if (sketches.size() == 0) { + if (bNoSketchWasSelected) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No valid sketches in this document"), QObject::tr("Please create a sketch or 2D object first")); - return; + } else { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No valid sketches selected"), + QObject::tr("None of selected sketches/2D objects is valid for revolving. Please select a valid sketch or 2D object that is not used by any other feature.")); } + return; } + // If there is more than one selection/possibility, show dialog and let user pick sketch if (sketches.size() > 1) { PartDesignGui::FeaturePickDialog Dlg(sketches);