From 769b54b47189a44f798ef29a9870dc289281fe0c Mon Sep 17 00:00:00 2001 From: JannisX11 Date: Fri, 14 Jan 2022 19:25:27 +0100 Subject: [PATCH] Fix mesh and cube rotation issues Fix issue when copying cube+mesh UV faces --- js/outliner/cube.js | 35 +++++++++++++++++------------------ js/outliner/mesh.js | 16 ++++++++++++++++ js/preview/canvas.js | 17 +++++++++-------- js/preview/transformer.js | 2 +- js/texturing/uv.js | 6 ++++-- 5 files changed, 47 insertions(+), 29 deletions(-) diff --git a/js/outliner/cube.js b/js/outliner/cube.js index 3fd37776..52a9a74c 100644 --- a/js/outliner/cube.js +++ b/js/outliner/cube.js @@ -289,6 +289,23 @@ class Cube extends OutlinerElement { } } + //Rotations + var i = 0; + var temp_rot = undefined; + var temp_i = undefined; + while (i < 3) { + if (i !== axis) { + if (temp_rot === undefined) { + temp_rot = this.rotation[i] + temp_i = i + } else { + this.rotation[temp_i] = -this.rotation[i] + this.rotation[i] = temp_rot + } + } + i++; + } + function rotateUVFace(number, iterations) { if (!number) number = 0; number += iterations * 90; @@ -347,24 +364,6 @@ class Cube extends OutlinerElement { this.faces.west.extend(this.faces.up) this.faces.up.extend(temp) } - - - //Fine Rotations - var i = 0; - var temp_rot = undefined; - var temp_i = undefined; - while (i < 3) { - if (i !== axis) { - if (temp_rot === undefined) { - temp_rot = this.rotation[i] - temp_i = i - } else { - this.rotation[temp_i] = -this.rotation[i] - this.rotation[i] = temp_rot - } - } - i++; - } } } this.preview_controller.updateTransform(this); diff --git a/js/outliner/mesh.js b/js/outliner/mesh.js index 538426b5..181a9462 100644 --- a/js/outliner/mesh.js +++ b/js/outliner/mesh.js @@ -420,6 +420,22 @@ class Mesh extends OutlinerElement { this.origin.V3_set(rotateCoord(this.origin)) } } + //Rotations + var i = 0; + var temp_rot = undefined; + var temp_i = undefined; + while (i < 3) { + if (i !== axis) { + if (temp_rot === undefined) { + temp_rot = this.rotation[i] + temp_i = i + } else { + this.rotation[temp_i] = -this.rotation[i] + this.rotation[i] = temp_rot + } + } + i++; + } this.preview_controller.updateTransform(this); this.preview_controller.updateGeometry(this); return this; diff --git a/js/preview/canvas.js b/js/preview/canvas.js index e45244bc..0f6c0f8b 100644 --- a/js/preview/canvas.js +++ b/js/preview/canvas.js @@ -734,9 +734,10 @@ const Canvas = { if (Group.selected.visibility) { Group.selected.mesh.add(rot_origin) } - } else if (Cube.selected.length && Format.rotate_cubes) { - if (Cube.selected.length === 1 && Cube.selected.length == 1) { - let mesh = Cube.selected[0].mesh + } else if ((Cube.selected.length && Format.rotate_cubes) || Mesh.selected.length) { + let selected_elements = [...Cube.selected, ...Mesh.selected]; + if (selected_elements.length === 1) { + let mesh = selected_elements[0].mesh if (mesh) { mesh.add(rot_origin) } @@ -744,15 +745,15 @@ const Canvas = { var origin = null; var first_visible = null; var i = 0; - while (i < Cube.selected.length) { - if (Cube.selected[i].visibility) { + while (i < selected_elements.length) { + if (selected_elements[i].visibility) { if (first_visible === null) { - first_visible = Cube.selected[i] + first_visible = selected_elements[i] } if (origin === null) { - origin = Cube.selected[i].origin - } else if (!origin.equals(Cube.selected[i].origin)) { + origin = selected_elements[i].origin + } else if (!origin.equals(selected_elements[i].origin)) { origin = false; i = Infinity; } diff --git a/js/preview/transformer.js b/js/preview/transformer.js index 48bf2755..0c59626d 100644 --- a/js/preview/transformer.js +++ b/js/preview/transformer.js @@ -838,7 +838,7 @@ break; } } - return bone; + return bone instanceof Group ? bone : 0; } // Global Space return 0; diff --git a/js/texturing/uv.js b/js/texturing/uv.js index 090c6c1f..24602ae9 100644 --- a/js/texturing/uv.js +++ b/js/texturing/uv.js @@ -1080,9 +1080,11 @@ const UVEditor = { } function addToClipboard(key) { - var tag = elements[0].faces[key]; + let element = elements.find(el => el.faces[key]); + if (!element) return; + var tag = element.faces[key]; var new_face; - if (elements[0] instanceof Mesh) { + if (element instanceof Mesh) { new_face = new MeshFace(null, tag); new_face.vertices = tag.getSortedVertices(); new_face.direction = key;