diff --git a/editor/js/Sidebar.Geometry.js b/editor/js/Sidebar.Geometry.js index 22fd1e6bc1dfc3..5cceae3db4a48c 100644 --- a/editor/js/Sidebar.Geometry.js +++ b/editor/js/Sidebar.Geometry.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; -import { UIPanel, UIRow, UIText, UIInput, UIButton, UISpan } from './libs/ui.js'; +import { UIPanel, UIRow, UIText, UIInput, UIButton, UISpan, UITextArea } from './libs/ui.js'; import { SetGeometryValueCommand } from './commands/SetGeometryValueCommand.js'; @@ -145,6 +145,53 @@ function SidebarGeometry( editor ) { geometryBoundingBoxRow.add( geometryBoundingBox ); container.add( geometryBoundingBoxRow ); + // userData + + const geometryUserDataRow = new UIRow(); + const geometryUserData = new UITextArea().setValue( '{}' ).setWidth( '150px' ).setHeight( '40px' ).setFontSize( '12px' ).onChange( function () { + + try { + + const userData = JSON.parse( geometryUserData.getValue() ); + + if ( JSON.stringify( editor.selected.geometry.userData ) != JSON.stringify( userData ) ) { + + editor.execute( new SetGeometryValueCommand( editor, editor.selected, 'userData', userData ) ); + + build(); + + } + + } catch ( exception ) { + + console.warn( exception ); + + } + + } ); + geometryUserData.onKeyUp( function () { + + try { + + JSON.parse( geometryUserData.getValue() ); + + geometryUserData.dom.classList.add( 'success' ); + geometryUserData.dom.classList.remove( 'fail' ); + + } catch ( error ) { + + geometryUserData.dom.classList.remove( 'success' ); + geometryUserData.dom.classList.add( 'fail' ); + + } + + } ); + + geometryUserDataRow.add( new UIText( strings.getKey( 'sidebar/geometry/userdata' ) ).setClass( 'Label' ) ); + geometryUserDataRow.add( geometryUserData ); + + container.add( geometryUserDataRow ); + // Helpers const helpersRow = new UIRow().setMarginLeft( '120px' ); @@ -247,6 +294,8 @@ function SidebarGeometry( editor ) { helpersRow.setDisplay( geometry.hasAttribute( 'normal' ) ? '' : 'none' ); + geometryUserData.setValue( JSON.stringify( geometry.userData, null, ' ' ) ); + } else { container.setDisplay( 'none' ); diff --git a/editor/js/Strings.js b/editor/js/Strings.js index 24ea679cc31091..e181ae5f2999ce 100644 --- a/editor/js/Strings.js +++ b/editor/js/Strings.js @@ -158,6 +158,7 @@ function Strings( config ) { 'sidebar/geometry/uuid': 'UUID', 'sidebar/geometry/name': 'Name', 'sidebar/geometry/bounds': 'Bounds', + 'sidebar/geometry/userdata': 'User Data', 'sidebar/geometry/show_vertex_normals': 'Show Vertex Normals', 'sidebar/geometry/compute_vertex_normals': 'Compute Vertex Normals', 'sidebar/geometry/compute_vertex_tangents': 'Compute Tangents', @@ -556,6 +557,7 @@ function Strings( config ) { 'sidebar/geometry/uuid': 'UUID', 'sidebar/geometry/name': 'Nom', 'sidebar/geometry/bounds': 'Limites', + 'sidebar/geometry/userdata': 'Données utilisateur', 'sidebar/geometry/show_vertex_normals': 'Afficher normales', 'sidebar/geometry/compute_vertex_normals': 'Compute Vertex Normals', 'sidebar/geometry/compute_vertex_tangents': 'Compute Tangents', @@ -954,6 +956,7 @@ function Strings( config ) { 'sidebar/geometry/uuid': '识别码', 'sidebar/geometry/name': '名称', 'sidebar/geometry/bounds': '界限', + 'sidebar/geometry/userdata': '自定义数据', 'sidebar/geometry/show_vertex_normals': '显示顶点法线', 'sidebar/geometry/compute_vertex_normals': '计算顶点法线', 'sidebar/geometry/compute_vertex_tangents': 'Compute Tangents', @@ -1352,6 +1355,7 @@ function Strings( config ) { 'sidebar/geometry/uuid': 'UUID', 'sidebar/geometry/name': '名前', 'sidebar/geometry/bounds': '境界', + 'sidebar/geometry/userdata': 'ユーザーデータ', 'sidebar/geometry/show_vertex_normals': '頂点法線を表示', 'sidebar/geometry/compute_vertex_normals': '頂点法線を計算', 'sidebar/geometry/compute_vertex_tangents': '接線を計算',