You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.2 KiB
116 lines
3.2 KiB
2 years ago
|
import { UIRow, UIText, UISpan, UIBreak, UICheckbox } from './libs/ui.js';
|
||
|
|
||
|
function SidebarGeometryBufferGeometry( editor ) {
|
||
|
|
||
|
const strings = editor.strings;
|
||
|
|
||
|
const signals = editor.signals;
|
||
|
|
||
|
const container = new UIRow();
|
||
|
|
||
|
function update( object ) {
|
||
|
|
||
|
if ( object === null ) return; // objectSelected.dispatch( null )
|
||
|
if ( object === undefined ) return;
|
||
|
|
||
|
const geometry = object.geometry;
|
||
|
|
||
|
if ( geometry && geometry.isBufferGeometry ) {
|
||
|
|
||
|
container.clear();
|
||
|
container.setDisplay( 'block' );
|
||
|
|
||
|
// attributes
|
||
|
|
||
|
const attributesRow = new UIRow();
|
||
|
|
||
|
const textAttributes = new UIText( strings.getKey( 'sidebar/geometry/buffer_geometry/attributes' ) ).setWidth( '90px' );
|
||
|
attributesRow.add( textAttributes );
|
||
|
|
||
|
const containerAttributes = new UISpan().setDisplay( 'inline-block' ).setVerticalAlign( 'middle' ).setWidth( '160px' );
|
||
|
attributesRow.add( containerAttributes );
|
||
|
|
||
|
const index = geometry.index;
|
||
|
|
||
|
if ( index !== null ) {
|
||
|
|
||
|
containerAttributes.add( new UIText( strings.getKey( 'sidebar/geometry/buffer_geometry/index' ) ).setWidth( '80px' ) );
|
||
|
containerAttributes.add( new UIText( ( index.count ).format() ).setFontSize( '12px' ) );
|
||
|
containerAttributes.add( new UIBreak() );
|
||
|
|
||
|
}
|
||
|
|
||
|
const attributes = geometry.attributes;
|
||
|
|
||
|
for ( const name in attributes ) {
|
||
|
|
||
|
const attribute = attributes[ name ];
|
||
|
|
||
|
containerAttributes.add( new UIText( name ).setWidth( '80px' ) );
|
||
|
containerAttributes.add( new UIText( ( attribute.count ).format() + ' (' + attribute.itemSize + ')' ).setFontSize( '12px' ) );
|
||
|
containerAttributes.add( new UIBreak() );
|
||
|
|
||
|
}
|
||
|
|
||
|
container.add( attributesRow );
|
||
|
|
||
|
// morph targets
|
||
|
|
||
|
const morphAttributes = geometry.morphAttributes;
|
||
|
const hasMorphTargets = Object.keys( morphAttributes ).length > 0;
|
||
|
|
||
|
if ( hasMorphTargets === true ) {
|
||
|
|
||
|
// morph attributes
|
||
|
|
||
|
const rowMorphAttributes = new UIRow();
|
||
|
|
||
|
const textMorphAttributes = new UIText( strings.getKey( 'sidebar/geometry/buffer_geometry/morphAttributes' ) ).setWidth( '90px' );
|
||
|
rowMorphAttributes.add( textMorphAttributes );
|
||
|
|
||
|
const containerMorphAttributes = new UISpan().setDisplay( 'inline-block' ).setVerticalAlign( 'middle' ).setWidth( '160px' );
|
||
|
rowMorphAttributes.add( containerMorphAttributes );
|
||
|
|
||
|
for ( const name in morphAttributes ) {
|
||
|
|
||
|
const morphTargets = morphAttributes[ name ];
|
||
|
|
||
|
containerMorphAttributes.add( new UIText( name ).setWidth( '80px' ) );
|
||
|
containerMorphAttributes.add( new UIText( ( morphTargets.length ).format() ).setFontSize( '12px' ) );
|
||
|
containerMorphAttributes.add( new UIBreak() );
|
||
|
|
||
|
}
|
||
|
|
||
|
container.add( rowMorphAttributes );
|
||
|
|
||
|
// morph relative
|
||
|
|
||
|
const rowMorphRelative = new UIRow();
|
||
|
|
||
|
const textMorphRelative = new UIText( strings.getKey( 'sidebar/geometry/buffer_geometry/morphRelative' ) ).setWidth( '90px' );
|
||
|
rowMorphRelative.add( textMorphRelative );
|
||
|
|
||
|
const checkboxMorphRelative = new UICheckbox().setValue( geometry.morphTargetsRelative ).setDisabled( true );
|
||
|
rowMorphRelative.add( checkboxMorphRelative );
|
||
|
|
||
|
container.add( rowMorphRelative );
|
||
|
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
container.setDisplay( 'none' );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
signals.objectSelected.add( update );
|
||
|
signals.geometryChanged.add( update );
|
||
|
|
||
|
return container;
|
||
|
|
||
|
}
|
||
|
|
||
|
export { SidebarGeometryBufferGeometry };
|