Add keyboard support for nudging selected scene items

- Issue MatterHackers/MCCentral#5655
[Feature Request] Move objects with keyboard
This commit is contained in:
jlewin 2019-06-07 13:54:11 -07:00
parent 23ec362e99
commit 41d6e0f647

View file

@ -3441,8 +3441,15 @@ Support and tutorials:
} }
else else
{ {
// move or rotate view left if (view3D.sceneContext.Scene.SelectedItem is IObject3D object3D)
Offset3DView(view3D, new Vector2(-offsetDist, 0), arrowKeyOperation); {
NudgeItem(view3D, object3D, ArrowDirection.Left, keyEvent);
}
else
{
// move or rotate view left
Offset3DView(view3D, new Vector2(-offsetDist, 0), arrowKeyOperation);
}
} }
keyEvent.Handled = true; keyEvent.Handled = true;
@ -3459,8 +3466,15 @@ Support and tutorials:
} }
else else
{ {
// move or rotate view right if (view3D.sceneContext.Scene.SelectedItem is IObject3D object3D)
Offset3DView(view3D, new Vector2(offsetDist, 0), arrowKeyOperation); {
NudgeItem(view3D, object3D, ArrowDirection.Right, keyEvent);
}
else
{
// move or rotate view right
Offset3DView(view3D, new Vector2(offsetDist, 0), arrowKeyOperation);
}
} }
keyEvent.Handled = true; keyEvent.Handled = true;
@ -3476,7 +3490,14 @@ Support and tutorials:
} }
else else
{ {
Offset3DView(view3D, new Vector2(0, offsetDist), arrowKeyOperation); if (view3D.sceneContext.Scene.SelectedItem is IObject3D object3D)
{
NudgeItem(view3D, object3D, ArrowDirection.Up, keyEvent);
}
else
{
Offset3DView(view3D, new Vector2(0, offsetDist), arrowKeyOperation);
}
} }
keyEvent.Handled = true; keyEvent.Handled = true;
@ -3492,7 +3513,14 @@ Support and tutorials:
} }
else else
{ {
Offset3DView(view3D, new Vector2(0, -offsetDist), arrowKeyOperation); if (view3D.sceneContext.Scene.SelectedItem is IObject3D object3D)
{
NudgeItem(view3D, object3D, ArrowDirection.Down, keyEvent);
}
else
{
Offset3DView(view3D, new Vector2(0, -offsetDist), arrowKeyOperation);
}
} }
keyEvent.Handled = true; keyEvent.Handled = true;
@ -3597,6 +3625,45 @@ Support and tutorials:
return systemWindow; return systemWindow;
} }
private static void NudgeItem(View3DWidget view3D, IObject3D object3D, ArrowDirection arrowDirection, KeyEventArgs keyEvent)
{
// TODO: analyze the view and adjust movements to be relative to the current perspective
//
// Naive movements in Identity space
switch (arrowDirection)
{
case ArrowDirection.Left:
object3D.Translate(-view3D.InteractionLayer.SnapGridDistance, 0);
break;
case ArrowDirection.Right:
object3D.Translate(view3D.InteractionLayer.SnapGridDistance, 0);
break;
case ArrowDirection.Up:
if (keyEvent.Control)
{
object3D.Translate(0, 0, view3D.InteractionLayer.SnapGridDistance);
}
else
{
object3D.Translate(0, view3D.InteractionLayer.SnapGridDistance);
}
break;
case ArrowDirection.Down:
if (keyEvent.Control)
{
object3D.Translate(0, 0, -view3D.InteractionLayer.SnapGridDistance);
}
else
{
object3D.Translate(0, -view3D.InteractionLayer.SnapGridDistance);
}
break;
}
}
private static void Offset3DView(View3DWidget view3D, Vector2 offset, TrackBallTransformType operation) private static void Offset3DView(View3DWidget view3D, Vector2 offset, TrackBallTransformType operation)
{ {
var center = view3D.TrackballTumbleWidget.LocalBounds.Center; var center = view3D.TrackballTumbleWidget.LocalBounds.Center;