Parse

File Parse curve-lines.js

This tree is parsed live from the source file.

Classes

  • {{ item.name }}

    • {{ key }}

Not Classes

{{ getTree() }}

Comments

{{ getTreeComments() }}

Source

            
/* requires line/Line

Replaced by curve-extrs/BezierCurve */
class XBezierCurve extends Line {

    // create(p1, p2, color='red', width=1) {
    // }

    getControlPoints() {
        let a = this.a
          , b = this.b
          ;
        let midDistance = a.distanceTo(b)*.5
        let offset = this.offset == undefined? 0: this.offset

        /*A bezier requires two control points */
        return [
              a.project(midDistance + offset)
            , b.project(midDistance + offset)
        ]

    }

    perform(ctx) {
        let b = this.b;
        let cps = this.getControlPoints()
        // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/bezierCurveTo
        let bp = b
        ctx.bezierCurveTo(cps[0].x, cps[0].y, cps[1].x, cps[1].y, bp.x, bp.y)
    }
}


class CantenaryCurve extends Line {

    create(a,b, length=undefined, color='red', width=1) {
        super.create(a,b,color,  width)
        this.length = length
    }

    getCurveLength(a, b) {
        let l = this.length
        if(l == undefined){
            return distance(a, b) * 1.5
        }
        return l
    }
    getControlPoints() {
        let a = this.a
            , b = this.b
            ;

        return getCatenaryCurve(a,b, this.getCurveLength(a,b))
    }

    perform(ctx) {

        const result = this.getControlPoints()


        ctx.moveTo(result.start[0], result.start[1])
        let curves = result.curves

        if(!curves) {
            let p = result.lines[0]
            ctx.lineTo(p[0], p[1])
            return
        }

        for (let i = 0; i < curves.length; i++) {
            let c = curves[i]
            ctx.quadraticCurveTo(
                c[0], // cpx
                c[1], // cpy
                c[2], // x
                c[3], // y
            )
        }
    }
}

copy