From 8798d060ac6ac39ec39bfb6e3bd8e22f9c409d88 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 8 Jan 2021 23:44:26 -0500 Subject: [PATCH] checkpoint belt work --- src/kiri/main.js | 9 +++++---- src/kiri/print.js | 18 +++++++++--------- src/kiri/worker.js | 6 +++++- src/mode/fdm/export.js | 2 +- src/mode/fdm/prepare.js | 34 ++++++++++++++++++---------------- src/mode/fdm/slice.js | 6 +++++- 6 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/kiri/main.js b/src/kiri/main.js index f77acb79..8a5decdd 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -857,7 +857,7 @@ segtimes[`${segNumber}_draw`] = widget.render(stack); // rotate stack for belt beds if (settings.device.bedBelt && widget.rotinfo) { - STACKS.rotate(widget.rotinfo); + stack.obj.rotate(widget.rotinfo); } updateSliderMax(true); setVisibleLayer(-1, 0); @@ -977,9 +977,9 @@ // rotate stack for belt beds if (settings.device.bedBelt && WIDGETS[0].rotinfo) { let ri = WIDGETS[0].rotinfo; - console.log({ri}) ri.dy = ri.dz = 0; - STACKS.rotate(WIDGETS[0].rotinfo); + ri.dy = settings.device.bedDepth / 2 - ri.ypos; + stack.obj.rotate(WIDGETS[0].rotinfo); } segtimes[`${segNumber}_draw`] = Date.now() - startTime; } @@ -1685,7 +1685,8 @@ } if (isBelt) { - let bounds = platformUpdateBounds(), movey = -(dev.bedDepth / 2 + bounds.min.y); + let bounds = platformUpdateBounds(), + movey = -(dev.bedDepth / 2 + bounds.min.y); forAllWidgets(widget => widget.move(0, movey + 10, 0)); } diff --git a/src/kiri/print.js b/src/kiri/print.js index e335e9fc..ea03e939 100644 --- a/src/kiri/print.js +++ b/src/kiri/print.js @@ -288,15 +288,15 @@ }); // recenter for visualization - if (morph && belt) { - for (let layer of output) { - for (let rec of layer) { - let point = rec.point; - point.y -= bounds.min.z; - point.z += bounds.min.y; - } - } - } + // if (false && morph && belt) { + // for (let layer of output) { + // for (let rec of layer) { + // let point = rec.point; + // point.y -= bounds.min.z; + // point.z += bounds.min.y; + // } + // } + // } scope.imported = gcode; scope.lines = lines.length; diff --git a/src/kiri/worker.js b/src/kiri/worker.js index e4aa625b..1f403fe3 100644 --- a/src/kiri/worker.js +++ b/src/kiri/worker.js @@ -66,18 +66,22 @@ KIRI.worker = { let widget = cache[data.id], last = time(), + ypos, now; try { let rotation = (Math.PI/180) * (settings.device.bedBelt ? 45 : 0); if (rotation) { + let track = widget.track; + ypos = track.pos.y + settings.device.bedDepth / 2 - track.box.h / 2; widget.mesh = null; widget.points = null; widget.loadVertices(widget.vertices); widget._rotate(rotation,0,0,true); widget.center(false, true); widget.getBoundingBox(true); + widget.belt = { ypos }; } widget.slice(settings, function(error) { @@ -102,7 +106,7 @@ KIRI.worker = { let wbb = widget.getBoundingBox(true); let dy = (wbb.max.y + wbb.min.y)/2; let dz = wbb.min.z; - widget.rotinfo = { angle: 45, dy, dz }; + widget.rotinfo = { angle: 45, dy, dz, ypos }; send.data({ rotinfo: widget.rotinfo }); } } diff --git a/src/mode/fdm/export.js b/src/mode/fdm/export.js index 52ca64a9..68c0999e 100644 --- a/src/mode/fdm/export.js +++ b/src/mode/fdm/export.js @@ -22,7 +22,7 @@ gcodeLayer = device.gcodeLayer, gcodeTrack = device.gcodeTrack, tool = 0, - isBelt = device.bedBelt || false, + isBelt = device.bedBelt, bedType = isBelt ? "belt" : "fixed", extruder = extruders[tool], offset_x = extruder.extOffsetX, diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index b914bafa..175df0f3 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -297,10 +297,11 @@ let widget = mesh.widget; let mslices = widget.slices; if (mslices && mslices[layer]) { - let offset = mesh.position || center; + let offset = widget.track.pos || mesh.position || center; if (isBelt) { offset = Object.clone(offset); - offset.y -= widget.belt_offset || 0; + offset.y = widget.rotinfo.dz; + offset.z = widget.rotinfo.dy; } slices.push({ slice: mslices[layer], @@ -406,8 +407,15 @@ print.output = output; + // render if not explicitly disabled + if (render) { + print.render = FDM.prepareRender(output, (progress, layer) => { + update(0.5 + progress * 0.5, "render", layer); + }, { tools: device.extruders, thin: isThin, flat: isFlat, fdm: true }); + } + // if belt, adjust z and y to baselines - if (false && isBelt) { + if (isBelt) { let miny = Infinity, minz = Infinity; for (let layer of output) { for (let rec of layer) { @@ -416,21 +424,15 @@ } } console.log({miny, minz}); - for (let layer of output) { - for (let rec of layer) { - // rec.point.y -= minz; - // rec.point.z -= miny; - } - } + // for (let layer of output) { + // for (let rec of layer) { + // rec.point.y -= minz; + // rec.point.z -= miny; + // } + // } } - // render if not explicitly disabled - if (render) { - print.render = FDM.prepareRender(output, (progress, layer) => { - update(0.5 + progress * 0.5, "render", layer); - }, { tools: device.extruders, thin: isThin, flat: isFlat, fdm: true }); - return print.render; - } + return print.render; }; class Counter { diff --git a/src/mode/fdm/slice.js b/src/mode/fdm/slice.js index 26d76f48..f6227c9a 100644 --- a/src/mode/fdm/slice.js +++ b/src/mode/fdm/slice.js @@ -272,7 +272,11 @@ for (let top of slices[0].tops) { bounds.merge(top.poly.bounds); } - widget.belt_offset = bounds.miny; + widget.belt = { + offset_y: bounds.miny, + pos_y: sdev.bedDepth / 2 + widget.track.pos.y, + ypos: widget.belt.ypos + }; } // report slicing complete