public void TestGetAngle1() { var c = new PointF(0, 0); var p1 = new PointF(1, 1); var theta1a = GCodeSplitter.GetAngle(p1.X - c.X, p1.Y - c.Y); var theta1b = (float)Transformation.GetAngle(c, p1); var theta1c = (float)Transformation.RadianToDegree(Transformation.GetAngleRadians(c, p1)); Assert.IsTrue(theta1a == theta1b && theta1b == theta1c); var p2 = new PointF(9, 5); var theta2a = GCodeSplitter.GetAngle(p2.X - c.X, p2.Y - c.Y); var theta2b = (float)Transformation.GetAngle(c, p2); var theta2c = (float)Transformation.RadianToDegree(Transformation.GetAngleRadians(c, p2)); Assert.IsTrue(theta2a == theta2b && theta2b == theta2c); var p3 = new PointF(2, -4); var theta3a = GCodeSplitter.GetAngle(p3.X - c.X, p3.Y - c.Y); var theta3b = (float)Transformation.GetAngle(c, p3); var theta3c = (float)Transformation.RadianToDegree(Transformation.GetAngleRadians(c, p3)); Assert.IsTrue(theta3a == theta3b && theta3b == theta3c); }
[HttpGet("Split/{xSplit:float}/{splitDegrees:float}/{zClearance:float}/{index:int}")] // GET /api/Editor/Split/20/10/20/0 public IActionResult Split(float xSplit, float splitDegrees, float zClearance, int index) { // index means which side to get back if (xSplit != 0) { var splitPoint = new Point3D(xSplit, 0, 0); var drawModel = HttpContext.Session.GetObjectFromJson <DrawModel>("DrawModel"); if (drawModel != null) { var gCode = DrawModel.ToGCode(drawModel); SaveToFile("before_split.txt", gCode); var parsedInstructions = SimpleGCodeParser.ParseText(gCode); var gCodeArray = GCodeSplitter.Split(parsedInstructions, splitPoint, splitDegrees, zClearance); SaveToFile("after_split_1.txt", GCodeUtils.GetGCode(gCodeArray[0])); SaveToFile("after_split_2.txt", GCodeUtils.GetGCode(gCodeArray[1])); // clean up the mess with too many G0 commands var cleanedGCode = GCodeUtils.GetMinimizeGCode(gCodeArray[index]); SaveToFile("after_split_clean.txt", GCodeUtils.GetGCode(cleanedGCode)); var gCodeResult = Block.BuildGCodeOutput("Block_1", cleanedGCode, false); SaveToFile("after_split_build_output.txt", gCodeResult); // convert gcode to draw model var newDrawModel = DrawModel.FromGCode(gCodeResult, drawModel.FileName); HttpContext.Session.SetObjectAsJson("DrawModel", newDrawModel); } return(Ok()); } return(BadRequest()); }
[HttpGet("Split/{xSplit:float}/{splitDegrees:float}/{zClearance:float}")] // GET /api/Editor/Split/100/0/10 public IActionResult Split(float xSplit, float splitDegrees, float zClearance) { // index means which side to get back if (xSplit != 0) { var splitPoint = new Point3D(xSplit, 0, 0); var drawModel = HttpContext.Session.GetObjectFromJson <DrawModel>("DrawModel"); if (drawModel != null) { var gCode = DrawModel.ToGCode(drawModel); // SaveToFile("before_split.txt", gCode); var parsedInstructions = SimpleGCodeParser.ParseText(gCode); var gCodeArray = GCodeSplitter.Split(parsedInstructions, splitPoint, splitDegrees, zClearance); // SaveToFile("after_split_1.txt", GCodeUtils.GetGCode(gCodeArray[0])); // SaveToFile("after_split_2.txt", GCodeUtils.GetGCode(gCodeArray[1])); // clean up the mess with too many G0 commands var cleanedGCode1 = GCodeUtils.GetMinimizeGCode(gCodeArray[0]); var cleanedGCode2 = GCodeUtils.GetMinimizeGCode(gCodeArray[1]); // SaveToFile("after_split_clean_1.txt", GCodeUtils.GetGCode(cleanedGCode1)); // SaveToFile("after_split_clean_2.txt", GCodeUtils.GetGCode(cleanedGCode2)); var gCodeResult1 = Block.BuildGCodeOutput("Block_1", cleanedGCode1, false); var gCodeResult2 = Block.BuildGCodeOutput("Block_1", cleanedGCode2, false); // SaveToFile("after_split_build_output_1.txt", gCodeResult1); // SaveToFile("after_split_build_output_2.txt", gCodeResult2); // convert gcode to draw model var fileName = Path.GetFileNameWithoutExtension(drawModel.FileName); var extension = Path.GetExtension(drawModel.FileName); var newDrawModel1 = DrawModel.FromGCode(gCodeResult1, fileName + "_split_1" + extension); var newDrawModel2 = DrawModel.FromGCode(gCodeResult2, fileName + "_split_2" + extension); // store with index HttpContext.Session.SetObjectAsJson("Split-0", newDrawModel1); HttpContext.Session.SetObjectAsJson("Split-1", newDrawModel2); } return(Ok()); } return(BadRequest()); }
private List <Word> FindWords(string line) { var matches = GCodeSplitter.Matches(line); var words = new List <Word>(matches.Count); var decimalFormat = new NumberFormatInfo() { NumberDecimalSeparator = "." }; foreach (Match match in matches) { words.Add(new Word() { Command = match.Groups[1].Value[0], Parameter = double.Parse(match.Groups[2].Value, decimalFormat), FullWord = $"{match.Groups[1].Value}{match.Groups[2].Value}" }); } return(words); }