From 1cbec1a60db298f9688a6a8565796c1fd99ce1c1 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Mon, 16 Dec 2019 06:58:31 +0800 Subject: [PATCH] Gui: fix Std_Transform tool The problem is caused by tracking of editing object placement introduced in 719c11e714c2bed78a7bacf5076c316bab12571e. After this commit, any editing object can disable placement tracking by calling Gui::Document::setEditingTransform() inside either ViewProvider::startEditing() or setEditingViewProvider(). --- src/Gui/Document.cpp | 12 +++++++----- src/Gui/ViewProviderDragger.cpp | 1 + src/Gui/ViewProviderLink.cpp | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 4cc095cc4ffc..ebd580e1d7fd 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -404,19 +404,21 @@ bool Document::setEdit(Gui::ViewProvider* p, int ModNum, const char *subname) d->_editSubname = subname; } + auto sobjs = obj->getSubObjectList(subname); + d->_editObjs.clear(); + d->_editObjs.insert(sobjs.begin(),sobjs.end()); + d->_editingObject = sobj; + d->_editMode = ModNum; d->_editViewProvider = svp->startEditing(ModNum); if(!d->_editViewProvider) { d->_editViewProviderParent = 0; + d->_editObjs.clear(); + d->_editingObject = 0; FC_LOG("object '" << sobj->getFullName() << "' refuse to edit"); return false; } - auto sobjs = obj->getSubObjectList(subname); - d->_editObjs.clear(); - d->_editObjs.insert(sobjs.begin(),sobjs.end()); - d->_editingObject = sobj; - if(view3d) { view3d->getViewer()->setEditingViewProvider(d->_editViewProvider,ModNum); d->_editingViewer = view3d->getViewer(); diff --git a/src/Gui/ViewProviderDragger.cpp b/src/Gui/ViewProviderDragger.cpp index 179debe59ca8..66b27b6e5433 100644 --- a/src/Gui/ViewProviderDragger.cpp +++ b/src/Gui/ViewProviderDragger.cpp @@ -214,6 +214,7 @@ void ViewProviderDragger::setEditViewer(Gui::View3DInventorViewer* viewer, int M csysDragger->setUpAutoScale(viewer->getSoRenderManager()->getCamera()); auto mat = viewer->getDocument()->getEditingTransform(); + viewer->getDocument()->setEditingTransform(mat); auto feat = dynamic_cast(getObject()); if(feat) { auto matInverse = feat->Placement.getValue().toMatrix(); diff --git a/src/Gui/ViewProviderLink.cpp b/src/Gui/ViewProviderLink.cpp index 5aa2395506ed..9d3d1bc24e93 100644 --- a/src/Gui/ViewProviderLink.cpp +++ b/src/Gui/ViewProviderLink.cpp @@ -2408,6 +2408,7 @@ bool ViewProviderLink::initDraggingPlacement() { dragCtx.reset(new DraggerContext); dragCtx->preTransform = doc->getEditingTransform(); + doc->setEditingTransform(dragCtx->preTransform); const auto &pla = ext->getPlacementProperty()? ext->getPlacementValue():ext->getLinkPlacementValue();