constructor()

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