checkpoint belt multi-extruder work
This commit is contained in:
parent
333d3b2b88
commit
92599a4dfc
5 changed files with 66 additions and 31 deletions
|
|
@ -693,16 +693,24 @@
|
|||
* scale polygon around origin
|
||||
*/
|
||||
PRO.scale = function(scale, round) {
|
||||
let x,y,z;
|
||||
if (typeof(scale) === 'number') {
|
||||
x = y = z = scale;
|
||||
} else {
|
||||
x = scale.x;
|
||||
y = scale.y;
|
||||
z = scale.z;
|
||||
}
|
||||
this._bounds = undefined;
|
||||
this.points = this.points.map(point => {
|
||||
this.points.forEach(point => {
|
||||
if (round) {
|
||||
point.x = (point.x * scale).round(round);
|
||||
point.y = (point.y * scale).round(round);
|
||||
point.z = (point.z * scale).round(round);
|
||||
point.x = (point.x * x).round(round);
|
||||
point.y = (point.y * y).round(round);
|
||||
point.z = (point.z * z).round(round);
|
||||
} else {
|
||||
point.x = point.x * scale;
|
||||
point.y = point.y * scale;
|
||||
point.z = point.z * scale;
|
||||
point.x = point.x * x;
|
||||
point.y = point.y * y;
|
||||
point.z = point.z * z;
|
||||
}
|
||||
});
|
||||
if (this.inner) {
|
||||
|
|
|
|||
|
|
@ -1094,6 +1094,7 @@
|
|||
if (MODE === MODES.SLA && !callback) {
|
||||
callback = preparePreview;
|
||||
}
|
||||
|
||||
// force layout in belt mode when widget exceeds bed length
|
||||
if (WIDGETS.length && settings.device.bedBelt) {
|
||||
let doLayout = false;
|
||||
|
|
@ -1109,6 +1110,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
let process = settings.process,
|
||||
device = settings.device,
|
||||
isBelt = device.bedBelt,
|
||||
mode = settings.mode,
|
||||
now = Date.now(),
|
||||
totvert = 0,
|
||||
track = {},
|
||||
totalProgress;
|
||||
|
||||
// clear completion marks
|
||||
complete = {};
|
||||
|
||||
|
|
@ -1119,42 +1129,49 @@
|
|||
API.conf.save();
|
||||
API.event.emit('slice.begin', getMode());
|
||||
|
||||
let slicing = WIDGETS.slice().filter(w => !w.track.ignore),
|
||||
totalProgress,
|
||||
track = {},
|
||||
mode = settings.mode,
|
||||
now = Date.now(),
|
||||
totvert = 0,
|
||||
defvert;
|
||||
let slicing = WIDGETS.slice().filter(w => !w.track.ignore);
|
||||
|
||||
// determing this widgets % of processing time estimated by vertex count
|
||||
for (let widget of slicing) {
|
||||
totvert += widget.getVertices().count;
|
||||
}
|
||||
defvert = totvert / slicing.length;
|
||||
let defvert = totvert / slicing.length;
|
||||
|
||||
setOpacity(color.slicing_opacity);
|
||||
|
||||
STACKS.clear();
|
||||
if (settings.device.bedBelt) {
|
||||
KIRI.client.clear();
|
||||
}
|
||||
KIRI.client.sync();
|
||||
KIRI.client.rotate(settings);
|
||||
|
||||
let segtimes = {},
|
||||
segNumber = 0,
|
||||
errored = false,
|
||||
startTime = Date.now(),
|
||||
toSlice = slicing.slice(),
|
||||
camOrLaser = mode === 'CAM' || mode === 'LASER',
|
||||
extruders = {},
|
||||
lastMsg;
|
||||
|
||||
for (let widget of toSlice) {
|
||||
widget.stats.progress = 0;
|
||||
widget.setColor(color.slicing);
|
||||
extruders[widget.anno.extruder] = widget.anno.extruder;
|
||||
}
|
||||
|
||||
// in multi-material belt mode, the anchor needs to be extended
|
||||
// to allow room for the purge tower to be built. calculate here
|
||||
extruders = Object.values(extruders);
|
||||
if (isBelt && extruders.length > 1 && process.outputPurgeTower) {
|
||||
process.beltAnchor = Math.max(
|
||||
process.firstLayerBeltLead,
|
||||
Math.sqrt(process.outputPurgeTower) * extruders.length * (1/Math.sqrt(2)));
|
||||
} else {
|
||||
process.beltAnchor = process.firstLayerBeltLead;
|
||||
}
|
||||
|
||||
STACKS.clear();
|
||||
if (isBelt) {
|
||||
KIRI.client.clear();
|
||||
}
|
||||
KIRI.client.sync();
|
||||
KIRI.client.rotate(settings);
|
||||
|
||||
sliceNext();
|
||||
|
||||
function sliceNext() {
|
||||
|
|
|
|||
|
|
@ -313,7 +313,7 @@ KIRI.worker = {
|
|||
let ypos = settings.device.bedDepth / 2 + track.pos.y + miny;
|
||||
let rotation = (Math.PI / 180) * 45;
|
||||
// move to accomodate anchor
|
||||
ypos += (settings.process.firstLayerBeltLead || 0);
|
||||
ypos += (settings.process.beltAnchor || 0);
|
||||
for (let w of group) {
|
||||
w.moveMesh(0, miny, 0);
|
||||
}
|
||||
|
|
@ -340,7 +340,7 @@ KIRI.worker = {
|
|||
let { xpos, ypos } = widget.belt;
|
||||
let { dy, dz } = widget.belt;
|
||||
// move to accomodate anchor
|
||||
dy -= (settings.process.firstLayerBeltLead || 0) ;
|
||||
dy -= (settings.process.beltAnchor || 0) ;
|
||||
widget.rotinfo = { angle: 45, dy, dz, xpos, ypos };
|
||||
for (let others of group.slice(1)) {
|
||||
others.rotinfo = widget.rotinfo;
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@
|
|||
printPoint = null;
|
||||
|
||||
let raft = function(height, angle, spacing, speed, extrude) {
|
||||
let slice = kiri.newSlice(zoff + height / 2);
|
||||
let slice = KIRI.newSlice(zoff + height / 2);
|
||||
brims.forEach(function(brim) {
|
||||
// use first point of first brim as start point
|
||||
if (printPoint === null) printPoint = brim.first();
|
||||
|
|
@ -329,13 +329,23 @@
|
|||
let box = rec.rect.clone().setZ(z);
|
||||
let fill = (purgeOn ? rec.full : rec.sparse).clone().setZ(z);
|
||||
if (isBelt) {
|
||||
let scale = z >= 0 ? 0 : 1 + ((z / blokw));
|
||||
if (scale) {
|
||||
box.scale({x:1, y:scale, z:1});
|
||||
let inset = box.offset(rec.diameter/2);
|
||||
if (inset) {
|
||||
fill = linesToPoly(POLY.fillArea(inset, 90, rec.diameter * 5));
|
||||
} else {
|
||||
fill = undefined;
|
||||
}
|
||||
}
|
||||
// offset by nozzle diameter + half step (shell) then angled
|
||||
let exo = rec.diameter * (1/Math.sqrt(2)) * 1.5;
|
||||
let exo = rec.diameter * beltfact * 1.5;
|
||||
box.move({x:0, y:z - exo, z:0});
|
||||
fill.move({x:0, y:z - exo, z:0});
|
||||
if (fill) fill.move({x:0, y:z - exo, z:0});
|
||||
if (offset) {
|
||||
box.move(offset);
|
||||
fill.move(offset);
|
||||
if (fill) fill.move(offset);
|
||||
}
|
||||
}
|
||||
start = print.polyPrintPath(box, start, layer, {
|
||||
|
|
@ -344,7 +354,7 @@
|
|||
simple: true,
|
||||
open: false,
|
||||
});
|
||||
start = print.polyPrintPath(fill, start, layer, {
|
||||
if (fill) start = print.polyPrintPath(fill, start, layer, {
|
||||
tool,
|
||||
rate,
|
||||
simple: true,
|
||||
|
|
@ -451,6 +461,7 @@
|
|||
layerout.anchor = slice.belt && slice.belt.anchor;
|
||||
// detect extruder change and print purge block
|
||||
if (!lastOut || lastOut.extruder !== slice.extruder) {
|
||||
if (slice.extruder >= 0)
|
||||
printPoint = purge(slice.extruder, track, layerout, printPoint, slice.z, undefined, offset);
|
||||
}
|
||||
let wtb = slice.widget.track.box;
|
||||
|
|
|
|||
|
|
@ -385,8 +385,7 @@
|
|||
}
|
||||
// array of added top.fill_sparse arrays
|
||||
let adds = [];
|
||||
// add enough lead in layers to fill anchor area
|
||||
let anchorlen = process.firstLayerBeltLead * beltfact;
|
||||
let anchorlen = process.beltAnchor * beltfact;
|
||||
while (anchorlen && start && anchorlen >= sliceHeight) {
|
||||
let addto = start.down;
|
||||
if (!addto) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue