in packages/maker.js/src/models/Ellipse.ts [92:192]
constructor(...args: any[]) {
var n = 360 / maxBezierArcspan;
var accuracy: number;
var isPointArgs0 = isPoint(args[0]);
var realArgs = (numArgs: number) => {
switch (numArgs) {
case 2:
if (isPointArgs0) {
//origin, radius
this.origin = <IPoint>args[0];
}
break;
case 3:
//origin, rx, ry
this.origin = <IPoint>args[0];
break;
case 4:
//cx, cy, rx, ry
this.origin = [args[0] as number, args[1] as number];
break;
}
//construct a bezier approximation for an arc with radius of 1.
var a = 360 / n;
var arc = new paths.Arc([0, 0], 1, 0, a);
//clone and rotate to complete a circle
for (var i = 0; i < n; i++) {
var seed = bezierSeedFromArc(arc);
switch (numArgs) {
case 1:
//radius
seed = path.scale(seed, args[0] as number) as IPathBezierSeed;
break;
case 2:
if (isPointArgs0) {
//origin, radius
seed = path.scale(seed, args[1] as number) as IPathBezierSeed;
} else {
//rx, ry
seed = path.distort(seed, args[0] as number, args[1] as number) as IPathBezierSeed;
}
break;
case 3:
//origin, rx, ry
seed = path.distort(seed, args[1] as number, args[2] as number) as IPathBezierSeed;
break;
case 4:
//cx, cy, rx, ry
seed = path.distort(seed, args[2] as number, args[3] as number) as IPathBezierSeed;
break;
}
this.models['Curve_' + (1 + i)] = new BezierCurve(seed, accuracy);
arc.startAngle += a;
arc.endAngle += a;
}
};
switch (args.length) {
case 2:
realArgs(2);
break;
case 3:
if (isPointArgs0) {
realArgs(3);
} else {
accuracy = args[2] as number;
realArgs(2);
}
break;
case 4:
if (isPointArgs0) {
accuracy = args[3] as number;
realArgs(3);
} else {
realArgs(4);
}
break;
case 5:
accuracy = args[4] as number;
realArgs(4);
break;
}
}