mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
187 lines
4.2 KiB
JavaScript
187 lines
4.2 KiB
JavaScript
/**
|
|
* @author mrdoob / http://mrdoob.com/
|
|
*/
|
|
|
|
Sidebar.Geometry = function (editor) {
|
|
|
|
var signals = editor.signals;
|
|
|
|
var container = new UI.Panel();
|
|
container.setBorderTop('0');
|
|
container.setPaddingTop('20px');
|
|
|
|
// Actions
|
|
|
|
/*
|
|
var objectActions = new UI.Select().setPosition( 'absolute' ).setRight( '8px' ).setFontSize( '11px' );
|
|
objectActions.setOptions( {
|
|
|
|
'Actions': 'Actions',
|
|
'Center': 'Center',
|
|
'Convert': 'Convert',
|
|
'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();
|
|
|
|
var newPosition = object.position.clone();
|
|
newPosition.sub( offset );
|
|
editor.execute( new SetPositionCommand( object, newPosition ) );
|
|
|
|
editor.signals.geometryChanged.dispatch( object );
|
|
|
|
break;
|
|
|
|
case 'Convert':
|
|
|
|
if ( geometry instanceof THREE.Geometry ) {
|
|
|
|
editor.execute( new SetGeometryCommand( object, new THREE.BufferGeometry().fromGeometry( geometry ) ) );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'Flatten':
|
|
|
|
var newGeometry = geometry.clone();
|
|
newGeometry.uuid = geometry.uuid;
|
|
newGeometry.applyMatrix( object.matrix );
|
|
|
|
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 ) ) ];
|
|
|
|
editor.execute( new MultiCmdsCommand( cmds ), 'Flatten Geometry' );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
this.setValue( 'Actions' );
|
|
|
|
} );
|
|
container.addStatic( objectActions );
|
|
*/
|
|
|
|
// type
|
|
|
|
var geometryTypeRow = new UI.Row();
|
|
var geometryType = new UI.Text();
|
|
|
|
geometryTypeRow.add(new UI.Text('类型').setWidth('90px'));
|
|
geometryTypeRow.add(geometryType);
|
|
|
|
container.add(geometryTypeRow);
|
|
|
|
// uuid
|
|
|
|
var geometryUUIDRow = new UI.Row();
|
|
var geometryUUID = new UI.Input().setWidth('102px').setFontSize('12px').setDisabled(true);
|
|
var geometryUUIDRenew = new UI.Button('新建').setMarginLeft('7px').onClick(function () {
|
|
|
|
geometryUUID.setValue(THREE.Math.generateUUID());
|
|
|
|
editor.execute(new SetGeometryValueCommand(editor.selected, 'uuid', geometryUUID.getValue()));
|
|
|
|
});
|
|
|
|
geometryUUIDRow.add(new UI.Text('UUID').setWidth('90px'));
|
|
geometryUUIDRow.add(geometryUUID);
|
|
geometryUUIDRow.add(geometryUUIDRenew);
|
|
|
|
container.add(geometryUUIDRow);
|
|
|
|
// name
|
|
|
|
var geometryNameRow = new UI.Row();
|
|
var geometryName = new UI.Input().setWidth('150px').setFontSize('12px').onChange(function () {
|
|
|
|
editor.execute(new SetGeometryValueCommand(editor.selected, 'name', geometryName.getValue()));
|
|
|
|
});
|
|
|
|
geometryNameRow.add(new UI.Text('名称').setWidth('90px'));
|
|
geometryNameRow.add(geometryName);
|
|
|
|
container.add(geometryNameRow);
|
|
|
|
// geometry
|
|
|
|
container.add(new Sidebar.Geometry.Geometry(editor));
|
|
|
|
// buffergeometry
|
|
|
|
container.add(new Sidebar.Geometry.BufferGeometry(editor));
|
|
|
|
// parameters
|
|
|
|
var parameters = new UI.Span();
|
|
container.add(parameters);
|
|
|
|
|
|
//
|
|
|
|
function build() {
|
|
|
|
var object = editor.selected;
|
|
|
|
if (object && object.geometry) {
|
|
|
|
var geometry = object.geometry;
|
|
|
|
container.setDisplay('block');
|
|
|
|
geometryType.setValue(geometry.type);
|
|
|
|
geometryUUID.setValue(geometry.uuid);
|
|
geometryName.setValue(geometry.name);
|
|
|
|
//
|
|
|
|
parameters.clear();
|
|
|
|
if (geometry.type === 'BufferGeometry' || geometry.type === 'Geometry') {
|
|
|
|
parameters.add(new Sidebar.Geometry.Modifiers(editor, object));
|
|
|
|
} else if (Sidebar.Geometry[geometry.type] !== undefined) {
|
|
|
|
parameters.add(new Sidebar.Geometry[geometry.type](editor, object));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
container.setDisplay('none');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
signals.objectSelected.add(build);
|
|
signals.geometryChanged.add(build);
|
|
|
|
return container;
|
|
|
|
};
|