| import { Curve } from '../core/Curve.js'; |
| import { CatmullRom } from '../core/Interpolations.js'; |
| import { Vector2 } from '../../math/Vector2.js'; |
|
|
|
|
| function SplineCurve( points ) { |
|
|
| Curve.call( this ); |
|
|
| this.type = 'SplineCurve'; |
|
|
| this.points = points || []; |
|
|
| } |
|
|
| SplineCurve.prototype = Object.create( Curve.prototype ); |
| SplineCurve.prototype.constructor = SplineCurve; |
|
|
| SplineCurve.prototype.isSplineCurve = true; |
|
|
| SplineCurve.prototype.getPoint = function ( t, optionalTarget ) { |
|
|
| var point = optionalTarget || new Vector2(); |
|
|
| var points = this.points; |
| var p = ( points.length - 1 ) * t; |
|
|
| var intPoint = Math.floor( p ); |
| var weight = p - intPoint; |
|
|
| var p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; |
| var p1 = points[ intPoint ]; |
| var p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; |
| var p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; |
|
|
| point.set( |
| CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), |
| CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) |
| ); |
|
|
| return point; |
|
|
| }; |
|
|
| SplineCurve.prototype.copy = function ( source ) { |
|
|
| Curve.prototype.copy.call( this, source ); |
|
|
| this.points = []; |
|
|
| for ( var i = 0, l = source.points.length; i < l; i ++ ) { |
|
|
| var point = source.points[ i ]; |
|
|
| this.points.push( point.clone() ); |
|
|
| } |
|
|
| return this; |
|
|
| }; |
|
|
| SplineCurve.prototype.toJSON = function () { |
|
|
| var data = Curve.prototype.toJSON.call( this ); |
|
|
| data.points = []; |
|
|
| for ( var i = 0, l = this.points.length; i < l; i ++ ) { |
|
|
| var point = this.points[ i ]; |
| data.points.push( point.toArray() ); |
|
|
| } |
|
|
| return data; |
|
|
| }; |
|
|
| SplineCurve.prototype.fromJSON = function ( json ) { |
|
|
| Curve.prototype.fromJSON.call( this, json ); |
|
|
| this.points = []; |
|
|
| for ( var i = 0, l = json.points.length; i < l; i ++ ) { |
|
|
| var point = json.points[ i ]; |
| this.points.push( new Vector2().fromArray( point ) ); |
|
|
| } |
|
|
| return this; |
|
|
| }; |
|
|
|
|
| export { SplineCurve }; |
|
|