UNPKG

gcode-interpreter

Version:
176 lines (170 loc) 5.42 kB
'use strict'; var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js'); var gcodeParser = require('gcode-parser'); var noop = function noop() {}; /** * Returns an object composed from arrays of property names and values. * @example * fromPairs([['a', 1], ['b', 2]]); * // => { 'a': 1, 'b': 2 } */ var fromPairs = function fromPairs(pairs) { var index = -1; var length = !pairs ? 0 : pairs.length; var result = {}; while (++index < length) { var pair = pairs[index]; result[pair[0]] = pair[1]; } return result; }; var partitionWordsByGroup = function partitionWordsByGroup() { var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var groups = []; for (var i = 0; i < words.length; ++i) { var word = words[i]; var letter = word[0]; if (letter === 'G' || letter === 'M' || letter === 'T') { groups.push([word]); continue; } if (groups.length > 0) { groups[groups.length - 1].push(word); } else { groups.push([word]); } } return groups; }; var interpret = function interpret(self, data) { var groups = partitionWordsByGroup(data.words); for (var i = 0; i < groups.length; ++i) { var words = groups[i]; var word = words[0] || []; var letter = word[0]; var code = word[1]; var cmd = ''; var args = {}; if (letter === 'G') { cmd = letter + code; args = fromPairs(words.slice(1)); // Motion Mode if (code === 0 || code === 1 || code === 2 || code === 3 || code === 38.2 || code === 38.3 || code === 38.4 || code === 38.5) { self.motionMode = cmd; } else if (code === 80) { self.motionMode = ''; } } else if (letter === 'M') { cmd = letter + code; args = fromPairs(words.slice(1)); } else if (letter === 'T') { // T1 ; w/o M6 cmd = letter; args = code; } else if (letter === 'F') { // F750 ; w/o motion command cmd = letter; args = code; } else if (letter === 'X' || letter === 'Y' || letter === 'Z' || letter === 'A' || letter === 'B' || letter === 'C' || letter === 'I' || letter === 'J' || letter === 'K') { // Use previous motion command if the line does not start with G-code or M-code. // @example // G0 Z0.25 // X-0.5 Y0. // Z0.1 // G01 Z0. F5. // G2 X0.5 Y0. I0. J-0.5 // X0. Y-0.5 I-0.5 J0. // X-0.5 Y0. I0. J0.5 // @example // G01 // M03 S0 // X5.2 Y0.2 M03 S0 // X5.3 Y0.1 M03 S1000 // X5.4 Y0 M03 S0 // X5.5 Y0 M03 S0 cmd = self.motionMode; args = fromPairs(words); } if (!cmd) { continue; } if (typeof self.handlers[cmd] === 'function') { var func = self.handlers[cmd]; func(args); } else if (typeof self.defaultHandler === 'function') { self.defaultHandler(cmd, args); } if (typeof self[cmd] === 'function') { var _func = self[cmd].bind(self); _func(args); } } }; var Interpreter = /*#__PURE__*/function () { function Interpreter(options) { _rollupPluginBabelHelpers.classCallCheck(this, Interpreter); _rollupPluginBabelHelpers.defineProperty(this, "motionMode", 'G0'); _rollupPluginBabelHelpers.defineProperty(this, "handlers", {}); options = options || {}; this.handlers = options.handlers || {}; this.defaultHandler = options.defaultHandler; } return _rollupPluginBabelHelpers.createClass(Interpreter, [{ key: "loadFromStream", value: function loadFromStream(stream) { var _this = this; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var s = gcodeParser.parseStream(stream, callback); s.on('data', function (data) { interpret(_this, data); }); return s; } }, { key: "loadFromFile", value: function loadFromFile(file) { var _this2 = this; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var s = gcodeParser.parseFile(file, callback); s.on('data', function (data) { interpret(_this2, data); }); return s; } }, { key: "loadFromFileSync", value: function loadFromFileSync(file) { var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var list = gcodeParser.parseFileSync(file); for (var i = 0; i < list.length; ++i) { interpret(this, list[i]); callback(list[i], i); } return list; } }, { key: "loadFromString", value: function loadFromString(str) { var _this3 = this; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var s = gcodeParser.parseString(str, callback); s.on('data', function (data) { interpret(_this3, data); }); return s; } }, { key: "loadFromStringSync", value: function loadFromStringSync(str) { var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var list = gcodeParser.parseStringSync(str); for (var i = 0; i < list.length; ++i) { interpret(this, list[i]); callback(list[i], i); } return list; } }]); }(); var Interpreter$1 = Interpreter; module.exports = Interpreter$1;