import * as React from "react";
import { Layer, Rect, Stage, Group, Line } from "react-konva";
import { parseCommand, CommandType, Command } from "~GcodeParser";
import { ShapeConfig } from "konva/types/Shape";
interface IGcodeVisualiserProps {
gcodeLinesSent: string[];
gcodeLinesQueue: string[];
}
const mult = 3;
const width = 500;
const height = 500;
interface ILastPos {
x: number;
y: number;
eng: boolean;
}
function cmdToLine(cmds: string, color: string, lastPos: ILastPos) {
const command = parseCommand(cmds);
if (command.type === CommandType.G00 || command.type === CommandType.G01) {
const line = (
);
if (command.X) {
lastPos.x = command.X;
}
if (command.Y) {
lastPos.y = command.Y;
}
if (command.Z) {
if (command.Z >= 0) {
lastPos.eng = false;
} else {
lastPos.eng = true;
}
}
return line;
}
}
export default class GcodeVisualiser extends React.PureComponent<
IGcodeVisualiserProps,
{}
> {
constructor(props: IGcodeVisualiserProps) {
super(props);
}
render() {
const { gcodeLinesQueue, gcodeLinesSent } = this.props;
let lastPos: ILastPos = {
x: 60,
y: 0,
eng: false,
};
const sentLines = gcodeLinesSent.map(sl => {
return cmdToLine(sl, "green", lastPos);
});
const pendLines = gcodeLinesQueue.map(sl => {
return cmdToLine(sl, "black", lastPos);
});
return (
{[...sentLines, ...pendLines]}
);
}
}