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:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user