Sidebar.Geometry.js 4.5 KB
Newer Older
M
r69  
Mr.doob 已提交
1 2 3 4
/**
 * @author mrdoob / http://mrdoob.com/
 */

M
r59  
Mr.doob 已提交
5 6 7
Sidebar.Geometry = function ( editor ) {

	var signals = editor.signals;
M
Mr.doob 已提交
8

M
r67  
Mr.doob 已提交
9
	var container = new UI.CollapsiblePanel();
M
r69  
Mr.doob 已提交
10 11 12 13 14 15
	container.setCollapsed( editor.config.getKey( 'ui/sidebar/geometry/collapsed' ) );
	container.onCollapsedChange( function ( boolean ) {

		editor.config.setKey( 'ui/sidebar/geometry/collapsed', boolean );

	} );
M
r59  
Mr.doob 已提交
16
	container.setDisplay( 'none' );
M
Mr.doob 已提交
17

M
r68  
Mr.doob 已提交
18 19
	var geometryType = new UI.Text().setTextTransform( 'uppercase' );
	container.addStatic( geometryType );
M
r71  
Mr.doob 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

	// Actions

	var objectActions = new UI.Select().setPosition('absolute').setRight( '8px' ).setFontSize( '11px' );
	objectActions.setOptions( {

		'Actions': 'Actions',
		'Center': 'Center',
		'Flatten': 'Flatten'

	} );
	objectActions.onClick( function ( event ) {

		event.stopPropagation(); // Avoid panel collapsing

	} );
	objectActions.onChange( function ( event ) {

		var action = this.getValue();

		var object = editor.selected;
		var geometry = object.geometry;

		if ( confirm( action + ' ' + object.name + '?' ) === false ) return;

		switch ( action ) {

			case 'Center':

				var offset = geometry.center();

				object.position.sub( offset );

				editor.signals.geometryChanged.dispatch( geometry );
				editor.signals.objectChanged.dispatch( object );

				break;

			case 'Flatten':

				geometry.applyMatrix( object.matrix );

				object.position.set( 0, 0, 0 );
				object.rotation.set( 0, 0, 0 );
				object.scale.set( 1, 1, 1 );

				editor.signals.geometryChanged.dispatch( geometry );
				editor.signals.objectChanged.dispatch( object );

				break;

		}

		this.setValue( 'Actions' );

		signals.objectChanged.dispatch( object );

	} );
	container.addStatic( objectActions );

M
r67  
Mr.doob 已提交
80
	container.add( new UI.Break() );
M
Mr.doob 已提交
81

82 83 84
	// uuid

	var geometryUUIDRow = new UI.Panel();
M
r71  
Mr.doob 已提交
85
	var geometryUUID = new UI.Input().setWidth( '115px' ).setFontSize( '12px' ).setDisabled( true );
86 87 88
	var geometryUUIDRenew = new UI.Button( '' ).setMarginLeft( '7px' ).onClick( function () {

		geometryUUID.setValue( THREE.Math.generateUUID() );
M
r62  
Mr.doob 已提交
89 90

		editor.selected.geometry.uuid = geometryUUID.getValue();
91 92 93

	} );

M
r62  
Mr.doob 已提交
94
	geometryUUIDRow.add( new UI.Text( 'UUID' ).setWidth( '90px' ) );
95 96 97 98 99
	geometryUUIDRow.add( geometryUUID );
	geometryUUIDRow.add( geometryUUIDRenew );

	container.add( geometryUUIDRow );

M
Mr.doob 已提交
100 101 102
	// name

	var geometryNameRow = new UI.Panel();
M
r71  
Mr.doob 已提交
103
	var geometryName = new UI.Input().setWidth( '150px' ).setFontSize( '12px' ).onChange( function () {
M
r62  
Mr.doob 已提交
104 105 106 107

		editor.setGeometryName( editor.selected.geometry, geometryName.getValue() );

	} );
M
Mr.doob 已提交
108

M
r62  
Mr.doob 已提交
109
	geometryNameRow.add( new UI.Text( 'Name' ).setWidth( '90px' ) );
M
Mr.doob 已提交
110 111 112 113
	geometryNameRow.add( geometryName );

	container.add( geometryNameRow );

M
r68  
Mr.doob 已提交
114
	// geometry
M
r61  
Mr.doob 已提交
115

M
r68  
Mr.doob 已提交
116
	container.add( new Sidebar.Geometry.Geometry( signals ) );
M
r61  
Mr.doob 已提交
117

M
r68  
Mr.doob 已提交
118
	// buffergeometry
M
r61  
Mr.doob 已提交
119

M
r68  
Mr.doob 已提交
120
	container.add( new Sidebar.Geometry.BufferGeometry( signals ) );
M
Mr.doob 已提交
121

M
r58  
Mr.doob 已提交
122 123
	// parameters

M
r70  
Mr.doob 已提交
124 125
	var parameters = new UI.Panel();
	container.add( parameters );
M
r58  
Mr.doob 已提交
126

M
Mr.doob 已提交
127 128 129

	//

130 131 132
	function build() {

		var object = editor.selected;
M
Mr.doob 已提交
133 134 135

		if ( object && object.geometry ) {

136
			var geometry = object.geometry;
M
Mr.doob 已提交
137 138 139

			container.setDisplay( 'block' );

M
r69  
Mr.doob 已提交
140
			geometryType.setValue( geometry.type );
M
r58  
Mr.doob 已提交
141

M
r68  
Mr.doob 已提交
142 143
			geometryUUID.setValue( geometry.uuid );
			geometryName.setValue( geometry.name );
M
r58  
Mr.doob 已提交
144 145 146

			//

M
r70  
Mr.doob 已提交
147
			parameters.clear();
M
r58  
Mr.doob 已提交
148

M
r66  
Mr.doob 已提交
149
			if ( geometry instanceof THREE.BoxGeometry ) {
M
r58  
Mr.doob 已提交
150

M
r70  
Mr.doob 已提交
151
				parameters.add( new Sidebar.Geometry.BoxGeometry( signals, object ) );
M
r58  
Mr.doob 已提交
152

M
r66  
Mr.doob 已提交
153
			} else if ( geometry instanceof THREE.CircleGeometry ) {
M
r58  
Mr.doob 已提交
154

M
r70  
Mr.doob 已提交
155
				parameters.add( new Sidebar.Geometry.CircleGeometry( signals, object ) );
M
r58  
Mr.doob 已提交
156

157
			} else if ( geometry instanceof THREE.CylinderGeometry ) {
M
r58  
Mr.doob 已提交
158

M
r70  
Mr.doob 已提交
159
				parameters.add( new Sidebar.Geometry.CylinderGeometry( signals, object ) );
M
r58  
Mr.doob 已提交
160

161
			} else if ( geometry instanceof THREE.SphereGeometry ) {
M
r58  
Mr.doob 已提交
162

M
r70  
Mr.doob 已提交
163
				parameters.add( new Sidebar.Geometry.SphereGeometry( signals, object ) );
M
r58  
Mr.doob 已提交
164

165
			} else if ( geometry instanceof THREE.IcosahedronGeometry ) {
M
r58  
Mr.doob 已提交
166

M
r70  
Mr.doob 已提交
167
				parameters.add( new Sidebar.Geometry.IcosahedronGeometry( signals, object ) );
M
r58  
Mr.doob 已提交
168

M
r61  
Mr.doob 已提交
169 170
			} else if ( geometry instanceof THREE.PlaneGeometry ) {

M
r70  
Mr.doob 已提交
171
				parameters.add( new Sidebar.Geometry.PlaneGeometry( signals, object ) );
M
r61  
Mr.doob 已提交
172

173
			} else if ( geometry instanceof THREE.TorusGeometry ) {
M
r58  
Mr.doob 已提交
174

M
r70  
Mr.doob 已提交
175
				parameters.add( new Sidebar.Geometry.TorusGeometry( signals, object ) );
M
r58  
Mr.doob 已提交
176

177
			} else if ( geometry instanceof THREE.TorusKnotGeometry ) {
M
r58  
Mr.doob 已提交
178

M
r70  
Mr.doob 已提交
179
				parameters.add( new Sidebar.Geometry.TorusKnotGeometry( signals, object ) );
M
r69  
Mr.doob 已提交
180

M
r58  
Mr.doob 已提交
181
			}
M
Mr.doob 已提交
182

M
r70  
Mr.doob 已提交
183 184
			parameters.add( new Sidebar.Geometry.Modifiers( signals, object ) );

M
Mr.doob 已提交
185 186 187 188 189 190
		} else {

			container.setDisplay( 'none' );

		}

M
r59  
Mr.doob 已提交
191
	}
M
r58  
Mr.doob 已提交
192

M
r59  
Mr.doob 已提交
193
	signals.objectSelected.add( build );
M
r70  
Mr.doob 已提交
194
	signals.geometryChanged.add( build );
M
r58  
Mr.doob 已提交
195

M
Mr.doob 已提交
196 197 198
	return container;

}