123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- Sidebar.Properties.Material = function ( signals ) {
- var materials = {
- 'LineBasicMaterial': THREE.LineBasicMaterial,
- 'MeshBasicMaterial': THREE.MeshBasicMaterial,
- 'MeshDepthMaterial': THREE.MeshDepthMaterial,
- 'MeshFaceMaterial': THREE.MeshFaceMaterial,
- 'MeshLambertMaterial': THREE.MeshLambertMaterial,
- 'MeshNormalMaterial': THREE.MeshNormalMaterial,
- 'MeshPhongMaterial': THREE.MeshPhongMaterial,
- 'ParticleBasicMaterial': THREE.ParticleBasicMaterial,
- 'ParticleCanvasMaterial': THREE.ParticleCanvasMaterial,
- 'ParticleDOMMaterial': THREE.ParticleDOMMaterial,
- 'ShaderMaterial': THREE.ShaderMaterial,
- 'Material': THREE.Material
- };
- var container = new UI.Panel();
- container.setDisplay( 'none' );
- container.add( new UI.Text().setValue( 'MATERIAL' ).setColor( '#666' ) );
- container.add( new UI.Break(), new UI.Break() );
- // name
- var materialNameRow = new UI.Panel();
- var materialName = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' ).setFontSize( '12px' );
- materialNameRow.add( new UI.Text().setValue( 'Name' ).setColor( '#666' ) );
- materialNameRow.add( materialName );
- container.add( materialNameRow );
- // class
- var materialClassRow = new UI.Panel();
- var materialClass = new UI.Select( 'absolute' ).setOptions( [ 'LineBasicMaterial', 'MeshBasicMaterial', 'MeshDepthMaterial', 'MeshFaceMaterial', 'MeshLambertMaterial', 'MeshNormalMaterial', 'MeshPhongMaterial', 'ParticleBasicMaterial', 'ParticleCanvasMaterial', 'ParticleDOMMaterial', 'ShaderMaterial' ] ).setLeft( '90px' ).setWidth( '180px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
- materialClassRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Class' ).setColor( '#666' ) );
- materialClassRow.add( materialClass );
- container.add( materialClassRow );
- // color
- var materialColorRow = new UI.Panel();
- var materialColor = new UI.Color( 'absolute' ).setLeft( '90px' ).onChange( update );
- materialColorRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Color' ).setColor( '#666' ) );
- materialColorRow.add( materialColor );
- container.add( materialColorRow );
- // ambient
- var materialAmbientRow = new UI.Panel();
- var materialAmbient = new UI.Color( 'absolute' ).setLeft( '90px' ).onChange( update );
- materialAmbientRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Ambient' ).setColor( '#666' ) );
- materialAmbientRow.add( materialAmbient );
- container.add( materialAmbientRow );
- // specular
- var materialSpecularRow = new UI.Panel();
- var materialSpecular = new UI.Color( 'absolute' ).setLeft( '90px' ).onChange( update );
- materialSpecularRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Specular' ).setColor( '#666' ) );
- materialSpecularRow.add( materialSpecular );
- container.add( materialSpecularRow );
- // map
- var materialMapRow = new UI.Panel();
- var materialMap = new UI.Text( 'absolute' ).setLeft( '90px' ).setColor( '#444' ).setFontSize( '12px' );
- materialMapRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Map' ).setColor( '#666' ) );
- materialMapRow.add( materialMap );
- container.add( materialSpecularRow );
- // opacity
- var materialOpacityRow = new UI.Panel();
- var materialOpacity = new UI.Number( 'absolute' ).setLeft( '90px' ).setWidth( '60px' ).setRange( 0, 1 ).onChange( update );
- materialOpacityRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Opacity' ).setColor( '#666' ) );
- materialOpacityRow.add( materialOpacity );
- container.add( materialOpacityRow );
- // transparent
- var materialTransparentRow = new UI.Panel();
- var materialTransparent = new UI.Boolean( 'absolute' ).setValue( false ).setLeft( '90px' ).onChange( update );
- materialTransparentRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Transparent' ).setColor( '#666' ) );
- materialTransparentRow.add( materialTransparent );
- container.add( materialTransparentRow );
- // wireframe
- var materialWireframeRow = new UI.Panel();
- var materialWireframe = new UI.Boolean( 'absolute' ).setValue( false ).setLeft( '90px' ).onChange( update );
- materialWireframeRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Wireframe' ).setColor( '#666' ) );
- materialWireframeRow.add( materialWireframe );
- container.add( materialWireframeRow );
- // wireframeLinewidth
- var materialWireframeLinewidthRow = new UI.Panel();
- var materialWireframeLinewidth = new UI.Number( 'absolute' ).setValue( 1 ).setLeft( '90px' ).setRange( 0, 100 ).onChange( update );
- materialWireframeLinewidthRow.add( new UI.HorizontalRule(), new UI.Text().setValue( 'Linewidth' ).setColor( '#666' ) );
- materialWireframeLinewidthRow.add( materialWireframeLinewidth );
- container.add( materialWireframeLinewidthRow );
- //
- var selected = null;
- function update() {
- var material = selected.material;
- if ( material ) {
- if ( material instanceof materials[ materialClass.getValue() ] == false ) {
- material = new materials[ materialClass.getValue() ];
- selected.material = material;
- }
- if ( material.color !== undefined ) {
- material.color.setHex( parseInt( materialColor.getValue().substr( 1 ), 16 ) );
- }
- if ( material.ambient !== undefined ) {
- material.ambient.setHex( parseInt( materialAmbient.getValue().substr( 1 ), 16 ) );
- }
- if ( material.specular !== undefined ) {
- material.specular.setHex( parseInt( materialSpecular.getValue().substr( 1 ), 16 ) );
- }
- if ( material.opacity !== undefined ) {
- material.opacity = materialOpacity.getValue();
- }
- if ( material.transparent !== undefined ) {
- material.transparent = materialTransparent.getValue();
- }
- if ( material.wireframe !== undefined ) {
- material.wireframe = materialWireframe.getValue();
- }
- if ( material.wireframe === true ) {
- material.wireframeLinewidth = materialWireframeLinewidth.getValue();
- }
- updateRows();
- signals.materialChanged.dispatch( material );
- }
- };
- function updateRows() {
- var material = selected.material;
- materialColorRow.setDisplay( material.color !== undefined ? '' : 'none' );
- materialAmbientRow.setDisplay( material.ambient !== undefined ? '' : 'none' );
- materialSpecularRow.setDisplay( material.specular !== undefined ? '' : 'none' );
- materialMapRow.setDisplay( material.map !== undefined ? '' : 'none' );
- materialOpacityRow.setDisplay( material.opacity !== undefined ? '' : 'none' );
- materialTransparentRow.setDisplay( material.transparent !== undefined ? '' : 'none' );
- materialWireframeRow.setDisplay( material.wireframe !== undefined ? '' : 'none' );
- materialWireframeLinewidthRow.setDisplay( material.wireframe === true ? '' : 'none' );
- };
- signals.objectSelected.add( function ( object ) {
- if ( object && object.material ) {
- selected = object;
- container.setDisplay( '' );
- var material = object.material;
- materialName.setValue( material.name );
- materialClass.setValue( getMaterialInstanceName( material ) );
- if ( material.color !== undefined ) {
- materialColor.setValue( '#' + material.color.getHex().toString( 16 ) );
- }
- if ( material.ambient !== undefined ) {
- materialAmbient.setValue( '#' + material.ambient.getHex().toString( 16 ) );
- }
- if ( material.specular !== undefined ) {
- materialSpecular.setValue( '#' + material.specular.getHex().toString( 16 ) );
- }
- if ( material.map !== undefined ) {
- materialMap.setValue( material.map );
- }
- if ( material.opacity !== undefined ) {
- materialOpacity.setValue( material.opacity );
- }
- if ( material.transparent !== undefined ) {
- materialTransparent.setValue( material.transparent );
- }
- if ( material.wireframe !== undefined ) {
- materialWireframe.setValue( material.wireframe );
- }
- if ( material.wireframeLinewidth !== undefined ) {
- materialWireframeLinewidth.setValue( material.wireframeLinewidth );
- }
- updateRows();
- } else {
- selected = null;
- container.setDisplay( 'none' );
- }
- } );
- function getMaterialInstanceName( material ) {
- for ( var key in materials ) {
- if ( material instanceof materials[ key ] ) return key;
- }
- }
- return container;
- }
|