From d86d71fef823b51f60870bbf2899615beb9c7efe Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 25 Jul 2024 16:28:36 -0400 Subject: [PATCH] add sketch item intersection and difference --- src/main/mesh.js | 6 ++++-- src/mesh/sketch.js | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/mesh.js b/src/main/mesh.js index eb894ccb..89b8bd6b 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -274,8 +274,10 @@ function space_init(data) { switch (code) { case 'KeyA': if (metaKey || ctrlKey) { - api.mode.object(); - selection.set(api.group.list()); + if (!selection.sketch()?.selection.all()) { + api.mode.object(); + selection.set(api.group.list()); + } estop(evt); } break; diff --git a/src/mesh/sketch.js b/src/mesh/sketch.js index 7a86a7d5..beab06d9 100644 --- a/src/mesh/sketch.js +++ b/src/mesh/sketch.js @@ -141,6 +141,12 @@ mesh.sketch = class MeshSketch extends mesh.object { return sketch.group.children.filter(c => c.sketch_item && c.sketch_item.selected); }, + all() { + sketch.items.forEach(i => i.selected = true); + sketch.render(); + return sketch.items.length; + }, + // return true if any selections were cleared clear() { let sel = sketch.items.filter(i => i.selected); @@ -176,6 +182,27 @@ mesh.sketch = class MeshSketch extends mesh.object { } }, + intersect() { + let items = sketch.selection.mesh_items(); + let polys = items.map(i => i.sketch_item.poly); + let trim = POLYS.trimTo([polys[0]], [polys[1]]); + sketch.selection.delete(); + for (let poly of trim) { + sketch.add_polygon({ poly }); + } + }, + + difference() { + let items = sketch.selection.mesh_items(); + let polys = items.map(i => i.sketch_item.poly); + let diff1 = POLYS.diff([polys[0]], [polys[1]]); + let diff2 = POLYS.diff([polys[1]], [polys[0]]); + sketch.selection.delete(); + for (let poly of [...diff1, ...diff2]) { + sketch.add_polygon({ poly }); + } + }, + group() { let items = sketch.selection.mesh_items(); let polys = items.map(i => i.sketch_item.poly).clone(true);