add sketch item intersection and difference

This commit is contained in:
Stewart Allen 2024-07-25 16:28:36 -04:00
commit d86d71fef8
2 changed files with 31 additions and 2 deletions

View file

@ -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;

View file

@ -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);