Refactoring for move passing to all object3d controls

This commit is contained in:
LarsBrubaker 2020-09-13 15:02:30 -07:00
parent f166728aa1
commit 34a63956f9
10 changed files with 34 additions and 30 deletions

View file

@ -276,7 +276,7 @@ namespace MatterHackers.Plugins.EditorTools
throw new NotImplementedException();
}
public void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
throw new NotImplementedException();
}

View file

@ -312,7 +312,7 @@ namespace MatterHackers.Plugins.EditorTools
base.OnMouseDown(mouseEvent3D);
}
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
IObject3D selectedItem = RootSelection;
if (selectedItem != null)
@ -414,7 +414,7 @@ namespace MatterHackers.Plugins.EditorTools
}
}
base.OnMouseMove(mouseEvent3D);
base.OnMouseMove(mouseEvent3D, mouseIsOver);
}
public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)

View file

@ -250,7 +250,7 @@ namespace MatterHackers.Plugins.EditorTools
base.OnMouseDown(mouseEvent3D);
}
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
var selectedItem = RootSelection;
ActiveSelectedItem = selectedItem;
@ -330,7 +330,7 @@ namespace MatterHackers.Plugins.EditorTools
transformAppliedByThis = selectedItem.Matrix;
}
base.OnMouseMove(mouseEvent3D);
base.OnMouseMove(mouseEvent3D, mouseIsOver);
}
public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)

View file

@ -225,7 +225,7 @@ namespace MatterHackers.Plugins.EditorTools
base.OnMouseDown(mouseEvent3D);
}
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
var selectedItem = RootSelection;
@ -284,7 +284,7 @@ namespace MatterHackers.Plugins.EditorTools
}
}
base.OnMouseMove(mouseEvent3D);
base.OnMouseMove(mouseEvent3D, mouseIsOver);
}
public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)

View file

@ -72,12 +72,12 @@ namespace MatterHackers.MatterControl.DesignTools
{
return new List<IObject3DControl>
{
new TracedPositionObject3DControl(object3DControlsLayer, this, Color.Green, () => StartPosition, (position) =>
new TracedPositionObject3DControl(object3DControlsLayer, this, () => StartPosition, (position) =>
{
StartPosition = position;
Distance = (StartPosition - EndPosition).Length;
}),
new TracedPositionObject3DControl(object3DControlsLayer, this, Color.Red, () => EndPosition, (position) =>
new TracedPositionObject3DControl(object3DControlsLayer, this, () => EndPosition, (position) =>
{
EndPosition = position;
Distance = (StartPosition - EndPosition).Length;

View file

@ -46,9 +46,7 @@ namespace MatterHackers.MatterControl.DesignTools
private readonly double blockSize = 7 * GuiWidget.DeviceScale;
private ITraceable collisionVolume;
private Color color;
private ThemeConfig theme;
private IObject3DControlContext context;
private Func<Vector3> getPosition;
@ -58,13 +56,14 @@ namespace MatterHackers.MatterControl.DesignTools
private Action<Vector3> setPosition;
private Mesh shape;
private bool mouseOver;
public TracedPositionObject3DControl(IObject3DControlContext context, IObject3D owner, Color color, Func<Vector3> getPosition, Action<Vector3> setPosition)
public TracedPositionObject3DControl(IObject3DControlContext context, IObject3D owner, Func<Vector3> getPosition, Action<Vector3> setPosition)
{
this.theme = ApplicationController.Instance.Theme;
this.context = context;
this.getPosition = getPosition;
this.setPosition = setPosition;
this.color = color;
this.shape = PlatonicSolids.CreateCube();
this.owner = owner;
collisionVolume = shape.CreateBVHData();
@ -86,6 +85,12 @@ namespace MatterHackers.MatterControl.DesignTools
public void Draw(DrawGlContentEventArgs e)
{
var color = Color.Black;
if (mouseOver)
{
color = theme.PrimaryAccentColor;
}
GLHelper.Render(shape, color, ShapeMatrix(), RenderTypes.Shaded);
}
@ -109,8 +114,13 @@ namespace MatterHackers.MatterControl.DesignTools
{
}
public void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
if (mouseOver != mouseIsOver)
{
mouseOver = mouseIsOver;
context.GuiSurface.Invalidate();
}
}
public void OnMouseUp(Mouse3DEventArgs mouseEvent3D)

View file

@ -216,7 +216,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
base.OnMouseDown(mouseEvent3D);
}
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
var selectedItem = RootSelection;
ActiveSelectedItem = selectedItem;
@ -260,7 +260,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
base.OnMouseMove(mouseEvent3D);
base.OnMouseMove(mouseEvent3D, mouseIsOver);
}
public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)

View file

@ -51,7 +51,7 @@ namespace MatterHackers.MeshVisualizer
void OnMouseDown(Mouse3DEventArgs mouseEvent3D);
void OnMouseMove(Mouse3DEventArgs mouseEvent3D);
void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver);
void OnMouseUp(Mouse3DEventArgs mouseEvent3D);

View file

@ -55,8 +55,6 @@ namespace MatterHackers.MeshVisualizer
protected bool MouseDownOnControl { get; set; }
public IntersectInfo MouseMoveInfo { get; set; }
public abstract void Dispose();
public bool MouseIsOver
@ -125,8 +123,9 @@ namespace MatterHackers.MeshVisualizer
}
}
public virtual void OnMouseMove(Mouse3DEventArgs mouseEvent3D)
public virtual void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
{
this.MouseIsOver = mouseIsOver;
}
public virtual void OnMouseUp(Mouse3DEventArgs mouseEvent3D)

View file

@ -291,7 +291,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (MouseDownOnObject3DControlVolume && mouseDownObject3DControl != null)
{
mouseDownObject3DControl.OnMouseMove(mouseEvent3D);
mouseDownObject3DControl.OnMouseMove(mouseEvent3D, false);
}
else
{
@ -299,22 +299,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
var object3DControls = this.Object3DControls;
foreach (var object3DControl in object3DControls.OfType<Object3DControl>())
foreach (var object3DControl in object3DControls.OfType<IObject3DControl>())
{
if (hitObject3DControl == object3DControl)
{
object3DControl.MouseIsOver = true;
object3DControl.MouseMoveInfo = info;
HoveredObject3DControl = object3DControl;
object3DControl.OnMouseMove(mouseEvent3D, true);
}
else
{
object3DControl.MouseIsOver = false;
object3DControl.MouseMoveInfo = null;
object3DControl.OnMouseMove(mouseEvent3D, false);
}
// TODO: Why do non-hit volumes get mouse move?
object3DControl.OnMouseMove(mouseEvent3D);
}
}
}