From ac3ade78afe2414bbca4bf58862923b9944a8f29 Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sun, 13 Sep 2020 13:25:26 -0700 Subject: [PATCH] adding scaling --- .../TracedPositionObject3DControl.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs b/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs index 15faca00c..7ac7fc3e4 100644 --- a/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs +++ b/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs @@ -28,6 +28,7 @@ either expressed or implied, of the FreeBSD Project. */ using MatterHackers.Agg; +using MatterHackers.Agg.UI; using MatterHackers.DataConverters3D; using MatterHackers.MatterControl.PartPreviewWindow; using MatterHackers.MeshVisualizer; @@ -42,18 +43,25 @@ namespace MatterHackers.MatterControl.DesignTools { public class TracedPositionObject3DControl : IObject3DControl { + private readonly double blockSize = 7 * GuiWidget.DeviceScale; + + private ITraceable collisionVolume; + private Color color; + private IObject3DControlContext context; + private Func getPosition; + private IObject3D owner; + private Action setPosition; private Mesh shape; - private IObject3D owner; - private ITraceable collisionVolume; public TracedPositionObject3DControl(IObject3DControlContext context, IObject3D owner, Color color, Func getPosition, Action setPosition) { + this.context = context; this.getPosition = getPosition; this.setPosition = setPosition; this.color = color; @@ -78,7 +86,14 @@ namespace MatterHackers.MatterControl.DesignTools public void Draw(DrawGlContentEventArgs e) { - GLHelper.Render(shape, color, owner.Matrix * Matrix4X4.CreateTranslation(getPosition()), RenderTypes.Shaded); + var worldPosition = getPosition().Transform(owner.Matrix); + double distBetweenPixelsWorldSpace = context.World.GetWorldUnitsPerScreenPixelAtPosition(worldPosition); + var scale = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace * blockSize); + var offset = Matrix4X4.CreateTranslation(getPosition()); + + var cubeMatrix = scale * owner.Matrix * offset; + + GLHelper.Render(shape, color, cubeMatrix, RenderTypes.Shaded); } public ITraceable GetTraceable()