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);
            }
        }