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

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

M
r98  
Mr.doob 已提交
7 8
	var strings = editor.strings;

M
r59  
Mr.doob 已提交
9
	var signals = editor.signals;
M
Mr.doob 已提交
10

M
r74  
Mr.doob 已提交
11 12
	var container = new UI.Panel();
	container.setBorderTop( '0' );
M
r98  
Mr.doob 已提交
13
	container.setDisplay( 'none' );
M
r74  
Mr.doob 已提交
14
	container.setPaddingTop( '20px' );
M
r71  
Mr.doob 已提交
15 16 17

	// Actions

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

		'Actions': 'Actions',
		'Center': 'Center',
M
r72  
Mr.doob 已提交
24
		'Convert': 'Convert',
M
r71  
Mr.doob 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
		'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 已提交
48 49 50
				var newPosition = object.position.clone();
				newPosition.sub( offset );
				editor.execute( new SetPositionCommand( object, newPosition ) );
M
r71  
Mr.doob 已提交
51

M
r74  
Mr.doob 已提交
52
				editor.signals.geometryChanged.dispatch( object );
M
r71  
Mr.doob 已提交
53 54 55

				break;

M
r72  
Mr.doob 已提交
56 57
			case 'Convert':

M
r102  
Mr.doob 已提交
58
				if ( geometry && geometry.isGeometry ) {
M
r72  
Mr.doob 已提交
59

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

				}

				break;

M
r71  
Mr.doob 已提交
66 67
			case 'Flatten':

M
r74  
Mr.doob 已提交
68 69 70
				var newGeometry = geometry.clone();
				newGeometry.uuid = geometry.uuid;
				newGeometry.applyMatrix( object.matrix );
M
r71  
Mr.doob 已提交
71

M
r74  
Mr.doob 已提交
72 73 74 75
				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 已提交
76

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

				break;

		}

		this.setValue( 'Actions' );

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

	// type

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

M
r98  
Mr.doob 已提交
94
	geometryTypeRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/type' ) ).setWidth( '90px' ) );
M
r74  
Mr.doob 已提交
95
	geometryTypeRow.add( geometryType );
M
r71  
Mr.doob 已提交
96

M
r74  
Mr.doob 已提交
97
	container.add( geometryTypeRow );
M
Mr.doob 已提交
98

99 100
	// uuid

M
r74  
Mr.doob 已提交
101
	var geometryUUIDRow = new UI.Row();
M
r83  
Mr.doob 已提交
102
	var geometryUUID = new UI.Input().setWidth( '102px' ).setFontSize( '12px' ).setDisabled( true );
M
r98  
Mr.doob 已提交
103
	var geometryUUIDRenew = new UI.Button( strings.getKey( 'sidebar/geometry/new' ) ).setMarginLeft( '7px' ).onClick( function () {
104 105

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

M
r74  
Mr.doob 已提交
107
		editor.execute( new SetGeometryValueCommand( editor.selected, 'uuid', geometryUUID.getValue() ) );
108 109 110

	} );

M
r98  
Mr.doob 已提交
111
	geometryUUIDRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/uuid' ) ).setWidth( '90px' ) );
112 113 114 115 116
	geometryUUIDRow.add( geometryUUID );
	geometryUUIDRow.add( geometryUUIDRenew );

	container.add( geometryUUIDRow );

M
Mr.doob 已提交
117 118
	// name

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

M
r74  
Mr.doob 已提交
122
		editor.execute( new SetGeometryValueCommand( editor.selected, 'name', geometryName.getValue() ) );
M
r62  
Mr.doob 已提交
123 124

	} );
M
Mr.doob 已提交
125

M
r98  
Mr.doob 已提交
126
	geometryNameRow.add( new UI.Text( strings.getKey( 'sidebar/geometry/name' ) ).setWidth( '90px' ) );
M
Mr.doob 已提交
127 128 129 130
	geometryNameRow.add( geometryName );

	container.add( geometryNameRow );

M
r96  
Mr.doob 已提交
131 132 133 134 135
	// parameters

	var parameters = new UI.Span();
	container.add( parameters );

M
r68  
Mr.doob 已提交
136
	// geometry
M
r61  
Mr.doob 已提交
137

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

M
r68  
Mr.doob 已提交
140
	// buffergeometry
M
r61  
Mr.doob 已提交
141

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

M
r96  
Mr.doob 已提交
144
	// size
M
r58  
Mr.doob 已提交
145

M
r96  
Mr.doob 已提交
146
	var geometryBoundingSphere = new UI.Text();
M
r58  
Mr.doob 已提交
147

M
r98  
Mr.doob 已提交
148
	container.add( new UI.Text( strings.getKey( 'sidebar/geometry/bounds' ) ).setWidth( '90px' ) );
M
r96  
Mr.doob 已提交
149
	container.add( geometryBoundingSphere );
M
Mr.doob 已提交
150 151 152

	//

153 154 155
	function build() {

		var object = editor.selected;
M
Mr.doob 已提交
156 157 158

		if ( object && object.geometry ) {

159
			var geometry = object.geometry;
M
Mr.doob 已提交
160 161 162

			container.setDisplay( 'block' );

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

M
r68  
Mr.doob 已提交
165 166
			geometryUUID.setValue( geometry.uuid );
			geometryName.setValue( geometry.name );
M
r58  
Mr.doob 已提交
167 168 169

			//

M
r70  
Mr.doob 已提交
170
			parameters.clear();
M
r58  
Mr.doob 已提交
171

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

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

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

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

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

M
r104  
Mr.doob 已提交
182 183
			if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();

M
r96  
Mr.doob 已提交
184 185
			geometryBoundingSphere.setValue( Math.floor( geometry.boundingSphere.radius * 1000 ) / 1000 );

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

			container.setDisplay( 'none' );

		}

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

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

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

M
r74  
Mr.doob 已提交
199
};