Skip to content

Commit bb1c2fc

Browse files
committed
Use spatial interval as default for extrude/solidify; fix inset UV computation
1 parent 97cb29e commit bb1c2fc

2 files changed

Lines changed: 21 additions & 18 deletions

File tree

js/modeling/mesh_editing.js

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import './mesh/merge_split'
99
import './mesh/import_obj'
1010
import { autoFixMeshEdit } from './mesh/auto_fix'
1111
import { sameMeshEdge } from './mesh/util';
12+
import { getSpatialInterval } from './transform';
1213

1314
export function uncorruptMesh() {
1415
for (let mesh of Mesh.selected) {
@@ -520,7 +521,6 @@ BARS.defineActions(function() {
520521
}
521522
}
522523
})
523-
UVEditor.setAutoSize(null, true, faces_to_autouv);
524524
Undo.finishEdit('Create mesh face')
525525
Canvas.updateView({elements: Mesh.selected, element_aspects: {geometry: true, uv: true, faces: true}, selection: true})
526526
}
@@ -699,7 +699,7 @@ BARS.defineActions(function() {
699699
keybind: new Keybind({key: 'e', shift: true}),
700700
condition: {modes: ['edit'], features: ['meshes'], selected: {mesh: true}, method: () => (Mesh.selected[0] && Mesh.selected[0].getSelectedVertices().length)},
701701
click() {
702-
function runEdit(amended, extend = 1, direction_mode, even_extend) {
702+
function runEdit(amended, extend = getSpatialInterval(), direction_mode, even_extend) {
703703
Undo.initEdit({elements: Mesh.selected, selection: true}, amended);
704704

705705
Mesh.selected.forEach(mesh => {
@@ -931,16 +931,14 @@ BARS.defineActions(function() {
931931
edge[i] = new_vertices[original_vertices.indexOf(vkey)];
932932
});
933933
})
934-
935-
UVEditor.setAutoSize(null, true, new_face_keys);
936934
})
937935
Undo.finishEdit('Extrude mesh selection');
938936
Canvas.updateView({elements: Mesh.selected, element_aspects: {geometry: true, uv: true, faces: true}, selection: true});
939937
}
940938
runEdit();
941939

942940
Undo.amendEdit({
943-
extend: {type: 'num_slider', value: 1, label: 'edit.extrude_mesh_selection.extend', interval_type: 'position'},
941+
extend: {type: 'num_slider', value: getSpatialInterval(), label: 'edit.extrude_mesh_selection.extend', interval_type: 'position'},
944942
direction_mode: {type: 'select', label: 'edit.extrude_mesh_selection.direction', options: {
945943
outwards: 'edit.extrude_mesh_selection.direction.outwards',
946944
average: 'edit.extrude_mesh_selection.direction.average',
@@ -962,7 +960,7 @@ BARS.defineActions(function() {
962960
category: 'edit',
963961
condition: {modes: ['edit'], features: ['meshes'], method: () => (Mesh.selected[0] && Mesh.selected[0].getSelectedFaces().length)},
964962
click() {
965-
function runEdit(amended, extend = 1) {
963+
function runEdit(amended, extend = getSpatialInterval()) {
966964
Undo.initEdit({elements: Mesh.selected, selection: true}, amended);
967965

968966
Mesh.selected.forEach(mesh => {
@@ -1111,16 +1109,14 @@ BARS.defineActions(function() {
11111109

11121110
if (vertices.length == 2) delete mesh.faces[selected_face_keys[face_index]];
11131111
})
1114-
1115-
UVEditor.setAutoSize(null, true, new_face_keys);
11161112
})
11171113
Undo.finishEdit('Solidify mesh selection');
11181114
Canvas.updateView({elements: Mesh.selected, element_aspects: {geometry: true, uv: true, faces: true}, selection: true});
11191115
}
11201116
runEdit();
11211117

11221118
Undo.amendEdit({
1123-
thickness: {type: 'num_slider', value: 1, label: 'edit.solidify_mesh_selection.thickness', interval_type: 'position'},
1119+
thickness: {type: 'num_slider', value: getSpatialInterval(), label: 'edit.solidify_mesh_selection.thickness', interval_type: 'position'},
11241120
}, form => {
11251121
runEdit(true, form.thickness);
11261122
})
@@ -1132,6 +1128,7 @@ BARS.defineActions(function() {
11321128
keybind: new Keybind({key: 'i', shift: true}),
11331129
condition: {modes: ['edit'], features: ['meshes'], method: () => (Mesh.selected[0] && Mesh.selected[0].getSelectedVertices().length >= 3)},
11341130
click() {
1131+
const vec1 = new THREE.Vector3();
11351132
function runEdit(amended, offset = 50) {
11361133
Undo.initEdit({elements: Mesh.selected, selection: true}, amended);
11371134
Mesh.selected.forEach(mesh => {
@@ -1181,12 +1178,20 @@ BARS.defineActions(function() {
11811178

11821179
// Move Faces
11831180
selected_faces.forEach(face => {
1184-
face.vertices.forEach((key, index) => {
1185-
face.vertices[index] = new_vertices[original_vertices.indexOf(key)];
1186-
let uv = face.uv[key];
1187-
delete face.uv[key];
1188-
face.uv[face.vertices[index]] = uv;
1189-
})
1181+
// Calculate new UVs for new vertex positions before modifying face contents.
1182+
const new_uvs = {}
1183+
for (const vertex_key of face.vertices) {
1184+
const new_vertex_key = new_vertices[original_vertices.indexOf(vertex_key)];
1185+
const new_vertex_position = mesh.vertices[new_vertex_key];
1186+
new_uvs[new_vertex_key] = face.localToUV(vec1.fromArray(new_vertex_position));
1187+
}
1188+
// Modify face after calculating UVs
1189+
face.vertices.forEach((vertex_key, index) => {
1190+
const new_vertex_key = new_vertices[original_vertices.indexOf(vertex_key)];
1191+
face.vertices[index] = new_vertex_key;
1192+
delete face.uv[vertex_key];
1193+
face.uv[new_vertex_key] = new_uvs[new_vertex_key];
1194+
});
11901195
})
11911196

11921197
// Create extra quads on sides
@@ -1235,8 +1240,6 @@ BARS.defineActions(function() {
12351240
}
12361241
delete mesh.vertices[b];
12371242
})
1238-
UVEditor.setAutoSize(null, true, modified_face_keys);
1239-
12401243
})
12411244
Undo.finishEdit('Extrude mesh selection')
12421245
Canvas.updateView({elements: Mesh.selected, element_aspects: {geometry: true, uv: true, faces: true}, selection: true})

js/modeling/spline_editing.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ BARS.defineActions(function() {
333333
return (spline && selectedHandles.length && (isFirstSelected || isLastSelected));
334334
}},
335335
click() {
336-
function runEdit(amended, extend = 1) {
336+
function runEdit(amended, extend = getSpatialInterval()) {
337337
Undo.initEdit({elements: SplineMesh.selected, selection: true}, amended);
338338

339339
function extrudeAlongSpline(spline, cKey, hKey, isEnd = false) {

0 commit comments

Comments
 (0)