From 4ed03024043a298f769ed97f84c9986ab7e072aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Sun, 8 Nov 2015 16:31:16 +0100 Subject: [PATCH] Ensure correct sketch placement calculation As bodies are movable now they need to be taken into account for calculating the sketch placement. --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 20 +++++++------------- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 4 +++- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 8834ec5e7..1350a81e6 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -4157,18 +4157,10 @@ void ViewProviderSketch::setupContextMenu(QMenu *menu, QObject *receiver, const bool ViewProviderSketch::setEdit(int ModNum) { - //find the Part object the feature belongs to, TODO: use GRAPH methods - App::DocumentObject* search = getSketchObject(); - for(Part::BodyBase* b : getSketchObject()->getDocument()->getObjectsOfType()) { - if(b->hasFeature(getSketchObject())) { - search = b; - } - } - for(App::Part* p : getSketchObject()->getDocument()->getObjectsOfType()) { - if(p->hasObject(search)) { - parentPart = p; - } - } + //find the Part and body object the feature belongs to for placement calculations + //TODO: this needs to be replaced with GRAPH methods to get the real stacked placement + parentPart = App::Part::getPartOfObject(getSketchObject()); + parentBody = Part::BodyBase::findBodyOf(getSketchObject()); // always change to sketcher WB, remember where we come from oldWb = Gui::Command::assureWorkbench("SketcherWorkbench"); @@ -4896,8 +4888,10 @@ Base::Placement ViewProviderSketch::getPlacement() { //TODO: use GRAPH placement handling, as this function right now only works with one parent //part object Base::Placement Plz = getSketchObject()->Placement.getValue(); + if(parentBody) + Plz = parentBody->Placement.getValue()*Plz; if(parentPart) - return parentPart->Placement.getValue()*Plz; + Plz = parentPart->Placement.getValue()*Plz; return Plz; } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 7238770c0..1901404a0 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -25,6 +25,7 @@ #define SKETCHERGUI_VIEWPROVIDERSKETCH_H #include +#include #include #include #include @@ -390,7 +391,8 @@ protected: int antiAliasing; Gui::Rubberband* rubberband; - App::Part* parentPart = nullptr; + App::Part* parentPart = nullptr; + Part::BodyBase* parentBody = nullptr; }; } // namespace PartGui