Gui: improve scale handling in SoFCCSysDragger

Because of the scale transformion in Link, the dragger may have
undesired behavior. This patch checks scaling factor in scenegraph
transformation, and auto scale the dragger axis accordingly.
This commit is contained in:
Zheng, Lei
2019-10-05 10:24:05 +08:00
committed by wmayer
parent 23d42421d8
commit f55da93297
3 changed files with 56 additions and 10 deletions

View File

@@ -2572,15 +2572,7 @@ void ViewProviderLink::setEditViewer(Gui::View3DInventorViewer* viewer, int ModN
viewer->setupEditingRoot(group,&dragCtx->preTransform);
}else{
SoFCCSysDragger* dragger = static_cast<SoFCCSysDragger*>(pcDragger.get());
auto doc = Application::Instance->editDocument();
if(doc) {
Base::Vector3d v0, v1(1,0,0);
doc->getEditingTransform().multVec(v0,v0);
doc->getEditingTransform().multVec(v1,v1);
// Compensate for possible scaling
dragger->draggerSize.setValue(0.05f / (v1-v0).Length());
} else
dragger->draggerSize.setValue(0.05f);
dragger->draggerSize.setValue(0.05f);
dragger->setUpAutoScale(viewer->getSoRenderManager()->getCamera());
viewer->setupEditingRoot(pcDragger,&dragCtx->preTransform);