private async Task InterpretProgram(GCodePreparer preparer, IProgress <float> progress) { CoordintatesExpression coordintatesExpression = new CoordintatesExpression(); GCodeExpression gCodeExpression = new GCodeExpression(); MCodeExpression mCodeExpression = new MCodeExpression(); TCodeExpression tCodeExpression = new TCodeExpression(); FeedrateExpression feedrateExpression = new FeedrateExpression(); await Task.Run(() => { float progressValue = 0; int lineNumber = 0; foreach (var preparedString in preparer.Strings) { Context context = new Context { PreviousFrame = Program.LastOrDefault(), InputString = preparedString }; gCodeExpression.Interpret(context); mCodeExpression.Interpret(context); tCodeExpression.Interpret(context); coordintatesExpression.Interpret(context); feedrateExpression.Interpret(context); Program.Add(context.OutputData); var currentValue = (float)((double)lineNumber / preparer.Strings.Count * 90 + 10); if ((currentValue - progressValue) > 0.1) { progressValue = currentValue; progress.Report(progressValue); } lineNumber++; } }).ConfigureAwait(false); }
public void InterpretTest(string value) { var exp = new CoordintatesExpression(); var context = new Context { InputString = value }; exp.Interpret(context); var coordinates = context.OutputData.Coordinate; Assert.IsTrue(coordinates.X == 0.046f && coordinates.Y == 0.756f && coordinates.A == 0.122f && coordinates.B == 12.456f && coordinates.C == 0f && coordinates.U == -11.111f && coordinates.V == 0.2f && coordinates.W == 8.9f); }