From dca7c03bd77818e8bca38b93bb28ced93d6351fc Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 14 Dec 2025 00:18:34 -0500 Subject: [PATCH] fix arc output, add rounded corners expert option --- src/kiri/core/conf.js | 1 + src/kiri/mode/cam/init-menu.js | 1 + src/kiri/mode/cam/op-area.js | 4 +++- src/kiri/mode/cam/prepare.js | 4 +++- web/kiri/lang/en.js | 2 ++ 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 39ccea78..bdb2e8a9 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -578,6 +578,7 @@ export const conf = { camRoughStockZ: 0, camRoughTool: 1000, camRoughTop: true, + camRoundCorners: true, camStockClipTo: false, camStockIndexed: false, camStockIndexGrid: true, diff --git a/src/kiri/mode/cam/init-menu.js b/src/kiri/mode/cam/init-menu.js index 595bfc95..114506b8 100644 --- a/src/kiri/mode/cam/init-menu.js +++ b/src/kiri/mode/cam/init-menu.js @@ -153,6 +153,7 @@ export function menu() { camArcTolerance: newInput(LANG.cx_arct_s, {title:LANG.cx_arct_l, convert:toFloat, bound:bound(0,100), units, trigger, show:() => ui.camArcEnabled.checked}), camArcResolution: newInput(LANG.cx_arcr_s, {title:LANG.cx_arcr_l, convert:toFloat, bound:bound(0,180), trigger, show:() => ui.camArcEnabled.checked}), camExpertFast: newBoolean(LANG.cx_fast_s, onBooleanClick, { title:LANG.cx_fast_l }), + camRoundCorners: newBoolean(LANG.cx_smof_s, onBooleanClick, { title:LANG.cx_smof_l }), }; }; diff --git a/src/kiri/mode/cam/op-area.js b/src/kiri/mode/cam/op-area.js index aace2cb6..309de7e9 100644 --- a/src/kiri/mode/cam/op-area.js +++ b/src/kiri/mode/cam/op-area.js @@ -39,6 +39,7 @@ class OpArea extends CamOp { let zBottom = Math.max(workarea.bottom_z, workarea.bottom_part); let shadowBase = state.shadow.base; let thruHoles = state.shadow.holes; + let roundSharps = settings.process.camRoundCorners; // also updates tab offsets setToolDiam(toolDiam); @@ -116,7 +117,8 @@ class OpArea extends CamOp { let bounds = area.getBounds3D(); let ts_off = toolDiam / 2 - ts_eps; let offopt = { - join: ClipperLib.JoinType.jtRound, + arc: 250, + join: roundSharps ? ClipperLib.JoinType.jtRound : undefined, clean: true, simple: false, cleanDist: 10, diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index da3d05b7..e7acbe44 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -371,6 +371,7 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { point = toWorkCoords(point); let { + center, factor = 1, feed = feedRate, shortCut = toolDiamMove, @@ -545,7 +546,8 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { point, emit, rate, - tool + tool, + { center } ); return point; diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index cfe113ee..0bde72f2 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -917,6 +917,8 @@ self.lang['en-us'] = { cx_fast_l: ["disable overhang detection","can be faster and use less","memory with complex models","but fails with overhangs","try enabling if slicing","hangs during shadowing"], cx_true_s: "true shadow", cx_true_l: ["computationally correct shadow","will be slower but produce","better cuts for complex parts"], + cx_smof_s: "rounded corners", + cx_smof_l: ["sharp outside angles","are converted to arcs"], cx_arce_s: "arc output", cx_arce_l: ["EXPERIMENTAL: enable path to arc conversion"], cx_arct_s: "arc tolerance",