Browse Source

Merge branch 'dev' into UpdateGLTFLoader

Takahiro 8 years ago
parent
commit
aa6c39de6a

+ 1 - 1
docs/api/extras/core/ShapePath.html

@@ -86,6 +86,6 @@
 
 
 		<h2>Source</h2>
 		<h2>Source</h2>
 
 
-		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+		[link:https://github.com/mrdoob/three.js/blob/master/src/extras/core/Path.js src/extras/core/Path.js]
 	</body>
 	</body>
 </html>
 </html>

+ 3 - 2
editor/js/Script.js

@@ -84,7 +84,7 @@ var Script = function ( editor ) {
 
 
 				if ( value !== currentScript.source ) {
 				if ( value !== currentScript.source ) {
 
 
-					editor.execute( new SetScriptValueCommand( currentObject, currentScript, 'source', value, codemirror.getCursor() ) );
+					editor.execute( new SetScriptValueCommand( currentObject, currentScript, 'source', value, codemirror.getCursor(), codemirror.getScrollInfo() ) );
 
 
 				}
 				}
 				return;
 				return;
@@ -422,7 +422,7 @@ var Script = function ( editor ) {
 
 
 	} );
 	} );
 
 
-	signals.refreshScriptEditor.add( function ( object, script, cursorPosition ) {
+	signals.refreshScriptEditor.add( function ( object, script, cursorPosition, scrollInfo ) {
 
 
 		if ( currentScript !== script ) return;
 		if ( currentScript !== script ) return;
 
 
@@ -435,6 +435,7 @@ var Script = function ( editor ) {
 		if ( cursorPosition !== undefined ) {
 		if ( cursorPosition !== undefined ) {
 
 
 			codemirror.setCursor( cursorPosition );
 			codemirror.setCursor( cursorPosition );
+			codemirror.scrollTo( scrollInfo.left, scrollInfo.top );
 
 
 		}
 		}
 		codemirror.setHistory( history ); // setting the history to previous state
 		codemirror.setHistory( history ); // setting the history to previous state

+ 8 - 3
editor/js/commands/SetScriptValueCommand.js

@@ -9,10 +9,11 @@
  * @param attributeName string
  * @param attributeName string
  * @param newValue string, object
  * @param newValue string, object
  * @param cursorPosition javascript object with format {line: 2, ch: 3}
  * @param cursorPosition javascript object with format {line: 2, ch: 3}
+ * @param scrollInfo javascript object with values {left, top, width, height, clientWidth, clientHeight}
  * @constructor
  * @constructor
  */
  */
 
 
-var SetScriptValueCommand = function ( object, script, attributeName, newValue, cursorPosition ) {
+var SetScriptValueCommand = function ( object, script, attributeName, newValue, cursorPosition, scrollInfo ) {
 
 
 	Command.call( this );
 	Command.call( this );
 
 
@@ -27,6 +28,7 @@ var SetScriptValueCommand = function ( object, script, attributeName, newValue,
 	this.oldValue = ( script !== undefined ) ? script[ this.attributeName ] : undefined;
 	this.oldValue = ( script !== undefined ) ? script[ this.attributeName ] : undefined;
 	this.newValue = newValue;
 	this.newValue = newValue;
 	this.cursorPosition = cursorPosition;
 	this.cursorPosition = cursorPosition;
+	this.scrollInfo = scrollInfo;
 
 
 };
 };
 
 
@@ -37,7 +39,7 @@ SetScriptValueCommand.prototype = {
 		this.script[ this.attributeName ] = this.newValue;
 		this.script[ this.attributeName ] = this.newValue;
 
 
 		this.editor.signals.scriptChanged.dispatch();
 		this.editor.signals.scriptChanged.dispatch();
-		this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition );
+		this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition, this.scrollInfo );
 
 
 	},
 	},
 
 
@@ -46,13 +48,14 @@ SetScriptValueCommand.prototype = {
 		this.script[ this.attributeName ] = this.oldValue;
 		this.script[ this.attributeName ] = this.oldValue;
 
 
 		this.editor.signals.scriptChanged.dispatch();
 		this.editor.signals.scriptChanged.dispatch();
-		this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition );
+		this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition, this.scrollInfo );
 
 
 	},
 	},
 
 
 	update: function ( cmd ) {
 	update: function ( cmd ) {
 
 
 		this.cursorPosition = cmd.cursorPosition;
 		this.cursorPosition = cmd.cursorPosition;
+		this.scrollInfo = cmd.scrollInfo;
 		this.newValue = cmd.newValue;
 		this.newValue = cmd.newValue;
 
 
 	},
 	},
@@ -67,6 +70,7 @@ SetScriptValueCommand.prototype = {
 		output.oldValue = this.oldValue;
 		output.oldValue = this.oldValue;
 		output.newValue = this.newValue;
 		output.newValue = this.newValue;
 		output.cursorPosition = this.cursorPosition;
 		output.cursorPosition = this.cursorPosition;
+		output.scrollInfo = this.scrollInfo;
 
 
 		return output;
 		return output;
 
 
@@ -82,6 +86,7 @@ SetScriptValueCommand.prototype = {
 		this.object = this.editor.objectByUuid( json.objectUuid );
 		this.object = this.editor.objectByUuid( json.objectUuid );
 		this.script = this.editor.scripts[ json.objectUuid ][ json.index ];
 		this.script = this.editor.scripts[ json.objectUuid ][ json.index ];
 		this.cursorPosition = json.cursorPosition;
 		this.cursorPosition = json.cursorPosition;
+		this.scrollInfo = json.scrollInfo;
 
 
 	}
 	}
 
 

+ 10 - 10
examples/js/CurveExtras.js

@@ -53,7 +53,7 @@
 
 
 		return new THREE.Vector3( x, y, z ).multiplyScalar( this.scale );
 		return new THREE.Vector3( x, y, z ).multiplyScalar( this.scale );
 
 
-	}
+	};
 
 
 	// Viviani's Curve
 	// Viviani's Curve
 
 
@@ -129,7 +129,7 @@
 
 
 		this.scale = ( s === undefined ) ? 10 : s;
 		this.scale = ( s === undefined ) ? 10 : s;
 
 
-	};
+	}
 
 
 	TrefoilKnot.prototype = Object.create( THREE.Curve.prototype );
 	TrefoilKnot.prototype = Object.create( THREE.Curve.prototype );
 	TrefoilKnot.prototype.constructor = TrefoilKnot;
 	TrefoilKnot.prototype.constructor = TrefoilKnot;
@@ -152,7 +152,7 @@
 
 
 		this.scale = ( s === undefined ) ? 10 : s;
 		this.scale = ( s === undefined ) ? 10 : s;
 
 
-	};
+	}
 
 
 	TorusKnot.prototype = Object.create( THREE.Curve.prototype );
 	TorusKnot.prototype = Object.create( THREE.Curve.prototype );
 	TorusKnot.prototype.constructor = TorusKnot;
 	TorusKnot.prototype.constructor = TorusKnot;
@@ -178,7 +178,7 @@
 
 
 		this.scale = ( s === undefined ) ? 10 : s;
 		this.scale = ( s === undefined ) ? 10 : s;
 
 
-	};
+	}
 
 
 	CinquefoilKnot.prototype = Object.create( THREE.Curve.prototype );
 	CinquefoilKnot.prototype = Object.create( THREE.Curve.prototype );
 	CinquefoilKnot.prototype.constructor = CinquefoilKnot;
 	CinquefoilKnot.prototype.constructor = CinquefoilKnot;
@@ -204,7 +204,7 @@
 
 
 		this.scale = ( s === undefined ) ? 10 : s;
 		this.scale = ( s === undefined ) ? 10 : s;
 
 
-	};
+	}
 
 
 	TrefoilPolynomialKnot.prototype = Object.create( THREE.Curve.prototype );
 	TrefoilPolynomialKnot.prototype = Object.create( THREE.Curve.prototype );
 	TrefoilPolynomialKnot.prototype.constructor = TrefoilPolynomialKnot;
 	TrefoilPolynomialKnot.prototype.constructor = TrefoilPolynomialKnot;
@@ -234,7 +234,7 @@
 
 
 		this.scale = ( s === undefined ) ? 1 : s;
 		this.scale = ( s === undefined ) ? 1 : s;
 
 
-	};
+	}
 
 
 	FigureEightPolynomialKnot.prototype = Object.create( THREE.Curve.prototype );
 	FigureEightPolynomialKnot.prototype = Object.create( THREE.Curve.prototype );
 	FigureEightPolynomialKnot.prototype.constructor = FigureEightPolynomialKnot;
 	FigureEightPolynomialKnot.prototype.constructor = FigureEightPolynomialKnot;
@@ -257,7 +257,7 @@
 
 
 		this.scale = ( s === undefined ) ? 40 : s;
 		this.scale = ( s === undefined ) ? 40 : s;
 
 
-	};
+	}
 
 
 	DecoratedTorusKnot4a.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot4a.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot4a.prototype.constructor = DecoratedTorusKnot4a;
 	DecoratedTorusKnot4a.prototype.constructor = DecoratedTorusKnot4a;
@@ -280,7 +280,7 @@
 
 
 		this.scale = ( s === undefined ) ? 40 : s;
 		this.scale = ( s === undefined ) ? 40 : s;
 
 
-	};
+	}
 
 
 	DecoratedTorusKnot4b.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot4b.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot4b.prototype.constructor = DecoratedTorusKnot4b;
 	DecoratedTorusKnot4b.prototype.constructor = DecoratedTorusKnot4b;
@@ -303,7 +303,7 @@
 
 
 		this.scale = ( s === undefined ) ? 40 : s;
 		this.scale = ( s === undefined ) ? 40 : s;
 
 
-	};
+	}
 
 
 	DecoratedTorusKnot5a.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot5a.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot5a.prototype.constructor = DecoratedTorusKnot5a;
 	DecoratedTorusKnot5a.prototype.constructor = DecoratedTorusKnot5a;
@@ -326,7 +326,7 @@
 
 
 		this.scale = ( s === undefined ) ? 40 : s;
 		this.scale = ( s === undefined ) ? 40 : s;
 
 
-	};
+	}
 
 
 	DecoratedTorusKnot5c.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot5c.prototype = Object.create( THREE.Curve.prototype );
 	DecoratedTorusKnot5c.prototype.constructor = DecoratedTorusKnot5c;
 	DecoratedTorusKnot5c.prototype.constructor = DecoratedTorusKnot5c;

+ 18 - 41
examples/js/loaders/GLTFLoader.js

@@ -255,36 +255,6 @@ THREE.GLTFLoader = ( function () {
 
 
 	};
 	};
 
 
-	function createAnimation( name, interps ) {
-
-		var tracks = [];
-
-		for ( var i = 0, len = interps.length; i < len; i ++ ) {
-
-			var interp = interps[ i ];
-
-			// KeyframeTrack.optimize() will modify given 'times' and 'values'
-			// buffers before creating a truncated copy to keep. Because buffers may
-			// be reused by other tracks, make copies here.
-			interp.times = THREE.AnimationUtils.arraySlice( interp.times, 0 );
-			interp.values = THREE.AnimationUtils.arraySlice( interp.values, 0 );
-
-			interp.target.updateMatrix();
-			interp.target.matrixAutoUpdate = true;
-
-			tracks.push( new THREE.KeyframeTrack(
-				interp.name,
-				interp.times,
-				interp.values,
-				interp.type
-			) );
-
-		}
-
-		return new THREE.AnimationClip( name, undefined, tracks );
-
-	}
-
 	/*********************************/
 	/*********************************/
 	/********** INTERNALS ************/
 	/********** INTERNALS ************/
 	/*********************************/
 	/*********************************/
@@ -1551,7 +1521,7 @@ THREE.GLTFLoader = ( function () {
 
 
 			return _each( json.animations, function ( animation, animationId ) {
 			return _each( json.animations, function ( animation, animationId ) {
 
 
-				var interps = [];
+				var tracks = [];
 
 
 				for ( var channelId in animation.channels ) {
 				for ( var channelId in animation.channels ) {
 
 
@@ -1572,17 +1542,24 @@ THREE.GLTFLoader = ( function () {
 
 
 						if ( node ) {
 						if ( node ) {
 
 
-							var targetName = node.name ? node.name : node.uuid;
+							node.updateMatrix();
+							node.matrixAutoUpdate = true;
+
+							var TypedKeyframeTrack = PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.rotation
+								? THREE.QuaternionKeyframeTrack
+								: THREE.VectorKeyframeTrack;
 
 
-							var interp = {
-								times: inputAccessor.array,
-								values: outputAccessor.array,
-								target: node,
-								type: INTERPOLATION[ sampler.interpolation ],
-								name: targetName + '.' + PATH_PROPERTIES[ target.path ]
-							};
+							var targetName = node.name ? node.name : node.uuid;
 
 
-							interps.push( interp );
+							// KeyframeTrack.optimize() will modify given 'times' and 'values'
+							// buffers before creating a truncated copy to keep. Because buffers may
+							// be reused by other tracks, make copies here.
+							tracks.push( new TypedKeyframeTrack(
+								targetName + '.' + PATH_PROPERTIES[ target.path ],
+								THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),
+								THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),
+								INTERPOLATION[ sampler.interpolation ]
+							) );
 
 
 						}
 						}
 
 
@@ -1590,7 +1567,7 @@ THREE.GLTFLoader = ( function () {
 
 
 				}
 				}
 
 
-				return createAnimation( "animation_" + animationId, interps );
+				return new THREE.AnimationClip( "animation_" + animationId, undefined, tracks );
 
 
 			} );
 			} );
 
 

+ 44 - 23
examples/webgl_geometry_text_earcut.html

@@ -47,38 +47,59 @@
 		<!-- replace built-in triangulation with Earcut -->
 		<!-- replace built-in triangulation with Earcut -->
 		<script src="js/libs/earcut.js"></script>
 		<script src="js/libs/earcut.js"></script>
 		<script>
 		<script>
-			function addContour( vertices, contour ) {
-			    for ( var i = 0; i < contour.length; i++ ) {
-			        vertices.push( contour[i].x );
-			        vertices.push( contour[i].y );
-			    }
-			}
-
 			THREE.ShapeUtils.triangulateShape = function ( contour, holes ) {
 			THREE.ShapeUtils.triangulateShape = function ( contour, holes ) {
-			    var vertices = [];
 
 
-			    addContour( vertices, contour );
+				function removeDupEndPts( points ) {
+
+					var l = points.length;
+					if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {
+
+						points.pop();
+
+					}
+
+				}
+
+				function addContour( vertices, contour ) {
 
 
-			    var holeIndices = [];
-			    var holeIndex = contour.length;
+					for ( var i = 0; i < contour.length; i ++ ) {
 
 
-			    for ( i = 0; i < holes.length; i++ ) {
-			        holeIndices.push( holeIndex );
-			        holeIndex += holes[i].length;
-			        addContour( vertices, holes[i] );
-			    }
+						vertices.push( contour[ i ].x );
+						vertices.push( contour[ i ].y );
 
 
-			    var result = earcut( vertices, holeIndices, 2 );
+					}
+
+				}
+
+				removeDupEndPts( contour );
+				holes.forEach( removeDupEndPts );
+
+				var vertices = [];
+				addContour( vertices, contour );
+				var holeIndices = [];
+				var holeIndex = contour.length;
+				for ( i = 0; i < holes.length; i ++ ) {
+
+					holeIndices.push( holeIndex );
+					holeIndex += holes[ i ].length;
+					addContour( vertices, holes[ i ] );
+
+				}
+
+				var result = earcut( vertices, holeIndices, 2 );
+				var grouped = [];
+				for ( var i = 0; i < result.length; i += 3 ) {
+
+					grouped.push( result.slice( i, i + 3 ) );
+
+				}
+
+				return grouped;
 
 
-			    var grouped = [];
-			    for ( var i = 0; i < result.length; i += 3 ) {
-			        grouped.push( result.slice( i, i + 3 ) );
-			    }
-			    return grouped;
 			};
 			};
+			
 		</script>
 		</script>
 
 
-
 		<script>
 		<script>
 
 
 			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
 			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();