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.
This commit is contained in:
DeepSOIC 2015-03-10 00:09:42 +03:00 committed by wmayer
parent e85935c4e3
commit 08f7afb0e4

View File

@ -73,7 +73,7 @@ void validateSketches(std::vector<App::DocumentObject*>& sketches, const bool su
std::vector<App::DocumentObject*> ref = (*s)->getInList();
std::vector<App::DocumentObject*>::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<App::DocumentObject*> 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<App::DocumentObject*> 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);