Make Transform > Scale work with meshes

Fix some mesh issues
Add normal transform space
This commit is contained in:
JannisX11 2021-08-28 18:44:55 +02:00
parent 6516c323d1
commit 1741e19411
4 changed files with 37 additions and 6 deletions

View File

@ -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

View File

@ -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()) {

View File

@ -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) => {

View File

@ -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",