From b4e9a8a87a3d36539ebb006c5633665bbd700e67 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 1 Jan 2022 15:04:24 -0500 Subject: [PATCH] add delete/backspace to remove model. front view. no auto-select on add --- src/main/mesh.js | 22 ++++++++++++++++------ src/mesh/api.js | 2 +- src/mesh/group.js | 7 +++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/main/mesh.js b/src/main/mesh.js index 86e77b5e..1e623775 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -24,7 +24,7 @@ function init() { }); space.init($('container'), delta => { }, ortho); platform.onClick(click => { - api.selection.clear(); + // api.selection.clear(); }); platform.onMove(delta => { }); platform.set({ @@ -102,6 +102,9 @@ broker.subscribe('space_init', data => { case 'KeyH': space.view.home(); break; + case 'KeyF': + space.view.front(); + break; case 'KeyT': space.view.top(); break; @@ -113,6 +116,13 @@ broker.subscribe('space_init', data => { 'keydown', evt => { let rv = Math.PI / 16; switch (evt.code) { + case 'Backspace': + case 'Delete': + for (let s of api.selection.list()) { + s.showBounds(false); + s.remove(); + } + break; case 'ArrowUp': api.selection.rotate(-rv,0,0).floor(); break; @@ -144,11 +154,11 @@ broker.subscribe('space_init', data => { let q = new THREE.Quaternion(); // find intersecting point, look "up" on Z and rotate to face that q.setFromUnitVectors(int.face.normal, new THREE.Vector3(0,0,-1)); - // group.qrotate(q); - let e = new THREE.Euler().setFromQuaternion(q); - let n = int.face.normal; - console.log({n,q,e}); - group.rotation(e.x, e.y, e.z); + group.qrotate(q); + // let e = new THREE.Euler().setFromQuaternion(q); + // let n = int.face.normal; + // console.log({n,q,e}); + // group.rotation(e.x, e.y, e.z); group.floor(); } else { api.selection.toggle(model.group); diff --git a/src/mesh/api.js b/src/mesh/api.js index 3b4a271e..64de6f40 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -183,7 +183,6 @@ let group = { groups.addOnce(group); space.world.add(group.group); space.update(); - selection.set([group]); return group; }, @@ -234,6 +233,7 @@ let api = mesh.api = { }, objects: () => { + // return models, not groups return group.list().map(o => o.models).flat().map(o => o.object()); } }; diff --git a/src/mesh/group.js b/src/mesh/group.js index 46fe6195..c3bddb22 100644 --- a/src/mesh/group.js +++ b/src/mesh/group.js @@ -42,6 +42,13 @@ mesh.group = class MeshGroup extends mesh.object { // @param model {MeshModel} remove(model) { + // remove all models + if (arguments.length === 0) { + for (let m of this.models.slice()) { + this.remove(m); + } + return; + } model.group = undefined; this.models.remove(model); this.group.remove(model.mesh);