package com.rvantwisk.cnctools.gcode;
import com.rvantwisk.cnctools.data.ToolParameter;
import com.rvantwisk.cnctools.misc.DimensionProperty;
import com.rvantwisk.cnctools.misc.Dimensions;
import com.rvantwisk.gcodegenerator.GCodeBuilder;
import com.rvantwisk.gcodegenerator.dialects.RS274;
import com.rvantwisk.gcodegenerator.interfaces.PostProcessorConfig;
/**
* Created by rvt on 12/31/13.
*/
public class CncToolsRS274 extends RS274 implements CncToolsGCodegenerator {
public CncToolsRS274(PostProcessorConfig pc) {
super(pc);
}
private ToolParameter toolParameter=null;
@Override
public DimensionProperty convert(final DimensionProperty dimensionProperty) {
if (dimensionProperty.getDimension().getType() == Dimensions.Type.RPM) {
return new DimensionProperty(dimensionProperty);
} else if (dimensionProperty.getDimension().getType() == Dimensions.Type.VELOCITY) {
return dimensionProperty.convert(getVelocityDimension());
} else if (dimensionProperty.getDimension().getType() == Dimensions.Type.LENGTH) {
return dimensionProperty.convert(getLengthDimension());
} else {
throw new IllegalArgumentException("Dimension [" + dimensionProperty.getDimension() + "] not supported");
}
}
@Override
public Dimensions.Dim getLengthDimension() {
return Dimensions.Dim.MM;
}
@Override
public Dimensions.Dim getVelocityDimension() {
if (getLengthDimension() == Dimensions.Dim.MM) {
return Dimensions.Dim.MM_MINUTE;
} else if (getLengthDimension() == Dimensions.Dim.INCH) {
return Dimensions.Dim.INCH_MINUTE;
} else {
throw new RuntimeException("Invalid dimension for length found, no suitable velocity is available.");
}
}
@Override
public void setTool(ToolParameter tool) {
toolParameter = tool;
if (tool==null) return;
// Add tool if this machine has a tool changer
if (this.getPostProcessorConfig().isHasToolChanger() && tool.toolNumberProperty().getValue()!=null) {
this.addBlock(GCodeBuilder.builder().M6(tool.getToolNumber()));
}
// Add feedrate
if (tool.feedRateProperty().valueProperty().getValue()!=null) {
this.addBlock(GCodeBuilder.builder().F(convert(tool.feedRateProperty()).getValue()));
}
// Add spindle speed
if (tool.spindleSpeedProperty().valueProperty().getValue()!=null) {
if (ToolParameter.SpindleDirection.CW.toString().equals(tool.spindleDirectionProperty().get())) {
this.addBlock(GCodeBuilder.builder().M3(convert(tool.spindleSpeedProperty()).getValue()));
} else {
this.addBlock(GCodeBuilder.builder().M4(convert(tool.spindleSpeedProperty()).getValue()));
}
}
}
}