add option to mark layers for stacking

This commit is contained in:
Stewart Allen 2021-12-07 19:21:46 -05:00
commit 0af1e65057
4 changed files with 34 additions and 9 deletions

View file

@ -577,6 +577,7 @@
outputLaserGroup: true,
outputLaserZColor: false,
outputLaserLayer: false,
outputLaserStack: false,
outputLaserMerged: false,
outputOriginCenter: true,
outputInvertX: false,

View file

@ -1729,6 +1729,7 @@
laserOffset: UC.newInput(LANG.ls_offs_s, {title:LANG.ls_offs_l, convert:UC.toFloat, modes:LASER}),
laserSliceHeight: UC.newInput(LANG.ls_lahi_s, {title:LANG.ls_lahi_l, convert:UC.toFloat, modes:LASER, trigger: true}),
laserSliceHeightMin: UC.newInput(LANG.ls_lahm_s, {title:LANG.ls_lahm_l, convert:UC.toFloat, modes:LASER, show:() => { return UI.laserSliceHeight.value == 0 }}),
laserSep: UC.newBlank({class:"pop-sep", modes:LASER}),
laserSliceSingle: UC.newBoolean(LANG.ls_sngl_s, onBooleanClick, {title:LANG.ls_sngl_l, modes:LASER}),
firstLayer: UC.newGroup(LANG.fl_menu, null, {modes:FDM}),
@ -1845,8 +1846,11 @@
output: UC.newGroup(LANG.ou_menu, null, {modes:GCODE}),
outputLaserPower: UC.newInput(LANG.ou_powr_s, {title:LANG.ou_powr_l, convert:UC.toInt, bound:UC.bound(1,100), modes:LASER}),
outputLaserSpeed: UC.newInput(LANG.ou_sped_s, {title:LANG.ou_sped_l, convert:UC.toInt, modes:LASER}),
laserSep: UC.newBlank({class:"pop-sep", modes:LASER}),
outputLaserZColor: UC.newBoolean(LANG.ou_layo_s, onBooleanClick, {title:LANG.ou_layo_l, modes:LASER, show:() => { return UI.outputLaserMerged.checked === false }}),
outputLaserLayer: UC.newBoolean(LANG.ou_layr_s, onBooleanClick, {title:LANG.ou_layr_l, modes:LASER}),
outputLaserStack: UC.newBoolean(LANG.ou_lays_s, onBooleanClick, {title:LANG.ou_lays_l, modes:LASER}),
laserSep: UC.newBlank({class:"pop-sep", modes:LASER}),
outputTemp: UC.newInput(LANG.ou_nozl_s, {title:LANG.ou_nozl_l, convert:UC.toInt, modes:FDM}),
outputBedTemp: UC.newInput(LANG.ou_bedd_s, {title:LANG.ou_bedd_l, convert:UC.toInt, modes:FDM}),

View file

@ -68,28 +68,43 @@
});
};
function sliceEmitObjects(print, slice, groups, simple) {
function sliceEmitObjects(print, slice, groups, opt = { }) {
let start = newPoint(0,0,0);
let process = print.settings.process;
let grouped = process.outputLaserGroup;
let stacked = process.outputLaserStack;
let simple = opt.simple || false;
let group = [];
let emit = { in: [], out: [], mark: [] };
let lastEmit = opt.lastEmit;
let zcolor = print.settings.process.outputLaserZColor;
group.thick = slice.thick;
function laserOut(poly, group) {
function laserOut(poly, group, type) {
if (!poly) {
return;
}
if (Array.isArray(poly)) {
poly.forEach(function(pi) {
laserOut(pi, group);
laserOut(pi, group, type);
});
} else {
let pathOpt = zcolor ? {extrude: slice.z, rate: slice.z} : {extrude: 1};
let pathOpt = zcolor ? {extrude: slice.z, rate: slice.z} : {extrude: 1, rate: 1};
if (type === "mark") {
pathOpt.rate = 0.001;
}
if (simple) pathOpt.simple = true;
if (poly.open) pathOpt.open = true;
emit[type].push(poly);
print.polyPrintPath(poly, start, group, pathOpt);
if (stacked && type === "out" && lastEmit) {
for (let out of lastEmit.out) {
if (out.isInside(poly)) {
laserOut(out, group, "mark");
}
}
}
}
}
@ -97,8 +112,8 @@
let inner = offset.map(poly => poly.inner || []).flat();
// cut inside before outside
laserOut(inner, group);
laserOut(offset, group);
laserOut(inner, group, "in");
laserOut(offset, group, "out");
if (!grouped) {
groups.push(group);
@ -109,6 +124,8 @@
if (grouped) {
groups.push(group);
}
return emit;
};
/**
@ -246,10 +263,11 @@
});
});
}
widget.slices.forEach(function(slice) {
sliceEmitObjects(print, slice, output, knifeOn);
let lastEmit;
for (let slice of widget.slices.reverse()) {
lastEmit = sliceEmitObjects(print, slice, output, {simple: knifeOn, lastEmit});
update((slices++ / totalSlices) * 0.5, "prepare");
});
}
}
});

View file

@ -546,6 +546,8 @@ kiri.lang['en-us'] = {
ou_layr_l: ["output layer order","from top right to","bottom left"],
ou_layo_s: "layer color",
ou_layo_l: ["output layer colors","for each z index","overridden by merged"],
ou_lays_s: "layer stacking",
ou_lays_l: ["mark layers for stacking","with a unique color"],
ou_drkn_s: "drag knife",
ou_drkn_l: ["enable drag knife","output in gcode","cut radii are added","to corners with","cut down passes"],