From 25e2d60ea05a6ac60da82da98193b82c852e36aa Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 19 Aug 2024 15:45:07 -0400 Subject: [PATCH] add selection merge --- src/kiri/init.js | 1 + src/kiri/platform.js | 2 ++ src/kiri/selection.js | 22 ++++++++++++++++++++++ web/kiri/index.html | 1 + 4 files changed, 26 insertions(+) diff --git a/src/kiri/init.js b/src/kiri/init.js index 080a7d30..39bb0f6d 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -2751,6 +2751,7 @@ gapp.register("kiri.init", [], (root, exports) => { // $('mesh-rename').onclick = () => { api.widgets.rename() }; $('mesh-export-stl').onclick = () => { objectsExport('stl') }; $('mesh-export-obj').onclick = () => { objectsExport('obj') }; + $('mesh-merge').onclick = api.selection.merge; $('context-duplicate').onclick = duplicateSelection; $('context-mirror').onclick = mirrorSelection; $('context-layflat').onclick = () => { api.event.emit("tool.mesh.lay-flat") }; diff --git a/src/kiri/platform.js b/src/kiri/platform.js index 89e49846..abd13497 100644 --- a/src/kiri/platform.js +++ b/src/kiri/platform.js @@ -743,6 +743,7 @@ function platformLayout() { function platformLoadWidget(group, vertices, filename) { const widget = newWidget(undefined, group).loadVertices(vertices.toFloat32(), true); + widget.meta.file = filename; if (filename) widget.saveToCatalog(filename); platformAdd(widget); return widget; @@ -904,6 +905,7 @@ const platform = api.platform = { load_stl: platformLoadSTL, load_url: platformLoadURL, load_files: platformLoadFiles, + load_verts: platformLoadWidget, deselect: platformDeselect, select: platformSelect, select_all: platformSelectAll, diff --git a/src/kiri/selection.js b/src/kiri/selection.js index 70d610c8..36b44529 100644 --- a/src/kiri/selection.js +++ b/src/kiri/selection.js @@ -192,6 +192,27 @@ function rotate(x, y, z) { space.update(); } +function merge() { + let sel = widgets(); + if (sel.length === 0) { + sel = api.widgets.all(); + } + let obj = []; + sel.forEach(widget => { + let {x, y, z} = widget.track.pos || { x:0, y:0, z:0 }; + let pos = widget.mesh.geometry.attributes.position; + let pvals = pos.array; + for (let i=0, il=pos.count; i
+