PartDesign: fix a couple of crashes
The first crash was reported here: http://forum.freecadweb.org/viewtopic.php?f=20&t=11205&start=50#p91052 The second one accures then moving a feature from a body without solid features.
This commit is contained in:
parent
08e4151ea1
commit
b9f4e10fa5
|
@ -374,12 +374,17 @@ void CmdPartDesignMoveFeature::activated(int iMsg)
|
||||||
for (std::vector<App::DocumentObject*>::const_iterator f = features.begin(); f != features.end(); f++) {
|
for (std::vector<App::DocumentObject*>::const_iterator f = features.begin(); f != features.end(); f++) {
|
||||||
// Find body of this feature
|
// Find body of this feature
|
||||||
Part::BodyBase* source = PartDesign::Body::findBodyOf(*f);
|
Part::BodyBase* source = PartDesign::Body::findBodyOf(*f);
|
||||||
if (source == target) continue;
|
bool featureIsTip = false;
|
||||||
bool featureIsTip = (source->Tip.getValue() == *f);
|
|
||||||
|
|
||||||
// Remove from source body
|
if (source == target) continue;
|
||||||
doCommand(Doc,"App.activeDocument().%s.removeFeature(App.activeDocument().%s)",
|
|
||||||
|
// Remove from the source body if the feature belonged to a body
|
||||||
|
if (source) {
|
||||||
|
featureIsTip = (source->Tip.getValue() == *f);
|
||||||
|
doCommand(Doc,"App.activeDocument().%s.removeFeature(App.activeDocument().%s)",
|
||||||
source->getNameInDocument(), (*f)->getNameInDocument());
|
source->getNameInDocument(), (*f)->getNameInDocument());
|
||||||
|
}
|
||||||
|
|
||||||
// Add to target body (always at the Tip)
|
// Add to target body (always at the Tip)
|
||||||
doCommand(Doc,"App.activeDocument().%s.addFeature(App.activeDocument().%s)",
|
doCommand(Doc,"App.activeDocument().%s.addFeature(App.activeDocument().%s)",
|
||||||
target->getNameInDocument(), (*f)->getNameInDocument());
|
target->getNameInDocument(), (*f)->getNameInDocument());
|
||||||
|
@ -391,7 +396,9 @@ void CmdPartDesignMoveFeature::activated(int iMsg)
|
||||||
// If we removed the tip of the source body, make the new tip visible
|
// If we removed the tip of the source body, make the new tip visible
|
||||||
if (featureIsTip) {
|
if (featureIsTip) {
|
||||||
App::DocumentObject* prevSolidFeature = source->getPrevSolidFeature();
|
App::DocumentObject* prevSolidFeature = source->getPrevSolidFeature();
|
||||||
doCommand(Gui,"Gui.activeDocument().show(\"%s\")", prevSolidFeature->getNameInDocument());
|
if (prevSolidFeature) {
|
||||||
|
doCommand(Gui,"Gui.activeDocument().show(\"%s\")", prevSolidFeature->getNameInDocument());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide old tip and show new tip (the moved feature) of the target body
|
// Hide old tip and show new tip (the moved feature) of the target body
|
||||||
|
@ -399,6 +406,7 @@ void CmdPartDesignMoveFeature::activated(int iMsg)
|
||||||
doCommand(Gui,"Gui.activeDocument().hide(\"%s\")", prevSolidFeature->getNameInDocument());
|
doCommand(Gui,"Gui.activeDocument().hide(\"%s\")", prevSolidFeature->getNameInDocument());
|
||||||
doCommand(Gui,"Gui.activeDocument().show(\"%s\")", (*f)->getNameInDocument());
|
doCommand(Gui,"Gui.activeDocument().show(\"%s\")", (*f)->getNameInDocument());
|
||||||
}
|
}
|
||||||
|
// TODO: if we are inserting a sketch which wasn't part of any body try to set right support for it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user