|
@@ -153,24 +153,24 @@ THREE.Path.prototype.arc = function ( aX, aY, aRadius,
|
|
|
};
|
|
|
|
|
|
THREE.Path.prototype.ellipse = function ( aX, aY, xRadius, yRadius,
|
|
|
- aStartAngle, aEndAngle, aClockwise ) {
|
|
|
+ aStartAngle, aEndAngle, aClockwise, aRotation ) {
|
|
|
|
|
|
var lastargs = this.actions[ this.actions.length - 1 ].args;
|
|
|
var x0 = lastargs[ lastargs.length - 2 ];
|
|
|
var y0 = lastargs[ lastargs.length - 1 ];
|
|
|
|
|
|
this.absellipse( aX + x0, aY + y0, xRadius, yRadius,
|
|
|
- aStartAngle, aEndAngle, aClockwise );
|
|
|
+ aStartAngle, aEndAngle, aClockwise, aRotation );
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
THREE.Path.prototype.absellipse = function ( aX, aY, xRadius, yRadius,
|
|
|
- aStartAngle, aEndAngle, aClockwise ) {
|
|
|
+ aStartAngle, aEndAngle, aClockwise, aRotation ) {
|
|
|
|
|
|
var args = Array.prototype.slice.call( arguments );
|
|
|
var curve = new THREE.EllipseCurve( aX, aY, xRadius, yRadius,
|
|
|
- aStartAngle, aEndAngle, aClockwise );
|
|
|
+ aStartAngle, aEndAngle, aClockwise, aRotation );
|
|
|
this.curves.push( curve );
|
|
|
|
|
|
var lastPoint = curve.getPoint( 1 );
|
|
@@ -386,13 +386,22 @@ THREE.Path.prototype.getPoints = function( divisions, closedPath ) {
|
|
|
xRadius = args[ 2 ],
|
|
|
yRadius = args[ 3 ],
|
|
|
aStartAngle = args[ 4 ], aEndAngle = args[ 5 ],
|
|
|
- aClockwise = !! args[ 6 ];
|
|
|
+ aClockwise = !! args[ 6 ],
|
|
|
+ aRotation = args[ 7 ] || 0;
|
|
|
|
|
|
|
|
|
var deltaAngle = aEndAngle - aStartAngle;
|
|
|
var angle;
|
|
|
var tdivisions = divisions * 2;
|
|
|
|
|
|
+ var cos, sin;
|
|
|
+ if ( aRotation !== 0 ) {
|
|
|
+
|
|
|
+ cos = Math.cos( aRotation );
|
|
|
+ sin = Math.sin( aRotation );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
for ( j = 1; j <= tdivisions; j ++ ) {
|
|
|
|
|
|
t = j / tdivisions;
|
|
@@ -408,6 +417,14 @@ THREE.Path.prototype.getPoints = function( divisions, closedPath ) {
|
|
|
tx = aX + xRadius * Math.cos( angle );
|
|
|
ty = aY + yRadius * Math.sin( angle );
|
|
|
|
|
|
+ if ( aRotation !== 0 ) {
|
|
|
+
|
|
|
+ // Rotate the point about the center of the ellipse.
|
|
|
+ tx = ( tx - aX ) * cos - ( ty - aY ) * sin + aX;
|
|
|
+ ty = ( tx - aX ) * sin + ( ty - aY ) * cos + aY;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
//console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);
|
|
|
|
|
|
points.push( new THREE.Vector2( tx, ty ) );
|