Gui: fix Std_Transform tool

The problem is caused by tracking of editing object placement
introduced in 719c11e714.

After this commit, any editing object can disable placement tracking by
calling Gui::Document::setEditingTransform() inside either
ViewProvider::startEditing() or setEditingViewProvider().
This commit is contained in:
Zheng, Lei
2019-12-16 06:58:31 +08:00
committed by wwmayer
parent b795162660
commit 1cbec1a60d
3 changed files with 12 additions and 8 deletions

View File

@@ -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();

View File

@@ -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<App::GeoFeature *>(getObject());
if(feat) {
auto matInverse = feat->Placement.getValue().toMatrix();

View File

@@ -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();