Browse Source

Editor: IcosahedronGeometry parameters panel.

Mr.doob 12 years ago
parent
commit
ed53dfc17e

+ 1 - 0
editor/index.html

@@ -107,6 +107,7 @@
 		<script src="js/ui/Sidebar.Geometry.CubeGeometry.js"></script>
 		<script src="js/ui/Sidebar.Geometry.CylinderGeometry.js"></script>
 		<script src="js/ui/Sidebar.Geometry.SphereGeometry.js"></script>
+		<script src="js/ui/Sidebar.Geometry.IcosahedronGeometry.js"></script>
 		<script src="js/ui/Sidebar.Geometry.TorusGeometry.js"></script>
 		<script src="js/ui/Sidebar.Material.js"></script>
 		<script src="js/ui/Viewport.js"></script>

+ 51 - 0
editor/js/ui/Sidebar.Geometry.IcosahedronGeometry.js

@@ -0,0 +1,51 @@
+Sidebar.Geometry.IcosahedronGeometry = function ( signals, object ) {
+
+	var container = new UI.Panel();
+	container.setBorderTop( '1px solid #ccc' );
+	container.setPaddingTop( '10px' );
+
+	var geometry = object.geometry;
+
+	// radius
+
+	var radiusRow = new UI.Panel();
+	var radius = new UI.Number( geometry.radius ).onChange( update );
+
+	radiusRow.add( new UI.Text( 'Radius' ).setWidth( '90px' ).setColor( '#666' ) );
+	radiusRow.add( radius );
+
+	container.add( radiusRow );
+
+	// detail
+
+	var detailRow = new UI.Panel();
+	var detail = new UI.Integer( geometry.detail ).setRange( 0, Infinity ).onChange( update );
+
+	detailRow.add( new UI.Text( 'Detail' ).setWidth( '90px' ).setColor( '#666' ) );
+	detailRow.add( detail );
+
+	container.add( detailRow );
+
+
+	//
+
+	function update() {
+
+		delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
+
+		object.geometry.dispose();
+
+		object.geometry = new THREE.IcosahedronGeometry(
+			radius.getValue(),
+			detail.getValue()
+		);
+
+		object.geometry.computeBoundingSphere();
+
+		signals.objectChanged.dispatch( object );
+
+	}
+
+	return container;
+
+}

+ 5 - 0
editor/js/ui/Sidebar.Geometry.js

@@ -123,6 +123,11 @@ Sidebar.Geometry = function ( signals ) {
 				parameters = new Sidebar.Geometry.SphereGeometry( signals, object );
 				container.add( parameters );
 
+			} else if ( selected instanceof THREE.IcosahedronGeometry ) {
+
+				parameters = new Sidebar.Geometry.IcosahedronGeometry( signals, object );
+				container.add( parameters );
+
 			} else if ( selected instanceof THREE.TorusGeometry ) {
 
 				parameters = new Sidebar.Geometry.TorusGeometry( signals, object );

+ 6 - 0
examples/js/exporters/SceneExporter2.js

@@ -78,6 +78,12 @@ THREE.SceneExporter2.prototype = {
 					data.thetaStart = geometry.thetaStart;
 					data.thetaLength = geometry.thetaLength;
 
+				} else if ( geometry instanceof THREE.IcosahedronGeometry ) {
+
+					data.type = 'IcosahedronGeometry';
+					data.radius = geometry.radius;
+					data.detail = geometry.detail;
+
 				} else if ( geometry instanceof THREE.TorusGeometry ) {
 
 					data.type = 'TorusGeometry';

+ 9 - 0
examples/js/loaders/SceneLoader2.js

@@ -111,6 +111,15 @@ THREE.SceneLoader2.prototype = {
 
 					break;
 
+				case 'IcosahedronGeometry':
+
+					geometry = new THREE.IcosahedronGeometry(
+						data.radius,
+						data.detail
+					);
+
+					break;
+
 				case 'TorusGeometry':
 
 					geometry = new THREE.TorusGeometry(

+ 3 - 0
src/extras/geometries/IcosahedronGeometry.js

@@ -4,6 +4,9 @@
 
 THREE.IcosahedronGeometry = function ( radius, detail ) {
 
+	this.radius = radius;
+	this.detail = detail;
+
 	var t = ( 1 + Math.sqrt( 5 ) ) / 2;
 
 	var vertices = [