diff --git a/notes.md b/notes.md index 1e0989e3..020dea98 100644 --- a/notes.md +++ b/notes.md @@ -1,8 +1,7 @@ # Kiri:Moto todo and notes -## 2.5 roadmap +## 2.5 plan # `cnc` -# - lathe, A-axis # - complex process order # - split gcode output # - double-sided assistance @@ -10,9 +9,10 @@ # - more tracing types (in, out, clear, pocket) # - trace re-ordering # `fdm` -# - redo automatic supports using faces instead of deltas # - bind process to z ranges or boxed regions # - non-planar actual +# `sla` +# - common support area detection from new fdm code ## `C` cosmetic, `F` functional, `P` performance, `B` bug fix @@ -65,7 +65,6 @@ * `F` validate muti-part layout and spacing exceeds largest outside tool diameter * `F` skip "thru" holes checkbox for roughing and outlining * `F` polygon simplification option in tracing (for image derived maps) -* `F` use 3 registration holes to prevent rotation accidents (midline offset one axis) * `F` exports separate files for each operation * `F` switch z top offset to a z anchor (top/bottom) + offset * `F` A-B linked cutting profiles for double-sided milling / part flips @@ -84,6 +83,7 @@ * `F` add support for tapered ball mills * `F` warn when part > stock or cuts go outside bed * `F` animation should clear the mesh in areas where the cuts go through the stock? +* `F` support lathe mode / A-axis / rotary * `P` detect render message backlog and pause or warn * `P` redo all path route / planning in prepare to account for terrain before camOut * `P` allow faster z movements when contouring (not plunging) diff --git a/src/kiri/main.js b/src/kiri/main.js index 21493fc9..c9dcd453 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -160,7 +160,9 @@ drillreg: [ { name: "none" }, { name: "x axis" }, - { name: "y axis" } + { name: "y axis" }, + { name: "x axis 3" }, + { name: "y axis 3" } ], detail: [ { name: "best" }, diff --git a/src/mode/cam/animate.js b/src/mode/cam/animate.js index 28d27fc3..e9996607 100644 --- a/src/mode/cam/animate.js +++ b/src/mode/cam/animate.js @@ -372,6 +372,11 @@ self.kiri.loader.push(function() { const id = toolID; if (last) { const lp = last.point, np = next.point; + // dwell ops have no point + if (!np) { + setTimeout(() => { renderPath(send) }, 0); + return; + } const dx = np.x - lp.x, dy = np.y - lp.y, dz = np.z - lp.z; // skip moves that are closer than resolution if (Math.sqrt(dx*dx +dy*dy + dz*dz) < rez) { diff --git a/src/mode/cam/slice.js b/src/mode/cam/slice.js index 5133d292..8122ac2a 100644 --- a/src/mode/cam/slice.js +++ b/src/mode/cam/slice.js @@ -193,7 +193,7 @@ if (procDrillReg) { updateToolDiams(drillToolDiam); - sliceDrillReg(settings, sliceAll, zThru); + sliceDrillReg(settings, drillTool, sliceAll, zThru); } // identify through holes @@ -765,10 +765,11 @@ } // drill registration holes - function sliceDrillReg(settings, output, zThru) { + function sliceDrillReg(settings, tool, output, zThru) { let proc = settings.process, stock = settings.stock, bounds = settings.bounds, + r3 = tool.fluteDiameter() * 2, mx = (bounds.max.x + bounds.min.x) / 2, my = (bounds.max.y + bounds.min.y) / 2, mz = zThru || 0, @@ -782,10 +783,20 @@ points.push(newPoint(bounds.min.x - dx, my, 0)); points.push(newPoint(bounds.max.x + dx, my, 0)); break; + case "x axis 3": + points.push(newPoint(bounds.min.x - dx, my, 0)); + points.push(newPoint(bounds.max.x + dx, my - r3, 0)); + points.push(newPoint(bounds.max.x + dx, my + r3, 0)); + break; case "y axis": points.push(newPoint(mx, bounds.min.y - dy, 0)); points.push(newPoint(mx, bounds.max.y + dy, 0)); break; + case "y axis 3": + points.push(newPoint(mx, bounds.min.y - dy, 0)); + points.push(newPoint(mx - r3, bounds.max.y + dy, 0)); + points.push(newPoint(mx + r3, bounds.max.y + dy, 0)); + break; } if (points.length) {