package org.goko.core.gcode.rs274ngcv3.modifier;
import org.goko.core.common.exception.GkException;
import org.goko.core.common.measure.Units;
import org.goko.core.common.measure.quantity.Length;
import org.goko.core.gcode.element.GCodeLine;
import org.goko.core.gcode.element.IGCodeProvider;
import org.goko.core.gcode.element.IInstructionSetIterator;
import org.goko.core.gcode.rs274ngcv3.context.GCodeContext;
import org.goko.core.gcode.rs274ngcv3.element.GCodeProvider;
import org.goko.core.gcode.rs274ngcv3.element.IModifier;
import org.goko.core.gcode.rs274ngcv3.element.InstructionProvider;
import org.goko.core.gcode.rs274ngcv3.element.InstructionType;
import org.goko.core.gcode.rs274ngcv3.instruction.AbstractInstruction;
import org.goko.core.gcode.rs274ngcv3.instruction.StraightFeedInstruction;
public class TestModifier extends AbstractModifier<GCodeProvider> implements IModifier<GCodeProvider> {
/**
* Constructor
* @param idGCodeProvider target provider id
*/
public TestModifier(Integer idGCodeProvider) {
super(idGCodeProvider, "Test modifier");
}
/** (inheritDoc)
* @see org.goko.core.gcode.rs274ngcv3.element.IModifier#isConfigured()
*/
@Override
public boolean isConfigured() {
return true;
}
/** (inheritDoc)
* @see org.goko.core.gcode.rs274ngcv3.element.IModifier#apply(org.goko.core.gcode.rs274ngcv3.element.GCodeProvider, org.goko.core.gcode.rs274ngcv3.element.GCodeProvider)
*/
@Override
protected void applyModifier(IGCodeProvider source, GCodeProvider target) throws GkException {
GCodeContext localContext = new GCodeContext();
InstructionProvider sourceInstructionSet = getRS274NGCService().getInstructions(localContext, source);
IInstructionSetIterator<GCodeContext, AbstractInstruction> iterator = getRS274NGCService().getIterator(sourceInstructionSet, localContext);
while(iterator.hasNext()){
AbstractInstruction instr = iterator.next();
if(instr.getType() == InstructionType.STRAIGHT_FEED){
StraightFeedInstruction sfi = (StraightFeedInstruction) instr;
double nb = Math.ceil(Math.random()*(Math.PI*100))/100;
String strNumber = String.valueOf(nb);
sfi.setZ(sfi.getZ().add(Length.valueOf(strNumber, Units.MILLIMETRE)));
}
}
GCodeProvider result = getRS274NGCService().getGCodeProvider(localContext, sourceInstructionSet);
for (GCodeLine line : result.getLines()) {
target.addLine(line);
}
}
}