diff --git a/docs/api/extras/core/ShapePath.html b/docs/api/extras/core/ShapePath.html index bab5446729c3aeb3878474818dd2e6dc1190892b..8fc0a1b87ae77955738babece069a195e4df2f67 100644 --- a/docs/api/extras/core/ShapePath.html +++ b/docs/api/extras/core/ShapePath.html @@ -86,6 +86,6 @@

Source

- [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] diff --git a/editor/js/Script.js b/editor/js/Script.js index f948d3d21e4c05e7fff244e65ff1342d4257c3be..13ef8f98fd2125def2d2bfe20be72b8e76542cf1 100644 --- a/editor/js/Script.js +++ b/editor/js/Script.js @@ -84,7 +84,7 @@ var Script = function ( editor ) { 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; @@ -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; @@ -435,6 +435,7 @@ var Script = function ( editor ) { if ( cursorPosition !== undefined ) { codemirror.setCursor( cursorPosition ); + codemirror.scrollTo( scrollInfo.left, scrollInfo.top ); } codemirror.setHistory( history ); // setting the history to previous state diff --git a/editor/js/commands/SetScriptValueCommand.js b/editor/js/commands/SetScriptValueCommand.js index e373d32ccacd979df0127f125aa1002fbab3b150..fcf9943b418557ecb556141450471c7a62531244 100644 --- a/editor/js/commands/SetScriptValueCommand.js +++ b/editor/js/commands/SetScriptValueCommand.js @@ -9,10 +9,11 @@ * @param attributeName string * @param newValue string, object * @param cursorPosition javascript object with format {line: 2, ch: 3} + * @param scrollInfo javascript object with values {left, top, width, height, clientWidth, clientHeight} * @constructor */ -var SetScriptValueCommand = function ( object, script, attributeName, newValue, cursorPosition ) { +var SetScriptValueCommand = function ( object, script, attributeName, newValue, cursorPosition, scrollInfo ) { Command.call( this ); @@ -27,6 +28,7 @@ var SetScriptValueCommand = function ( object, script, attributeName, newValue, this.oldValue = ( script !== undefined ) ? script[ this.attributeName ] : undefined; this.newValue = newValue; this.cursorPosition = cursorPosition; + this.scrollInfo = scrollInfo; }; @@ -37,7 +39,7 @@ SetScriptValueCommand.prototype = { this.script[ this.attributeName ] = this.newValue; 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.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 ) { this.cursorPosition = cmd.cursorPosition; + this.scrollInfo = cmd.scrollInfo; this.newValue = cmd.newValue; }, @@ -67,6 +70,7 @@ SetScriptValueCommand.prototype = { output.oldValue = this.oldValue; output.newValue = this.newValue; output.cursorPosition = this.cursorPosition; + output.scrollInfo = this.scrollInfo; return output; @@ -82,6 +86,7 @@ SetScriptValueCommand.prototype = { this.object = this.editor.objectByUuid( json.objectUuid ); this.script = this.editor.scripts[ json.objectUuid ][ json.index ]; this.cursorPosition = json.cursorPosition; + this.scrollInfo = json.scrollInfo; } diff --git a/examples/js/CurveExtras.js b/examples/js/CurveExtras.js index 80a0e2d9448cadbd5f47bdb5cbe733443697ff28..c36cee847e7712ecec229b0d5708e867c297a1a2 100644 --- a/examples/js/CurveExtras.js +++ b/examples/js/CurveExtras.js @@ -53,7 +53,7 @@ return new THREE.Vector3( x, y, z ).multiplyScalar( this.scale ); - } + }; // Viviani's Curve @@ -129,7 +129,7 @@ this.scale = ( s === undefined ) ? 10 : s; - }; + } TrefoilKnot.prototype = Object.create( THREE.Curve.prototype ); TrefoilKnot.prototype.constructor = TrefoilKnot; @@ -152,7 +152,7 @@ this.scale = ( s === undefined ) ? 10 : s; - }; + } TorusKnot.prototype = Object.create( THREE.Curve.prototype ); TorusKnot.prototype.constructor = TorusKnot; @@ -178,7 +178,7 @@ this.scale = ( s === undefined ) ? 10 : s; - }; + } CinquefoilKnot.prototype = Object.create( THREE.Curve.prototype ); CinquefoilKnot.prototype.constructor = CinquefoilKnot; @@ -204,7 +204,7 @@ this.scale = ( s === undefined ) ? 10 : s; - }; + } TrefoilPolynomialKnot.prototype = Object.create( THREE.Curve.prototype ); TrefoilPolynomialKnot.prototype.constructor = TrefoilPolynomialKnot; @@ -234,7 +234,7 @@ this.scale = ( s === undefined ) ? 1 : s; - }; + } FigureEightPolynomialKnot.prototype = Object.create( THREE.Curve.prototype ); FigureEightPolynomialKnot.prototype.constructor = FigureEightPolynomialKnot; @@ -257,7 +257,7 @@ this.scale = ( s === undefined ) ? 40 : s; - }; + } DecoratedTorusKnot4a.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot4a.prototype.constructor = DecoratedTorusKnot4a; @@ -280,7 +280,7 @@ this.scale = ( s === undefined ) ? 40 : s; - }; + } DecoratedTorusKnot4b.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot4b.prototype.constructor = DecoratedTorusKnot4b; @@ -303,7 +303,7 @@ this.scale = ( s === undefined ) ? 40 : s; - }; + } DecoratedTorusKnot5a.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot5a.prototype.constructor = DecoratedTorusKnot5a; @@ -326,7 +326,7 @@ this.scale = ( s === undefined ) ? 40 : s; - }; + } DecoratedTorusKnot5c.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot5c.prototype.constructor = DecoratedTorusKnot5c; diff --git a/examples/js/loaders/GLTFLoader.js b/examples/js/loaders/GLTFLoader.js index 2bf01831cef498bf799c759e76f0c77020b87499..1cc3e70f44d3f09fc6633639c44e3e55b66fb962 100644 --- a/examples/js/loaders/GLTFLoader.js +++ b/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 ************/ /*********************************/ @@ -1551,7 +1521,7 @@ THREE.GLTFLoader = ( function () { return _each( json.animations, function ( animation, animationId ) { - var interps = []; + var tracks = []; for ( var channelId in animation.channels ) { @@ -1572,17 +1542,24 @@ THREE.GLTFLoader = ( function () { 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 ); } ); diff --git a/examples/webgl_geometry_text_earcut.html b/examples/webgl_geometry_text_earcut.html index 2c5824e3f57112f1fd09265bf9b70563107a45a0..754e0546c846dcd00aa36b7b119f9a0dc5a85d50 100644 --- a/examples/webgl_geometry_text_earcut.html +++ b/examples/webgl_geometry_text_earcut.html @@ -47,38 +47,59 @@ -