From a81a1f0b6016c272c42a1d09acee0b2822543cd1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 20 Jan 2022 17:19:15 -0500 Subject: [PATCH] allow select, clear, toggle faces with alt and shift key modifiers --- src/main/mesh.js | 6 ++++-- src/mesh/model.js | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/mesh.js b/src/main/mesh.js index 596c0613..ce21b98b 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -388,7 +388,7 @@ function space_init(data) { } if (model) { let group = model.group; - let { ctrlKey, metaKey, shiftKey } = event; + let { altKey, ctrlKey, metaKey, shiftKey } = event; if (metaKey) { // set focus on intersected face let { x, y, z } = int.point; @@ -408,7 +408,9 @@ function space_init(data) { case modes.line: case modes.vertex: // find faces adjacent to point/line clicked - model.find(int.point, int.face); + model.find(int, + altKey ? { toggle: true } : + shiftKey ? { clear: true } : { select: true }); break; } } diff --git a/src/mesh/model.js b/src/mesh/model.js index 717f7bdb..0cccbc61 100644 --- a/src/mesh/model.js +++ b/src/mesh/model.js @@ -508,10 +508,16 @@ mesh.model = class MeshModel extends mesh.object { } } - toggleSelectedFaces(toggle = []) { + selectFaces(list = [], action = {}) { let faces = this.sel.faces; - for (let t of toggle) { - faces.remove(t) || faces.addOnce(t); + for (let t of list) { + if (action.toggle) { + faces.remove(t) || faces.addOnce(t); + } else if (action.clear) { + faces.remove(t); + } else if (action.select) { + faces.addOnce(t); + } } } @@ -543,7 +549,8 @@ mesh.model = class MeshModel extends mesh.object { } // find adjacent faces to clicked point/line on a face - find(point, face) { + find(int, action) { + let { point, face } = int; let { x, y, z } = point; let { a, b, c } = face; worker.model_select({ @@ -552,7 +559,7 @@ mesh.model = class MeshModel extends mesh.object { let { faces, edges, verts, point } = data; // console.log({data}); // this.toggleSelectedVertices(verts); - this.toggleSelectedFaces(faces); + this.selectFaces(faces, action); this.updateSelections(); }); }