@@ -9,6 +9,7 @@ import './mesh/merge_split'
99import './mesh/import_obj'
1010import { autoFixMeshEdit } from './mesh/auto_fix'
1111import { sameMeshEdge } from './mesh/util' ;
12+ import { getSpatialInterval } from './transform' ;
1213
1314export 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 } )
0 commit comments