Sidebar.Geometry.js 4.0 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
r74  
Mr.doob 已提交
9 10 11
	var container = new UI.Panel();
	container.setBorderTop( '0' );
	container.setPaddingTop( '20px' );
M
r71  
Mr.doob 已提交
12 13 14

	// Actions

M
r77  
Mr.doob 已提交
15
	/*
M
r74  
Mr.doob 已提交
16
	var objectActions = new UI.Select().setPosition( 'absolute' ).setRight( '8px' ).setFontSize( '11px' );
M
r71  
Mr.doob 已提交
17 18 19 20
	objectActions.setOptions( {

		'Actions': 'Actions',
		'Center': 'Center',
M
r72  
Mr.doob 已提交
21
		'Convert': 'Convert',
M
r71  
Mr.doob 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
		'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();

M
r74  
Mr.doob 已提交
45 46 47
				var newPosition = object.position.clone();
				newPosition.sub( offset );
				editor.execute( new SetPositionCommand( object, newPosition ) );
M
r71  
Mr.doob 已提交
48

M
r74  
Mr.doob 已提交
49
				editor.signals.geometryChanged.dispatch( object );
M
r71  
Mr.doob 已提交
50 51 52

				break;

M
r72  
Mr.doob 已提交
53 54 55 56
			case 'Convert':

				if ( geometry instanceof THREE.Geometry ) {

M
r74  
Mr.doob 已提交
57
					editor.execute( new SetGeometryCommand( object, new THREE.BufferGeometry().fromGeometry( geometry ) ) );
M
r72  
Mr.doob 已提交
58 59 60 61 62

				}

				break;

M
r71  
Mr.doob 已提交
63 64
			case 'Flatten':

M
r74  
Mr.doob 已提交
65 66 67
				var newGeometry = geometry.clone();
				newGeometry.uuid = geometry.uuid;
				newGeometry.applyMatrix( object.matrix );
M
r71  
Mr.doob 已提交
68

M
r74  
Mr.doob 已提交
69 70 71 72
				var cmds = [ new SetGeometryCommand( object, newGeometry ),
					new SetPositionCommand( object, new THREE.Vector3( 0, 0, 0 ) ),
					new SetRotationCommand( object, new THREE.Euler( 0, 0, 0 ) ),
					new SetScaleCommand( object, new THREE.Vector3( 1, 1, 1 ) ) ];
M
r71  
Mr.doob 已提交
73

M
r74  
Mr.doob 已提交
74
				editor.execute( new MultiCmdsCommand( cmds ), 'Flatten Geometry' );
M
r71  
Mr.doob 已提交
75 76 77 78 79 80 81 82

				break;

		}

		this.setValue( 'Actions' );

	} );
M
r77  
Mr.doob 已提交
83 84
	container.addStatic( objectActions );
	*/
M
r74  
Mr.doob 已提交
85 86 87 88 89 90 91 92

	// type

	var geometryTypeRow = new UI.Row();
	var geometryType = new UI.Text();

	geometryTypeRow.add( new UI.Text( 'Type' ).setWidth( '90px' ) );
	geometryTypeRow.add( geometryType );
M
r71  
Mr.doob 已提交
93

M
r74  
Mr.doob 已提交
94
	container.add( geometryTypeRow );
M
Mr.doob 已提交
95

96 97
	// uuid

M
r74  
Mr.doob 已提交
98
	var geometryUUIDRow = new UI.Row();
M
r71  
Mr.doob 已提交
99
	var geometryUUID = new UI.Input().setWidth( '115px' ).setFontSize( '12px' ).setDisabled( true );
100 101 102
	var geometryUUIDRenew = new UI.Button( '' ).setMarginLeft( '7px' ).onClick( function () {

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

M
r74  
Mr.doob 已提交
104
		editor.execute( new SetGeometryValueCommand( editor.selected, 'uuid', geometryUUID.getValue() ) );
105 106 107

	} );

M
r62  
Mr.doob 已提交
108
	geometryUUIDRow.add( new UI.Text( 'UUID' ).setWidth( '90px' ) );
109 110 111 112 113
	geometryUUIDRow.add( geometryUUID );
	geometryUUIDRow.add( geometryUUIDRenew );

	container.add( geometryUUIDRow );

M
Mr.doob 已提交
114 115
	// name

M
r74  
Mr.doob 已提交
116
	var geometryNameRow = new UI.Row();
M
r71  
Mr.doob 已提交
117
	var geometryName = new UI.Input().setWidth( '150px' ).setFontSize( '12px' ).onChange( function () {
M
r62  
Mr.doob 已提交
118

M
r74  
Mr.doob 已提交
119
		editor.execute( new SetGeometryValueCommand( editor.selected, 'name', geometryName.getValue() ) );
M
r62  
Mr.doob 已提交
120 121

	} );
M
Mr.doob 已提交
122

M
r62  
Mr.doob 已提交
123
	geometryNameRow.add( new UI.Text( 'Name' ).setWidth( '90px' ) );
M
Mr.doob 已提交
124 125 126 127
	geometryNameRow.add( geometryName );

	container.add( geometryNameRow );

M
r68  
Mr.doob 已提交
128
	// geometry
M
r61  
Mr.doob 已提交
129

M
r74  
Mr.doob 已提交
130
	container.add( new Sidebar.Geometry.Geometry( editor ) );
M
r61  
Mr.doob 已提交
131

M
r68  
Mr.doob 已提交
132
	// buffergeometry
M
r61  
Mr.doob 已提交
133

M
r74  
Mr.doob 已提交
134
	container.add( new Sidebar.Geometry.BufferGeometry( editor ) );
M
Mr.doob 已提交
135

M
r58  
Mr.doob 已提交
136 137
	// parameters

M
r74  
Mr.doob 已提交
138
	var parameters = new UI.Span();
M
r70  
Mr.doob 已提交
139
	container.add( parameters );
M
r58  
Mr.doob 已提交
140

M
Mr.doob 已提交
141 142 143

	//

144 145 146
	function build() {

		var object = editor.selected;
M
Mr.doob 已提交
147 148 149

		if ( object && object.geometry ) {

150
			var geometry = object.geometry;
M
Mr.doob 已提交
151 152 153

			container.setDisplay( 'block' );

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

M
r68  
Mr.doob 已提交
156 157
			geometryUUID.setValue( geometry.uuid );
			geometryName.setValue( geometry.name );
M
r58  
Mr.doob 已提交
158 159 160

			//

M
r70  
Mr.doob 已提交
161
			parameters.clear();
M
r58  
Mr.doob 已提交
162

M
r72  
Mr.doob 已提交
163
			if ( geometry.type === 'BufferGeometry' || geometry.type === 'Geometry' ) {
M
r58  
Mr.doob 已提交
164

M
r74  
Mr.doob 已提交
165
				parameters.add( new Sidebar.Geometry.Modifiers( editor, object ) );
M
r58  
Mr.doob 已提交
166

M
r72  
Mr.doob 已提交
167
			} else if ( Sidebar.Geometry[ geometry.type ] !== undefined ) {
M
r58  
Mr.doob 已提交
168

M
r74  
Mr.doob 已提交
169
				parameters.add( new Sidebar.Geometry[ geometry.type ]( editor, object ) );
M
r69  
Mr.doob 已提交
170

M
r58  
Mr.doob 已提交
171
			}
M
Mr.doob 已提交
172 173 174 175 176 177 178

		} else {

			container.setDisplay( 'none' );

		}

M
r59  
Mr.doob 已提交
179
	}
M
r58  
Mr.doob 已提交
180

M
r59  
Mr.doob 已提交
181
	signals.objectSelected.add( build );
M
r70  
Mr.doob 已提交
182
	signals.geometryChanged.add( build );
M
r58  
Mr.doob 已提交
183

M
Mr.doob 已提交
184 185
	return container;

M
r74  
Mr.doob 已提交
186
};