mirror of
https://github.com/JannisX11/blockbench.git
synced 2025-02-17 16:20:13 +08:00
Make Transform > Scale work with meshes
Fix some mesh issues Add normal transform space
This commit is contained in:
parent
6516c323d1
commit
1741e19411
@ -146,7 +146,7 @@ class Mesh extends OutlinerElement {
|
||||
this.faces = {};
|
||||
|
||||
if (!data.vertices) {
|
||||
this.addVertices([16, 16, 16], [16, 16, 0], [16, 0, 16], [16, 0, 0], [0, 16, 16], [0, 16, 0], [0, 0, 16], [0, 0, 0]);
|
||||
this.addVertices([2, 4, 2], [2, 4, -2], [2, 0, 2], [2, 0, -2], [-2, 4, 2], [-2, 4, -2], [-2, 0, 2], [-2, 0, -2]);
|
||||
let vertex_keys = Object.keys(this.vertices);
|
||||
this.addFaces(new MeshFace( this, {vertices: [vertex_keys[0], vertex_keys[2], vertex_keys[1], vertex_keys[3]]} )); // East
|
||||
this.addFaces(new MeshFace( this, {vertices: [vertex_keys[4], vertex_keys[5], vertex_keys[6], vertex_keys[7]]} )); // West
|
||||
@ -835,6 +835,9 @@ BARS.defineActions(function() {
|
||||
selected_faces.forEach(face => {
|
||||
face.vertices.forEach((key, index) => {
|
||||
face.vertices[index] = new_vertices[original_vertices.indexOf(key)];
|
||||
let uv = face.uv[key];
|
||||
delete face.uv[key];
|
||||
face.uv[face.vertices[index]] = uv;
|
||||
})
|
||||
})
|
||||
|
||||
@ -1203,7 +1206,7 @@ BARS.defineActions(function() {
|
||||
if (result.shape == 'cube') {
|
||||
let r = result.diameter/2;
|
||||
let h = result.height;
|
||||
mesh.addVertices([r, h, r], [r, h, -r], [r, 0, r], [r, 0, -r], [-r, hr, r], [-r, h, -r], [-r, 0, r], [-r, 0, -r]);
|
||||
mesh.addVertices([r, h, r], [r, h, -r], [r, 0, r], [r, 0, -r], [-r, h, r], [-r, h, -r], [-r, 0, r], [-r, 0, -r]);
|
||||
let vertex_keys = Object.keys(mesh.vertices);
|
||||
mesh.addFaces(
|
||||
new MeshFace( mesh, {vertices: [vertex_keys[0], vertex_keys[2], vertex_keys[1], vertex_keys[3]]} ), // East
|
||||
|
@ -780,6 +780,10 @@
|
||||
// Local Space
|
||||
return 2;
|
||||
}
|
||||
if (input_space === 'normal' && Mesh.selected.length) {
|
||||
// Local Space
|
||||
return 3;
|
||||
}
|
||||
if (input_space !== 'global' && Format.bone_rig) {
|
||||
// Bone Space
|
||||
if (Format.bone_rig && Group.selected && Group.selected.matchesSelection()) {
|
||||
|
@ -422,7 +422,7 @@ function scaleAll(save, size) {
|
||||
parseFloat($('#scaling_origin_z').val())||0,
|
||||
]
|
||||
var overflow = [];
|
||||
selected.forEach(function(obj) {
|
||||
Outliner.selected.forEach(function(obj) {
|
||||
obj.autouv = 0;
|
||||
origin.forEach(function(ogn, i) {
|
||||
if ($('#model_scale_'+getAxisLetter(i)+'_axis').is(':checked')) {
|
||||
@ -446,6 +446,12 @@ function scaleAll(save, size) {
|
||||
obj.origin[i] = (obj.before.origin[i] - ogn) * size;
|
||||
obj.origin[i] = obj.origin[i] + ogn;
|
||||
}
|
||||
|
||||
if (obj instanceof Mesh) {
|
||||
for (let key in obj.vertices) {
|
||||
obj.vertices[key][i] = (obj.before.vertices[key][i] - ogn) * size + ogn;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
if (obj.from) obj.from[i] = obj.before.from[i];
|
||||
@ -453,6 +459,11 @@ function scaleAll(save, size) {
|
||||
|
||||
if (obj.origin) obj.origin[i] = obj.before.origin[i];
|
||||
|
||||
if (obj instanceof Mesh) {
|
||||
for (let key in obj.vertices) {
|
||||
obj.vertices[key][i] = obj.before.vertices[key][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
if (save === true) {
|
||||
@ -501,6 +512,11 @@ function cancelScaleAll() {
|
||||
if (obj.from) obj.from.V3_set(obj.before.from);
|
||||
if (obj.to) obj.to.V3_set(obj.before.to);
|
||||
if (obj.origin) obj.origin.V3_set(obj.before.origin);
|
||||
if (obj instanceof Mesh) {
|
||||
for (let key in obj.vertices) {
|
||||
obj.vertices[key].V3_set(obj.before.vertices[key]);
|
||||
}
|
||||
}
|
||||
delete obj.before
|
||||
if (Project.box_uv) {
|
||||
Canvas.updateUV(obj)
|
||||
@ -911,7 +927,8 @@ BARS.defineActions(function() {
|
||||
options: {
|
||||
global: true,
|
||||
bone: {condition: () => Format.bone_rig, name: true},
|
||||
local: true
|
||||
local: true,
|
||||
normal: {condition: () => Mesh.selected.length, name: true}
|
||||
},
|
||||
onChange() {
|
||||
updateSelection();
|
||||
@ -1336,14 +1353,20 @@ BARS.defineActions(function() {
|
||||
$('#model_scale_range, #model_scale_label').val(1)
|
||||
$('#scaling_clipping_warning').text('')
|
||||
|
||||
Undo.initEdit({elements: selected, outliner: Format.bone_rig})
|
||||
Undo.initEdit({elements: Outliner.selected, outliner: Format.bone_rig})
|
||||
|
||||
selected.forEach(function(obj) {
|
||||
Outliner.selected.forEach(function(obj) {
|
||||
obj.before = {
|
||||
from: obj.from ? obj.from.slice() : undefined,
|
||||
to: obj.to ? obj.to.slice() : undefined,
|
||||
origin: obj.origin ? obj.origin.slice() : undefined
|
||||
}
|
||||
if (obj instanceof Mesh) {
|
||||
obj.before.vertices = {};
|
||||
for (let key in obj.vertices) {
|
||||
obj.before.vertices[key] = obj.vertices[key].slice();
|
||||
}
|
||||
}
|
||||
})
|
||||
if (Format.bone_rig && Group.selected) {
|
||||
Group.selected.forEachChild((g) => {
|
||||
|
@ -972,6 +972,7 @@
|
||||
"action.transform_space.global": "Global",
|
||||
"action.transform_space.bone": "Bone",
|
||||
"action.transform_space.local": "Local",
|
||||
"action.transform_space.normal": "Normal",
|
||||
"action.rotation_space": "Rotation Space",
|
||||
"action.scale": "Scale...",
|
||||
"action.scale.desc": "Scale the selected cubes",
|
||||
|
Loading…
Reference in New Issue
Block a user