提交 aa6c39de 编写于 作者: T Takahiro

Merge branch 'dev' into UpdateGLTFLoader

......@@ -86,6 +86,6 @@
<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>
</html>
......@@ -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
......
......@@ -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;
}
......
......@@ -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;
......
......@@ -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 );
} );
......
......@@ -47,38 +47,59 @@
<!-- replace built-in triangulation with Earcut -->
<script src="js/libs/earcut.js"></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 ) {
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>
if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册