From 8511191abb3aca02358810a75eddc37802b9425e Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Wed, 16 Sep 2020 22:44:28 -0700 Subject: [PATCH] Refactoring to build a Height scaling top control --- .../EditorTools/RotateControls/PathControl.cs | 2 +- ...TopControl.cs => ScaleMatrixTopControl.cs} | 20 +++++- .../DesignTools/Primitives/CubeObject3D.cs | 20 +++++- .../Primitives/IObject3DControlsProvider.cs | 4 +- .../DesignTools/Primitives/ImageObject3D.cs | 9 +-- .../Primitives/MeasureToolObject3D.cs | 6 +- .../View3D/Object3DControlsLayer.cs | 64 +++++++++---------- .../Io/PauseHandlingStream.cs | 1 + 8 files changed, 74 insertions(+), 52 deletions(-) rename MatterControlLib/DesignTools/EditorTools/ScaleControls/{ScaleTopControl.cs => ScaleMatrixTopControl.cs} (97%) diff --git a/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs b/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs index eb277a0e6..a0c1bc03e 100644 --- a/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs +++ b/MatterControlLib/DesignTools/EditorTools/RotateControls/PathControl.cs @@ -296,7 +296,7 @@ namespace MatterHackers.Plugins.EditorTools Reset(); } - public List GetObject3DControls(Object3DControlsLayer object3DControlsLayer) + public void AddObject3DControls(Object3DControlsLayer object3DControlsLayer) { throw new NotImplementedException(); } diff --git a/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs b/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleMatrixTopControl.cs similarity index 97% rename from MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs rename to MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleMatrixTopControl.cs index e009e3e48..5af6fadba 100644 --- a/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleTopControl.cs +++ b/MatterControlLib/DesignTools/EditorTools/ScaleControls/ScaleMatrixTopControl.cs @@ -43,7 +43,7 @@ using MatterHackers.VectorMath; namespace MatterHackers.Plugins.EditorTools { - public class ScaleTopControl : Object3DControl + public abstract class ScaleTopControl : Object3DControl { private IObject3D activeSelectedItem; private PlaneShape hitPlane; @@ -66,7 +66,7 @@ namespace MatterHackers.Plugins.EditorTools public ScaleTopControl(IObject3DControlContext context) : base(context) { - theme = MatterControl.AppContext.Theme; + theme = AppContext.Theme; zValueDisplayInfo = new InlineEditControl() { @@ -372,4 +372,20 @@ namespace MatterHackers.Plugins.EditorTools Object3DControlContext.GuiSurface.BeforeDraw -= Object3DControl_BeforeDraw; } } + + public class ScaleMatrixTopControl : ScaleTopControl + { + public ScaleMatrixTopControl(IObject3DControlContext context) + : base(context) + { + } + } + + public class ScaleHeightControl : ScaleTopControl + { + public ScaleHeightControl(IObject3DControlContext context) + : base(context) + { + } + } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs index 43d8f1ff4..bff779056 100644 --- a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs @@ -28,14 +28,15 @@ either expressed or implied, of the FreeBSD Project. */ using System.Threading.Tasks; -using MatterHackers.Agg; using MatterHackers.DataConverters3D; using MatterHackers.Localizations; +using MatterHackers.MatterControl.PartPreviewWindow; +using MatterHackers.Plugins.EditorTools; using MatterHackers.PolygonMesh; namespace MatterHackers.MatterControl.DesignTools { - public class CubeObject3D : PrimitiveObject3D + public class CubeObject3D : PrimitiveObject3D, IObject3DControlsProvider { public CubeObject3D() { @@ -49,6 +50,21 @@ namespace MatterHackers.MatterControl.DesignTools public double Height { get; set; } = 20; + public void AddObject3DControls(Object3DControlsLayer object3DControlsLayer) + { + object3DControlsLayer.AddDefaultControls(); + object3DControlsLayer.AddWorldRotateControls(); + var object3DControls = object3DControlsLayer.Object3DControls; + + //object3DControls.Add(new ScaleMatrixTopControl(object3DControlsLayer)); + object3DControls.Add(new ScaleHeightControl(object3DControlsLayer)); + + object3DControls.Add(new ScaleCornerControl(object3DControlsLayer, 0)); + object3DControls.Add(new ScaleCornerControl(object3DControlsLayer, 1)); + object3DControls.Add(new ScaleCornerControl(object3DControlsLayer, 2)); + object3DControls.Add(new ScaleCornerControl(object3DControlsLayer, 3)); + } + public static async Task Create() { var item = new CubeObject3D(); diff --git a/MatterControlLib/DesignTools/Primitives/IObject3DControlsProvider.cs b/MatterControlLib/DesignTools/Primitives/IObject3DControlsProvider.cs index edeafa53a..c02d7cf21 100644 --- a/MatterControlLib/DesignTools/Primitives/IObject3DControlsProvider.cs +++ b/MatterControlLib/DesignTools/Primitives/IObject3DControlsProvider.cs @@ -35,8 +35,6 @@ namespace MatterHackers.MatterControl.DesignTools { public interface IObject3DControlsProvider { - List GetObject3DControls(Object3DControlsLayer object3DControlsLayer); + void AddObject3DControls(Object3DControlsLayer object3DControlsLayer); } - - } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Primitives/ImageObject3D.cs b/MatterControlLib/DesignTools/Primitives/ImageObject3D.cs index 928eb1836..fe6c058f0 100644 --- a/MatterControlLib/DesignTools/Primitives/ImageObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/ImageObject3D.cs @@ -129,14 +129,9 @@ namespace MatterHackers.MatterControl.DesignTools } } - public List GetObject3DControls(Object3DControlsLayer object3DControlsLayer) + public void AddObject3DControls(Object3DControlsLayer object3DControlsLayer) { - return new List - { - new MoveInZControl(object3DControlsLayer), - new SelectionShadow(object3DControlsLayer), - new SnappingIndicators(object3DControlsLayer), - }; + object3DControlsLayer.AddDefaultControls(); } private ImageBuffer LoadImage() diff --git a/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs b/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs index 8b02f9924..c00750f7d 100644 --- a/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/MeasureToolObject3D.cs @@ -49,7 +49,7 @@ namespace MatterHackers.MatterControl.DesignTools public class MeasureToolObject3D : Object3D, IObject3DControlsProvider, IEditorDraw { private static Mesh shape = null; - private List editorControls; + private List editorControls = null; public MeasureToolObject3D() { @@ -88,7 +88,7 @@ namespace MatterHackers.MatterControl.DesignTools public override bool Persistable => false; - public List GetObject3DControls(Object3DControlsLayer object3DControlsLayer) + public void AddObject3DControls(Object3DControlsLayer object3DControlsLayer) { if (editorControls == null) { @@ -133,7 +133,7 @@ namespace MatterHackers.MatterControl.DesignTools }; } - return editorControls; + object3DControlsLayer.Object3DControls.AddRange(editorControls); } public override async void OnInvalidate(InvalidateArgs invalidateType) diff --git a/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs b/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs index fcda20e8d..3b6d06c71 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs @@ -59,22 +59,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public bool DrawOpenGLContent { get; set; } = true; - private List CurrentObject3DControls { get; set; } = new List(); - - public IEnumerable Object3DControls - { - get - { - if (CurrentObject3DControls == null) - { - return Enumerable.Empty(); - } - else - { - return CurrentObject3DControls; - } - } - } + public List Object3DControls { get; set; } = new List(); private readonly LightingData lighting = new LightingData(); private GuiWidget renderSource; @@ -168,33 +153,44 @@ namespace MatterHackers.MatterControl.PartPreviewWindow DisposeCurrentSelectionObject3DControls(); // On selection change, update state for mappings - CurrentObject3DControls = null; + Object3DControls.Clear(); if (scene.SelectedItem is IObject3DControlsProvider provider) { - CurrentObject3DControls = provider.GetObject3DControls(this); + provider.AddObject3DControls(this); } else { - CurrentObject3DControls = new List(new IObject3DControl[] - { - // add default controls - new RotateCornerControl(this, 0), - new RotateCornerControl(this, 1), - new RotateCornerControl(this, 2), - new MoveInZControl(this), - new ScaleTopControl(this), - new ScaleCornerControl(this, 0), - new ScaleCornerControl(this, 1), - new ScaleCornerControl(this, 2), - new ScaleCornerControl(this, 3), - new SelectionShadow(this), - new SnappingIndicators(this), - }); + // add default controls + Object3DControls.Add(new ScaleMatrixTopControl(this)); + Object3DControls.Add(new ScaleCornerControl(this, 0)); + Object3DControls.Add(new ScaleCornerControl(this, 1)); + Object3DControls.Add(new ScaleCornerControl(this, 2)); + Object3DControls.Add(new ScaleCornerControl(this, 3)); + + AddWorldRotateControls(); + AddDefaultControls(); } }); } + /// + /// Add in MoveInZ, SelectionShadow & SnappingIndicators + /// + public void AddDefaultControls() + { + Object3DControls.Add(new MoveInZControl(this)); + Object3DControls.Add(new SelectionShadow(this)); + Object3DControls.Add(new SnappingIndicators(this)); + } + + public void AddWorldRotateControls() + { + Object3DControls.Add(new RotateCornerControl(this, 0)); + Object3DControls.Add(new RotateCornerControl(this, 1)); + Object3DControls.Add(new RotateCornerControl(this, 2)); + } + private void DisposeCurrentSelectionObject3DControls() { foreach (var item in this.Object3DControls) @@ -202,7 +198,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow item.Dispose(); } - this.CurrentObject3DControls = null; + this.Object3DControls.Clear(); } public static void RenderBounds(DrawEventArgs e, WorldView world, IEnumerable allResults) diff --git a/MatterControlLib/PrinterCommunication/Io/PauseHandlingStream.cs b/MatterControlLib/PrinterCommunication/Io/PauseHandlingStream.cs index 96469e204..12cc65930 100644 --- a/MatterControlLib/PrinterCommunication/Io/PauseHandlingStream.cs +++ b/MatterControlLib/PrinterCommunication/Io/PauseHandlingStream.cs @@ -105,6 +105,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io var deltaRatio = sensorDelta / stepperDelta; if (deltaRatio < .5 || deltaRatio > 2) { + printer.Connection.TerminalLog.WriteLine($"RUNNOUT ({positionSensorData.ExtrusionDiscrepency}): Sensor ({sensorDelta:#.0}) / Stepper ({stepperDelta:#.0}) = {deltaRatio:#.00}"); // we have a discrepancy set a runout state positionSensorData.ExtrusionDiscrepency++; if (positionSensorData.ExtrusionDiscrepency > 2)