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); } } }