How to use the makerjs.path function in makerjs

To help you get started, weā€™ve selected a few makerjs examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github mrzealot / absolem / plans / absolem.js View on Github external
const fix_corner_raw = (a, mirrored_a, b, mirrored_b, outer, target) => {

    const center = m.path.intersection(a, b).intersectionPoints[0]
    const angle_a = m.angle.ofLineInDegrees(a) + (mirrored_a ? 180 : 0)
    const angle_b = m.angle.ofLineInDegrees(b) + (mirrored_b ? 180 : 0)
    const angle = angle_b - angle_a
    let radius = Math.tan(m.angle.toRadians(Math.abs(angle) / 2)) * corner_radius
    const sign = radius > 0 ? 1 : -1
    radius = Math.abs(radius)
    const circ = circle(center, radius)
    const cas = m.path.intersection(a, circ).intersectionPoints
    const cbs = m.path.intersection(b, circ).intersectionPoints
    
    // there can be multiple intersections, so we want the points
    // furthest from the control (either inner or outer) point
    const furthest = (arr, control) => {
        let max
        let max_dist = 0
github mrzealot / absolem / plans / absolem.js View on Github external
const fix_corner_raw = (a, mirrored_a, b, mirrored_b, outer, target) => {

    const center = m.path.intersection(a, b).intersectionPoints[0]
    const angle_a = m.angle.ofLineInDegrees(a) + (mirrored_a ? 180 : 0)
    const angle_b = m.angle.ofLineInDegrees(b) + (mirrored_b ? 180 : 0)
    const angle = angle_b - angle_a
    let radius = Math.tan(m.angle.toRadians(Math.abs(angle) / 2)) * corner_radius
    const sign = radius > 0 ? 1 : -1
    radius = Math.abs(radius)
    const circ = circle(center, radius)
    const cas = m.path.intersection(a, circ).intersectionPoints
    const cbs = m.path.intersection(b, circ).intersectionPoints
    
    // there can be multiple intersections, so we want the points
    // furthest from the control (either inner or outer) point
    const furthest = (arr, control) => {
        let max
        let max_dist = 0

        for (const point of arr) {
            const d = m.measure.pointDistance(point, control)
            if (d > max_dist) {
                max_dist = d
                max = point
            }
        }

        return max
github microsoft / maker.js / demos / card.js View on Github external
function trimLines(line1, propertyName1, line2, propertyName2) {
    var intersection = makerjs.path.intersection(line1, line2);
    if (intersection) {
        line1[propertyName1] = intersection.intersectionPoints[0];
        line2[propertyName2] = intersection.intersectionPoints[0];
    }
    return intersection;
}
github microsoft / maker.js / demos / js / makerjs-spokes-straight.js View on Github external
makerjs.model.originate(spoke);

    var wedge = new SpokeWedge(spoke, outerRadius, innerRadius, count);

    if (innerFillet) {
        var innerFilletArc = makerjs.path.fillet(wedge.paths.ShapeLine2, wedge.paths.ShapeLine4, innerFillet);
        if (innerFilletArc) {
            wedge.paths.innerFillet = innerFilletArc;
        } else {
            wedge.paths.innerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine2, wedge.paths.Ring_inner, innerFillet);
            wedge.paths.innerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine4, wedge.paths.Ring_inner, innerFillet);
        }
    }

    if (outerFillet) {
        wedge.paths.outerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine2, wedge.paths.Ring_outer, outerFillet);
        wedge.paths.outerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine4, wedge.paths.Ring_outer, outerFillet);
    }

    this.models = {};
    
    for (var i = 0; i < count; i++) {
        var iwedge = makerjs.cloneObject(wedge);
        this.models['wedge' + i] = makerjs.model.rotate(iwedge, i * a, [0, 0]);
    }

    if (addRing) {
        this.models.ring2 = new makerjs.models.Ring(outerRadius + spokeWidth, innerRadius - spokeWidth);
    }
}
github microsoft / maker.js / demos / js / makerjs-spokes-flared.js View on Github external
function FlaredSpokes(outerRadius, innerRadius, count, spokeWidth, flareWidth, innerFillet, outerFillet, addRing) {

    var a = 360 / count;
    var halfSpokeWidth = spokeWidth / 2;
    var halfFlareWidth = flareWidth / 2;
    var flareLine = new makerjs.paths.Line([halfFlareWidth, 0], [halfFlareWidth, outerRadius]);
    var outerCircle = new makerjs.paths.Circle([0, 0], outerRadius);
    var int = makerjs.path.intersection(flareLine, outerCircle);
    var flareY = int.intersectionPoints[0][1];
    var points = [
            [halfSpokeWidth, 0], 
            [halfFlareWidth, flareY], 
            [halfFlareWidth, outerRadius + 1], 
            [-halfFlareWidth, outerRadius + 1],
            [-halfFlareWidth, flareY], 
            [-halfSpokeWidth, 0]
        ];
    var spoke = new makerjs.models.ConnectTheDots(true, points);

    var wedge = new SpokeWedge(spoke, outerRadius, innerRadius, count);

    if (innerFillet) {
        var innerFilletArc = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.ShapeLine5, innerFillet);
        if (innerFilletArc) {
github microsoft / maker.js / demos / js / makerjs-ventgridcircle.js View on Github external
VentgridCircle.prototype.checkCircle = function (id, circle) {
        var distanceToCenter = makerjs.measure.pointDistance([0, 0], circle.origin);
        if (makerjs.round(distanceToCenter + circle.radius) <= this.radius) {
            //inside
            this.paths[id] = circle;
        }
        else if (makerjs.round(distanceToCenter - circle.radius) > this.radius) {
        }
        else {
            //border
            var arcIntersection = makerjs.path.intersection(circle, this.rim);
            if (arcIntersection && arcIntersection.path1Angles.length == 2) {
                var filterArc = new makerjs.paths.Arc(circle.origin, circle.radius, arcIntersection.path1Angles[1], arcIntersection.path1Angles[0]);
                this.paths[id] = filterArc;
                var rimArc = new makerjs.paths.Arc([0, 0], this.radius, arcIntersection.path2Angles[0], arcIntersection.path2Angles[1]);
                this.paths[id + '_rim'] = rimArc;
            }
        }
    };
    return VentgridCircle;
github microsoft / maker.js / packages / maker.js / examples / polygonstackbox.js View on Github external
function PolygonStackBoxInside(angle, radius, holeRadius, rimThickness) {
        var rim = Math.min(rimThickness, holeRadius);
        var a2 = angle * 2;
        var innerFilletCenter = point.rotate([radius + 2 * holeRadius + rim, 0], 90 + angle, [radius, 0]);
        var innerFilletTop = new arc(innerFilletCenter, holeRadius, 270 + angle, angle);
        var innerFilletTopPoints = point.fromArc(innerFilletTop);
        var innerFilletBottomPoint = [innerFilletTopPoints[1][0], -innerFilletTopPoints[1][1]];
        this.paths = {
            innerFilletTop: innerFilletTop,
            innerFilletBottom: makerjs.path.mirror(innerFilletTop, false, true),
            innerLine: new line(innerFilletTopPoints[1], point.rotate(innerFilletBottomPoint, a2, [0, 0])),
            innerFillet: new arc([radius, 0], holeRadius + rim, 90 + angle, 270 - angle)
        };
    }
    return PolygonStackBoxInside;
github microsoft / maker.js / demos / js / makerjs-spokes-flared.js View on Github external
var int = makerjs.path.intersection(flareLine, outerCircle);
    var flareY = int.intersectionPoints[0][1];
    var points = [
            [halfSpokeWidth, 0], 
            [halfFlareWidth, flareY], 
            [halfFlareWidth, outerRadius + 1], 
            [-halfFlareWidth, outerRadius + 1],
            [-halfFlareWidth, flareY], 
            [-halfSpokeWidth, 0]
        ];
    var spoke = new makerjs.models.ConnectTheDots(true, points);

    var wedge = new SpokeWedge(spoke, outerRadius, innerRadius, count);

    if (innerFillet) {
        var innerFilletArc = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.ShapeLine5, innerFillet);
        if (innerFilletArc) {
            wedge.paths.innerFillet = innerFilletArc;
        } else {
            wedge.paths.innerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.Ring_inner, innerFillet);
            wedge.paths.innerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine5, wedge.paths.Ring_inner, innerFillet);
        }
    }

    if (outerFillet) {
        wedge.paths.outerFillet1 = makerjs.path.fillet(wedge.paths.ShapeLine1, wedge.paths.Ring_outer, outerFillet);
        wedge.paths.outerFillet2 = makerjs.path.fillet(wedge.paths.ShapeLine5, wedge.paths.Ring_outer, outerFillet);
    }

    this.models = {};
    
    for (var i = 0; i < count; i++) {
github microsoft / maker.js / demos / js / makerjs-double-band-clamp.js View on Github external
}

    var right = makerjs.model.zero(new HalfBandClamp(radius1, band, tabWidth, tabHeight, gap));
    filletAll(right);

    var left = makerjs.model.mirror(makerjs.model.zero(new HalfBandClamp(radius2, band, tabWidth, tabHeight, gap)), true, false);
    filletAll(left);

    this.models = {
        right: right,
        left: left
    };

    makerjs.model.originate(this);

    var filletBetween = makerjs.path.fillet(right.paths['bandOuter'], left.paths['bandOuter'], betweenFillet);

    this.paths = {
        filletBetween: filletBetween
    };

}
github microsoft / maker.js / demos / card.js View on Github external
function trimBends(b1, b2) {
    var intersection = trimLines(b1.paths.Vertical, 'origin', b2.paths.Horizontal, 'origin');
    if (intersection) return;

    intersection = makerjs.path.intersection(b1.paths.arc, b2.paths.Horizontal);
    if (intersection) {
        b1.paths.arc.startAngle = intersection.path1Angles[0];
        b2.paths.Horizontal.origin = intersection.intersectionPoints[0];
        delete b1.paths.Vertical;
        return;
    }

    intersection = makerjs.path.intersection(b1.paths.arc, b2.paths.arc);
    if (intersection) {
        b1.paths.arc.startAngle = intersection.path1Angles[0];
        b2.paths.arc.endAngle = intersection.path2Angles[0];
        delete b1.paths.Vertical;
        delete b2.paths.Horizontal;
        return;
    }
}

makerjs

Maker.js, a Microsoft Garage project, is a JavaScript library for creating and sharing modular line drawings for CNC and laser cutters.

Apache-2.0
Latest version published 7 months ago

Package Health Score

74 / 100
Full package analysis