How to use makerjs - 10 common examples

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 far_point = m.point.fromAngleOnCircle((angle_a + angle_b) / 2 + sign * 90, circ)

        const ca = furthest(cas, far_point)
        const cb = furthest(cbs, far_point)

        const arc = new m.models.BezierCurve([ca, center, cb])
        const remove = {
            paths: {
                a: line(ca, far_point),
                b: line(far_point, cb),
                c: line(cb, ca)
            }
        }
        const add = {
            models: {
                arc: new m.models.BezierCurve([ca, center, cb])
            },
            paths: {
                line: line(ca, cb)
            }
        }
        target = subtract(target, remove)
        target = combine(target, add)
    } else {
        
        // similarly to above, got to make sure the piece we want to combine
        // has some intersection with the target or it won't "stick"
        const inner_point = m.point.fromAngleOnCircle((angle_a + angle_b) / 2 - sign * 90, circ)

        const ca = furthest(cas, inner_point)
        const cb = furthest(cbs, inner_point)
github microsoft / maker.js / packages / maker.js / examples / polygonstackbox.js View on Github external
/// 
var makerjs = require('makerjs');
var arc = makerjs.paths.Arc;
var line = makerjs.paths.Line;
var point = makerjs.point;
var PolygonStackBoxInside = (function () {
    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)
        };
    }
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 mrzealot / absolem / plans / absolem.js View on Github external
const patch = (expand = 0) => {
    const originated = m.model.originate(half(pos_hole()))

    let lt = get_line(originated, ['inner', 'top',    't']).end
    let lm = get_line(originated, ['inner', 'bottom', 'r']).end
    let lb = get_line(originated, ['thumb', 'outer',  't']).end

    if (expand) {
        lt = m.point.add(lt, [0,  expand])
        lb = m.point.add(lb, [0, -expand])
    }

    // hacked right side --> won't matter, as it'll be mirrored anyway
    rt = [lt[0] + 30, lt[1]]
    rb = [lb[0] + 30, lb[1]]

    return {
        paths: {
            a: line(lt, rt),
            b: line(rt, rb),
            c: line(rb, lb),
            d: line(lb, lm),
            e: line(lm, lt)
        }
    }
github microsoft / maker.js / demos / js / pixel-heart.js View on Github external
pixel_path.forEach(function (p) {

        var previous_point = points[points.length - 1];
        var point_to_add;

        if (moveHorizontal) {
            point_to_add = [p, 0];
        } else {
            point_to_add = [0, p];
        }
        var e = makerjs.point.add(previous_point, point_to_add);
        points.push(e);

        // flip direction each time
        moveHorizontal = !moveHorizontal;
    });
github microsoft / maker.js / demos / js / makerjs-polygon-rimbox.js View on Github external
/// 
var makerjs = require('makerjs');
var arc = makerjs.paths.Arc;
var line = makerjs.paths.Line;
var point = makerjs.point;
var PolygonRimboxInside = (function () {
    function PolygonRimboxInside(angle, radius, holeRadius, rimThickness) {
        var rim = Math.min(rimThickness, holeRadius);
        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, angle * 2, [0, 0])),
            innerFillet: new arc([radius, 0], holeRadius + rim, 90 + angle, 270 - angle)
        };
    }
    return PolygonRimboxInside;
})();
github microsoft / maker.js / packages / maker.js / examples / polygonstackbox.js View on Github external
/// 
var makerjs = require('makerjs');
var arc = makerjs.paths.Arc;
var line = makerjs.paths.Line;
var point = makerjs.point;
var PolygonStackBoxInside = (function () {
    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 mrzealot / absolem / plans / absolem.js View on Github external
let l  = [_left, _bottom + fence_corner]
    let lt = [_left, _top - fence_corner]
    let t  = [_left + fence_corner, _top]
    let tr = [_right - fence_corner, _top]
    let r  = [_right, _top - fence_corner]
    let rb = [_right, _bottom + fence_corner]
    let b  = [_right - fence_corner, _bottom]
    let bl = [_left + fence_corner, _bottom]

    // simplify the "below the wing" region
    if (col == 'ring' && key == 'bottom') {
        bl = m.point.add(bl, [0, -1])
        b = m.point.add(b, [30, -1])
        rb = m.point.add(rb, [30, -1])
    } else if (col == 'pinky' && key == 'bottom') {
        rb = m.point.add(rb, [10, 10])

    // elongate the diagonal to reach the top of the next key
    } else if (col == 'middle' && key == 'top') {
        r = m.point.add(r, [5, -5])

    // skip the mini step on the inner col + handle top middle connection
    } else if (col == 'inner' && key == 'top') {
        t = m.point.add(t, [0, 2])
        tr = m.point.add(tr, [30, 2])
        r = m.point.add(r, [30, 2])

    // handle bottom middle connection
    } else if (col == 'thumb' && key == 'outer') {
        tr = m.point.add(tr, [0, 30])
        r = m.point.add(r, [0, 30])
    }
github mrzealot / absolem / plans / absolem.js View on Github external
const patch = (expand = 0) => {
    const originated = m.model.originate(half(pos_hole()))

    let lt = get_line(originated, ['inner', 'top',    't']).end
    let lm = get_line(originated, ['inner', 'bottom', 'r']).end
    let lb = get_line(originated, ['thumb', 'outer',  't']).end

    if (expand) {
        lt = m.point.add(lt, [0,  expand])
        lb = m.point.add(lb, [0, -expand])
    }

    // hacked right side --> won't matter, as it'll be mirrored anyway
    rt = [lt[0] + 30, lt[1]]
    rb = [lb[0] + 30, lb[1]]

    return {
        paths: {
            a: line(lt, rt),
            b: line(rt, rb),
            c: line(rb, lb),
            d: line(lb, lm),
            e: line(lm, lt)
        }
    }
}

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 1 year ago

Package Health Score

67 / 100
Full package analysis