package org.goko.core.gcode.rs274ngcv3.instruction.builder; import java.util.List; import org.goko.core.common.exception.GkException; import org.goko.core.common.exception.GkTechnicalException; import org.goko.core.gcode.element.GCodeWord; import org.goko.core.gcode.rs274ngcv3.context.EnumMotionControl; import org.goko.core.gcode.rs274ngcv3.context.GCodeContext; import org.goko.core.gcode.rs274ngcv3.element.InstructionType; import org.goko.core.gcode.rs274ngcv3.instruction.SetMotionControlModeInstruction; import org.goko.core.gcode.rs274ngcv3.utils.GCodeWordUtils; public class SetMotionControlModeBuilder extends AbstractInstructionBuilder<SetMotionControlModeInstruction> { /** Constructor */ public SetMotionControlModeBuilder() { super(InstructionType.SET_MOTION_CONTROL_MODE); } /** (inheritDoc) * @see org.goko.core.gcode.rs274ngcv3.instruction.IInstructionBuilder#match(org.goko.core.gcode.rs274ngcv3.context.GCodeContext, java.util.List) */ @Override public boolean match(GCodeContext context, List<GCodeWord> words) throws GkException { return GCodeWordUtils.containsWord("G61", words) || GCodeWordUtils.containsWord("G61.1", words) || GCodeWordUtils.containsWord("G64", words); } /** (inheritDoc) * @see org.goko.core.gcode.rs274ngcv3.instruction.IInstructionBuilder#toInstruction(org.goko.core.gcode.rs274ngcv3.context.GCodeContext, java.util.List) */ @Override protected SetMotionControlModeInstruction getInstruction(GCodeContext context, List<GCodeWord> words) throws GkException { EnumMotionControl controlMode = EnumMotionControl.CONTINUOUS; if(GCodeWordUtils.findAndRemoveWord("G61", words) != null){ controlMode = EnumMotionControl.EXACT_PATH; }else if (GCodeWordUtils.findAndRemoveWord("G61.1", words) != null){ controlMode = EnumMotionControl.EXACT_STOP; }else if( GCodeWordUtils.findAndRemoveWord("G64", words) != null){ controlMode = EnumMotionControl.CONTINUOUS; }else{ throw new GkTechnicalException("Error while parsing [SetMotionControlModeInstruction]"); } return new SetMotionControlModeInstruction(controlMode); } }