public void Check3PointLevelingPositions() { AggContext.StaticData = new FileSystemStaticData(TestContext.CurrentContext.ResolveProjectPath(4, "StaticData")); MatterControlUtilities.OverrideAppDataLocation(TestContext.CurrentContext.ResolveProjectPath(4)); var printer = new PrinterConfig(new PrinterSettings()); var levelingSolution = new LevelWizard3Point(printer.Shim()); var printerSettings = printer.Settings; { var samples = levelingSolution.GetPrintLevelPositionToSample().ToList(); Assert.AreEqual("200,200", printerSettings.GetValue(SettingsKey.bed_size)); Assert.AreEqual("100,100", printerSettings.GetValue(SettingsKey.print_center)); Assert.AreEqual("rectangular", printerSettings.GetValue(SettingsKey.bed_shape)); Assert.AreEqual(new Vector2(20, 20), samples[0]); Assert.AreEqual(new Vector2(180, 20), samples[1]); Assert.AreEqual(new Vector2(100, 180), samples[2]); } }
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.probe_offset, "0,0,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.Shim(), 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.Shim(), 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 ExportStreamG30Tests() { string[] inputLines = new string[] { "M117 Starting Print", "M104 S0", "; comment line", "G28 ; home all axes", "G0 Z10 F1800", "G0 Z11 F1800", "G0 X1Y0Z9 F1800", "G0 Z10 F1801", "G30 Z0", "M114", "G0 Z10 F1800", "M114", "M109 S[temperature]", }; // 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[] { "M117 Starting Print", "M104 S0", "; comment line", "G28 ; home all axes", "G1 Z10 F1800", "G1 Z11", "G1 X1 Y0 Z9", "G1 Z10 F1801", "G30 Z0", "M114", "G1 Z10 F1800", "M114", "M109 S[temperature]", }; var printer = new PrinterConfig(new PrinterSettings()); var testStream = GCodeExport.GetExportStream(printer, new TestGCodeStream(printer.Shim(), inputLines), true); ValidateStreamResponse(expected, testStream); }
public void LineCuttingOnWhenLevelingOnNoProbeTest() { string[] inputLines = new string[] { "G1 X0Y0Z0E0F1000", "G1 X0Y0Z0E1F1000", "G1 X10 Y0 Z0 F1000", }; string[] expected = new string[] { "; Software Leveling Applied", "G1 X0 Y0 Z-0.1 E0 F1000", "G1 E1", "G1 X1 Y0 Z-0.1", "G1 X2 Y0 Z-0.1", "G1 X3 Y0 Z-0.1", "G1 X4 Y0 Z-0.1", "G1 X5 Y0 Z-0.1", "G1 X6 Y0 Z-0.1", "G1 X7 Y0 Z-0.1", "G1 X8 Y0 Z-0.1", "G1 X9 Y0 Z-0.1", "G1 X10 Y0 Z-0.1", }; var printer = new PrinterConfig(new PrinterSettings()); var levelingData = new PrintLevelingData() { SampledPositions = new List <Vector3>() { new Vector3(0, 0, -.1), new Vector3(10, 0, -.1), new Vector3(5, 10, -.1) } }; printer.Settings.SetValue(SettingsKey.print_leveling_data, JsonConvert.SerializeObject(levelingData)); printer.Settings.SetValue(SettingsKey.probe_offset, "0,0,-.1"); printer.Settings.SetValue(SettingsKey.print_leveling_enabled, "1"); var testStream = GCodeExport.GetExportStream(printer, new TestGCodeStream(printer.Shim(), inputLines), true); ValidateStreamResponse(expected, testStream); }
public void LineCuttingOffWhenNoLevelingTest() { string[] inputLines = new string[] { "G1 X0Y0Z0E0 F1000", "G1 X10 Y0 Z0 F1000", }; // 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[] { "G1 X0 Y0 Z0 E0 F1000", "G1 X10", }; var printer = new PrinterConfig(new PrinterSettings()); printer.Settings.SetValue(SettingsKey.has_hardware_leveling, "1"); var testStream = GCodeExport.GetExportStream(printer, new TestGCodeStream(printer.Shim(), inputLines), true); ValidateStreamResponse(expected, testStream); }
public void SmoothieRewriteTest() { string[] inputLines = new string[] { "G28", "M119", }; // 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[] { "G28", "M280 P0 S10.6", "G4 P400", "M280 P0 S7", "G4 P400", "M117 Ready ", "M119", "switch filament; WRITE_RAW", }; var printer = new PrinterConfig(new PrinterSettings()); var write_filter = "\"^(G28)\", \"G28,M280 P0 S10.6,G4 P400,M280 P0 S7,G4 P400,M117 Ready \""; write_filter += "\\n\"^(M119)\", \"M119,switch filament; WRITE_RAW\""; printer.Settings.SetValue(SettingsKey.write_regex, write_filter); var testStream = GCodeExport.GetExportStream(printer, new TestGCodeStream(printer.Shim(), inputLines), true); ValidateStreamResponse(expected, testStream); }