From 43acc4e652939eb31180bd7c33666089e2b44ede Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 7 Dec 2020 21:38:39 -0500 Subject: [PATCH] improve belt rotation (still buggy) --- notes.md | 1 + src/kiri/stack.js | 4 ++-- src/kiri/worker.js | 23 +++++++++++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/notes.md b/notes.md index 098ba84b..78f9eb5e 100644 --- a/notes.md +++ b/notes.md @@ -18,6 +18,7 @@ ## `C` cosmetic, `F` functional, `P` performance, `B` bug fix +* `B` normals possibly inverted on faces in 2D to 3D conversion * `F` right click / context menu (object deletion, etc) * `F` detect and report slow framerates * `P` duplicate objects should share same slice data unless rotated or scaled diff --git a/src/kiri/stack.js b/src/kiri/stack.js index 62b2286b..206c3509 100644 --- a/src/kiri/stack.js +++ b/src/kiri/stack.js @@ -27,8 +27,8 @@ rotate(set) { this.view.rotation.x = -set.angle * (Math.PI/180); - this.view.position.y = -set.centerz + set.movez; - this.view.position.z = -set.movez/2; + this.view.position.y += -set.dy; + this.view.position.z += -set.dz; } destroy() { diff --git a/src/kiri/worker.js b/src/kiri/worker.js index 4322af22..12aa9616 100644 --- a/src/kiri/worker.js +++ b/src/kiri/worker.js @@ -75,14 +75,25 @@ KIRI.worker = { widget.mesh = null; widget.points = null; widget.loadVertices(widget.vertices); - let bbox1 = widget.getBoundingBox(true); + let bb1 = widget.getBoundingBox(true); + let zd = bb1.max.z - bb1.min.z; // z dim + // let cy1 = (bb1.max.y + bb1.min.y) / 2; + // let cz1 = (bb1.max.z + bb1.min.z) / 2; + widget.setPoints(null); widget._rotate(rotation,0,0,true); - widget.center(); + widget.center(false, true); + let bb2 = widget.getBoundingBox(true); + // let cy2 = (bb2.max.y + bb2.min.y) / 2; + // let cz2 = (bb2.max.z + bb2.min.z) / 2; + // let angle = Math.atan2(cy1-cy2, cz1-cz2) * (180 / Math.PI); widget.rotated = true; - let bbox2 = widget.getBoundingBox(true); - let centerz = (bbox2.max.z - bbox2.min.z) / 2; - let movez = centerz - (bbox1.max.z - bbox1.min.z) / 2; - widget.rotinfo = { centerz, movez, angle: 45 }; + let rc = Math.sin(Math.PI/4); + let cz = (bb2.max.z - bb2.min.z) / 2; // center z post rotate + let dy = cz * rc; // dy = cz rotated 45 + let dz = dy - zd / 2; + // console.log({cy1,cz1,cy2,cz2,angle,cy}); + widget.rotinfo = { angle: 45, dy, dz }; + widget.getBoundingBox(true); } widget.slice(settings, function(error) {