From 466c389b8977308df983f0d5ac5352f0751bb1e7 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 3 Jan 2022 00:43:35 -0500 Subject: [PATCH] allow meta + click to focus camera for better navigation --- src/main/mesh.js | 8 ++++++-- src/mesh/api.js | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/mesh.js b/src/main/mesh.js index bd670d80..6ad5c869 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -236,8 +236,12 @@ function space_init(data) { if (model) { let group = model.group; let { ctrlKey, metaKey, shiftKey } = event; - // lay flat with meta or ctrl clicking a selected face - if ((ctrlKey || metaKey)) { + if (metaKey) { + // set focus on intersected face + let { x, y, z } = int.point; + api.focus({center: { x, y:-z, z:y }}); + } else if (ctrlKey) { + // lay flat when ctrl clicking a selected face 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)); diff --git a/src/mesh/api.js b/src/mesh/api.js index 084b707a..2bf89ef5 100644 --- a/src/mesh/api.js +++ b/src/mesh/api.js @@ -225,9 +225,9 @@ let api = mesh.api = { } }, - // @param object {THREE.Object3D | THREE.Object3D[]} + // @param object {THREE.Object3D | THREE.Object3D[] | Point} focus(object) { - let { center } = util.bounds(object); + let { center } = object.center ? object : util.bounds(object); // when no valid objects supplied, set origin if (isNaN(center.x * center.y * center.z)) { center = { x: 0, y: 0, z: 0 };