Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for not assuming that origin position is 0,0,0 #2423

Merged
merged 1 commit into from
Jan 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public GcodeState() {
this.feedRate = 0;
this.spindleSpeed = 0;

this.currentPoint = new Position(0, 0, 0, Units.MM);
this.currentPoint = new Position(Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Units.MM);
}

public GcodeState copy() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ This file is part of Universal Gcode Sender (UGS).
* @author wwinder
*/
public class ArcExpander implements CommandProcessor {
final private boolean convertToLines;
final private double length;
final private DecimalFormat df;
private final boolean convertToLines;
private final double length;
private final DecimalFormat df;

@Override
public String getHelp() {
Expand Down Expand Up @@ -105,6 +105,10 @@ public List<String> processCommand(String command, GcodeState state) throws Gcod
start, end, ps.center(), ps.isClockwise(),
ps.getRadius(), 0, this.length, new PlaneFormatter(ps.getPlaneState()));

if (points.isEmpty()) {
return results;
}

// That function returns the first and last points. Exclude the first
// point because the previous gcode command ends there already.
points.remove(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ This file is part of Universal Gcode Sender (UGS).

import com.google.common.collect.ImmutableList;
import com.willwinder.universalgcodesender.gcode.GcodeParser;
import static com.willwinder.universalgcodesender.gcode.GcodePreprocessorUtils.normalizeCommand;
import com.willwinder.universalgcodesender.gcode.GcodeState;
import com.willwinder.universalgcodesender.gcode.util.GcodeParserException;
import com.willwinder.universalgcodesender.model.Position;
import org.apache.commons.lang3.StringUtils;

import java.util.Collections;
import java.util.List;

import static com.willwinder.universalgcodesender.gcode.GcodePreprocessorUtils.normalizeCommand;

public class RunFromProcessor implements CommandProcessor {
private int lineNumber;
private GcodeParser parser;
private Double clearanceHeight = 0.0;
private Double clearanceHeight = 0.0d;

/**
* Truncates gcode to the specified line, and rewrites the preamble with the GcodeState.
Expand Down Expand Up @@ -67,11 +67,27 @@ public List<String> processCommand(String command, GcodeState state) throws Gcod
return ImmutableList.of(command);
}

private ImmutableList<String> getSkippedLinesState(String command) {
private List<String> getSkippedLinesState(String command) {
Position pos = parser.getCurrentState().currentPoint;
String moveToClearanceHeight = "G0Z" + clearanceHeight;
String moveToXY = "G0X" + pos.x + "Y" + pos.y;
String plunge = "G1Z" + pos.z;

String moveToClearanceHeight = "";
if (!Double.isNaN(pos.z)) {
moveToClearanceHeight = "G0Z" + clearanceHeight;
}

String moveToXY = "G0";
if(!Double.isNaN(pos.x)) {
moveToXY += "X" + pos.x;
}

if(!Double.isNaN(pos.y)) {
moveToXY += "Y" + pos.y;
}

String plunge = "";
if (!Double.isNaN(pos.z)) {
plunge = "G1Z" + pos.z;
}

GcodeState s = parser.getCurrentState();
String normalized = command;
Expand All @@ -98,14 +114,16 @@ private ImmutableList<String> getSkippedLinesState(String command) {

// Append normalized command
normalized
);
).stream()
.filter(line -> !StringUtils.isEmpty(line))
.toList();
}

private ImmutableList<String> skipLine(String command) throws GcodeParserException {
createParser();
parser.addCommand(command);
Position pos = parser.getCurrentState().currentPoint;
clearanceHeight = Math.max(clearanceHeight, pos.z);
clearanceHeight = Math.max(clearanceHeight, Double.isNaN(pos.z) ? 0 : pos.z);
return ImmutableList.of();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ This file is part of Universal Gcode Sender (UGS).

import com.google.common.io.Files;
import com.willwinder.universalgcodesender.IController;
import com.willwinder.universalgcodesender.gcode.ICommandCreator;
import com.willwinder.universalgcodesender.gcode.DefaultCommandCreator;
import com.willwinder.universalgcodesender.gcode.GcodeParser;
import com.willwinder.universalgcodesender.gcode.GcodeState;
import com.willwinder.universalgcodesender.gcode.GcodeStats;
import com.willwinder.universalgcodesender.gcode.ICommandCreator;
import com.willwinder.universalgcodesender.gcode.processors.CommandProcessor;
import com.willwinder.universalgcodesender.gcode.processors.CommentProcessor;
import com.willwinder.universalgcodesender.gcode.processors.DecimalProcessor;
Expand Down Expand Up @@ -102,6 +102,18 @@ public GUIBackend(UGSEventDispatcher eventDispatcher) {
// GUI API //
/////////////

/**
* This allows us to visualize a file without loading a controller profile.
*/
private static void initializeWithFallbackProcessors(GcodeParser parser) {
// Comment processor must come first otherwise we try to parse codes
// out of the comments, like an f-code when we see "(feed rate is 100)"
parser.addCommandProcessor(new CommentProcessor());
parser.addCommandProcessor(new WhitespaceProcessor());
parser.addCommandProcessor(new M30Processor());
parser.addCommandProcessor(new DecimalProcessor(4));
}

@Override
public void addUGSEventListener(UGSEventListener listener) {
eventDispatcher.addListener(listener);
Expand Down Expand Up @@ -227,18 +239,6 @@ public void applySettings(Settings settings) throws Exception {
}
}

/**
* This allows us to visualize a file without loading a controller profile.
*/
private static void initializeWithFallbackProcessors(GcodeParser parser) {
// Comment processor must come first otherwise we try to parse codes
// out of the comments, like an f-code when we see "(feed rate is 100)"
parser.addCommandProcessor(new CommentProcessor());
parser.addCommandProcessor(new WhitespaceProcessor());
parser.addCommandProcessor(new M30Processor());
parser.addCommandProcessor(new DecimalProcessor(4));
}

@Override
public void sendGcodeCommand(String commandText) throws Exception {
sendGcodeCommand(false, commandText);
Expand Down Expand Up @@ -316,6 +316,11 @@ public Position getWorkPosition() {
return controller != null ? controller.getControllerStatus().getWorkCoord() : new Position(0, 0, 0, Units.MM);
}

@Override
public void setWorkPosition(PartialPosition position) throws Exception {
controller.setWorkPosition(position);
}

@Override
public Position getMachinePosition() {
return controller != null ? controller.getControllerStatus().getMachineCoord() : new Position(0, 0, 0, Units.MM);
Expand Down Expand Up @@ -347,17 +352,6 @@ private File getTempDir() {
return tempDir;
}

@Override
public void setGcodeFile(File file) throws Exception {
unsetGcodeFile();

logger.log(Level.INFO, "Setting gcode file. {0}", file.getAbsolutePath());

this.gcodeFile = file;
eventDispatcher.sendUGSEvent(new FileStateEvent(FileState.OPENING_FILE));
processGcodeFile();
}

@Override
public void unsetGcodeFile() throws Exception {
if (gcodeStream != null) {
Expand Down Expand Up @@ -466,6 +460,17 @@ public File getGcodeFile() {
return this.gcodeFile;
}

@Override
public void setGcodeFile(File file) throws Exception {
unsetGcodeFile();

logger.log(Level.INFO, "Setting gcode file. {0}", file.getAbsolutePath());

this.gcodeFile = file;
eventDispatcher.sendUGSEvent(new FileStateEvent(FileState.OPENING_FILE));
processGcodeFile();
}

@Override
public File getProcessedGcodeFile() {
logger.log(Level.FINEST, String.format("Getting processed gcode file (%s).", this.processedGcodeFile));
Expand Down Expand Up @@ -649,15 +654,15 @@ public void toggleCheckMode() throws Exception {
this.controller.toggleCheckMode();
}

///////////////////////
// Utility functions //
///////////////////////

@Override
public void issueSoftReset() throws Exception {
this.controller.issueSoftReset();
}

///////////////////////
// Utility functions //
///////////////////////

@Override
public void requestParserState() throws Exception {
this.controller.viewParserState();
Expand Down Expand Up @@ -716,11 +721,6 @@ public ICommandCreator getCommandCreator() {
return controller.getCommandCreator();
}

@Override
public void setWorkPosition(PartialPosition position) throws Exception {
controller.setWorkPosition(position);
}

@Override
public void setWorkPositionUsingExpression(final Axis axis, final String expression) throws Exception {
Units preferredUnits = getSettings().getPreferredUnits();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public List<LineSegment> toObjFromReader(IGcodeStreamReader reader,
GcodeParser gp = getParser();

// Save the state
Position start = new Position(gp.getCurrentState().getUnits());
Position start = new Position(Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, gp.getCurrentState().getUnits());
double spindleSpeed = 0;

while (reader.getNumRowsRemaining() > 0) {
Expand Down
Loading