func (vm *Machine) postCheck(stmt *gcode.Block) { for _, w := range stmt.Nodes { if _, ok := w.(*gcode.Word); ok { panic(fmt.Sprintf("Unsupported commands left in block: %s", stmt.Export(-1))) } } }
func (vm *Machine) performMove(stmt *gcode.Block) { if !stmt.IncludesOneOf('X', 'Y', 'Z') { // Nothing to do return } s := vm.State if s.FeedMode == FeedModeInvTime && s.Feedrate == -1 && s.MoveMode != MoveModeRapid { invalidCommand("motionGroup", "rapid", "Non-rapid inverse time feed mode move attempted without a set feedrate") } if vm.CoordinateSystem.OverrideActive() { if s.CutterCompensation != CutCompModeNone { invalidCommand("motionGroup", "move", "Coordinate override attempted with cutter compensation enabled") } if s.MoveMode == MoveModeCWArc || s.MoveMode == MoveModeCCWArc { invalidCommand("motionGroup", "arc", "Coordinate override attempted for arc") } } if s.MoveMode == MoveModeCWArc || s.MoveMode == MoveModeCCWArc { // Arc newX, newY, newZ, newI, newJ, newK := vm.calcPos(*stmt) vm.arc(newX, newY, newZ, newI, newJ, newK, stmt.GetWordDefault('P', 1)) stmt.RemoveAddress('X', 'Y', 'Z', 'I', 'J', 'K', 'P') } else if s.MoveMode == MoveModeLinear || s.MoveMode == MoveModeRapid { // Line newX, newY, newZ, _, _, _ := vm.calcPos(*stmt) vm.move(newX, newY, newZ) stmt.RemoveAddress('X', 'Y', 'Z') } else { invalidCommand("motionGroup", "move", fmt.Sprintf("Move attempted without an active move mode [%s]", stmt.Export(-1))) } }