mirror of
https://github.com/JannisX11/blockbench.git
synced 2025-03-01 16:37:01 +08:00
Make Invert Selection work for keyframes + mesh selection
This commit is contained in:
parent
cf70df4f8e
commit
40ee8232f5
@ -1155,16 +1155,76 @@ BARS.defineActions(function() {
|
||||
icon: 'swap_vert',
|
||||
category: 'edit',
|
||||
keybind: new Keybind({key: 'i', ctrl: true}),
|
||||
condition: () => Modes.edit || Modes.paint,
|
||||
condition: () => Modes.edit || Modes.paint || Modes.animate,
|
||||
click: function () {
|
||||
elements.forEach(function(s) {
|
||||
if (s.selected) {
|
||||
s.unselect()
|
||||
if (Modes.animate) {
|
||||
if (!Animation.selected) return;
|
||||
Timeline.keyframes.forEach((kf) => {
|
||||
if (!kf.selected) {
|
||||
Timeline.selected.push(kf)
|
||||
kf.selected = true;
|
||||
} else {
|
||||
Timeline.selected.remove(kf);
|
||||
kf.selected = false;
|
||||
}
|
||||
})
|
||||
updateKeyframeSelection()
|
||||
|
||||
} else if (Modes.edit && BarItems.selection_mode.value !== 'object' && Mesh.selected.length && Mesh.selected.length === Outliner.selected.length) {
|
||||
let selection_mode = BarItems.selection_mode.value;
|
||||
if (selection_mode == 'vertex') {
|
||||
Mesh.selected.forEach(mesh => {
|
||||
let selected = mesh.getSelectedVertices();
|
||||
let now_selected = Object.keys(mesh.vertices).filter(vkey => !selected.includes(vkey));
|
||||
mesh.getSelectedVertices(true).replace(now_selected);
|
||||
})
|
||||
} else if (selection_mode == 'edge') {
|
||||
Mesh.selected.forEach(mesh => {
|
||||
let old_vertices = mesh.getSelectedVertices().slice();
|
||||
let old_edges = mesh.getSelectedEdges().slice();
|
||||
let vertices = mesh.getSelectedVertices(true).empty();
|
||||
let edges = mesh.getSelectedEdges(true).empty();
|
||||
|
||||
for (let fkey in mesh.faces) {
|
||||
let face = mesh.faces[fkey];
|
||||
let f_vertices = face.getSortedVertices();
|
||||
f_vertices.forEach((vkey_a, i) => {
|
||||
let edge = [vkey_a, (f_vertices[i+1] || f_vertices[0])];
|
||||
if (!old_edges.find(edge2 => sameMeshEdge(edge2, edge))) {
|
||||
edges.push(edge);
|
||||
vertices.safePush(edge[0], edge[1]);
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
s.selectLow()
|
||||
Mesh.selected.forEach(mesh => {
|
||||
let old_vertices = mesh.getSelectedVertices().slice();
|
||||
let old_faces = mesh.getSelectedFaces().slice();
|
||||
let vertices = mesh.getSelectedVertices(true).empty();
|
||||
let faces = mesh.getSelectedFaces(true).empty();
|
||||
|
||||
for (let fkey in mesh.faces) {
|
||||
if (!old_faces.includes(fkey)) {
|
||||
let face = mesh.faces[fkey];
|
||||
faces.push(fkey);
|
||||
vertices.safePush(...face.vertices);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
if (Group.selected) Group.selected.unselect()
|
||||
updateSelection();
|
||||
|
||||
} else {
|
||||
elements.forEach(function(s) {
|
||||
if (s.selected) {
|
||||
s.unselect()
|
||||
} else {
|
||||
s.selectLow()
|
||||
}
|
||||
})
|
||||
if (Group.selected) Group.selected.unselect()
|
||||
}
|
||||
updateSelection()
|
||||
Blockbench.dispatchEvent('invert_selection')
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user