示例#1
0
        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]);
            }
        }
示例#2
0
        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);
        }