From 10fb3714c78665d81fbd0e2ac005eb2c14868a12 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 15 Jan 2018 13:44:59 +0100 Subject: [PATCH] add support for start and end code --- src/sliceActions/helpers/GCode.js | 9 +++++++++ src/sliceActions/slice.js | 29 ++++++++++++++++++----------- src/sliceActions/slicesToGCode.js | 4 ++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/sliceActions/helpers/GCode.js b/src/sliceActions/helpers/GCode.js index 6955cbf..4683c10 100644 --- a/src/sliceActions/helpers/GCode.js +++ b/src/sliceActions/helpers/GCode.js @@ -122,6 +122,15 @@ export default class { return this; } + addGCode(gcode, { temperature, bedTemperature, heatedbed }) { + gcode = gcode + .replace(/{temperature}/gi, temperature) + .replace(/{bedTemperature}/gi, bedTemperature) + .replace(/{if heatedBed}/gi, heatedbed ? '' : ';'); + + this._addGCode(gcode); + } + getGCode() { return { gcode: this._gcode, diff --git a/src/sliceActions/slice.js b/src/sliceActions/slice.js index 57b8232..a7064e3 100644 --- a/src/sliceActions/slice.js +++ b/src/sliceActions/slice.js @@ -76,16 +76,20 @@ export default function(settings, geometry, openObjectIndexes, constructLinePrev function gcodeToString(gcode) { const currentValues = {}; return gcode.reduce((string, command) => { - let first = true; - for (const action in command) { - const value = command[action]; - const currentValue = currentValues[action]; - if (first) { - string += `${action}${value}`; - first = false; - } else if (currentValue !== value) { - string += ` ${action}${value}`; - currentValues[action] = value; + if (typeof command === 'string') { + string += command; + } else { + let first = true; + for (const action in command) { + const value = command[action]; + const currentValue = currentValues[action]; + if (first) { + string += `${action}${value}`; + first = false; + } else if (currentValue !== value) { + string += ` ${action}${value}`; + currentValues[action] = value; + } } } string += '\n'; @@ -101,7 +105,10 @@ function createGcodeGeometry(gcode) { let lastPoint = [0, 0, 0]; for (let i = 0; i < gcode.length; i ++) { - const { G, F, X, Y, Z } = gcode[i]; + const command = gcode[i]; + if (typeof command === 'string') continue; + + const { G, F, X, Y, Z } = command; if (X || Y || Z) { if (G === 1) { diff --git a/src/sliceActions/slicesToGCode.js b/src/sliceActions/slicesToGCode.js index 790385d..cbc38a2 100644 --- a/src/sliceActions/slicesToGCode.js +++ b/src/sliceActions/slicesToGCode.js @@ -22,6 +22,8 @@ export default function slicesToGCode(slices, settings) { const gcode = new GCode(nozzleToFilamentRatio); + if (settings.startCode) gcode.addGCode(settings.startCode, settings); + const defaultProfile = { travelProfile: travel, retractionProfile: retraction @@ -77,6 +79,8 @@ export default function slicesToGCode(slices, settings) { } } + if (settings.endCode) gcode.addGCode(settings.endCode, settings); + return gcode.getGCode(); }