From f32af7eeb145d9c598ee8ca6d449a5b54d6c4077 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 16 May 2026 14:50:34 -0400 Subject: [PATCH] fix widget + tab assignment when slicing --- src/kiri/mode/cam/app/init-ui.js | 30 ++++++++++++++++-------------- src/kiri/mode/cam/work/slice.js | 4 ++-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/kiri/mode/cam/app/init-ui.js b/src/kiri/mode/cam/app/init-ui.js index c284d690..2467f675 100644 --- a/src/kiri/mode/cam/app/init-ui.js +++ b/src/kiri/mode/cam/app/init-ui.js @@ -906,20 +906,22 @@ export function init() { clearPops(); recreateTabs(); for (let group of Widget.Groups.list()) { - let root = group[0]; - if (root.tabs) - for (let tab of Object.values(root.tabs)) { - let geo = tab.box.geometry.clone(); - if (geo.index) geo = geo.toNonIndexed(); - geo.translate(tab.x, tab.y, tab.z); - let bbg = BufferGeometryUtils.mergeGeometries([ geo ]); - let sw = newWidget(null, group); - let fwp = group[0].track.pos; - sw.loadGeometry(bbg); - sw._move(fwp.x, fwp.y, fwp.z); - api.widgets.add(sw); - sw.track.synth = true; - sw.track.indexed = root.track.indexed; + for (let widget of group) { + if (widget.tabs) + for (let tab of Object.values(widget.tabs)) { + let geo = tab.box.geometry.clone(); + if (geo.index) geo = geo.toNonIndexed(); + geo.translate(tab.x, tab.y, tab.z); + let bbg = BufferGeometryUtils.mergeGeometries([ geo ]); + let sw = newWidget(null, group); + let fwp = widget.track.pos; + sw.loadGeometry(bbg); + sw._move(fwp.x, fwp.y, fwp.z); + api.widgets.add(sw); + sw.track.synth = true; + sw.track.indexed = widget.track.indexed; + sw.track.tabOwner = widget.id; + } } } }); diff --git a/src/kiri/mode/cam/work/slice.js b/src/kiri/mode/cam/work/slice.js index d4968bc7..181cc86f 100644 --- a/src/kiri/mode/cam/work/slice.js +++ b/src/kiri/mode/cam/work/slice.js @@ -35,8 +35,8 @@ export function cam_slice_pre(settings) { export async function cam_slice(settings, widget, onupdate, ondone) { if (widget.track.synth) return ondone(); - // get tab widgets - let tabW = widget.group.filter(w => w != widget); + // get tab widgets for this specific widget + let tabW = widget.group.filter(w => w != widget && w.track.tabOwner === widget.id); // merge overlapping tabs for (let i=0; i