inject tool use data into .gcode header comments

This commit is contained in:
Stewart Allen 2020-07-08 12:18:15 -04:00
commit 9f3ddb3511

View file

@ -1746,6 +1746,7 @@
settings = print.settings, settings = print.settings,
device = settings.device, device = settings.device,
gcodes = settings.device || {}, gcodes = settings.device || {},
tools = settings.tools,
space = gcodes.gcodeSpace ? ' ' : '', space = gcodes.gcodeSpace ? ' ' : '',
stripComments = gcodes.gcodeStrip || false, stripComments = gcodes.gcodeStrip || false,
cmdToolChange = gcodes.gcodeChange || [ "M6 T{tool}" ], cmdToolChange = gcodes.gcodeChange || [ "M6 T{tool}" ],
@ -1771,19 +1772,19 @@
min: { x:Infinity, y:Infinity, z:Infinity} min: { x:Infinity, y:Infinity, z:Infinity}
}, },
offset = { offset = {
x: -settings.origin.x, x: -settings.origin.x,
y: settings.origin.y y: settings.origin.y
}, },
consts = { consts = {
tool: 0, tool: 0,
tool_name: "unknown", tool_name: "unknown",
top: (offset ? dev.bedDepth : dev.bedDepth/2), top: (offset ? dev.bedDepth : dev.bedDepth/2),
left: (offset ? 0 : -dev.bedWidth/2), left: (offset ? 0 : -dev.bedWidth/2),
right: (offset ? dev.bedWidth : dev.bedWidth/2), right: (offset ? dev.bedWidth : dev.bedWidth/2),
bottom: (offset ? 0 : -dev.bedDepth/2), bottom: (offset ? 0 : -dev.bedDepth/2),
time_sec: 0, time_sec: 0,
time_ms: 0, time_ms: 0,
time: 0 time: 0
}, },
append; append;
@ -1830,7 +1831,14 @@
} }
} }
function toolNameByNumber(number, tools) { function toolByNumber(number) {
for (let i=0; i<tools.length; i++) {
if (tools[i].number === number) return tools[i];
}
return undefined;
}
function toolNameByNumber(number) {
for (let i=0; i<tools.length; i++) { for (let i=0; i<tools.length; i++) {
if (tools[i].number === number) return tools[i].name; if (tools[i].number === number) return tools[i].name;
} }
@ -1859,7 +1867,7 @@
if (out.tool != pos.t) { if (out.tool != pos.t) {
pos.t = out.tool; pos.t = out.tool;
consts.tool = pos.t; consts.tool = pos.t;
consts.tool_name = toolNameByNumber(out.tool, settings.tools); consts.tool_name = toolNameByNumber(out.tool);
filterEmit(cmdToolChange, consts); filterEmit(cmdToolChange, consts);
} }
@ -1940,12 +1948,16 @@
} }
} }
// emit gcode preamble // collect tool info to add to header
filterEmit(gcodes.gcodePre, consts); let toolz = {}, ctool;
// remap points as necessary for origins, offsets, inversions // remap points as necessary for origins, offsets, inversions
print.output.forEach(function(layer) { print.output.forEach(function(layer) {
layer.forEach(function(out) { layer.forEach(function(out) {
if (out.tool && out.tool !== ctool) {
ctool = toolByNumber(out.tool);
toolz[out.tool] = ctool;
}
point = out.point; point = out.point;
if (!point || point.mod) return; if (!point || point.mod) return;
// ensure not point is modified twice // ensure not point is modified twice
@ -1960,6 +1972,18 @@
}); });
}); });
if (!stripComments) {
// emit tools used in comments
append("; --- tools ---");
Object.keys(toolz).sort().forEach(tn => {
let tool = toolz[tn];
append(`; tool=${tn} flute=${tool.flute_diam} len=${tool.flute_len} metric=${tool.metric}`);
});
}
// emit gcode preamble
filterEmit(gcodes.gcodePre, consts);
// emit all points in layer/point order // emit all points in layer/point order
print.output.forEach(function (layerout) { print.output.forEach(function (layerout) {
if (mode !== layerout.mode) { if (mode !== layerout.mode) {