in packages/maker.js/src/models/BezierCurve.ts [416:505]
constructor(...args: any[]) {
var isArrayArg0 = Array.isArray(args[0]);
switch (args.length) {
case 2:
if (isArrayArg0) {
this.accuracy = args[1] as number;
} else {
//seed
this.seed = args[0] as IPathBezierSeed;
this.accuracy = args[1] as number;
break;
}
//fall through to point array
case 1: //point array or seed
if (isArrayArg0) {
var points = args[0] as IPoint[];
this.seed = new BezierSeed(points);
} else {
this.seed = args[0] as IPathBezierSeed;
}
break;
default:
switch (args.length) {
case 4:
if (isPoint(args[3])) {
this.seed = new BezierSeed(args as IPoint[]);
break;
} else {
this.accuracy = args[3] as number;
//fall through
}
case 3:
if (isArrayArg0) {
this.seed = new BezierSeed(args.slice(0, 3) as IPoint[]);
}
break;
case 5:
this.accuracy = args[4] as number;
this.seed = new BezierSeed(args.slice(0, 4) as IPoint[]);
break;
}
break;
}
this.paths = {};
if (measure.isBezierSeedLinear(this.seed)) {
//use a line and exit
var line = new paths.Line(point.clone(this.seed.origin), point.clone(this.seed.end));
(line as IPath as IPathArcInBezierCurve).bezierData = {
startT: 0,
endT: 1
};
this.paths = {
"0": line
};
return;
}
var b = seedToBezier(this.seed);
var extrema = getExtrema(b);
this.paths = {};
//use arcs
if (!this.accuracy) {
//get a default accuracy relative to the size of the bezier
var len = b.length();
//set the default to be a combination of fast rendering and good smoothing.
this.accuracy = len / 100;
}
var count = 0;
for (var i = 1; i < extrema.length; i++) {
var extremaSpan = extrema[i] - extrema[i - 1];
count += getArcs(this, b, this.accuracy * extremaSpan, extrema[i - 1], extrema[i], count);
}
}