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 | 18 ++++++++++-------- src/Gui/ViewProviderDragger.cpp | 1 + src/Gui/ViewProviderLink.cpp | 1 + 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 4cc095cc4f..ebd580e1d7 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; } - d->_editMode = ModNum; - d->_editViewProvider = svp->startEditing(ModNum); - if(!d->_editViewProvider) { - d->_editViewProviderParent = 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; + 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; + } + 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 179debe59c..66b27b6e54 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 5aa2395506..9d3d1bc24e 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();