private CNCState.CNCState ProcessDirectMove(Arguments block, ActionProgram.ActionProgram program, CNCState.CNCState state) { decimal?X = GetValue(block.X, state); decimal?Y = GetValue(block.Y, state); decimal?Z = GetValue(block.Z, state); decimal?I = GetValue(block.I, state); decimal?J = GetValue(block.J, state); decimal?K = GetValue(block.K, state); decimal?R = GetValue(block.R, state); CNCState.AxisState.MType moveType; var cmd = block.Options.FirstOrDefault((arg) => arg.letter == 'G'); if (cmd != null) { switch (cmd.ivalue1) { case 0: moveType = AxisState.MType.FastLine; break; case 1: moveType = AxisState.MType.Line; break; case 2: moveType = AxisState.MType.ArcCW; break; case 3: moveType = AxisState.MType.ArcCCW; break; default: return(state); } } else { moveType = state.AxisState.MoveType; } state.AxisState.MoveType = moveType; switch (moveType) { case AxisState.MType.FastLine: return(builder.ProcessLineMove(X, Y, Z, true, program, state)); case AxisState.MType.Line: return(builder.ProcessLineMove(X, Y, Z, false, program, state)); case AxisState.MType.ArcCW: return(builder.ProcessArcMove(X, Y, Z, I, J, K, R, false, program, state)); case AxisState.MType.ArcCCW: return(builder.ProcessArcMove(X, Y, Z, I, J, K, R, true, program, state)); } return(state); }