From a3903be868deaa8a7fb8b51b4901b16872ad6ee4 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Fri, 27 Apr 2018 18:28:49 -0700 Subject: [PATCH] Made animation speed be right Put in 10 x 10 grid --- .../PrintLeveling/LevelWizard5x5Mesh.cs | 148 ------------------ .../PrintLeveling/LevelWizardBase.cs | 17 +- ...velWizard3x3Mesh.cs => LevelWizardMesh.cs} | 86 ++++------ .../PrintLeveling/PrintLevelingData.cs | 9 +- MatterControl.csproj | 3 +- SetupWizard/DesignSpaceHelp.cs | 1 + .../Settings/PrinterSettings.cs | 2 + StaticData/SliceSettings/Properties.json | 2 +- Submodules/agg-sharp | 2 +- 9 files changed, 61 insertions(+), 209 deletions(-) delete mode 100644 ConfigurationPage/PrintLeveling/LevelWizard5x5Mesh.cs rename ConfigurationPage/PrintLeveling/{LevelWizard3x3Mesh.cs => LevelWizardMesh.cs} (65%) diff --git a/ConfigurationPage/PrintLeveling/LevelWizard5x5Mesh.cs b/ConfigurationPage/PrintLeveling/LevelWizard5x5Mesh.cs deleted file mode 100644 index d903380a0..000000000 --- a/ConfigurationPage/PrintLeveling/LevelWizard5x5Mesh.cs +++ /dev/null @@ -1,148 +0,0 @@ -/* -Copyright (c) 2014, Lars Brubaker -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. -*/ - -using System; -using System.Collections.Generic; -using MatterHackers.Agg.UI; -using MatterHackers.MatterControl.SlicerConfiguration; -using MatterHackers.MeshVisualizer; -using MatterHackers.VectorMath; - -namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling -{ - public class LevelWizard5x5Mesh : LevelWizardBase - { - public LevelWizard5x5Mesh(PrinterConfig printer, ThemeConfig theme) - : base(printer, theme) - { - } - - public override int ProbeCount => 25; - - public override IEnumerable GetPrintLevelPositionToSample() - { - yield return GetPosition(0, 0); - yield return GetPosition(1, 0); - yield return GetPosition(2, 0); - yield return GetPosition(3, 0); - yield return GetPosition(4, 0); - - yield return GetPosition(4, 1); - yield return GetPosition(3, 1); - yield return GetPosition(2, 1); - yield return GetPosition(1, 1); - yield return GetPosition(0, 1); - - yield return GetPosition(0, 2); - yield return GetPosition(1, 2); - yield return GetPosition(2, 2); - yield return GetPosition(3, 2); - yield return GetPosition(4, 2); - - yield return GetPosition(4, 3); - yield return GetPosition(3, 3); - yield return GetPosition(2, 3); - yield return GetPosition(1, 3); - yield return GetPosition(0, 3); - - yield return GetPosition(0, 4); - yield return GetPosition(1, 4); - yield return GetPosition(2, 4); - yield return GetPosition(3, 4); - yield return GetPosition(4, 4); - } - - private Vector2 GetPosition(int xIndex, int yIndex) - { - Vector2 bedSize = printer.Settings.GetValue(SettingsKey.bed_size); - Vector2 printCenter = printer.Settings.GetValue(SettingsKey.print_center); - - if (printer.Settings.GetValue(SettingsKey.bed_shape) == BedShape.Circular) - { - // reduce the bed size by the ratio of the radius (square root of 2) so that the sample positions will fit on a ciclular bed - bedSize *= 1.0 / Math.Sqrt(2); - } - - Vector2 samplePosition = new Vector2(); - switch (xIndex) - { - case 0: - samplePosition.X = printCenter.X - (bedSize.X / 2) * .8; - break; - - case 1: - samplePosition.X = printCenter.X - (bedSize.X / 2) * .4; - break; - - case 2: - samplePosition.X = printCenter.X; - break; - - case 3: - samplePosition.X = printCenter.X + (bedSize.X / 2) * .4; - break; - - case 4: - samplePosition.X = printCenter.X + (bedSize.X / 2) * .8; - break; - - default: - throw new IndexOutOfRangeException(); - } - - switch (yIndex) - { - case 0: - samplePosition.Y = printCenter.Y - (bedSize.Y / 2) * .8; - break; - - case 1: - samplePosition.Y = printCenter.Y - (bedSize.Y / 2) * .4; - break; - - case 2: - samplePosition.Y = printCenter.Y; - break; - - case 3: - samplePosition.Y = printCenter.Y + (bedSize.Y / 2) * .4; - break; - - case 4: - samplePosition.Y = printCenter.Y + (bedSize.Y / 2) * .8; - break; - - default: - throw new IndexOutOfRangeException(); - } - - return samplePosition; - } - } -} \ No newline at end of file diff --git a/ConfigurationPage/PrintLeveling/LevelWizardBase.cs b/ConfigurationPage/PrintLeveling/LevelWizardBase.cs index b905ec193..2089768de 100644 --- a/ConfigurationPage/PrintLeveling/LevelWizardBase.cs +++ b/ConfigurationPage/PrintLeveling/LevelWizardBase.cs @@ -239,17 +239,24 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling protected PrintLevelWizardControl printLevelWizard; private static SystemWindow printLevelWizardWindow; protected PrinterConfig printer; + private ThemeConfig theme; public LevelWizardBase(PrinterConfig printer, ThemeConfig theme) : base(500, 370) { AlwaysOnTopOfMain = true; - this.printer = printer; this.Title = string.Format("{0} - {1}", ApplicationController.Instance.ProductName, "Print Leveling Wizard".Localize()); + this.theme = theme; + this.printer = printer; + } + + public override void OnLoad(EventArgs args) + { printLevelWizard = new PrintLevelWizardControl(printer, this, theme); AddChild(printLevelWizard); + base.OnLoad(args); } public abstract int ProbeCount { get; } @@ -316,11 +323,15 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling break; case LevelingSystem.Probe3x3Mesh: - printLevelWizardWindow = new LevelWizard3x3Mesh(printer, theme); + printLevelWizardWindow = new LevelWizardMesh(printer, 3, 3, theme); break; case LevelingSystem.Probe5x5Mesh: - printLevelWizardWindow = new LevelWizard5x5Mesh(printer, theme); + printLevelWizardWindow = new LevelWizardMesh(printer, 5, 5, theme); + break; + + case LevelingSystem.Probe10x10Mesh: + printLevelWizardWindow = new LevelWizardMesh(printer, 10, 10, theme); break; default: diff --git a/ConfigurationPage/PrintLeveling/LevelWizard3x3Mesh.cs b/ConfigurationPage/PrintLeveling/LevelWizardMesh.cs similarity index 65% rename from ConfigurationPage/PrintLeveling/LevelWizard3x3Mesh.cs rename to ConfigurationPage/PrintLeveling/LevelWizardMesh.cs index c70bd8fb8..7bcfdff4e 100644 --- a/ConfigurationPage/PrintLeveling/LevelWizard3x3Mesh.cs +++ b/ConfigurationPage/PrintLeveling/LevelWizardMesh.cs @@ -36,31 +36,28 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { - public class LevelWizard3x3Mesh : LevelWizardBase + public class LevelWizardMesh : LevelWizardBase { - public LevelWizard3x3Mesh(PrinterConfig printer, ThemeConfig theme) + int gridWidth; + int gridHeight; + + private LevelWizardMesh() + : base(null, null) + { + + } + + public LevelWizardMesh(PrinterConfig printer, + int width, int height, ThemeConfig theme) : base(printer, theme) { + this.gridWidth = width; + this.gridHeight = height; } - public override int ProbeCount => 9; + public override int ProbeCount => gridWidth * gridHeight; public override IEnumerable GetPrintLevelPositionToSample() - { - yield return GetPosition(0, 0); - yield return GetPosition(1, 0); - yield return GetPosition(2, 0); - - yield return GetPosition(2, 1); - yield return GetPosition(1, 1); - yield return GetPosition(0, 1); - - yield return GetPosition(0, 2); - yield return GetPosition(1, 2); - yield return GetPosition(2, 2); - } - - private Vector2 GetPosition(int xIndex, int yIndex) { Vector2 bedSize = printer.Settings.GetValue(SettingsKey.bed_size); Vector2 printCenter = printer.Settings.GetValue(SettingsKey.print_center); @@ -71,44 +68,27 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling bedSize *= 1.0 / Math.Sqrt(2); } - Vector2 samplePosition = new Vector2(); - switch (xIndex) + double halfXSize = (bedSize.X / 2) * .8; + double xStep = (halfXSize * 2) / (gridWidth - 1); + double halfYSize = (bedSize.Y / 2) * .8; + double yStep = (halfYSize * 2) / (gridHeight - 1); + for (int y = 0; y < gridHeight; y++) { - case 0: - samplePosition.X = printCenter.X - (bedSize.X / 2) * .8; - break; + // make it such that every other line is printed from right to left + for (int x = 0; x < gridWidth; x++) + { + int dirX = x; + if ((y % 2) == 1) + { + dirX = (gridWidth - 1) - x; + } + Vector2 samplePosition = new Vector2(); + samplePosition.X = printCenter.X - halfXSize + (dirX * xStep); + samplePosition.Y = printCenter.Y - halfYSize + (y * yStep); - case 1: - samplePosition.X = printCenter.X; - break; - - case 2: - samplePosition.X = printCenter.X + (bedSize.X / 2) * .8; - break; - - default: - throw new IndexOutOfRangeException(); + yield return samplePosition; + } } - - switch (yIndex) - { - case 0: - samplePosition.Y = printCenter.Y - (bedSize.Y / 2) * .8; - break; - - case 1: - samplePosition.Y = printCenter.Y; - break; - - case 2: - samplePosition.Y = printCenter.Y + (bedSize.Y / 2) * .8; - break; - - default: - throw new IndexOutOfRangeException(); - } - - return samplePosition; } } } \ No newline at end of file diff --git a/ConfigurationPage/PrintLeveling/PrintLevelingData.cs b/ConfigurationPage/PrintLeveling/PrintLevelingData.cs index 701a15215..d676f3622 100644 --- a/ConfigurationPage/PrintLeveling/PrintLevelingData.cs +++ b/ConfigurationPage/PrintLeveling/PrintLevelingData.cs @@ -10,7 +10,7 @@ using System.Linq; namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { [JsonConverter(typeof(StringEnumConverter))] - public enum LevelingSystem { Probe3Points, Probe7PointRadial, Probe13PointRadial, Probe3x3Mesh, Probe5x5Mesh } + public enum LevelingSystem { Probe3Points, Probe7PointRadial, Probe13PointRadial, Probe3x3Mesh, Probe5x5Mesh, Probe10x10Mesh } public class PrintLevelingData { @@ -119,6 +119,13 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling } break; + case LevelingSystem.Probe10x10Mesh: + if (levelingData.SampledPositions.Count != 100) // different criteria for what is not initialized + { + return true; + } + break; + default: throw new NotImplementedException(); } diff --git a/MatterControl.csproj b/MatterControl.csproj index 3795bb1c9..3cad1c2c3 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -74,12 +74,11 @@ + - - diff --git a/SetupWizard/DesignSpaceHelp.cs b/SetupWizard/DesignSpaceHelp.cs index e21eb3346..d72cb5937 100644 --- a/SetupWizard/DesignSpaceHelp.cs +++ b/SetupWizard/DesignSpaceHelp.cs @@ -400,6 +400,7 @@ namespace MatterHackers.MatterControl title.Text = guide.Title; description.Text = guide.Description; imageSequenceWidget.ImageSequence = AggContext.StaticData.LoadSequence(Path.Combine("Icons", "provider_loading.gif")); + ApplicationController.Instance.DownloadToImageSequenceAsync(imageSequenceWidget.ImageSequence, guide.AnimationUri); }; } diff --git a/SlicerConfiguration/Settings/PrinterSettings.cs b/SlicerConfiguration/Settings/PrinterSettings.cs index 749cd690a..30623a0ba 100644 --- a/SlicerConfiguration/Settings/PrinterSettings.cs +++ b/SlicerConfiguration/Settings/PrinterSettings.cs @@ -780,6 +780,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return (T)(object)(LevelingSystem.Probe3x3Mesh); case "5x5 Mesh": return (T)(object)(LevelingSystem.Probe5x5Mesh); + case "10x10 Mesh": + return (T)(object)(LevelingSystem.Probe10x10Mesh); default: #if DEBUG throw new NotImplementedException(); diff --git a/StaticData/SliceSettings/Properties.json b/StaticData/SliceSettings/Properties.json index 859638404..d39203c2d 100644 --- a/StaticData/SliceSettings/Properties.json +++ b/StaticData/SliceSettings/Properties.json @@ -709,7 +709,7 @@ "PresentationName": "Leveling Solution", "HelpText": "The print leveling algorithm to use.", "DataEditType": "LIST", - "ListValues": "3 Point Plane,7 Point Disk,13 Point Disk,3x3 Mesh,5x5 Mesh", + "ListValues": "3 Point Plane,7 Point Disk,13 Point Disk,3x3 Mesh,5x5 Mesh,10x10 Mesh", "ShowAsOverride": true, "ShowIfSet": "!has_hardware_leveling", "DefaultValue": "3 Point Plane", diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 5ff72caf6..5866569b0 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 5ff72caf66fa6b90d2619a84adbbd6899094dee0 +Subproject commit 5866569b025217ce46079a3d97db8830554515c4