Merge branch 'gcode_arc_rendering' of https://github.com/eyck/OctoPrint into pr/eyck/gcode_arc_rendering

This commit is contained in:
Gina Häußge 2016-07-06 13:38:54 +02:00
commit 07dc0499d0
2 changed files with 33 additions and 2 deletions

View file

@ -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,

View file

@ -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