add option to mark layers for stacking
This commit is contained in:
parent
83bbf16768
commit
0af1e65057
4 changed files with 34 additions and 9 deletions
|
|
@ -577,6 +577,7 @@
|
|||
outputLaserGroup: true,
|
||||
outputLaserZColor: false,
|
||||
outputLaserLayer: false,
|
||||
outputLaserStack: false,
|
||||
outputLaserMerged: false,
|
||||
outputOriginCenter: true,
|
||||
outputInvertX: false,
|
||||
|
|
|
|||
|
|
@ -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}),
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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"],
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue