diff --git a/notes.md b/notes.md index a9bc6529..9cc78127 100644 --- a/notes.md +++ b/notes.md @@ -23,24 +23,21 @@ * `F` 2D image import * `F` detect and report slow framerates -* `F` implement an in-app bug reporting system. add workspace to export option. +* `F` implement an in-app bug reporting system * `P` improve decimation speed by avoiding in/out of Point? * `P` duplicate objects should share same slice data unless rotated or scaled * `P` worker state cache cleanup and organization * `P` client/worker interface normalization and cleanup -* `C` improve path line caps # FDM -* `B` dwell / extrude engage reversed? * `B` fix adaptive slicing with multi-extruder * `B` fix supports with grouped parts -* `B` sparse infill should follow polys it intersects +* `B` sparse infill should follow polys between intersect points * `B` multi-extruder rendering of raft fails to offset the rest of the print * `B` multi-extruder purge blocks fail to generate properly for rafts * `F` control for size of purge block (with 0=disabled) * `F` add separate fill speed control -* `F` control shell order (in/out or out/in) * `F` manual support addition / control * `F` control layer start position * `F` polishing and other non-planar work diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index 76fdff6b..2fa080f1 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -444,6 +444,7 @@ let lastEnd = null; let lastOut = null; let current = null; + let retracted = false; function color(point) { return FDM.rateToColor(point.speed, maxspd); @@ -454,6 +455,7 @@ const moves = []; const heads = []; const retracts = []; + const engages = []; const output = new KIRI.Render(); layers.push(output); @@ -471,8 +473,13 @@ let emits = 0; level.forEach((out,oi) => { + if (retracted && out.emit) { + retracted = false; + engages.push(lastOut.point); + } if (out.retract) { retracts.push(out.point); + retracted = true; } if (!out.point) { // in cam mode, these are drilling or dwell ops @@ -526,6 +533,13 @@ return newPolygon().centerCircle(point, 0.2, 16).setZ(point.z + 0.01); }), { outline: true }); } + if (engages.length) { + output + .setLayer('engage', { line: 0x005500, face: 0x00ff00, opacity: 0.5 }, true) + .addAreas(engages.map(point => { + return newPolygon().centerCircle(point, 0.2, 16).setZ(point.z + 0.01); + }), { outline: true }); + } if (heads.length) { output .setLayer('arrows', { face: moveColor, line: 0x555555, opacity: 0.5 }, true)