From 3b7466962f487b18c4a8eba83726f563eafd2c4e Mon Sep 17 00:00:00 2001 From: JannisX11 Date: Sat, 29 Oct 2022 18:21:20 +0200 Subject: [PATCH] Fix shape tool issues: Fix #1620 Incorrect numbers in status bar when using shape tool Fix fading corners on hollow rectangles Fix visual errors after flipping groups --- js/modeling/transform.js | 42 +++++++++++++++++++--------------------- js/preview/canvas.js | 2 +- js/texturing/painter.js | 6 +++--- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/js/modeling/transform.js b/js/modeling/transform.js index dbe5a9aa..c32f1172 100644 --- a/js/modeling/transform.js +++ b/js/modeling/transform.js @@ -176,34 +176,32 @@ function mirrorSelected(axis) { } if (Group.selected && Group.selected.matchesSelection()) { function flipGroup(group) { - if (group.type === 'group') { - for (var i = 0; i < 3; i++) { - if (i === axis) { - group.origin[i] *= -1 - } else { - group.rotation[i] *= -1 - } + for (var i = 0; i < 3; i++) { + if (i === axis) { + group.origin[i] *= -1 + } else { + group.rotation[i] *= -1 } - function matchAndReplace(a, b) { - if (group.name.includes(a)) { - let name = group._original_name - ? group._original_name.replace(a, b) - : group.name.replace(a, b).replace(/2/, ''); - if (!Group.all.find(g => g.name == name)) group.name = name; - return true; - } - } - let pairs = flip_pairs[axis]; - for (let a in pairs) { - let b = pairs[a]; - if (matchAndReplace(a, b)) break; - if (matchAndReplace(b, a)) break; + } + function matchAndReplace(a, b) { + if (group.name.includes(a)) { + let name = group._original_name + ? group._original_name.replace(a, b) + : group.name.replace(a, b).replace(/2/, ''); + if (!Group.all.find(g => g.name == name)) group.name = name; + return true; } } + let pairs = flip_pairs[axis]; + for (let a in pairs) { + let b = pairs[a]; + if (matchAndReplace(a, b)) break; + if (matchAndReplace(b, a)) break; + } Canvas.updateAllBones([group]); } flipGroup(Group.selected) - Group.selected.forEachChild(flipGroup) + Group.selected.forEachChild(flipGroup, Group) } } selected.forEach(function(obj) { diff --git a/js/preview/canvas.js b/js/preview/canvas.js index 65504e80..a607fbf7 100644 --- a/js/preview/canvas.js +++ b/js/preview/canvas.js @@ -954,7 +954,7 @@ const Canvas = { if (Project) Project.model_3d.scale.set(1, 1, 1); bones.forEach((obj) => { let bone = obj.mesh - if (bone) { + if (bone && obj instanceof Group) { bone.rotation.order = 'ZYX'; bone.rotation.setFromDegreeArray(obj.rotation); diff --git a/js/texturing/painter.js b/js/texturing/painter.js index 5598fc94..f2769295 100644 --- a/js/texturing/painter.js +++ b/js/texturing/painter.js @@ -881,7 +881,7 @@ const Painter = { ctx.beginPath(); var rect = getRectangle(start_x, start_y, start_x+diff_x, start_y+diff_y); - if (hollow) { + if (hollow && rect.w > 0 && rect.h > 0) { ctx.rect(rect.ax+(width%2 ? 0.5 : 1), rect.ay+(width%2 ? 0.5 : 1), rect.x, rect.y); ctx.stroke(); } else { @@ -969,9 +969,9 @@ const Painter = { } if (shape === 'ellipse') { - Blockbench.setStatusBarText(`${diff_x*2 + 1} x ${diff_y*2 + 1}`); + Blockbench.setStatusBarText(`${Math.abs(diff_x*2) + 1} x ${Math.abs(diff_y*2) + 1}`); } else { - Blockbench.setStatusBarText(`${diff_x + 1} x ${diff_y + 1}`); + Blockbench.setStatusBarText(`${Math.abs(diff_x) + 1} x ${Math.abs(diff_y) + 1}`); } }