Explorar el Código

moved geometry regenerator to Editor class

Aleksandar Rodic hace 12 años
padre
commit
b61034a6de

+ 91 - 4
editor/js/Editor.js

@@ -65,9 +65,16 @@ Editor.prototype = {
     var radius = parameters.radius ? parameters.radius : null;
     var radiusTop = parameters.radiusTop ? parameters.radiusTop : null;
     var radiusBottom = parameters.radiusBottom ? parameters.radiusBottom : null;
+    var phiStart = parameters.phiStart ? parameters.phiStart : null;
+    var phiLength = parameters.phiLength ? parameters.phiLength : null;
+    var thetaStart = parameters.thetaStart ? parameters.thetaStart : null;
+    var thetaLength = parameters.thetaLength ? parameters.thetaLength : null;
     var tube = parameters.tube ? parameters.tube : null;
     var arc = parameters.arc ? parameters.arc : null;
     var detail = parameters.detail ? parameters.detail : null;
+    var p = parameters.p ? parameters.p : null;
+    var q = parameters.q ? parameters.q : null;
+    var heightScale = parameters.heightScale ? parameters.heightScale : null;
     var openEnded = parameters.openEnded ? parameters.openEnded : false;
     var color = parameters.color ? parameters.color : null;
     var intensity = parameters.intensity ? parameters.intensity : null;
@@ -133,8 +140,12 @@ Editor.prototype = {
       heightSegments = heightSegments ? heightSegments : 16;
       widthSegments = widthSegments ? widthSegments : 32;
       heightSegments = heightSegments ? heightSegments : 16;
+      phiStart = phiStart ? phiStart : null;
+      phiLength = phiLength ? phiLength : null;
+      thetaStart = thetaStart ? thetaStart : null;
+      thetaLength = thetaLength ? thetaLength : null;
 
-      geometry = new THREE.SphereGeometry( radius, widthSegments, heightSegments );
+      geometry = new THREE.SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength );
       object = new THREE.Mesh( geometry, this.defaultMaterial );
       object.name = name ? name : 'Sphere ' + object.id;
       geometry.name = object.name + ' geometry';
@@ -168,9 +179,9 @@ Editor.prototype = {
       tube = tube ? tube : 40;
       radialSegments = radialSegments ? radialSegments : 64;
       tubularSegments = tubularSegments ? tubularSegments : 8;
-      var p = 2;
-      var q = 3;
-      var heightScale = 1;
+      p = p ? p : 2;
+      q = q ? q : 3;
+      heightScale = heightScale ? heightScale : 1;
 
       geometry = new THREE.TorusKnotGeometry( radius, tube, radialSegments, tubularSegments, p, q, heightScale );
       object = new THREE.Mesh( geometry, this.defaultMaterial );
@@ -907,6 +918,82 @@ Editor.prototype = {
 
   },
 
+  remakeGeometry: function( geometry, parameters ) {
+
+    // TODO: document
+
+    parameters = parameters ? parameters : {};
+
+    var uuid = geometry.uuid;
+    var name = parameters.name ? parameters.name : geometry.name;
+
+    var width = parameters.width ? parameters.width : null;
+    var height = parameters.height ? parameters.height : null;
+    var depth = parameters.depth ? parameters.depth : null;
+    var widthSegments = parameters.widthSegments ? parameters.widthSegments : null;
+    var heightSegments = parameters.heightSegments ? parameters.heightSegments : null;
+    var depthSegments = parameters.depthSegments ? parameters.depthSegments : null;
+    var radialSegments = parameters.radialSegments ? parameters.radialSegments : null;
+    var tubularSegments = parameters.tubularSegments ? parameters.tubularSegments : null;
+    var radius = parameters.radius ? parameters.radius : null;
+    var radiusTop = parameters.radiusTop ? parameters.radiusTop : null;
+    var radiusBottom = parameters.radiusBottom ? parameters.radiusBottom : null;
+    var phiStart = parameters.phiStart ? parameters.phiStart : null;
+    var phiLength = parameters.phiLength ? parameters.phiLength : null;
+    var thetaStart = parameters.thetaStart ? parameters.thetaStart : null;
+    var thetaLength = parameters.thetaLength ? parameters.thetaLength : null;
+    var tube = parameters.tube ? parameters.tube : null;
+    var arc = parameters.arc ? parameters.arc : null;
+    var detail = parameters.detail ? parameters.detail : null;
+    var p = parameters.p ? parameters.p : null;
+    var q = parameters.q ? parameters.q : null;
+    var heightScale = parameters.heightScale ? parameters.heightScale : null;
+    var openEnded = parameters.openEnded ? parameters.openEnded : false;
+
+    if ( geometry instanceof THREE.CubeGeometry )
+      editor.geometries[uuid] = new THREE.CubeGeometry( width, height, depth, widthSegments, heightSegments, depthSegments );
+
+    if ( geometry instanceof THREE.CylinderGeometry )
+      editor.geometries[uuid] = new THREE.CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded );
+
+    if ( geometry instanceof THREE.IcosahedronGeometry )
+      editor.geometries[uuid] = new THREE.IcosahedronGeometry( radius, detail );
+
+    if ( geometry instanceof THREE.PlaneGeometry )
+      editor.geometries[uuid] = new THREE.PlaneGeometry( width, height, widthSegments, heightSegments );
+
+    if ( geometry instanceof THREE.SphereGeometry )
+      editor.geometries[uuid] = new THREE.SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength );
+
+    if ( geometry instanceof THREE.TorusGeometry )
+      editor.geometries[uuid] = new THREE.TorusGeometry( radius, tube, radialSegments, tubularSegments, arc );
+
+    if ( geometry instanceof THREE.TorusKnotGeometry )
+      editor.geometries[uuid] = new THREE.TorusKnotGeometry( radius, tube, radialSegments, tubularSegments, p, q, heightScale );
+
+    editor.geometries[uuid].computeBoundingSphere();
+    editor.geometries[uuid].uuid = uuid;
+    editor.geometries[uuid].name = name;
+
+    for ( var i in editor.objects ) {
+
+      var object = editor.objects[i];
+
+      if ( object.geometry && object.geometry.uuid == uuid ) {
+
+        delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
+        object.geometry.dispose();
+
+        object.geometry = editor.geometries[uuid];
+
+        signals.objectChanged.dispatch( object );
+
+      }
+
+    }
+
+  },
+
   setFog: function( parameters ) {
 
     var fogType = parameters.fogType ? parameters.fogType : null;

+ 9 - 32
editor/js/Sidebar.Geometry.CubeGeometry.js

@@ -68,39 +68,16 @@ Sidebar.Geometry.CubeGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.CubeGeometry(
-			width.getValue(),
-			height.getValue(),
-			depth.getValue(),
-			widthSegments.getValue(),
-			heightSegments.getValue(),
-			depthSegments.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				width: width.getValue(),
+				height: height.getValue(),
+				depth: depth.getValue(),
+				widthSegments: widthSegments.getValue(),
+				heightSegments: heightSegments.getValue(),
+				depthSegments: depthSegments.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 15 - 38
editor/js/Sidebar.Geometry.CylinderGeometry.js

@@ -34,15 +34,15 @@ Sidebar.Geometry.CylinderGeometry = function ( signals, geometry ) {
 
 	container.add( heightRow );
 
-	// radiusSegments
+	// radialSegments
 
-	var radiusSegmentsRow = new UI.Panel();
-	var radiusSegments = new UI.Integer( geometry.radiusSegments ).setRange( 1, Infinity ).onChange( update );
+	var radialSegmentsRow = new UI.Panel();
+	var radialSegments = new UI.Integer( geometry.radialSegments ).setRange( 1, Infinity ).onChange( update );
 
-	radiusSegmentsRow.add( new UI.Text( 'Radius segments' ).setWidth( '90px' ).setColor( '#666' ) );
-	radiusSegmentsRow.add( radiusSegments );
+	radialSegmentsRow.add( new UI.Text( 'Radius segments' ).setWidth( '90px' ).setColor( '#666' ) );
+	radialSegmentsRow.add( radialSegments );
 
-	container.add( radiusSegmentsRow );
+	container.add( radialSegmentsRow );
 
 	// heightSegments
 
@@ -68,39 +68,16 @@ Sidebar.Geometry.CylinderGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.CylinderGeometry(
-			radiusTop.getValue(),
-			radiusBottom.getValue(),
-			height.getValue(),
-			radiusSegments.getValue(),
-			heightSegments.getValue(),
-			openEnded.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				radiusTop: radiusTop.getValue(),
+				radiusBottom: radiusBottom.getValue(),
+				height: height.getValue(),
+				radialSegments: radialSegments.getValue(),
+				heightSegments: heightSegments.getValue(),
+				openEnded: openEnded.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 5 - 28
editor/js/Sidebar.Geometry.IcosahedronGeometry.js

@@ -29,35 +29,12 @@ Sidebar.Geometry.IcosahedronGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.IcosahedronGeometry(
-			radius.getValue(),
-			detail.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				radius: radius.getValue(),
+				detail: detail.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 7 - 30
editor/js/Sidebar.Geometry.PlaneGeometry.js

@@ -49,37 +49,14 @@ Sidebar.Geometry.PlaneGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.PlaneGeometry(
-			width.getValue(),
-			height.getValue(),
-			widthSegments.getValue(),
-			heightSegments.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				width: width.getValue(),
+				height: height.getValue(),
+				widthSegments: widthSegments.getValue(),
+				heightSegments: heightSegments.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 10 - 33
editor/js/Sidebar.Geometry.SphereGeometry.js

@@ -79,40 +79,17 @@ Sidebar.Geometry.SphereGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.SphereGeometry(
-			radius.getValue(),
-			widthSegments.getValue(),
-			heightSegments.getValue(),
-			phiStart.getValue(),
-			phiLength.getValue(),
-			thetaStart.getValue(),
-			thetaLength.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				radius: radius.getValue(),
+				widthSegments: widthSegments.getValue(),
+				heightSegments: heightSegments.getValue(),
+				phiStart: phiStart.getValue(),
+				phiLength: phiLength.getValue(),
+				thetaStart: thetaStart.getValue(),
+				thetaLength: thetaLength.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 8 - 31
editor/js/Sidebar.Geometry.TorusGeometry.js

@@ -58,38 +58,15 @@ Sidebar.Geometry.TorusGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.TorusGeometry(
-			radius.getValue(),
-			tube.getValue(),
-			radialSegments.getValue(),
-			tubularSegments.getValue(),
-			arc.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				radius: radius.getValue(),
+				tube: tube.getValue(),
+				radialSegments: radialSegments.getValue(),
+				tubularSegments: tubularSegments.getValue(),
+				arc: arc.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 10 - 33
editor/js/Sidebar.Geometry.TorusKnotGeometry.js

@@ -79,40 +79,17 @@ Sidebar.Geometry.TorusKnotGeometry = function ( signals, geometry ) {
 
 	function update() {
 
-		var uuid = geometry.uuid;
-		var name = geometry.name;
-		var object;
-
-		editor.geometries[uuid] = new THREE.TorusKnotGeometry(
-			radius.getValue(),
-			tube.getValue(),
-			radialSegments.getValue(),
-			tubularSegments.getValue(),
-			p.getValue(),
-			q.getValue(),
-			heightScale.getValue()
-		);
-
-		editor.geometries[uuid].computeBoundingSphere();
-		editor.geometries[uuid].uuid = uuid;
-		editor.geometries[uuid].name = name;
-
-		for ( var i in editor.objects ) {
-
-			object = editor.objects[i];
-
-			if ( object.geometry && object.geometry.uuid == uuid ) {
-
-				delete object.__webglInit; // TODO: Remove hack (WebGLRenderer refactoring)
-				object.geometry.dispose();
-
-				object.geometry = editor.geometries[uuid];
-
-				signals.objectChanged.dispatch( object );
-
+		editor.remakeGeometry( geometry,
+			{
+				radius: radius.getValue(),
+				tube: tube.getValue(),
+				radialSegments: radialSegments.getValue(),
+				tubularSegments: tubularSegments.getValue(),
+				p: p.getValue(),
+				q: q.getValue(),
+				heightScale: heightScale.getValue()
 			}
-
-		}
+		);
 
 	}
 

+ 3 - 34
editor/js/Sidebar.Object3D.js

@@ -13,10 +13,8 @@ Sidebar.Object3D = function ( signals ) {
 
 	var objectNameRow = new UI.Panel();
 	var objectName = new UI.Input().setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
-
 	objectNameRow.add( new UI.Text( 'Name' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectNameRow.add( objectName );
-
 	container.add( objectNameRow );
 
 	// parent
@@ -24,10 +22,9 @@ Sidebar.Object3D = function ( signals ) {
 	var objectParentRow = new UI.Panel();
 	var objectParent = new UI.Select().setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
 	var parentLabel = new UI.Text( 'Parent' ).setWidth( '90px' ).setColor( '#0080f0' );
-	parentLabel.onClick( function(){  signals.selectObject.dispatch( editor.objects[ objectParent.getValue() ] ) } );
+	parentLabel.onClick( function(){  editor.select( editor.objects[ objectParent.getValue() ] ) } );
 	objectParentRow.add( parentLabel );
 	objectParentRow.add( objectParent );
-
 	container.add( objectParentRow );
 
 	// geometry
@@ -35,10 +32,9 @@ Sidebar.Object3D = function ( signals ) {
 	var objectGeometryRow = new UI.Panel();
 	var objectGeometry = new UI.Select().setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
 	var geometryLabel = new UI.Text( 'Geometry' ).setWidth( '90px' ).setColor( '#0080f0' );
-	geometryLabel.onClick( function(){  signals.selectGeometry.dispatch( editor.geometries[ objectGeometry.getValue() ] ) } );
+	geometryLabel.onClick( function(){  editor.select( editor.geometries[ objectGeometry.getValue() ] ) } );
 	objectGeometryRow.add( geometryLabel );
 	objectGeometryRow.add( objectGeometry );
-
 	container.add( objectGeometryRow );
 
 	// material
@@ -46,11 +42,9 @@ Sidebar.Object3D = function ( signals ) {
 	var objectMaterialRow = new UI.Panel();
 	var objectMaterial = new UI.Select().setWidth( '150px' ).setColor( '#444' ).setFontSize( '12px' ).onChange( update );
 	var materialLabel = new UI.Text( 'Material' ).setWidth( '90px' ).setColor( '#0080f0' );
-	materialLabel.onClick( function(){  signals.selectMaterial.dispatch( editor.materials[ objectMaterial.getValue() ] ) } );
+	materialLabel.onClick( function(){  editor.select( editor.materials[ objectMaterial.getValue() ] ) } );
 	objectMaterialRow.add( materialLabel );
-
 	objectMaterialRow.add( objectMaterial );
-
 	container.add( objectMaterialRow );
 
 	// position
@@ -59,10 +53,8 @@ Sidebar.Object3D = function ( signals ) {
 	var objectPositionX = new UI.Number().setWidth( '50px' ).onChange( update );
 	var objectPositionY = new UI.Number().setWidth( '50px' ).onChange( update );
 	var objectPositionZ = new UI.Number().setWidth( '50px' ).onChange( update );
-
 	objectPositionRow.add( new UI.Text( 'Position' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectPositionRow.add( objectPositionX, objectPositionY, objectPositionZ );
-
 	container.add( objectPositionRow );
 
 	// rotation
@@ -71,10 +63,8 @@ Sidebar.Object3D = function ( signals ) {
 	var objectRotationX = new UI.Number().setWidth( '50px' ).onChange( update );
 	var objectRotationY = new UI.Number().setWidth( '50px' ).onChange( update );
 	var objectRotationZ = new UI.Number().setWidth( '50px' ).onChange( update );
-
 	objectRotationRow.add( new UI.Text( 'Rotation' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectRotationRow.add( objectRotationX, objectRotationY, objectRotationZ );
-
 	container.add( objectRotationRow );
 
 	// scale
@@ -84,7 +74,6 @@ Sidebar.Object3D = function ( signals ) {
 	var objectScaleX = new UI.Number( 1 ).setWidth( '50px' ).onChange( updateScaleX );
 	var objectScaleY = new UI.Number( 1 ).setWidth( '50px' ).onChange( updateScaleY );
 	var objectScaleZ = new UI.Number( 1 ).setWidth( '50px' ).onChange( updateScaleZ );
-
 	objectScaleRow.add( new UI.Text( 'Scale' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectScaleRow.add( objectScaleLock );
 	objectScaleRow.add( objectScaleX, objectScaleY, objectScaleZ );
@@ -95,100 +84,80 @@ Sidebar.Object3D = function ( signals ) {
 
 	var objectFovRow = new UI.Panel();
 	var objectFov = new UI.Number().onChange( update );
-
 	objectFovRow.add( new UI.Text( 'Fov' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectFovRow.add( objectFov );
-
 	container.add( objectFovRow );
 
 	// near
 
 	var objectNearRow = new UI.Panel();
 	var objectNear = new UI.Number().onChange( update );
-
 	objectNearRow.add( new UI.Text( 'Near' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectNearRow.add( objectNear );
-
 	container.add( objectNearRow );
 
 	// far
 
 	var objectFarRow = new UI.Panel();
 	var objectFar = new UI.Number().onChange( update );
-
 	objectFarRow.add( new UI.Text( 'Far' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectFarRow.add( objectFar );
-
 	container.add( objectFarRow );
 
 	// intensity
 
 	var objectIntensityRow = new UI.Panel();
 	var objectIntensity = new UI.Number().setRange( 0, Infinity ).onChange( update );
-
 	objectIntensityRow.add( new UI.Text( 'Intensity' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectIntensityRow.add( objectIntensity );
-
 	container.add( objectIntensityRow );
 
 	// color
 
 	var objectColorRow = new UI.Panel();
 	var objectColor = new UI.Color().onChange( update );
-
 	objectColorRow.add( new UI.Text( 'Color' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectColorRow.add( objectColor );
-
 	container.add( objectColorRow );
 
 	// ground color
 
 	var objectGroundColorRow = new UI.Panel();
 	var objectGroundColor = new UI.Color().onChange( update );
-
 	objectGroundColorRow.add( new UI.Text( 'Ground color' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectGroundColorRow.add( objectGroundColor );
-
 	container.add( objectGroundColorRow );
 
 	// distance
 
 	var objectDistanceRow = new UI.Panel();
 	var objectDistance = new UI.Number().setRange( 0, Infinity ).onChange( update );
-
 	objectDistanceRow.add( new UI.Text( 'Distance' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectDistanceRow.add( objectDistance );
-
 	container.add( objectDistanceRow );
 
 	// angle
 
 	var objectAngleRow = new UI.Panel();
 	var objectAngle = new UI.Number().setPrecision( 3 ).setRange( 0, Math.PI / 2 ).onChange( update );
-
 	objectAngleRow.add( new UI.Text( 'Angle' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectAngleRow.add( objectAngle );
-
 	container.add( objectAngleRow );
 
 	// exponent
 
 	var objectExponentRow = new UI.Panel();
 	var objectExponent = new UI.Number().setRange( 0, Infinity ).onChange( update );
-
 	objectExponentRow.add( new UI.Text( 'Exponent' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectExponentRow.add( objectExponent );
-
 	container.add( objectExponentRow );
 
 	// visible
 
 	var objectVisibleRow = new UI.Panel();
 	var objectVisible = new UI.Checkbox().onChange( update );
-
 	objectVisibleRow.add( new UI.Text( 'Visible' ).setWidth( '90px' ).setColor( '#666' ) );
 	objectVisibleRow.add( objectVisible );
-
 	container.add( objectVisibleRow );
 
 	// user data