Merge branch 'gcode_arc_rendering' of https://github.com/eyck/OctoPrint into pr/eyck/gcode_arc_rendering
This commit is contained in:
commit
07dc0499d0
2 changed files with 33 additions and 2 deletions
|
|
@ -229,6 +229,7 @@ var doParse = function () {
|
|||
|
||||
var layer = 0;
|
||||
var x, y, z = 0;
|
||||
var center_i, center_j, direction;
|
||||
var prevX = 0, prevY = 0, prevZ = 0;
|
||||
var f, lastF = 4000;
|
||||
var extrude = false, extrudeRelative = false, retract = 0;
|
||||
|
|
@ -251,6 +252,9 @@ var doParse = function () {
|
|||
y = undefined;
|
||||
z = undefined;
|
||||
retract = 0;
|
||||
center_i = undefined;
|
||||
center_j = undefined;
|
||||
direction = undefined;
|
||||
|
||||
var line = gcode[i].line;
|
||||
var percentage = gcode[i].percentage;
|
||||
|
|
@ -263,7 +267,7 @@ var doParse = function () {
|
|||
|
||||
var log = false;
|
||||
|
||||
if (/^(?:G0|G1)\s/i.test(line)) {
|
||||
if (/^(?:G0|G1|G2|G3)\s/i.test(line)) {
|
||||
var args = line.split(/\s/);
|
||||
|
||||
for (var j = 0; j < args.length; j++) {
|
||||
|
|
@ -330,6 +334,18 @@ var doParse = function () {
|
|||
numSlice = parseFloat(args[j].slice(1));
|
||||
lastF = numSlice;
|
||||
break;
|
||||
case 'i':
|
||||
center_i = Number(args[j].slice(1));
|
||||
break;
|
||||
case 'j':
|
||||
center_j = Number(args[j].slice(1));
|
||||
break;
|
||||
case 'g':
|
||||
if(args[j].charAt(1).toLowerCase()=='2')
|
||||
direction=1;
|
||||
if(args[j].charAt(1).toLowerCase()=='3')
|
||||
direction=-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -487,6 +503,9 @@ var doParse = function () {
|
|||
x: x,
|
||||
y: y,
|
||||
z: z,
|
||||
i: center_i,
|
||||
j: center_j,
|
||||
direction: direction,
|
||||
extrude: extrude,
|
||||
retract: retract,
|
||||
noMove: !move,
|
||||
|
|
|
|||
|
|
@ -490,7 +490,19 @@ GCODE.renderer = (function(){
|
|||
ctx.lineWidth = renderOptions['extrusionWidth'];
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(prevX, prevY);
|
||||
ctx.lineTo(x*zoomFactor,y*zoomFactor);
|
||||
if(cmd.direction !== undefined && cmd.direction != 0){
|
||||
var cmd = cmds[i];
|
||||
var di = cmd.i*zoomFactor;
|
||||
var dj = -1*cmd.j*zoomFactor; // Y-coordinate is inverted
|
||||
var centerX = prevX+di;
|
||||
var centerY = prevY+dj;
|
||||
var startAngle = Math.atan2(prevY-centerY, prevX - centerX);
|
||||
var endAngle = Math.atan2(y*zoomFactor-centerY, x*zoomFactor - centerX);
|
||||
var radius=Math.sqrt(di*di+dj*dj);
|
||||
ctx.arc(centerX,centerY,radius,startAngle,endAngle,cmd.direction<0); // Y-coordinate is inverted so direction is also inverted
|
||||
} else {
|
||||
ctx.lineTo(x*zoomFactor,y*zoomFactor);
|
||||
}
|
||||
ctx.stroke();
|
||||
} else {
|
||||
// we were previously retracting, now we are restarting => draw dot if configured to do so
|
||||
|
|
|
|||
Loading…
Reference in a new issue