public ZTuningWidget(PrinterSettings printerSettings, ThemeConfig theme, bool allowRemoveButton = true) { this.theme = theme; this.printerSettings = printerSettings; this.allowRemoveButton = allowRemoveButton; this.HAnchor = HAnchor.Fit; this.VAnchor = VAnchor.Fit | VAnchor.Center; zOffsetStreamContainer = new FlowLayoutWidget(FlowDirection.LeftToRight) { Margin = new BorderDouble(3, 0), Padding = new BorderDouble(3), HAnchor = HAnchor.Fit, VAnchor = VAnchor.Center, BackgroundColor = theme.MinimalShade, Height = 20 }; this.AddChild(zOffsetStreamContainer); double zoffset = printerSettings.GetValue <double>(SettingsKey.baby_step_z_offset); zOffsetStreamDisplay = new TextWidget(zoffset.ToString("0.##"), pointSize: theme.DefaultFontSize) { AutoExpandBoundsToText = true, TextColor = theme.TextColor, Margin = new BorderDouble(5, 0, 8, 0), VAnchor = VAnchor.Center }; zOffsetStreamContainer.AddChild(zOffsetStreamDisplay); clearZOffsetButton = theme.CreateSmallResetButton(); clearZOffsetButton.Name = "Clear ZOffset button"; clearZOffsetButton.ToolTipText = "Clear ZOffset".Localize(); clearZOffsetButton.Visible = allowRemoveButton && zoffset != 0; clearZOffsetButton.Click += (sender, e) => { printerSettings.SetValue(SettingsKey.baby_step_z_offset, "0"); }; zOffsetStreamContainer.AddChild(clearZOffsetButton); // Register listeners printerSettings.SettingChanged += Printer_SettingChanged; }
public void LevelingMesh3x3CorectInterpolation() { AggContext.StaticData = new FileSystemStaticData(TestContext.CurrentContext.ResolveProjectPath(4, "StaticData")); MatterControlUtilities.OverrideAppDataLocation(TestContext.CurrentContext.ResolveProjectPath(4)); var printerSettings = new PrinterSettings(); printerSettings.SetValue(SettingsKey.z_probe_z_offset, "0"); var printer = new PrinterConfig(printerSettings); // a 2 x 2 mesh that goes form 0 on the left to 10 on the right { var levelingData = new PrintLevelingData(); // put them in left to right - bottom to top levelingData.SampledPositions = new List <Vector3>(); levelingData.SampledPositions.Add(new Vector3(0, 0, 0)); levelingData.SampledPositions.Add(new Vector3(10, 0, 10)); levelingData.SampledPositions.Add(new Vector3(0, 10, 0)); levelingData.SampledPositions.Add(new Vector3(10, 10, 10)); LevelingFunctions levelingFunctionsMesh2x2 = new LevelingFunctions(printer, levelingData); // check on points AssertMeshLevelPoint(new Vector3(0, 0, 0), new Vector3(0, 0, 0), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 0, 0), new Vector3(10, 0, 10), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 10, 0), new Vector3(10, 10, 10), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(0, 10, 0), new Vector3(0, 10, 0), levelingFunctionsMesh2x2); // check raised on points AssertMeshLevelPoint(new Vector3(0, 0, 5), new Vector3(0, 0, 5), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 0, 5), new Vector3(10, 0, 15), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 10, 5), new Vector3(10, 10, 15), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(0, 10, 5), new Vector3(0, 10, 5), levelingFunctionsMesh2x2); // check between points AssertMeshLevelPoint(new Vector3(5, 0, 0), new Vector3(5, 0, 5), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(5, 0, 5), new Vector3(5, 0, 10), levelingFunctionsMesh2x2); // check outside points AssertMeshLevelPoint(new Vector3(-5, 0, 0), new Vector3(-5, 0, -5), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(-5, 0, 5), new Vector3(-5, 0, 0), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(15, 0, 0), new Vector3(15, 0, 15), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(15, 0, 5), new Vector3(15, 0, 20), levelingFunctionsMesh2x2); } // a 3 x 3 mesh that goes form 0 on the left to 10 on the right { var levelingData = new PrintLevelingData(); // put them in left to right - bottom to top levelingData.SampledPositions = new List <Vector3>(); levelingData.SampledPositions.Add(new Vector3(0, 0, 0)); levelingData.SampledPositions.Add(new Vector3(5, 0, 5)); levelingData.SampledPositions.Add(new Vector3(10, 0, 10)); levelingData.SampledPositions.Add(new Vector3(0, 5, 0)); levelingData.SampledPositions.Add(new Vector3(5, 5, 5)); levelingData.SampledPositions.Add(new Vector3(10, 5, 10)); levelingData.SampledPositions.Add(new Vector3(0, 10, 0)); levelingData.SampledPositions.Add(new Vector3(5, 10, 5)); levelingData.SampledPositions.Add(new Vector3(10, 10, 10)); LevelingFunctions levelingFunctionsMesh2x2 = new LevelingFunctions(printer, levelingData); // check on points AssertMeshLevelPoint(new Vector3(0, 0, 0), new Vector3(0, 0, 0), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 0, 0), new Vector3(10, 0, 10), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 10, 0), new Vector3(10, 10, 10), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(0, 10, 0), new Vector3(0, 10, 0), levelingFunctionsMesh2x2); // check raised on points AssertMeshLevelPoint(new Vector3(0, 0, 5), new Vector3(0, 0, 5), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 0, 5), new Vector3(10, 0, 15), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(10, 10, 5), new Vector3(10, 10, 15), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(0, 10, 5), new Vector3(0, 10, 5), levelingFunctionsMesh2x2); // check between points AssertMeshLevelPoint(new Vector3(5, 0, 0), new Vector3(5, 0, 5), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(5, 0, 5), new Vector3(5, 0, 10), levelingFunctionsMesh2x2); // check outside points AssertMeshLevelPoint(new Vector3(-5, 0, 0), new Vector3(-5, 0, -5), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(-5, 0, 5), new Vector3(-5, 0, 0), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(15, 0, 0), new Vector3(15, 0, 15), levelingFunctionsMesh2x2); AssertMeshLevelPoint(new Vector3(15, 0, 5), new Vector3(15, 0, 20), levelingFunctionsMesh2x2); } }
public void MorePauseHandlingStreamTests() { string[] inputLines = new string[] { "; the printer is moving normally", "G1 X10 Y10 Z10 E0", "G1 X11 Y10 Z10 E10", "G1 X12 Y10 Z10 E30", "; the printer pauses", "@pause", "; do_resume", // just a marker for us to issue a resume // move some more "G1 X13 Y10 Z10 E40", "G1 X14 Y10 Z10 E50", "G1 X15 Y10 Z10 E60", null, }; // We should go back to the above code when possible. It requires making pause part and move while paused part of the stream. // All communication should go through stream to minimize the difference between printing and controlling while not printing (all printing in essence). string[] expected = new string[] { "; the printer is moving normally", "G1 X10 Y10 Z10", "G1 X11 E10", "G1 X12 E30", "; the printer pauses", "", "", "G1 Z20 E20 F12000", "G90", "M114", "", "; do_resume", "G92 E-10", "G1 Z16.67 F3001", "G1 X12.01 Y10.01 Z13.34", "G1 Z10.01", "G1 X12 Y10 Z10 F3000", "", "G1 Z0 E30.8 F12000", "G90", "M114", "G1 X13 Z10 E40", "G1 X14 E50", "G1 X15 E60", null, }; StaticData.Instance = new MatterHackers.Agg.FileSystemStaticData(Path.Combine("..", "..", "..", "..", "StaticData")); MatterControlUtilities.OverrideAppDataLocation(); // this is the pause and resume from the Eris PrinterSettings settings = ActiveSliceSettings.Instance; settings.SetValue(SettingsKey.pause_gcode, "G91\nG1 Z10 E - 10 F12000\n G90"); settings.SetValue(SettingsKey.resume_gcode, "G91\nG1 Z-10 E10.8 F12000\nG90"); List <GCodeStream> streamList; GCodeStream pauseHandlingStream = CreateTestGCodeStream(inputLines, out streamList); PauseHandlingStream pauseStream = null; foreach (var stream in streamList) { if (stream as PauseHandlingStream != null) { pauseStream = (PauseHandlingStream)stream; break; } } int expectedIndex = 0; string actualLine = pauseHandlingStream.ReadLine(); string expectedLine = expected[expectedIndex++]; Assert.AreEqual(expectedLine, actualLine, "Unexpected response from PauseHandlingStream"); while (actualLine != null) { expectedLine = expected[expectedIndex++]; actualLine = pauseHandlingStream.ReadLine(); //Debug.WriteLine("\"{0}\",".FormatWith(actualLine)); if (actualLine == "; do_resume") { pauseStream.Resume(); } Assert.AreEqual(expectedLine, actualLine, "Unexpected response from PauseHandlingStream"); } }
private void AddDisplay(PrinterSettings printerSettings, ThemeConfig theme, bool showClearButton, string setting, int toolIndex, TextWidget widget) { GuiWidget clearZOffsetButton = null; void Printer_SettingChanged(object s, StringEventArgs e) { if (e?.Data == setting) { double zOffset = printerSettings.GetValue <double>(setting); bool hasOverriddenZOffset = zOffset != 0; if (clearZOffsetButton != null) { clearZOffsetButton.Visible = hasOverriddenZOffset; } widget.Text = zOffset.ToString("0.##"); DescribeExtruder(widget, toolIndex); } } var zOffsetStreamContainer = new FlowLayoutWidget(FlowDirection.LeftToRight) { Margin = new BorderDouble(3, 0), Padding = new BorderDouble(3), HAnchor = HAnchor.Fit | HAnchor.Right, VAnchor = VAnchor.Absolute, Height = 20 * GuiWidget.DeviceScale }; this.AddChild(zOffsetStreamContainer); var zoffset = printerSettings.GetValue <double>(setting); zOffsetStreamContainer.AddChild(widget); if (showClearButton) { clearZOffsetButton = theme.CreateSmallResetButton(); clearZOffsetButton.Name = "Clear ZOffset button"; clearZOffsetButton.ToolTipText = "Clear ZOffset".Localize(); clearZOffsetButton.Visible = zoffset != 0; clearZOffsetButton.Click += (sender, e) => { printerSettings.SetValue(setting, "0"); }; zOffsetStreamContainer.AddChild(clearZOffsetButton); } printerSettings.SettingChanged += Printer_SettingChanged; this.Closed += (s, e) => { printerSettings.SettingChanged -= Printer_SettingChanged; }; }